400 | start_date and end_date required (ISO 8601) | One date is missing, or Date cannot parse it. | Send both as ISO 8601, such as 2026-07-01T00:00:00Z. |
400 | type must be browser, os, or deviceType | /devices got another type. | Use browser, os, or deviceType. |
400 | use date_from/date_through or start_date/end_date, not both | /ads got both date forms. | Send one form. |
400 | Ads date ranges must contain 1-366 days | The /ads range is empty or longer than 366 days. | Split the range into 366-day pages. |
400 | platform must be meta, google, or tiktok | /ads got another platform. | Use meta, google, or tiktok. |
400 | cursor is invalid or belongs to another sort | The /ads cursor came from a request with a different sort. | Restart the page walk. Keep sort identical across pages. |
400 | start_date and end_date must be UTC hour instants with start < end | /commerce-metrics got instants that are not on the hour, or out of order. | Round both to an exact UTC hour. Put start_date first. |
400 | requested interval cannot exceed 366 days | The /commerce-metrics interval is too long. | Request 366 days or fewer. |
400 | end_date cannot be in the future | /commerce-metrics got a future end_date. | Use the current hour or earlier. |
400 | Query parameter … is not allowed | A request tried to override the commerce policy through the query string. | Remove the parameter. The policy is server-held. |
401 | Invalid or missing Agent API key. Use: Authorization: Bearer dk_agent_xxxxx | No key, wrong scheme, a dk_ write key, or an unknown key. | Send the Agent key. See Authentication. |
403 | A workspace agent API key plus operator authorization is required for cost imports | You called a cost-import route. | Do not call it. Datalyr operates these two routes. |
404 | Not found | The path is not one of the sixteen Read API endpoints. | Compare the path with the endpoint table. |
404 | User not found | /users/{userId} matched no summary row and no journey row. | Take an ID from /users. Widen the date range on /users. |
404 | Ad account not found in this workspace | The /ads account_id belongs to another workspace. | Drop account_id, or use an account the workspace owns. |
405 | Method not allowed | You sent anything other than GET to a /v1 endpoint. | Use GET. |
429 | Rate limit exceeded | The workspace passed 100 requests in 60 seconds, or the rate-limit store was unreachable. | Wait for Retry-After, which is 60. Then retry. |
500 | Internal server error | A handler threw, or a Tinybird query passed its 10-second timeout. | Retry once. If it repeats, narrow the date range and contact support. |
503 | Ads analytics query failed or timed out | Code ads_provider_read_failed. The ad-metrics store did not answer. | Retry with backoff. Ad data is unchanged. |
503 | Ads analytics storage is not configured | Code ads_storage_unavailable. | Contact support. No client-side fix exists. |
503 | Commerce payload with a reason field | /commerce-metrics could not certify the answer. | Read reason. commerce_policy_does_not_cover_interval means the policy starts after your start_date. |