Errors

Every errorCode the API returns, generated from the code that emits it.

Every error response has the same body. Branch on errorCode, never on message — the text is presentation and may change; the code is contract.

{
"errorCode": "insufficient_funds",
"message": "Saldo insuficiente para concluir a operação.",
"docs": "https://docs.api.corpx.com/baas/guias/referencia/erros#insufficient_funds",
"requestId": "3f7c2a9e-1b4d-4c8e-9f0a-2b6d7e8f9a0b",
"partner": { "code": "INSUFFICIENT_BALANCE", "message": "Saldo insuficiente" }
}
FieldWhat it is
errorCodeStable code. The list below is generated from the gateway source on every release.
messagePortuguese explanation for logs and support. Do not parse it.
docsLink to the code’s anchor on this page.
requestIdGateway request id. Quote it when opening a ticket.
partnerOnly when the failure came from the settlement bank: its raw error, for diagnosis.
Open enum

New codes may appear without a version bump. Treat an unknown errorCode as a generic error of the same HTTP status: 4xx means the request is wrong (do not retry unchanged); 5xx and retryable: yes can be retried with the same Idempotency-Key.

General

Authentication, headers, format and availability. Can happen on any route.

CodeHTTPWhat happened and what to doRetryable
account_not_found404The accountId in the path does not exist.no
banking_unavailable503The banking provider is not available for this operation right now. Retry in a few seconds; nothing was executed.yes
beneficiary_check_unavailable503Could not confirm the internal-transfer destination by document. Retry or use /transfers/internal/by-bank-account.no
cognito_error502Identity provider failure while creating or changing the credential. Retry; if it persists, contact support.yes
cognito_unavailable503Identity provider unavailable. Retry shortly.yes
credential_revoked403The credential used has been revoked. Issue a new one in the internet banking (IB) or with CorpX (BaaS).no
db_error500Internal persistence error.no
db_unavailable503Gateway database unavailable. Nothing was executed; retry shortly.yes
evidence_not_approved422The biometry evidence (biometry.evidenceId) has not passed content verification yet, or was rejected. Upload new evidence.no
forbidden403You do not have permission to perform this action on the requested resource.no
idempotency_conflict409The Idempotency-Key was already used by another tenant on an endpoint that derives identifiers from it (flows enabled on request). Reusing an Idempotency-Key with a different body does not return a conflict on the other endpoints: you get the result of the original operation. See Idempotency.no
identity_not_approved409Identity verification for the consent journey is not approved yet. The journey stays pending; the holder recaptures via the same link.no
identity_stale409Identity verification expired. The journey stays pending; the holder recaptures via the same link.no
ingest_unavailable503Internal ingestion component unavailable. Retry shortly.yes
init_error500Failed to initialise gateway dependencies. Retry; if it persists, contact support with the requestId.yes
insufficient_scope403The credential lacks the scope required by the route (e.g. qrcode.manage, pix_out.create), or is read-only attempting a write. The message names the missing scope. See the Authentication Guide.no
integrator_credential_required403The route moves money and requires an integrator credential (client_credentials) issued by CorpX. A Portal user session token is refused even when that user has access to the account.no
internal_error500An unexpected error occurred on our servers.no
invalid_account400The accountId given for the credential is not a UUID or does not belong to the tenant.no
invalid_body400The body is not valid JSON.no
invalid_client400Malformed clientId.no
invalid_path400A path segment is empty or malformed (for example a missing transactionId on the timeline route).no
invalid_scope400One of the scopes requested for the credential does not exist. See the list under Authentication.no
invalid_state409The operation does not apply to the resource’s current state.no
marshal_error500Internal failure while serialising the response. Retry; if it persists, contact support with the requestId.yes
method_not_allowed405The HTTP method is not accepted on this route. Check the method in the API reference.no
missing_tenant400The X-Tenant-Id header is required and was not provided.no
no_accounts404The tenant has no accounts yet. Finish account opening before operating.no
payload_too_large413Request body exceeds the route limit (MED evidence: 10 MB). Shrink the file or use the upload URL.no
rate_check_unavailable503Could not validate the journey rate limit right now. Retry in a moment.no
scope_not_self_service403This scope can only be granted by CorpX, not by the credential itself.no
storage_error502Failed to store or read the evidence file. Retry; if it persists, contact support.yes
temporal_unavailable503The async operation orchestrator did not respond; the operation was not started. Retry with the same Idempotency-Key.yes
tenant_disabled403The tenant is disabled: no API route responds. Contact CorpX support to restore access.no
tenant_forbidden403The token is not authorized for the tenant in X-Tenant-Id. Applies to every /v1/ route: credential and header must point to the same tenant.no
tenant_mismatch403X-Tenant-Id does not match the tenant of the account in the path (or the body’s tenantId).no
tenant_suspended403There is an open pendency and write operations are suspended. Reads keep working. Contact CorpX support to clear it.no
unauthorized401Missing Authorization header. An invalid or expired token returns 403 (obtain a new token via client_credentials).no
unsupported_media_type422File type not accepted as MED evidence. Send PDF, PNG or JPEG.no
user_token_forbidden_on_financial_op403User tokens cannot move money: financial operations require an application credential (client_credentials).no
workflow_start_failed500The asynchronous operation could not be started. Retry with the same Idempotency-Key; if it persists, contact support.yes
workflow_timeout504The operation did not finish inside the synchronous window. The outcome is indeterminate: check the statement or status before retrying.no

