Skip to main content
Errors here are boring on purpose. Every failure returns one JSON object with a stable shape and an explicit answer to the only question an agent has: do I retry this or not?
retryable is an explicit boolean: true means the same request can succeed if you retry, false means it will not, ever. request_id is a correlation ID that is safe to share with support. Error responses never charge data credits, though they do spend a rate unit.

Status codes

What to do

Fix the request for the non-retryable codes. For invalid_parameter, correct the parameters against the operation’s schema. For unauthenticated, check that a valid nx_ key is in the Authorization header. For quota_exhausted, fund your key with a data-credit pack from the console (packs open with the API beta). For method_not_allowed, switch to GET, since every HTTP operation is a GET request. For idempotency_conflict, use a new key, since each key is bound to one request for 24 hours. The internal_error code is an unclassified server failure and is not marked retryable. Do not retry it blindly. Capture the request_id and share it with support. Retry the retryable codes with backoff. For rate_limited and request_in_progress, honor the Retry-After header. For upstream_unavailable and timeout, retry after a short delay. Reusing the same idempotency key on these retries is safe: a transient failure releases the hold, so the retry runs once and settles once.

Deadlines and limits

The gateway uses a 15-second upstream deadline and a 2 MiB response limit. A request that exceeds the deadline returns timeout. These bounds also keep error responses small and fast, so retry logic can rely on them.