Navigation
GET
/api/v1/content/navigation/{location}Overview
Returns the navigation menu for a given location. Navigation menus are hierarchical -- items can have nested children for dropdown menus and sub-navigation.
Authentication
info
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 |
|---|---|---|---|
location | string | Yes | Navigation location. One of: header, footer, docs_sidebar |
Response
idstring (UUID)Navigation menu identifier
locationstringMenu location (header, footer, or docs_sidebar)
itemsarrayArray of navigation items (hierarchical)
items[].labelstringDisplay label for the navigation item
items[].urlstringTarget URL (relative or absolute)
items[].iconstring | nullOptional icon identifier
items[].is_externalbooleanWhether the link opens in a new tab
items[].badgestring | nullOptional badge text (e.g., New, Beta)
items[].childrenarrayNested child navigation items (same shape)
updated_atstringISO 8601 last update timestamp
Example Request
- cURL
- Python
- JavaScript
curl -s "https://spideriq.ai/api/v1/content/navigation/header" \
-H "X-Content-Domain: your-domain.com"
import requests
resp = requests.get(
"https://spideriq.ai/api/v1/content/navigation/header",
headers={"X-Content-Domain": "your-domain.com"}
)
nav = resp.json()
for item in nav["items"]:
print(f"{item['label']} -> {item['url']}")
for child in item.get("children", []):
print(f" {child['label']} -> {child['url']}")
const resp = await fetch(
"https://spideriq.ai/api/v1/content/navigation/header",
{ headers: { "X-Content-Domain": "your-domain.com" } }
);
const nav = await resp.json();
nav.items.forEach(item => {
console.log(`${item.label} -> ${item.url}`);
item.children?.forEach(child => {
console.log(` ${child.label} -> ${child.url}`);
});
});
Example Response
{
"id": "nav-001-uuid",
"location": "header",
"items": [
{
"label": "Product",
"url": "/product",
"icon": null,
"is_external": false,
"badge": null,
"children": [
{
"label": "Lead Generation",
"url": "/product/lead-generation",
"icon": "target",
"is_external": false,
"badge": null,
"children": []
},
{
"label": "Web Scraping",
"url": "/product/web-scraping",
"icon": "globe",
"is_external": false,
"badge": null,
"children": []
}
]
},
{
"label": "Pricing",
"url": "/pricing",
"icon": null,
"is_external": false,
"badge": null,
"children": []
},
{
"label": "Docs",
"url": "/docs",
"icon": "book",
"is_external": false,
"badge": "New",
"children": []
},
{
"label": "Blog",
"url": "/blog",
"icon": null,
"is_external": false,
"badge": null,
"children": []
}
],
"updated_at": "2026-04-01T10:00:00Z"
}
Status Codes
| Status Code | Meaning | Description |
|---|---|---|
| 200 | OK | Navigation menu returned successfully |
| 404 | Not Found | No navigation menu found for the given location |