Errors
Every error returns the standard envelope with a stable code
you can branch on. The HTTP status mirrors the error class, so you can
handle failures by code in your application and by status at the edge.
{
"status": false,
"error": {
"code": "insufficient_funds",
"message": "The balance is insufficient for this operation.",
"details": {}
}
}
Error codes
| Code | HTTP | Meaning |
|---|---|---|
validation_error |
400 | The request was invalid. |
authentication_failed |
401 | Authentication credentials were invalid. |
signature_invalid |
401 | The request signature is missing, expired, or invalid. |
compliance_block |
403 | This transaction was blocked by compliance. |
permission_denied |
403 | This API key is not permitted to perform that action. |
not_found |
404 | The requested resource was not found. |
idempotency_conflict |
409 | This Idempotency-Key was already used with a different request. |
rate_expired |
409 | The quoted rate has expired. Request a fresh quote. |
insufficient_funds |
422 | The balance is insufficient for this operation. |
limit_exceeded |
422 | This operation exceeds a configured limit. |
rate_limited |
429 | Too many requests. Slow down and retry. |
provider_unavailable |
502 | An upstream provider is unavailable. Try again shortly. |
| No error codes match that filter. | ||
4xx your request — fix and retry. 5xx upstream/provider — safe to retry with the same idempotency key.