# Errors

- missing_credential (HTTP 401): No Authorization header arrived. Send `Authorization: Bearer <key or access token>`; a credential in the query string is never read.

- invalid_credential (HTTP 401): The credential was not recognised. Check for a truncated copy-paste, and check you are calling the deployment it belongs to.

- credential_revoked (HTTP 401): The key was revoked, or the access token was withdrawn by the person who granted it. Issue a new one; retrying will not help.

- credential_expired (HTTP 401): The access token has passed its lifetime. Exchange the refresh token for a new one and retry once.

- insufficient_scope (HTTP 403): The credential is real but was not granted the scope this operation needs. The WWW-Authenticate header names the missing scope; re-issue the key with it, or ask for it in the next authorization request.

- credential_restricted (HTTP 403): This credential is confined to one organization and the request named a different one. Use the organization it was issued for.

- sandbox_only (HTTP 403): This operation exists only in the sandbox. Call it with a jat_test_ credential.

- forbidden (HTTP 403): The account this credential acts as is not allowed to do this — usually a role an organization has not granted it. Read /me and the organization membership before retrying.

- not_found (HTTP 404): No such resource, or none this account may see. The two are deliberately the same answer, so a 404 is never proof that something does not exist.

- method_not_allowed (HTTP 405): The path exists but not with that method. The Allow header lists the ones it does answer.

- validation_failed (HTTP 400): The request body or parameters did not match the schema. The errors array names each field and why it was rejected.

- conflict (HTTP 409): The change collided with the current state — a name already taken, or a row somebody else removed. Read the resource again and decide what to send.

- unprocessable (HTTP 422): The request was well formed but asks for something the product does not allow, such as deleting the only board on an account.

- rate_limited (HTTP 429): Too many requests. Wait for the number of seconds in Retry-After; RateLimit-Reset says when the window turns over.

- idempotency_key_reused (HTTP 422): That Idempotency-Key was used for a different request body. Generate a new key per distinct request, and reuse a key only to retry the identical one.

- idempotency_request_in_progress (HTTP 409): The first request carrying this key has not finished. Wait and retry; do not send it a second time in parallel.

- payload_too_large (HTTP 413): The body is bigger than this endpoint accepts. Split an import into smaller batches, or upload a smaller file.

- unsupported_media_type (HTTP 415): Send Content-Type: application/json, or the multipart type the endpoint documents for a file.

- precondition_failed (HTTP 412): The If-Match you sent no longer describes the resource, so the write was refused rather than overwriting somebody. Read it again, decide, and retry with the new ETag.

- internal_error (HTTP 500): Something broke on our side. Retry once; if it persists, contact support and quote the requestId.

- service_unavailable (HTTP 503): A dependency is temporarily down. Back off and retry; this one is usually short lived.