Skip to main content

Errors

Errors use the same envelope as success responses, with success: false:

{
"success": false,
"message": "Validation failed",
"code": "EXPECTED_AMOUNT_REQUIRED",
"details": [{ "field": "amount", "message": "amount is required" }],
"correlationId": "8f3c…"
}
  • message is always present and human-readable.
  • code (when set) is a stable string code — branch on this, not the message text.
  • details for validation errors is an array of { field, message }.
  • correlationId echoes your x-correlation-id request header — include it when contacting support.

HTTP status mapping

SituationStatus
Validation failure422
Bad request400
Missing/invalid API key, expired token401
Forbidden / IP not allowed403
Resource not found404
Duplicate / conflict409
Rate limit exceeded429
Application errorthe error's own status
Server error500 (message hidden)
Upstream timeout / unavailable (gateway)504 / 502

Error codes

Codes you may encounter on the integration surface:

CodeStatusMeaning
INVALID_API_KEY401Missing/malformed key, or env mismatch (test key on live, etc.)
IP_NOT_ALLOWED403Request IP isn't in the key's allowlist (message echoes the IP seen)
EXPECTED_AMOUNT_REQUIRED422amount required in client fee mode
MAX_ACTIVE_ADDRESSES429Active-address cap reached
SETTLEMENT_ACCOUNT_NOT_FOUND404settlementAccountId isn't yours
NO_SETTLEMENT_ACCOUNT422reusable requested with no active settlement wallet
INVALID_WEBHOOK_URL422Webhook URL failed the SSRF guard (private/loopback)
INVALID_EVENT_TYPE422Unsupported webhook event name
NO_WEBHOOK_URL422Tried to test a key webhook with no URL set
Rate-limit responses

A 429 may be a plain { "success": false, "message": "Rate limit exceeded" } with a Retry-After header (seconds). Honor Retry-After and retry with backoff.

Handling tips

  • Retry 429 (after Retry-After) and 5xx/502/504 (with exponential backoff). Do not retry 4xx validation/auth errors — fix the request.
  • Log correlationId on failures so support can trace a specific request.