Skip to content

Error code reference

Every error response carries a problem field — a stable string your code branches on. Status codes group; problem discriminates.

Auth

problemStatusMeaning
auth.missing_token401No Authorization header.
auth.invalid_token401Token doesn’t exist or was revoked.
auth.expired_token401Rotation grace period elapsed.
auth.wrong_environment401Sandbox token on live URL or vice-versa.
auth.scope_required403Token lacks the required scope.
auth.aal2_required403Endpoint requires AAL2; principal hasn’t asserted it.
auth.aal2_step_up_required405AAL2 expired; step up.
auth.tenant_mismatch403Cross-tenant access attempted.

Idempotency

problemStatusMeaning
idempotency.required400Endpoint requires Idempotency-Key.
idempotency.body_mismatch422Same key, different body.
idempotency.in_flight409Same key request currently executing.
idempotency.replay_too_late410Key TTL elapsed; original request can no longer be replayed.

Validation

problemStatusMeaning
validation.failed422One or more fields invalid; see errors[].
validation.unknown_field400Request contained a field the API doesn’t recognise.
validation.currency_invalid422Currency wasn’t ISO-4217 alpha-3 uppercase.
validation.amount_invalid422Amount wasn’t a decimal string.

Rate limiting

problemStatusMeaning
rate_limit.exceeded429Too many requests; back off per Retry-After.

Subscriptions

problemStatusMeaning
subscription.illegal_transition422The requested transition isn’t allowed in the current state.
subscription.commitment_active422Cancellation rejected; commitment forbids it.
subscription.proration_invalid_currency422New plan currency differs from existing.
subscription.no_payment_method422Activation requires a default payment method.
subscription.plan_archived422The plan is archived; no new subscriptions can target it.

Invoices

problemStatusMeaning
invoice.locked422Mutation attempted on a non-draft invoice.
invoice.cannot_void_paid422Void rejected because amount_paid > 0.
invoice.cannot_finalize_empty422Finalisation rejected; no line items.
invoice.tax_recompute_required422Tax inputs changed; call recompute-tax first.

Payments

problemStatusMeaning
payment.requires_action2003DS / SCA needed; see next_action. (Not strictly an error.)
payment.declined422Provider declined; see last_error.
payment.duplicate409Payment already in-flight against this invoice.
payment.cannot_refund_failed422Refund attempted on a non-succeeded payment.
payment.refund_exceeds_amount422Sum of refunds would exceed payment amount.
payment.method_expired422The payment method’s card has expired.
payment.method_in_use409Detach attempted on a method bound to an active subscription.

Wallets

problemStatusMeaning
wallet.insufficient_funds422Wallet balance < requested amount.
wallet.currency_mismatch422Wallet currency != invoice currency.
wallet.below_drift_floor422Settlement would drop balance below drift_floor.

FX

problemStatusMeaning
fx.stale_rate503Most recent rate is older than the staleness threshold.
fx.unsupported_pair422Currency pair has no rate source configured.

Tax

problemStatusMeaning
tax.engine_unavailable503External tax engine returned an error; finalisation rolled back.
tax.address_required422Tax computation requires a billing address.
tax.id_invalid422Tax ID failed format validation.

Webhooks

problemStatusMeaning
webhook.signature_invalid401Inbound provider webhook failed HMAC verification.
webhook.endpoint_disabled410Endpoint was auto-disabled after sustained 4xx.

Misc

problemStatusMeaning
not_found404Resource doesn’t exist (or isn’t visible to your tenant).
gone410Resource existed and is permanently removed.
internal_error500An unexpected error on our side; reach out with the trace_id.
unavailable503A downstream is unavailable. Backoff and retry.

What if you see one not listed here?

The list grows. New error codes are non-breaking — see Versioning. If your code branches on an unknown problem, fall back to the HTTP status. Open an issue or contact support; we’ll add it.