Skip to main content

Errors

All errors use a consistent envelope and an appropriate HTTP status:

{
"error": {
"code": "validation_failed",
"message": "The 'amount' field is required.",
"details": [
{ "field": "amount", "issue": "required" }
],
"request_id": "req_8f3a1c9e"
}
}

request_id is also returned in the X-Request-Id response header — include it in support requests.

HTTPerror.codeMeaning
400bad_requestMalformed request / invalid JSON
401unauthorizedMissing / invalid / expired credentials
403insufficient_scopeKey lacks the required scope
403origin_not_allowedRequest origin not in the key's allow-list
404not_foundResource does not exist (or not in this company)
409conflictIdempotency or state conflict (e.g. already paid)
422validation_failedBody failed validation (see details)
429rate_limitedRate limit exceeded
500server_errorUnexpected error — safe to retry idempotent calls

Auth-failure messages are deliberately generic and never disclose whether a resource exists in another company.