Appearance
Errors
Errors follow the standard GraphQL shape: a top-level errors array, each entry carrying a stable machine-readable code at extensions.code. Branch on extensions.code, never on the human message (messages may be reworded; codes are part of the contract).
json
{
"errors": [
{
"message": "Property not found",
"path": ["property"],
"extensions": { "code": "NOT_FOUND" }
}
],
"data": null
}Codes
extensions.code | When | What the client should do |
|---|---|---|
UNAUTHORIZED | Missing or invalid X-App-Key on a data query | Check the key is sent and valid - see Authentication |
NOT_FOUND | property(id) is outside your key's accessible set, or the id does not exist | Treat as "no such property" - the two cases are indistinguishable by design (no existence leak) |
BAD_REQUEST | Invalid request - e.g. limit over the max of 200, or query depth over the limit | Fix the request; do not retry unchanged |
No existence leak
A NOT_FOUND for a property your key cannot access is byte-for-byte identical to one for an id that does not exist. This is intentional - the API never reveals whether another property exists.
Notes
limitis not silently clamped. Asking for more than200is aBAD_REQUEST, not a capped page. See Pagination.- Query depth is bounded. Deeply nested queries beyond the limit fail with
BAD_REQUESTrather than executing. - A successful response always has
datapopulated and noerrorsarray.