Skip to content

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.codeWhenWhat the client should do
UNAUTHORIZEDMissing or invalid X-App-Key on a data queryCheck the key is sent and valid - see Authentication
NOT_FOUNDproperty(id) is outside your key's accessible set, or the id does not existTreat as "no such property" - the two cases are indistinguishable by design (no existence leak)
BAD_REQUESTInvalid request - e.g. limit over the max of 200, or query depth over the limitFix 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

  • limit is not silently clamped. Asking for more than 200 is a BAD_REQUEST, not a capped page. See Pagination.
  • Query depth is bounded. Deeply nested queries beyond the limit fail with BAD_REQUEST rather than executing.
  • A successful response always has data populated and no errors array.