Settlement bank

Rejections from the settlement bank translated to stable codes. The partner block carries the original.

CodeHTTPWhat happened and what to doRetryable
account_not_entitled409The account is fully accredited, but the banking provider has not enabled this service for it — other operations on the same account keep working. This is neither a transient failure nor a problem with your request: retrying will not help until the provider enables it. Contact support with the accountId.no
account_not_ready409The account has no counterpart at the banking provider yet — accreditation is in progress, was refused, or never completed. This is not an API outage: no banking operation works on this account until the accreditation reaches ACTIVE.no
already_at_partner409The document is already accredited at the banking provider by another participant. Requires a control transfer through support.no
bacen_rejected_content400Text content (description/message) contains a character the Brazilian Central Bank does not accept.no
balance_reservation_failed422Balance reservation failed (funds locked, settling, or racing with another operation).no
boleto_already_settled409The bank slip is already settled. Check the original payment before resending.no
boleto_amount_mismatch422Amount differs from the registered bank slip amount (consider interest, fine and discount).no
boleto_scheduled409There is an active schedule for the same barcode.no
challenge_failure422PIN/2FA validation failed at the banking provider.no
conflict409State conflict at the banking provider (e.g. resource already processed).no
identifier_conflict409The Identifier was already used at the banking provider. Resending the same value does not create a new operation.no
insufficient_funds422Insufficient balance as computed by the banking provider at settlement time.no
invalid_field400Field-level validation at the banking provider. partner.field names the field and the message carries the limit when available.no
invalid_payload400The banking provider rejected the request body. The partner block carries the original validation message.no
invalid_pix_key400Key format does not match the declared type (CPF, CNPJ, EMAIL, PHONE, EVP).no
key_inactive422The key exists but is inactive or under portability. Use another key or bank details.no
key_not_found404Key not found in DICT. Check for typos or ask the recipient for another key.no
key_ownership_mismatch422Attempt to register or use a key whose document differs from the account holder’s.no
limit_exceeded422A limit was exceeded but the provider did not say which window.no
limit_exceeded_daily422For PIX, daytime window limit (06:00–20:00). For an internal transfer, São Paulo calendar-day limit (00:00–23:59). The message carries the remaining amount when available.no
limit_exceeded_monthly422Accumulated monthly limit. Only clears at month rollover or with a limit increase.no
limit_exceeded_nightly422Nighttime window limit (20:00–06:00), usually lower than the daytime one.no
limit_exceeded_transaction422Per-transaction limit. Split the operation or request a limit increase.no
not_found404Resource does not exist at the banking provider (id, key or transaction).no
not_supported501The route exists in the contract, but the settlement provider does not expose the operation. Retrying will not help — it is a missing capability, not an outage.no
partial_refund_not_supported400Legacy — no longer returned: partial refunds are now accepted. An amount above the original returns refund_amount_exceeded.no
partner_account_disabled422Source account is disabled at the banking provider (reactivation required).no
partner_error502Unclassified failure while talking to the banking provider. Safe to retry.yes
partner_forbidden502Operation blocked by the banking provider for this account (product or permission not enabled).no
partner_internal502Internal (5xx) error at the banking provider. Safe to retry.yes
partner_rate_limited429The banking provider throttled CorpX’s traffic. Nothing is wrong with your request — slow down and retry with backoff.yes
partner_rejected422Refused by the banking provider on internal policy, risk or fraud grounds. The partner block carries the stated reason.no
partner_unauthorized502CorpX’s own credential at the banking provider was rejected. Not related to your credential; wait a few minutes before resending.no
partner_unavailable502Provider outage or gateway failure. Safe to retry.yes
pix_key_limit_exceeded422Maximum number of keys per account reached (5 for individuals, 20 for companies).no
qr_amount_mismatch422A fixed-amount QR Code does not accept a different amount.no
qr_gone409QR Code removed or expired at the banking provider.no
recipient_account_not_found422Destination bank/branch/account does not exist. Applies to TED and internal transfers.no
refund_amount_exceeded400Refund amount is larger than the refundable balance of the original PIX.no
timeout504Timeout calling the banking provider. The operation may exist — query it before resending.yes

