API reference

Errors

Stable codes. Branch on error.code; log request_id.

JSON
{
  "error": { "code": "idempotency_conflict", "message": "Idempotency-Key was used with a different document" },
  "request_id": "0198f80c-5555-7dc1-a369-90556a64f700"
}

Requests#

CodeStatusCondition
invalid_request400Malformed JSON, missing or unknown field, wrong type, missing JSON content type, or control character. Message names the field.
invalid_amount400Syntax, precision, or sign.
missing_idempotency_key400Header absent on create.
idempotency_conflict409Key reused with a different immutable field, including attachment hash.
payload_too_large413Body exceeds the route limit.
rate_limited429Retry-After set.
not_found, method_not_allowed404 / 405Route or method.
internal_error500
database_unavailable503

Authentication and account#

CodeStatusCondition
unauthorized401Missing or invalid API key or session.
identity_unauthorized401Session-only route called with an API key or invalid session.
identity_unavailable503Identity provider keys unavailable; sessions cannot be verified.
account_disabled403
account_contact_required409Account has no verified email.
api_key_generation_conflict409expected_generation mismatch.
authentication_event_already_used409Sign-in event already consumed.

Resources#

CodeStatusCondition
deposit_request_not_found404Missing, malformed, or foreign id.
customer_not_found404
issuer_not_found404
payout_address_not_found404
webhook_not_found404Also: test event requested on a disabled endpoint.
attachment_not_found404Also: request has no attachment.
issuer_name_taken409
issuer_in_use409Requests issued under the identity.
issuer_email_already_verified409
unsupported_chain, unsupported_token422Override not served by the environment.
webhooks_unavailable503No webhook encryption key configured.

Attachments#

CodeStatusCondition
attachment_scan_pending409Scan not reported. Retry finalize with backoff.
attachment_rejected422Not a clean PDF within limits. Object deleted.
attachment_not_ready409Not finalized, rejected, expired unused, or no object uploaded.
attachment_already_attached409Belongs to another request.

Deposits and proofs#

CodeStatusCondition
deposit_request_not_settled409Proof requested before settlement.
deposit_sender_mismatch409Credited transfer from a wallet other than payer_wallet. No proof issued.
deposit_request_not_payable410Expired, settled, or closed.
deposit_request_not_blocked409Operator release on a request not in needs_attention.

Verification and wallet#

CodeStatusCondition
invalid_deposit_link401Unknown id on a payer route.
verification_required401Gated content requested without an unlocked session.
payer_session_invalid401Header missing, unknown, expired, or for another request.
otp_invalid401
otp_resend_cooldown429One code per minute. Retry-After set.
verification_not_started409No outstanding code.
verification_not_required409Mode is permissionless.
verification_method_not_applicable409Email routes under merchant_session; client secret under verified_email.
verification_persistence_unavailable503Code accepted, not recorded. Retry with continuation.
verification_unavailable503No identity provider configured.
identity_provider_unavailable502
client_secret_invalid401Unknown, malformed, expired, or foreign.
client_secret_used409Already exchanged.
wallet_required409QR requested before a wallet is bound.
wallet_challenge_required409No unexpired challenge on the session.
wallet_already_bound409Message names the bound wallet.
wallet_signature_invalid401Signature does not recover to wallet.