Skip to content

Errors

Every error from Tormoni is an application/problem+json body. Switch on type; it is the one stable field. title is human text and may change, status repeats the HTTP status, and detail, when present, explains this occurrence.

{
"type": "/errors/auth/invalid-token",
"title": "invalid token",
"status": 401,
"detail": "The token was revoked."
}

A 429 and a 503 carry a Retry-After header; wait that many seconds before trying again.

type Status Meaning
/errors/auth/unauthenticated 401 No credential was presented.
/errors/auth/token-expired 401 The token’s expiry has passed. Rotate it.
/errors/auth/invalid-token 401 The token is unknown or revoked.
/errors/auth/service-credential-rejected 401 A service-to-service credential was refused. Our operations failure, not yours.
/errors/auth/not-found 404 The thing named does not exist, or is not yours to see.
/errors/auth/bad-request 400 The request to the account service was malformed.
/errors/auth/conflict 409 The request contradicts current state, such as a second push of a run id with a different archive.
/errors/auth/gone 410 It existed and was consumed: a device’s token was already handed out. Do not retry.
/errors/authz/forbidden 403 You are signed in, and this is not yours to do.
/errors/authz/insufficient-role 403 Your role on this account does not allow the action.
/errors/bad-request 400 The request was malformed.
/errors/payload-too-large 413 The body is over the cap. max_bytes says the cap.
/errors/incompatible-client 426 The client is too old for this API. Upgrade it.
/errors/tenant/rate-limited 429 Too many requests. Retry-After says when.
/errors/tenant/cross-tenant-denied 403 The request reached across accounts.
/errors/tenant/feature-off 503 The feature is switched off right now. Retry-After says when to ask again.
/errors/billing/entitlement-denied 402 Your plan does not include this. plans_url is where it does.
/errors/billing/plan-ceiling-reached 429 A plan ceiling is met. What is stored stays; the next create is what was refused.
/errors/billing/unavailable 503 Billing could not be reached, and this operation needed it.
/errors/mail/delivery-failed 502 A mail we had to send did not leave.
/errors/internal/database 500 Our database failed.
/errors/internal/unknown 500 Something else of ours failed.