BlendFi

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), or upstream (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.

CodeStatusCaused byRetry?Action
amount_mismatch422User(offramp)No

The deposited USDT amount didn't match the quoted amount (down to the wei). The transaction is failed. Recovery: the user re-deposits the correct amount via a fresh quote, this transaction is terminal.

api_key_env_mismatch401PartnerNo

You used a sk_live_… key in sandbox or a sk_test_… key in production. Re-check your environment configuration.

authentication_failed401PartnerNo

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 request_id.

authentication_required401PartnerNo

Authorization header missing or doesn't start with Bearer . Mind the space after Bearer.

crypto_kyc_declined422UserNo

User's crypto-tier KYC was declined. They cannot transact crypto. See KYC.

crypto_kyc_pending422UserConditional

User's crypto-tier KYC is still under review. Wait for the user.kyc_approved webhook, then retry.

crypto_kyc_required422Partner/ userNo

User must complete crypto-tier KYC before transacting. Trigger the higher-tier flow.

custody_account_not_found404PartnerNo

Asked about a custody account that doesn't exist for this user. Re-check the user ID.

deposit_past_expiry422User(offramp)No

Offramp deposit landed on-chain after the quote's expiry window. Operational recovery, manual support flow.

duplicate_document409PartnerNo

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_id409PartnerNo

external_id already in use within your organization. Pick a unique one.

idempotency_key_in_progress409PartnerConditional

Identical request still being processed. Backoff briefly (100–500 ms) and retry the same call. See Idempotency.

idempotency_key_required400PartnerNo

Idempotency-Key header missing on a mutating request. Add the header.

idempotency_key_reused409PartnerNo

Same Idempotency-Key previously used with a different body. Either resend the original body to replay, or use a new key for the new body.

invalid_amount422PartnerNo

Amount must be a positive decimal. Validate before submitting.

invalid_amount_precision422PartnerNo

Amount has too many decimal places for the currency. BRL allows 2; USDT allows up to the token's defined precision.

invalid_capability400PartnerNo

Unknown capability requested. (Admin-side error; partners shouldn't normally see this.)

invalid_cnpj422UserNo

CNPJ format or check digits are invalid. 14 digits, no dots/slashes/dashes.

invalid_cpf422UserNo

CPF format or check digits are invalid. 11 digits, no dots or dashes.

invalid_custody_account_state422User/ BlendFiConditional

Operation not allowed in the user's current custody-account state. May resolve when provisioning completes.

invalid_cursor400PartnerNo

Cursor on a list endpoint is malformed. Drop it and start from the beginning.

invalid_kyc_state422UserNo

Operation not allowed in the user's current KYC state. See KYC.

invalid_kyc_submission_state422UserNo

KYC submission state doesn't allow this operation.

invalid_offramp_quote422PartnerNo

Quote isn't an offramp quote. Use a quote with transaction_type: pix_offramp.

invalid_organization_state422BlendFiNo

Organization is suspended or otherwise blocked. Contact support.

invalid_pix_key_format422UserNo

Pix key format doesn't match its declared type. Validate before submitting. See Pix.

invalid_transaction_state409Partner/ stateNo

Operation not allowed in the transaction's current state. Read the transaction; reconcile your local state.

invalid_user_wallet_state422BlendFiConditional

User wallet state doesn't allow this operation. May resolve when provisioning completes.

invalid_wallet_address422PartnerNo

Wallet address isn't valid for the declared network. Polygon addresses are EVM-format (0x + 40 hex chars).

invalid_webhook_delivery_state422PartnerNo

Webhook delivery isn't in a state that allows the operation (e.g., redelivering one already in flight).

invalid_webhook_endpoint_state422PartnerNo

Webhook endpoint isn't in a state that allows the operation.

invalid_webhook_event_types400PartnerNo

event_types array empty or contains an unknown type. See the event catalog for the full list of valid event names.

invalid_webhook_signature401PartnerNo

Webhook signature didn't match. Re-check the four canonical mistakes, see Webhooks.

invalid_webhook_url400PartnerNo

Webhook URL must be HTTPS. Plain HTTP and other schemes are rejected.

kyb_not_yet_supported422PartnerNo

Business KYC isn't supported in v1. CNPJ users still go through the individual flow for now.

kyc_already_approved409PartnerNo

KYC submission already approved. No need to re-submit.

kyc_provider_unavailable502Upstream(identity verification)Yes

Identity verification is temporarily unavailable. Retry with the same Idempotency-Key.

kyc_required422UserNo

User must complete KYC before this operation. Trigger the verification flow.

kyc_submission_not_found404PartnerNo

KYC submission ID doesn't exist for this user.

max_webhook_endpoints_reached422PartnerNo

Organization at the cap on webhook endpoints. Delete an unused one or contact support.

missing_capability403PartnerNo

API key lacks the required capability for this endpoint. Email support to widen the key's capabilities.

open_conversion_exists409Partner/ userNo

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_found404BlendFiNo

Internal lookup failure. Contact support with the request_id.

pix_key_not_found404UserNo

DICT doesn't recognize the supplied Pix key. The user mistyped, or hasn't registered the key with their bank.

pix_key_ownership_mismatch422UserNo

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_unavailable502Upstream(our Pix rails)Yes

Our Pix rails is temporarily unavailable. Retry with the same Idempotency-Key.

pix_send_failed502Upstream(our Pix rails)Conditional

Our Pix rails rejected the Pix payout. The transaction is failed. Recovery is manual, contact support.

price_feed_unavailable502UpstreamYes

The price feed BlendFi uses for quote calculation is temporarily unavailable. Retry shortly.

quote_already_consumed409PartnerNo

Quote already used to create a transaction. Get a fresh quote.

quote_expired409PartnerNo

Quote past its expires_at (typically 15 minutes). Get a fresh quote.

quote_not_found404PartnerNo

Quote ID doesn't exist or isn't in your tenant scope.

rate_limit_exceeded429PartnerYes

Slow down. Wait details.retry_after_seconds (also in the Retry-After header) before retrying. See Environments and rate limits.

internal_error500BlendFiYes

Unexpected server error. Retry with the same Idempotency-Key. If it persists, contact support with the request_id.

transaction_limit_exceeded422Partner/ userNo

Transaction would exceed the user or organization limit. Reduce the amount or contact support to raise limits.

transaction_not_found404PartnerNo

Transaction ID doesn't exist or isn't in your tenant scope.

transaction_settlement_not_found404BlendFiNo

Internal settlement record missing. Contact support.

unsupported_currency422PartnerNo

Currency not in the supported set. v1 supports BRL and USDT only.

unsupported_deposit_network422PartnerNo

Deposit network not supported. v1 supports Polygon for USDT settlement (Ethereum and Solana are planned).

unsupported_withdraw_network422PartnerNo

Withdraw network not supported. v1 supports Polygon for USDT settlement (Ethereum and Solana are planned).

user_kyc_not_approved422UserNo

User's KYC isn't approved. Same family as kyc_required.

user_missing_enrollment_data422PartnerNo

User is missing data required for wallet provider enrollment. Patch the user with the missing fields.

user_not_found404PartnerNo

User ID doesn't exist or isn't in your tenant scope.

user_wallet_not_found404PartnerNo

User wallet ID doesn't exist for this user.

validation_error400PartnerNo

Request body doesn't match the schema. details.issues[] lists the specific field paths.

wallet_provider_enrollment_rejected422Upstream(BlendFi custody)No

BlendFi custody rejected the user enrollment. Operational; contact support.

wallet_provider_unavailable503Upstream(BlendFi custody)Yes

BlendFi custody is temporarily unavailable. Retry with the same Idempotency-Key.

wallet_provisioning_unavailable503Upstream(BlendFi custody)Yes

User wallet provisioning is temporarily unavailable. Retry with the same Idempotency-Key.

webhook_delivery_not_found404PartnerNo

Webhook delivery ID doesn't exist.

webhook_endpoint_not_found404PartnerNo

Webhook endpoint ID doesn't exist.

withdraw_provider_unavailable502UpstreamYes

Withdrawal provider temporarily unavailable. Retry shortly.

On this page