Get Page
/api/v1/content/pages/{slug}Overview
Returns a single published page by its URL slug. Pages use a block-based content model (JSONB array of typed content blocks) and include SEO metadata, template assignment, and sort order.
Authentication
No authentication required - Client is resolved from the X-Content-Domain header, which the Cloudflare Worker sets automatically based on the request domain.
Headers
| Header | Type | Required | Description |
|---|---|---|---|
X-Content-Domain | string | Yes | The domain used to resolve the client tenant. Automatically set by the CF Worker; set manually for external frontend integrations. |
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
slug | string | Yes | The URL-friendly slug of the page |
Response
idstring (UUID)Unique page identifier
slugstringURL-friendly slug
titlestringPage title
blocksarrayJSONB array of typed content blocks. Each block has a type (e.g., hero, text, cta, faq, pricing, features) and block-specific data.
statusstringAlways published
templatestringTemplate used to render the page (e.g., default, landing, blank)
sort_orderintegerSort order for page listing
published_atstringISO 8601 publication timestamp
updated_atstringISO 8601 last update timestamp
seo_titlestring | nullCustom SEO title
seo_descriptionstring | nullCustom SEO meta description
og_image_urlstring | nullOpen Graph image URL
Example Request
- cURL
- Python
- JavaScript
curl -s "https://spideriq.ai/api/v1/content/pages/pricing" \
-H "X-Content-Domain: your-domain.com"
import requests
resp = requests.get(
"https://spideriq.ai/api/v1/content/pages/pricing",
headers={"X-Content-Domain": "your-domain.com"}
)
page = resp.json()
print(f"Title: {page['title']}")
print(f"Template: {page['template']}")
print(f"Blocks: {len(page['blocks'])}")
for block in page["blocks"]:
print(f" - {block['type']}")
const resp = await fetch(
"https://spideriq.ai/api/v1/content/pages/pricing",
{ headers: { "X-Content-Domain": "your-domain.com" } }
);
const page = await resp.json();
console.log(`Title: ${page.title}`);
console.log(`Blocks: ${page.blocks.length}`);
page.blocks.forEach(block => console.log(` - ${block.type}`));
Example Response
{
"id": "d4e5f6a7-b8c9-0123-defg-234567890123",
"slug": "pricing",
"title": "Pricing",
"blocks": [
{
"type": "hero",
"data": {
"heading": "Simple, transparent pricing",
"subheading": "Start free. Scale as you grow.",
"cta_text": "Get Started",
"cta_url": "/signup"
}
},
{
"type": "pricing",
"data": {
"plans": [
{
"name": "Starter",
"price": "$49/mo",
"features": ["1,000 scrapes/mo", "Email verification", "API access"]
},
{
"name": "Pro",
"price": "$199/mo",
"features": ["10,000 scrapes/mo", "Priority support", "Campaigns"]
}
]
}
},
{
"type": "faq",
"data": {
"items": [
{
"question": "Can I cancel anytime?",
"answer": "Yes, cancel anytime with no fees."
}
]
}
}
],
"status": "published",
"template": "landing",
"sort_order": 2,
"published_at": "2026-01-15T12:00:00Z",
"updated_at": "2026-04-01T10:00:00Z",
"seo_title": "Pricing - SpiderIQ",
"seo_description": "Simple, transparent pricing for web scraping and lead generation.",
"og_image_url": "https://cdn.spideriq.ai/og/pricing.webp"
}
Status Codes
| Status Code | Meaning | Description |
|---|---|---|
| 200 | OK | Page returned successfully |
| 404 | Not Found | No published page found with the given slug |