PIX out

CodeHTTPWhat happened and what to doRetryable
batch_not_found404BigPix: the requested batchId does not exist.no
batch_too_large400BigPix: the requested amount would produce more than 99 chunks.no
beneficiary_incomplete422The stored beneficiary lacks data required by the chosen operation.no
beneficiary_not_active_at_partner422The beneficiary exists locally but is not active at the provider yet.no
beneficiary_not_found404The given beneficiary does not exist in the account’s address book.no
dict_lookup_limit_exceeded429DICT lookup limits were exceeded: either an absolute count (maxLookupsPerDay, maxLookupsPerMinute, maxNotFoundPer5min) or a rate over a time window (lookups per transfer, or the fraction of lookups resolving no key, from 5 min to 30 days). Both the tenant/account policy and, for fields left blank, the global default apply — always counted per account, never summed across the tenant. The message indicates which counter or window triggered. Wait for the window to reset (00:00 BRT for per-day; sliding for the rates) or adjust the limits in the Backoffice. Abusive consumption is monitored and has consequences — see PIX key lookups.no
invalid_amount400amount missing, not positive, or with more than two decimal places.no
invalid_bank_code400On PIX by bank-account details, bankCode accepts a 3-digit Compe code or an 8-digit ISPB. TED accepts only the Compe code — see TED.no
invalid_identifier400identifier exceeds the accepted length or uses disallowed characters.no
policy_denied422A policy rule configured for the account or tenant refused the operation — transfer, QR code creation, PIX key creation, or refund. The body carries violations with the rule and message of each violated rule. See Policies and Rules.no

QR Code

CodeHTTPWhat happened and what to doRetryable
missing_field400pixKey missing — and, on dynamic QR, value missing or not positive.no
missing_param400Lookup and cancellation require the identifier query param (alias txid).no

PIX keys

CodeHTTPWhat happened and what to doRetryable
key_type_temporarily_unavailable422Registering an email or phone key is temporarily unavailable. Use cpf, cnpj, or random. Listing and deleting those key types still works.no

Refund

CodeHTTPWhat happened and what to doRetryable
original_transaction_not_found404The original transaction (originalEndToEnd) was not found.no

TED

CodeHTTPWhat happened and what to doRetryable
invalid_account_type400accountType must be CHECKING, SAVINGS, PAYMENT or SALARY. Omitted, it defaults to CHECKING.no
invalid_tax_number400taxNumber must have 11 (CPF) or 14 (CNPJ) digits.no
missing_fields400Missing value, holderName, branch, or account.no

Internal transfer

CodeHTTPWhat happened and what to doRetryable
multiple_destination_accounts409On /transfers/internal/by-document, the document has more than one active account. Address it by account instead: /transfers/internal/by-bank-account (branch + number) or /transfers/internal (destinationAccountId).no

Statement, entries and exports

CodeHTTPWhat happened and what to doRetryable
bucket_mismatch409The export file was produced in another environment and cannot be downloaded here. Create the export again.no
date_range_too_wide400The statement window exceeds 31 days. Split it into smaller periods.no
invalid_cursor400The pagination cursor is invalid or belongs to another query. Start over without cursor.no
invalid_date_range400startDate / endDate outside the YYYY-MM-DD format.no
invalid_filter400Invalid advanced statement filter (type, direction, status, minAmount/maxAmount or dates). The message names the field.no
invalid_format400Export format must be csv, pdf, or xlsx.no
invalid_operation400The entry detail requires the operation query param: PIX, TED, BOLETO, INTERNAL, or FEE.no
invalid_query400The per-account timeline requires exactly one of endToEndId and identifier — never both, never neither.no
invalid_s3_key500Internal reference to the export file is invalid. Create the export again; if it persists, contact support.yes
missing_account_id400accountId missing from the path. Use GET /v1/accounts/{accountId}/pix/payments/lookup?identifier=....no
missing_identifier400Pass identifier or endToEnd in the query to locate the payment.no
not_ready409Download requested before the export finished. Poll the status until completed.no
presign_failed500Failed to generate the download link for an already finished file. Safe to retry.no

Webhooks

