Skip to main content
All Proof API errors return a JSON body of the shape:
The HTTP status code, the error slug, and the code together identify the failure mode. Use them together for programmatic handling; use message for logs only. The X-Request-Id response header carries a request identifier; include it in any support ticket.

Error matrix

Common scenarios

currency_not_allowed (400)

The currency field of your session request is not one of the currencies enabled for your integration.
Ask the Proof team to add the currency, or pick one already on your list.

wallet_not_supported (400)

You requested a (currency, network) pair for which Proof has no active wallet for your partner.
Either request a network for which Proof has a wallet (e.g. TRC20), or ask the Proof team to provision a wallet for the desired pair.

forbidden_origin (403)

The request came from an IP address not on your partner record’s allowlist.
  • Confirm the IP address your backend server makes outbound requests from.
  • Ask the Proof team what IP is on file for your partner, or to add a new IP.
  • When adding a new server or moving to a new cloud region, register the IP before the traffic starts.

upstream_error (502)

An external service returned an error. The proxy does not retry automatically for POST /widget/session — your client should.

Widget-level errors

The widget’s onStatusChange callback also fires for payment-side failures (e.g. card declined, 3DS failure). These are informational — the authoritative status comes from the API. See Transaction Status.