Errors

Errors, idempotency & limits

Every error is JSON with a stable machine code you can branch on — never parse the human message.

Error shape

{ "error": "a human-readable message (don't parse this)",
  "code": "below_min",   // the stable field to branch on
  "detail": { "payload": { "range": { "minAmount": 0.0001651 } } } }
# detail is present only for below_min/above_max (and only when the provider returns a range).

Error codes

HTTPcodeMeaning & fix
400below_minAmount under the pair minimum. Read detail.payload.range.minAmount (when present), or call /estimate.
400above_maxAmount over the pair maximum. Split into smaller orders.
400unsupported_currencyUnknown ticker. Check /currencies.
400unsupported_networkCoin isn't on that network. The response lists valid networks.
400network_requiredA multi-network coin (USDT, USDC…) needs an explicit fromNetwork/toNetwork. The response lists the valid networks.
400invalid_addressRecipient/refund address failed validation for that chain (wrong-chain or malformed).
400invalid_requestA required field is missing or malformed (bad amount, missing address, wrong type).
400no_routeNo provider can currently fill this pair. Try float, or a different pair.
401unauthorizedMissing/invalid/revoked API key.
404not_foundUnknown order, or not created by your key.
409idempotency_mismatchReused an Idempotency-Key with a different body. Use a fresh key.
400invalid_idempotency_keyUse 8–64 ASCII letters, digits, underscores or hyphens. A UUID is suitable.
400invalid_extra_id / invalid_refund_extra_idMemo/tag is invalid for its network. XRP tags must be ASCII whole numbers from 0 to 4294967295.
503creation_pending / creation_uncertainCreation is in progress or its result is unknown. Keep the same key and body, check Orders, or contact support before starting another order.
503creation_safety_unavailableThe durable safety store is unavailable. Retry the same request later; do not mint a new key.
429rate_limitedSlow down. See Retry-After.
500internalOur side. Safe to retry with the same Idempotency-Key.

Idempotency

Send an Idempotency-Key header on every POST /exchange. It's a unique string per logical order (a UUID is ideal). Guarantees:

Reuse the same key and body after a timeout or retrySameKey:true response. Changing the key can create another deposit address while the original allocation is still unresolved. Contact support if the outcome cannot be recovered.

Rate limits

Limits are per IP. Reads are generous; order creation is tighter. On a 429 we return:

HeaderMeaning
Retry-AfterSeconds to wait before retrying.
X-RateLimit-RemainingCalls left in the current window.

Need higher limits? Get in touch — we lift them for real integrations.

← Webhooks API reference →