CodeHTTPWhat happened and what to doRetryable
account_id_required422The credential is restricted to specific accounts: pass accountId on the subscription. See Per-account subscriptions.no
hookdeck_list_failed502The delivery service could not list the attempts. Retry shortly.yes
hookdeck_retry_failed502The delivery service refused the retry. Retry shortly.yes
hookdeck_source_unavailable503The tenant’s delivery source is unavailable in the webhook service. Retry shortly.yes
hookdeck_sync_failed502Failed to register the destination at our webhook delivery service. Safe to retry.no
hookdeck_unavailable503Webhook delivery service unavailable. Retry shortly.yes
invalid_url400url must use https://.no
missing_delivery_id400deliveryId missing from the path.no
missing_subscription_id400subscriptionId missing from the path.no
no_hookdeck_destination410The subscription no longer has an active delivery destination. Recreate the subscription.no
no_hookdeck_event_found410The delivery is past the retention window and can no longer be resent.no
reemit_failed500Failed to re-emit the event. Retry; if it persists, contact support with the deliveryId.yes
replay_already_running409A replay is already running for this subscription. Wait for it to finish.no
unsupported_auth_type400Subscription authType outside the accepted values (NONE, HMAC, BASIC, BEARER).no

Request signing (signed host)

CodeHTTPWhat happened and what to doRetryable
body_hash_mismatch400The received body does not match the signed X-Content-SHA256.no
credential_not_yet_active403Freshly issued credential still inside its grace period. Wait for the activeFrom returned at issue time.no
invalid_ip400Invalid address or CIDR in the IP allowlist. Use IPv4/IPv6 or CIDR notation (203.0.113.10/32).no
invalid_public_key422The PEM is not an EC P-256 or RSA ≥ 2048 public key. A private key PEM is rejected with its own message.no
ip_allowlist_derived409The tenant has delegated credentials: its IP allowlist is derived from them and does not accept manual edits.no
ip_allowlist_required422allowedIps missing, empty, longer than 20 entries, containing 0.0.0.0/0 or a prefix wider than /24.no
ip_not_allowed403The request came from an IP outside the credential’s allowlist.no
last_public_key409The credential’s last usable key cannot be retired.no
public_key_limit_reached409Public key limit per credential reached. Retire one before adding another.no
public_key_required422Issuing a delegated credential requires publicKeyPem.no
request_signature_invalid403The signature does not match the key announced in kid. Compare the canonical string via POST /v1/security/signature/verify; also check that the ES256 signature is `R\\
request_signature_required403Missing X-Request-Signature, X-Request-Timestamp or X-Content-SHA256.no
request_timestamp_skew403X-Request-Timestamp outside the 300s window. Sync the server clock (NTP).no
scope_not_delegable403The scope requested for the child credential is not held by the delegating credential, or is not delegable.no
signature_required403The request reached client.api.corpx.com without the signature headers. Edge block, before the token is looked at.no
signed_host_required403A delegated credential was used on tenant.api.corpx.com. Retry on client.api.corpx.com, signed.no
unknown_kid403The kid is not among the credential’s active keys: it was retired, or it is still inside the 18h grace period.no

Account security (locks, PIN and limits)

CodeHTTPWhat happened and what to doRetryable
acting_document_required400Send X-Acting-Document (the operator’s CPF) together with the PIN.no
cashout_locked423The account holder blocked money from leaving this account (cashoutBlocked).no
cashout_outside_hours403Outside the time window configured by the account holder. The message states the window.no
cashout_source_ip_not_allowed403The operation’s source IP is outside cashoutSourceIps. Integrators must pass the end user’s real IP in X-Acting-Ip.no
credential_not_found404The clientId in the path does not exist in this tenant.no
hash_error500Internal failure while protecting the PIN. Retry; if it persists, contact support.yes
invalid_cashout_hours422cashoutHours with an invalid HH:MM, start equal to end, or an unknown timezone.no
limits_unavailable503The limits service did not respond. Retry shortly.yes
no_pending_change404There is no scheduled loosening to cancel or bring forward.no
pin_invalid403Wrong PIN. The attempt was counted.no
pin_locked4236 wrong attempts: unlocking requires resetting the PIN.no
pin_not_found404No PIN registered for the given operator.no
pin_not_set403This operator has no PIN registered on this account.no
pin_required428The credential requires X-Acting-Document and X-Transaction-Pin on cashout operations.no
pin_temporarily_locked4293 wrong attempts: locked for 15 minutes. The Retry-After header carries the seconds.no
weak_pin422PIN outside the policy (6–12 digits, no repetition, sequence, short pattern or birth date).no