Skip to content

Errors ​

Every error uses the same JSON shape, including errors from authentication and rate limiting.

json
{
  "error": {
    "type": "invalid_request_error",
    "code": "ticket_type_sold_out",
    "message": "VIP is sold out.",
    "param": "items[0].ticket_type",
    "details": { "items.0.quantity": ["Only 0 left."] },
    "request_id": "req_01JB...",
    "doc_url": "https://docs.vabu.live/errors.html#ticket_type_sold_out"
  }
}
FieldMeaning
typeThe class of error. See below.
codeA stable, specific code. Branch on this.
messageA sentence for people. It can change, so do not match on it.
paramThe request field at fault, when there is one.
detailsValidation messages per field.
request_idreq_.... Include it in support requests.
doc_urlA link to the matching entry on the error codes page.

Types ​

TypeHTTPWhenRetry?
invalid_request_error400, 404, 409, 422Bad input, missing resource, conflict or validationNo. Fix the request.
authentication_error401Missing or bad key or tokenNo.
permission_error403Scope, role or product not enabledNo.
rate_limit_error429You hit a limitYes, after Retry-After.
idempotency_error409Key reused with a different body, or still in flightSee idempotency.
provider_error502An upstream provider failedYes, with backoff.
api_error500, 503Our faultYes, with backoff.

Retrying ​

Retry 429, 502, 500 and 503 with exponential backoff and jitter, and send an Idempotency-Key so a retry cannot repeat the action. Do not retry other 4xx responses without changing the request.

New error codes can be added at any time. Treat an unknown code as its type.

Vabu OS by Vabu Group