| 400 | invalid_request | validation_error, decode_error, missing_param, currency_not_allowed | Bad request body, missing field, or currency not enabled for your integration | Fix the request |
| 400 | wallet_not_supported | WALLET_NOT_SUPPORTED | No active wallet for the requested (currency, network) | Ask Proof to provision the wallet |
| 401 | unauthorised | missing_token, invalid_token | Authorization missing or client_token unknown/inactive | Check the header value; rotate token if compromised |
| 403 | forbidden | forbidden_origin | Request IP or Origin not on your allowlist | Verify your server IP is registered with Proof |
| 404 | not_found | not_found | Transaction, user, or wallet does not exist or does not belong to your partner | Verify the identifier |
| 500 | internal_error | db_error, token_error | Proxy-side fault | Retry once; contact support if it persists |
| 500 | publish_failed | kafka_unavailable | Proof failed to publish a lifecycle event (webhook path only) | Retry your webhook delivery; Proof will redeliver |
| 502 | upstream_error | provider_error | An external service returned an error | Retry with the same body |
| 502 | upstream_unavailable | upstream_unavailable, upstream_invalid_response | An external service is unreachable or returned an unparseable body | Retry; back off if it persists |