Documentation Index
Fetch the complete documentation index at: https://docs.siteline.ai/llms.txt
Use this file to discover all available pages before exploring further.
The Reporting API is currently in beta and available on paid plans only. To activate it for
your team, contact us at [email protected].
This page documents the Reporting API for reading analytics data. If you want to send pageview
tracking events to Siteline, use the Direct HTTP API instead.
Base URL
Authentication
Create a public API key in your Siteline workspace under Team settings > Public API Key. Only team admins can view, create, copy, or regenerate the key. Pass the key as a bearer token:Authorization model
The API key scopes every request to the Siteline team that owns the key.GET /v1/productsreturns only primary products owned by that team- Product-specific routes only return data for products owned by that team
- Competitor products linked through comparison data are not authorized as primary products
- Missing keys, invalid keys, revoked keys, malformed product IDs, and unauthorized products all return the same
401response
Production client checklist
- Keep requests server-side; never expose the API key to end users
- Cache low-churn discovery calls like
GET /v1/products - Use RFC3339 timestamps for all date ranges, for example
2026-05-01T00:00:00Z - Keep date windows bounded to the reporting period your workflow needs
- Retry transient
5xxfailures with exponential backoff and jitter - Do not retry
400or401responses until inputs or credentials are fixed - Log request path, status code, and a correlation ID, but never log the full API key
- Prefer
labelIds[],platforms[], andgroupByfilters over downloading broad datasets and filtering later
Query conventions
Repeated filters use bracket notation:| Name | Required | Type | Description |
|---|---|---|---|
domain | Yes | string | Product domain to report metrics for, such as example.com. |
dateFrom | Yes | RFC3339 timestamp | Inclusive start timestamp. |
dateTo | Yes | RFC3339 timestamp | Inclusive end timestamp. |
platforms[] | No | repeated string | Platform filters. Common values include openai, gemini, google, perplexity, google_ai_overviews, and claude. |
labelIds[] | No | repeated integer | Prompt label IDs to filter on. Invalid IDs return 400. |
Error behavior
| Status | Response | Meaning |
|---|---|---|
200 | Endpoint response body | Request succeeded. |
400 | { "message": "Invalid request parameters." } | Required query parameters are missing or malformed. |
401 | { "message": "Unauthorized." } | API key validation or product authorization failed. |
500 | { "message": "Internal server error." } | Unexpected server-side or upstream dependency failure. |
Recommended sync pattern
For production ingestion jobs:- Call
GET /v1/productsand cache product IDs. - Call
GET /v1/products/{productId}/websitesand cache authorized domains. - Run narrow date-window requests for each product and domain.
- Store the exact
dateFrom,dateTo, endpoint path, and filters used for every sync batch. - On retries, re-run the same idempotent
GETrequest with the same filters.