data or error, never both. code is stable and
machine-readable; branch on it. message is for people, may be reworded
between releases, and for some codes is the underlying parser’s own text;
never match on it.
Unknown fields are rejected
The body ofPOST /v1/frames/insight is decoded strictly. A misspelt field
is a 400, not a field quietly ignored:
Every code
Two outcomes are not errors and arrive as
200:
- A frame id that
GET /v1/frames/datadoes not know comes back with no bounding box and an emptydatasetslist. - A dataset licensed per query that the organisation’s credits could not
cover is left out of a data answer and named in
leftOutwith the reason, so the rest of the answer still arrives.
Timeouts
Requests have a 30-second budget. A timed-out request does not reliably produce an error envelope, so handle a non-JSON body on a5xx. Ordinary
errors always carry one.
Handling errors well
internal, rate_limited after its wait, and transport failures.
Every other code is terminal until the request or the credential changes.