Skip to main content

Error Codes

All errors are returned in the standard envelope with error.code (an English slug) and error.message (human-readable). The code (slug) is stable for programmatic checks; the message text may change.

{
"success": false,
"error": {
"code": "validation_error",
"message": "Input validation failed.",
"details": { "field": "period" }
},
"meta": { "trace_id": "...", "timestamp": "..." }
}

Generic HTTP Errors

HTTPcodeMeaning
400invalid_inputInvalid or missing input
400missing_idempotency_keyRequired Idempotency-Key header is missing
401unauthorizedAuthentication failed (missing/invalid key or secret)
403forbiddenNot authorized (e.g. you do not own the service)
404not_foundResource not found
405method_not_allowedHTTP method not supported on this endpoint
409conflictConflicting request (e.g. downgrade attempt)
422validation_errorBusiness rule validation failed
429rate_limitedRequest limit exceeded (see Rate Limiting)
500internal_errorUnexpected server-side error

Domain Errors

HTTPcodeMeaning
402/422insufficient_creditCredit balance insufficient for the operation
422idempotency_key_reuseSame Idempotency-Key used with a different body
422location_lockedLocation cannot be changed during an upgrade
404webhook_not_foundWebhook endpoint record not found
409webhook_limit_exceededMaximum active webhooks per reseller exceeded

How To Handle

  • Always check error.code programmatically, not the message text.
  • Retrying makes sense for 5xx and 429; do not retry 4xx errors (except 429) without fixing the request.
  • When contacting support, share the meta.trace_id value — it lets us find the related request in server logs.