Skip to content

Errors ​

On failure you get a non-200 status and a unified error body:

json
{
  "code": 400,
  "reason": "AMOUNT_BELOW_MIN",
  "message": "amount below minimum",
  "metadata": { "minAmount": "10" }
}
FieldDescription
codeHTTP status code
reasonStable error identifier — branch on this
messageEnglish text for developers; may change, don't parse it
metadataDynamic parameters (string → string), see below

Reasons ​

reasonHTTPMeaningmetadata
BAD_REQUEST400Invalid parameters (missing field, bad format, …)
VALIDATOR400Field validation failed; message names the field
TOO_MANY_REQUESTS429Too many requests; retry later
NOT_FOUND404Resource not found
MERCHANT_AUTH_FAILED401Invalid / disabled API key, disabled merchant, or missing signature headers
SIGNATURE_INVALID401Signature mismatch
REQUEST_EXPIRED401X-Timestamp missing or outside ±30 s
NONCE_REPLAYED401X-Nonce reused or of invalid length
IP_NOT_ALLOWED403Source IP not in the allowlist
PERMISSION_DENIED403The API key lacks the required scope
CHAIN_NOT_SUPPORTED400Chain unknown or disabled
TOKEN_NOT_SUPPORTED400Token unknown or not configured on this chain
ADDRESS_INVALID400Malformed address
USER_NOT_FOUND404User wallet does not exist (no address requested yet)
INSUFFICIENT_BALANCE400Insufficient user balance (internal transfer)
TX_NOT_CREDITABLE400Rescan: transaction not found, not yet on-chain, failed, or not paying a platform address
RECREDIT_REJECTED403Rescan: the receiving address does not belong to this user
WITHDRAW_DISABLED403Withdrawals are not enabled for the merchant
WITHDRAW_NOT_ALLOWED400Withdrawals of this token on this chain are not allowed
AMOUNT_BELOW_MIN400Below the minimum withdrawal amountminAmount
DUPLICATE_REQUEST409biz_id already existswithdrawId, status
INVALID_STATE409The current state does not allow this operation
HOT_WALLET_INSUFFICIENT409Platform outbound wallet balance is insufficient; retry later or contact us
SIGNER_UNAVAILABLE503Signing service temporarily unavailable; retry later
CHAIN_RPC_UNAVAILABLE503Chain node temporarily unavailable; retry later
INTERNAL500Internal server error

Retrying ​

  • 5xx and network errors: safe to retry. For POST /v1/withdraws always retry with the same biz_id.
  • 4xx: fix the request first; an identical retry will fail again. DUPLICATE_REQUEST means an earlier attempt succeeded — continue with metadata.withdrawId.
  • New reasons may be added; fall back to the HTTP status for unknown ones.