GoliathDevelopersGet an API key
Get started / Errors

Every error, and what to do.

A handled request is always 200 { data, errors? }. Transport and auth problems use a status and a stable error code.

The shape

An operation's own failure (a validation error, a missing record) comes back in errors on a 200. Everything below comes back as the HTTP status with the same JSON body, the code in errors[0].extensions.code. Switch on the code, never on the message.

400

400raw_query_forbidden

The body carried a query. Raw GraphQL is never accepted; send an operationId.

What to do: Fix the request.

400bad_request

No string operationId, malformed variables, an empty or over-255-character Idempotency-Key, or an Idempotency-Key on a read.

What to do: Fix the request.

400unknown_operation

The operationId is not in the catalog.

What to do: Check the id against the reference.

400unknown_variable

A variable the operation does not declare. A typo is refused rather than silently dropped.

What to do: Fix the variable name.

401

401unauthorized

No bearer header, or the key is invalid or revoked.

What to do: Use a valid key.

402

402subscription_inactive

The organization has no usable plan. Billing and profile reads still answer.

What to do: Restore the plan in the app.

403

403insufficient_scope

The key lacks the scope the operation requires.

What to do: Mint a key with that scope.

403outbound_paused

The organization has paused all outbound in Settings; an API send is automation, which the pause holds.

What to do: Resume outbound in the app.

403forbidden

A referenced record does not exist, was deleted, or is outside your organization. The gateway cannot tell those apart.

What to do: Check the id.

409

409idempotency_conflict

A request with this Idempotency-Key is still in flight.

What to do: Retry with the SAME key once it completes.

429

429rate_limited

The per-key limit for a rate-limited operation, or the per-IP throttle before auth.

What to do: Wait for Retry-After.

429concurrency_limit

Too many in-flight requests for this key.

What to do: Retry shortly.

500

500internal_error

An unexpected failure. Details are logged on our side and masked here.

What to do: Retry with backoff; reads and keyed writes are safe.

503

503temporarily_disabled

The API is switched off for now.

What to do: Wait for Retry-After.

every error has this body
HTTP/1.1 429 Too Many Requests
Retry-After: 30

{
  "errors": [
    { "message": "Rate limit exceeded.", "extensions": { "code": "rate_limited" } }
  ]
}

Rate limits

Most operations are not metered. The expensive analytics reads are, per key: over the budget returns 429 rate_limited with a Retry-After header. Too many requests in flight at once returns 429 concurrency_limit. Each operation's reference page says whether it is rate-limited. Honor Retry-After exactly; the TypeScript SDK does.