Errors catalog
Alphabetical reference for every error code BlendFi can return, status, who caused it, what to do.
Every error BlendFi returns has a stable code you can branch on, an HTTP status that hints at retry semantics, and a short request_id you paste when asking for help. This page is the canonical alphabetical list. For the why behind the contract, see Errors and retries.
How to read this page
Each entry shows:
- Status: the HTTP status BlendFi returns alongside the code
- Caused by:
partner(something to fix in your code),user(something for the end user to fix),BlendFi(transient infra), orupstream(identity verification / our Pix rails / BlendFi custody / a regulated exchange) - Retry?: ✅ retry-safe (with the original
Idempotency-Key), ❌ don't retry, ⚠️ conditional - Recovery: what your code or user should do
Codes ending in _unavailable are always transient and retry-safe. Codes starting with invalid_ or duplicate_ are partner-side input errors, fix the input and resubmit.
| Code | Status | Caused by | Retry? | Action |
|---|---|---|---|---|
| amount_mismatch | 422 | User(offramp) | No | The deposited USDT amount didn't match the quoted amount (down to the wei). The transaction is |
| api_key_env_mismatch | 401 | Partner | No | You used a |
| authentication_failed | 401 | Partner | No | API key is unknown, revoked, expired, or your organization is suspended. Re-copy the key from your onboarding email; if that doesn't work, contact support with the |
| authentication_required | 401 | Partner | No |
|
| crypto_kyc_declined | 422 | User | No | User's crypto-tier KYC was declined. They cannot transact crypto. See KYC. |
| crypto_kyc_pending | 422 | User | Conditional | User's crypto-tier KYC is still under review. Wait for the |
| crypto_kyc_required | 422 | Partner/ user | No | User must complete crypto-tier KYC before transacting. Trigger the higher-tier flow. |
| custody_account_not_found | 404 | Partner | No | Asked about a custody account that doesn't exist for this user. Re-check the user ID. |
| deposit_past_expiry | 422 | User(offramp) | No | Offramp deposit landed on-chain after the quote's expiry window. Operational recovery, manual support flow. |
| duplicate_document | 409 | Partner | No | A user with this CPF/CNPJ already exists in your organization. Look up the existing user; don't try to create a new one. |
| duplicate_external_id | 409 | Partner | No |
|
| idempotency_key_in_progress | 409 | Partner | Conditional | Identical request still being processed. Backoff briefly (100–500 ms) and retry the same call. See Idempotency. |
| idempotency_key_required | 400 | Partner | No |
|
| idempotency_key_reused | 409 | Partner | No | Same |
| invalid_amount | 422 | Partner | No | Amount must be a positive decimal. Validate before submitting. |
| invalid_amount_precision | 422 | Partner | No | Amount has too many decimal places for the currency. BRL allows 2; USDT allows up to the token's defined precision. |
| invalid_capability | 400 | Partner | No | Unknown capability requested. (Admin-side error; partners shouldn't normally see this.) |
| invalid_cnpj | 422 | User | No | CNPJ format or check digits are invalid. 14 digits, no dots/slashes/dashes. |
| invalid_cpf | 422 | User | No | CPF format or check digits are invalid. 11 digits, no dots or dashes. |
| invalid_custody_account_state | 422 | User/ BlendFi | Conditional | Operation not allowed in the user's current custody-account state. May resolve when provisioning completes. |
| invalid_cursor | 400 | Partner | No | Cursor on a list endpoint is malformed. Drop it and start from the beginning. |
| invalid_kyc_state | 422 | User | No | Operation not allowed in the user's current KYC state. See KYC. |
| invalid_kyc_submission_state | 422 | User | No | KYC submission state doesn't allow this operation. |
| invalid_offramp_quote | 422 | Partner | No | Quote isn't an offramp quote. Use a quote with |
| invalid_organization_state | 422 | BlendFi | No | Organization is suspended or otherwise blocked. Contact support. |
| invalid_pix_key_format | 422 | User | No | Pix key format doesn't match its declared type. Validate before submitting. See Pix. |
| invalid_transaction_state | 409 | Partner/ state | No | Operation not allowed in the transaction's current state. Read the transaction; reconcile your local state. |
| invalid_user_wallet_state | 422 | BlendFi | Conditional | User wallet state doesn't allow this operation. May resolve when provisioning completes. |
| invalid_wallet_address | 422 | Partner | No | Wallet address isn't valid for the declared network. Polygon addresses are EVM-format ( |
| invalid_webhook_delivery_state | 422 | Partner | No | Webhook delivery isn't in a state that allows the operation (e.g., redelivering one already in flight). |
| invalid_webhook_endpoint_state | 422 | Partner | No | Webhook endpoint isn't in a state that allows the operation. |
| invalid_webhook_event_types | 400 | Partner | No |
|
| invalid_webhook_signature | 401 | Partner | No | Webhook signature didn't match. Re-check the four canonical mistakes, see Webhooks. |
| invalid_webhook_url | 400 | Partner | No | Webhook URL must be HTTPS. Plain HTTP and other schemes are rejected. |
| kyb_not_yet_supported | 422 | Partner | No | Business KYC isn't supported in v1. CNPJ users still go through the individual flow for now. |
| kyc_already_approved | 409 | Partner | No | KYC submission already approved. No need to re-submit. |
| kyc_provider_unavailable | 502 | Upstream(identity verification) | Yes | Identity verification is temporarily unavailable. Retry with the same |
| kyc_required | 422 | User | No | User must complete KYC before this operation. Trigger the verification flow. |
| kyc_submission_not_found | 404 | Partner | No | KYC submission ID doesn't exist for this user. |
| max_webhook_endpoints_reached | 422 | Partner | No | Organization at the cap on webhook endpoints. Delete an unused one or contact support. |
| missing_capability | 403 | Partner | No | API key lacks the required capability for this endpoint. Email support to widen the key's capabilities. |
| open_conversion_exists | 409 | Partner/ user | No | Only one open conversion is permitted per user per direction. Cancel or expire the existing one before creating another, or reuse the existing conversion. |
| organization_not_found | 404 | BlendFi | No | Internal lookup failure. Contact support with the |
| pix_key_not_found | 404 | User | No | DICT doesn't recognize the supplied Pix key. The user mistyped, or hasn't registered the key with their bank. |
| pix_key_ownership_mismatch | 422 | User | No | DICT-registered holder doesn't match the user's stored document. Either the wrong user, the wrong key, or a verify-twice catch. |
| pix_provider_unavailable | 502 | Upstream(our Pix rails) | Yes | Our Pix rails is temporarily unavailable. Retry with the same |
| pix_send_failed | 502 | Upstream(our Pix rails) | Conditional | Our Pix rails rejected the Pix payout. The transaction is |
| price_feed_unavailable | 502 | Upstream | Yes | The price feed BlendFi uses for quote calculation is temporarily unavailable. Retry shortly. |
| quote_already_consumed | 409 | Partner | No | Quote already used to create a transaction. Get a fresh quote. |
| quote_expired | 409 | Partner | No | Quote past its |
| quote_not_found | 404 | Partner | No | Quote ID doesn't exist or isn't in your tenant scope. |
| rate_limit_exceeded | 429 | Partner | Yes | Slow down. Wait |
| internal_error | 500 | BlendFi | Yes | Unexpected server error. Retry with the same |
| transaction_limit_exceeded | 422 | Partner/ user | No | Transaction would exceed the user or organization limit. Reduce the amount or contact support to raise limits. |
| transaction_not_found | 404 | Partner | No | Transaction ID doesn't exist or isn't in your tenant scope. |
| transaction_settlement_not_found | 404 | BlendFi | No | Internal settlement record missing. Contact support. |
| unsupported_currency | 422 | Partner | No | Currency not in the supported set. v1 supports BRL and USDT only. |
| unsupported_deposit_network | 422 | Partner | No | Deposit network not supported. v1 supports Polygon for USDT settlement (Ethereum and Solana are planned). |
| unsupported_withdraw_network | 422 | Partner | No | Withdraw network not supported. v1 supports Polygon for USDT settlement (Ethereum and Solana are planned). |
| user_kyc_not_approved | 422 | User | No | User's KYC isn't approved. Same family as |
| user_missing_enrollment_data | 422 | Partner | No | User is missing data required for wallet provider enrollment. Patch the user with the missing fields. |
| user_not_found | 404 | Partner | No | User ID doesn't exist or isn't in your tenant scope. |
| user_wallet_not_found | 404 | Partner | No | User wallet ID doesn't exist for this user. |
| validation_error | 400 | Partner | No | Request body doesn't match the schema. |
| wallet_provider_enrollment_rejected | 422 | Upstream(BlendFi custody) | No | BlendFi custody rejected the user enrollment. Operational; contact support. |
| wallet_provider_unavailable | 503 | Upstream(BlendFi custody) | Yes | BlendFi custody is temporarily unavailable. Retry with the same |
| wallet_provisioning_unavailable | 503 | Upstream(BlendFi custody) | Yes | User wallet provisioning is temporarily unavailable. Retry with the same |
| webhook_delivery_not_found | 404 | Partner | No | Webhook delivery ID doesn't exist. |
| webhook_endpoint_not_found | 404 | Partner | No | Webhook endpoint ID doesn't exist. |
| withdraw_provider_unavailable | 502 | Upstream | Yes | Withdrawal provider temporarily unavailable. Retry shortly. |
Related
- Errors and retries (Concepts), the why behind the contract
- Idempotency (Concepts), why retrying with the same key is safe
- Glossary, definitions for
request_id,identity verification,our Pix rails,BlendFi custody
