Skip to main content

Error catalog

Every error the TensorRail API returns nests under a top-level error key and carries a stable ERR_NNNN code. code is the field to branch on — it is the only one present everywhere.

There are two envelopes, and which you get depends on the endpoint:

EndpointsBody
/payments, /refunds, /customers, /disputes{ "error": { "type", "message", "code" } }, plus context fields such as field_name where they apply
/v1/* (reporting, account, API keys){ "error": { "code", "slug", "message", "retriable", "user_action", "doc_url", "request_id" } }

So slug, retriable, user_action and doc_url are available on the /v1/* surface and should not be relied on when handling a failed payment or refund. Branch on code and you are correct on both. This page documents the code values you meet on the common integration paths, grouped by family. For the family semantics, the wire shape, and a handling recipe, see Error intelligence.

Treat it as a reference rather than a closed set: it grows as the platform does. Because every error body carries its own code, a code you have not met before is still handleable from the response alone — read the band for the family semantics, and look the code up here for whether re-attempting can succeed.

FamilyBandCodes documented here
Authentication and authorizationERR_1xxx19
Request validationERR_2xxx16
Business stateERR_3xxx45
Payment and declineERR_4xxx70
Server and rate limitsERR_5xxx16
Account policy and complianceERR_6xxx12
Branch on code, never on message

Codes are stable contract; message strings are for humans and logs and can change. When a code is retriable, always retry with the same Idempotency-Key.

Authentication and authorization (ERR_1xxx)

Credential and session problems. Fix your configuration; never retry these blindly.

CodeMeaningTypical cause / what to do
ERR_1001Missing API keyNo Authorization: Bearer <key> header on the request. Include your API key.
ERR_1002Invalid API keyThe key was mistyped, truncated, or revoked. Check the key; rotate it if you suspect compromise.
ERR_1003Expired API keyThe key passed its expiry. Rotate the key from your dashboard.
ERR_1004Insufficient scopeThe key lacks the scope this operation needs. Use a key with the necessary scopes or update the key's scopes.
ERR_1005Merchant account inactiveYour account is not active. Contact support to reactivate it.
ERR_1006IP not allowedThe request came from an IP that is not on your allowlist. Add the originating IP in the dashboard.
ERR_1007Session expiredYour dashboard session timed out. Sign in again.
ERR_1008Session invalidThe dashboard session could not be validated. Sign in again.
ERR_1009Confirmation requiredThis operation needs a confirmation token. Initiate the confirmation flow before retrying.
ERR_1010Invalid confirmationThe confirmation token did not validate. Request a fresh confirmation token.
ERR_1011UnauthorizedThe Authorization header is present but not usable (wrong scheme or empty token). Verify your credentials.
ERR_1012ForbiddenThe operation is not permitted with the current credentials. Use credentials with the required permissions.
ERR_1013Invalid credentialsSign-in email or password is wrong. Verify and try again.
ERR_1014Invalid verification codeThe two-factor code did not validate. Generate a fresh code from your authenticator app.
ERR_1015Invalid basic authenticationBasic auth credentials on this endpoint are wrong. Verify the credentials and retry.
ERR_1018Unauthorized for this operationA generic authorization failure. Verify credentials and the required scope.
ERR_1019Two-factor verification requiredYou invoked a sensitive action without recent two-factor verification. Provide a fresh 6-digit authenticator code and retry.
ERR_1020Two-factor window expiredYour step-up verification aged out. Re-verify with a fresh authenticator code and retry.
ERR_1021Two-factor proof invalidThe step-up verification proof did not validate. Re-verify with a fresh authenticator code and retry.

Request validation (ERR_2xxx)

Your call was malformed. Fix the request; the field context in the error body tells you where.

CodeMeaningTypical cause / what to do
ERR_2001Missing required fieldA required field is absent. The error indicates which field; add it.
ERR_2002Invalid formatA field value has the wrong format. Reformat per the API reference; the error includes the expected format.
ERR_2003Value out of rangeA field value falls outside the allowed range. Adjust it to the documented range.
ERR_2004Unsupported currencyThe currency is not supported for this request. Use a supported currency from the API reference.
ERR_2005Amount too smallThe amount is below the minimum. Increase it to meet the minimum.
ERR_2006Amount too largeThe amount exceeds the maximum. Reduce it or split the transaction.
ERR_2007Invalid JSONThe request body is not valid JSON. Verify your serialization.
ERR_2008Payload too largeThe request body exceeds the size limit. Reduce the payload.
ERR_2009Unsupported API versionThe Tensorrail-Version header names a version that is not supported. Use a supported version.
ERR_2010Unsupported combinationThe parameter combination is not supported together. Adjust per the API reference.
ERR_2011Invalid thresholdA threshold value is invalid. Keep it within the documented range.
ERR_2012Method not allowedThe HTTP method is wrong for this endpoint. Use the method the API reference documents.
ERR_2013Password policy violationThe password does not meet policy. Choose one meeting the documented requirements.
ERR_2014Unsupported query combinationThe query parameters cannot be combined this way. Adjust per the API reference.
ERR_2029Unprocessable requestThe request is well formed but cannot be processed as submitted. Review it against the API reference.
ERR_2030Not implementedThe operation is not available. Check the API reference for supported operations.

Business state (ERR_3xxx)

The request was valid but the resource's current state does not allow it. Usually a logic bug or a race on your side; retrieve the resource and branch on its actual state rather than looping.

CodeMeaningTypical cause / what to do
ERR_3001Insufficient balanceThe available balance does not cover the operation. Top up or reduce the requested amount.
ERR_3002Duplicate idempotency keyYou reused an Idempotency-Key with a different request body on POST /v1/refunds. Almost always a key-generation bug; use a fresh key or retry with the original body. Only the /v1/* surface compares bodiesPOST /payments and POST /refunds replay the original resource instead of raising this.
ERR_3003Payment not foundThe payment ID does not exist on this account. Verify the ID.
ERR_3004Invalid state transitionThe resource cannot move from its current state to the requested one, for example capturing a payment that is not awaiting capture. Retrieve the resource and branch on its status.
ERR_3005Refund exceeds captureThe refund amount is larger than the captured amount. Reduce it to at most the captured amount.
ERR_3006Settlement below minimumThe settlement amount is under your threshold. Wait for the balance to reach the threshold or update it in settings.
ERR_3007Key already rotatedThe API key was already rotated. Use the latest key, or check rotation history in the dashboard.
ERR_3008Rotation cooldown activeYou rotated recently and the cooldown has not elapsed. Wait, or use emergency revoke. The response includes retry_after_seconds.
ERR_3009Already provisionedThe resource already exists from a prior provisioning. Use the existing resource.
ERR_3010Provisioning requiredAccount provisioning has not completed. Finish setup from the dashboard before this operation.
ERR_3011Merchant not foundThe merchant identifier does not resolve. Verify it.
ERR_3012Resource not foundThe referenced resource does not exist. Verify the identifier; the error message says which resource.
ERR_3013Invalid fee scheduleThe fee configuration for this operation is invalid. Contact support if you cannot resolve it from settings.
ERR_3014Retry not supportedThis payment method cannot be retried in its current state. Create a new payment instead.
ERR_3015Confirmation expiredThe confirmation token aged out. Request a fresh one.
ERR_3016Customer not foundThe customer identifier does not resolve. Verify it.
ERR_3017Refund not foundThe refund identifier does not resolve. Verify it.
ERR_3018Duplicate resourceThe resource already exists. Use the existing one; the error message says which resource collided.
ERR_3019Mandate already activeThe customer has an active mandate. Cancel it before creating a new one.
ERR_3020Mandate validation failedThe mandate parameters did not validate. Review them against the API reference.
ERR_3021Payment not succeededThe operation requires a succeeded payment. Wait for the payment to complete first.
ERR_3022Key already revokedThe key was already inactive. Treat as a no-op.
ERR_3023Emergency revoke needs confirmationEmergency key revocation requires the typed confirmation value in the request body. Include it.
ERR_3024Invalid payment IDThe payment ID is not valid for this operation. Verify the ID and the operation context.
ERR_3025Maximum refund count reachedNo further refunds can be issued on this payment.
ERR_3026Payment route disabledThe route this request needs is disabled. Enable it from the dashboard or use a different route.
ERR_3027Ledger posting in progressA ledger transaction is still being posted. Retry after a short delay; contact support if it persists.
ERR_3028Ledger transaction not foundThe referenced ledger transaction does not exist. Verify the parent payment or ledger identifiers.
ERR_3029Ledger operation already completedThe ledger operation was already applied. Treat as a duplicate; no action needed.
ERR_3032Refund in flightA refund with this idempotency key is already processing. Wait, then retry with the same key to fetch the result.
ERR_3033Refund payment not foundThe payment you are refunding was not found on this account. Verify the payment ID.
ERR_3034Payment not refundableOnly successfully captured payments can be refunded. Check the payment's state.
ERR_3035Refund exceeds remaining balanceThe refund amount is larger than what is still refundable on this payment. Reduce it.
ERR_3039Refund rejectedThe refund was rejected during processing. Review the payment state and try again, or contact support with the refund identifier.
ERR_3040Settlement cycle not foundThe settlement cycle identifier does not resolve. Verify it or contact support.
ERR_3041Settlement request not foundThe settlement request identifier does not resolve. Verify it.
ERR_3042Settlement request in wrong stateThe operation is not valid for the request's current state. Refresh the status and try again, or contact support.
ERR_3043Settlement quote expiredThe quote aged out before acceptance. Request a fresh quote from support.
ERR_3044Quote acceptance must be merchant-sideThis acceptance step must be completed by your merchant account. Sign in with a merchant user to accept or reject the quote.
ERR_3045Saved wallet not foundThe saved wallet address does not exist. Select a valid saved wallet or add a new one.
ERR_3046Wallet chain mismatchThe wallet's chain does not match the request. Use a wallet on the selected chain.
ERR_3047Settlement requests not enabledSelf-service settlement is not enabled for your account yet. Contact support to initiate settlement during onboarding.
ERR_3048Settlement corridor not configuredThe corridor configuration for this settlement is incomplete. Contact support to complete it.
ERR_3050Refund delivery failedThe refund could not be delivered to the payment processor after repeated attempts. Contact support with the refund identifier.
ERR_3051Mode mismatchA test key touched a live resource or vice versa. Check which key your environment loaded; test and live data never mix.
Settlement codes are catalogue entries, not a merchant surface

ERR_3040ERR_3048 belong to settlement, which is not self-served on the merchant API: /v1/settlements* and /v1/payouts return 404. Anything past reading your balance is arranged with your account manager. These codes are listed for completeness of the catalogue; you will not meet them on the endpoints this documentation covers. See Balances.

Payment and decline (ERR_4xxx)

Collection outcomes from the issuer, network, or acquirer layer. These usually appear as error_code on a payment with status: "failed", not as API request errors. Route them to your checkout's retry experience, not to your alerting.

Card declines and card data (4001 to 4019)

CodeMeaningTypical cause / what to do
ERR_4001Card expiredAsk the customer for a current card.
ERR_4002Card reported lostDecline retry on this card. Request a different payment method.
ERR_4003Card reported stolenDecline retry on this card. Flag repeat customers for fraud review.
ERR_4004Card restrictedThe card cannot be used for this transaction type. The customer should contact their issuer or try a different card.
ERR_4005Invalid card numberHave the customer re-enter the card number.
ERR_4006Invalid CVCHave the customer re-enter the security code.
ERR_4007Invalid expiryHave the customer re-enter the expiry date.
ERR_4008Do not honorThe issuer declined without a specific reason. The customer should contact their issuer or pay another way.
ERR_4009Pickup cardThe issuer asked for the card to be retained. Do not retry; treat as a security event.
ERR_4010Card blockedThe customer should contact their card issuer.
ERR_4011Incorrect PINHave the customer re-enter the PIN.
ERR_4012Card velocity exceededThe card hit its transaction-frequency limit. Retry in an hour or use a different card.
ERR_4013Account closedThe card account is closed. Request a different payment method.
ERR_4014Invalid accountThe card account is invalid. The customer should verify details with their issuer.
ERR_4015Card network not supportedThe customer should use a different card brand or payment method.
ERR_4016Issuer requires callThe issuer needs manual authorization. The customer should contact their issuer, then retry.
ERR_4017CVC check failedHave the customer verify the CVC; decline retry if it still fails.
ERR_4018Address check failedHave the customer verify the billing address with their issuer.
ERR_4019Postal code check failedHave the customer verify the ZIP or postal code.

Funds and limits (4020 to 4032)

CodeMeaningTypical cause / what to do
ERR_4020Insufficient fundsThe customer should retry with a card that has sufficient balance.
ERR_4021Transaction count limit reachedThe card hit its allowed count for the period. Retry tomorrow or use a different card.
ERR_4022Amount over per-transaction limitSplit into smaller transactions or use a different card.
ERR_4023Amount below minimumIncrease the amount or use a different payment method.
ERR_4024Currency limit reachedThe card hit its limit in this currency. Retry later or use a different currency.
ERR_4025Daily limit reachedRetry after 24 hours or use a different card.
ERR_4026Monthly limit reachedRetry next month or use a different card.
ERR_4027Velocity limit exceededDeclined for high-frequency activity. Wait an hour or use a different payment method.
ERR_4028Cumulative volume limit reachedContact support to raise limits.
ERR_4029Floor limit exceededThe transaction exceeds your configured floor limit. Contact support if this needs adjustment.
ERR_4030Issuer unavailableThe issuer is temporarily down. Retry in 30 seconds.
ERR_4031Issuer timeoutThe issuer did not respond in time. Retry in 15 seconds.
ERR_4032Network route unavailableNo route to the card network right now. Retry in 1 minute.

Fraud signals (4040 to 4048)

CodeMeaningTypical cause / what to do
ERR_4040High-risk fraud blockA high-confidence fraud signal blocked the transaction. Do not retry; investigate the customer or order.
ERR_4041Flagged for reviewA medium-confidence signal. Step up to 3DS or verify with the customer before retrying.
ERR_4042Blocklist matchThe card matched a fraud blocklist. Do not retry; treat as confirmed fraud.
ERR_4043Fraud velocity rule matchedHigh-frequency activity matched a fraud rule. Wait an hour or step up authentication.
ERR_4044Geolocation mismatchThe location does not match the card's country of issue. If legitimate, have the customer authenticate via 3DS and retry.
ERR_4045High device riskThe device scored high for fraud risk. Step up to 3DS or verify the customer's identity.
ERR_4046High IP riskThe IP address scored high for fraud risk. Step up to 3DS or verify the customer.
ERR_4047Merchant fraud filterYour own fraud filter blocked the transaction. Review the filter configuration if this was a false positive.
ERR_4048Authentication failed in fraud checkCardholder authentication failed during fraud verification. Retry with a fresh challenge.

Authentication and 3-D Secure (4060 to 4068)

CodeMeaningTypical cause / what to do
ERR_4060Authentication requiredStrong customer authentication is needed. Initiate a 3DS challenge and retry.
ERR_40613DS authentication failedThe cardholder failed the challenge. Ask them to try again or use a different card.
ERR_40623DS not supportedThe card is not enrolled. The customer should use a different card or contact their issuer to enroll.
ERR_40633DS timeoutThe cardholder did not complete the challenge in time. Retry the challenge.
ERR_40643DS protocol errorA technical issue interrupted authentication. Retry in 30 seconds.
ERR_4065Issuer authentication unavailableThe issuer's authentication service is down. Retry in 30 seconds.
ERR_4066Issuer declined authenticationThe issuer refused to authenticate the cardholder. The customer should contact their issuer.
ERR_4067SCA requiredStrong Customer Authentication is required under PSD2. Initiate an SCA challenge, typically 3DS2.
ERR_4068Challenge flow requiredFrictionless 3DS is unavailable. Initiate a challenge-flow authentication.

Processing, routing, and async rails (4080 to 4099)

CodeMeaningTypical cause / what to do
ERR_4080Temporary errorRetry after a brief delay.
ERR_4081Processing errorAn error occurred while processing. Retry in 30 seconds.
ERR_4082Processor timeoutThe payment processor did not respond in time. Retry in 15 seconds.
ERR_4083Processor unreachableThe payment processor could not be reached. Retry in 1 minute.
ERR_4084Service unavailableThe payment service is temporarily unavailable. Retry in 2 minutes.
ERR_4085Currency not supported on routeUse a different currency or payment method.
ERR_4086Country not supportedThe customer's country is not supported for this transaction. Offer a different payment method.
ERR_4087Method not supported on routeThis payment method is not available on the selected route. Try a different method or contact support.
ERR_4088Route misconfiguredThe payment route has a configuration problem. Contact support.
ERR_4089Route disabledThe route is currently disabled. Contact support to enable it, or use a different route.
ERR_4090No route availableNo suitable payment route right now. Retry in 1 minute; contact support if persistent.
ERR_4091Acquirer unreachableThe acquirer network could not be reached. Retry in 1 minute.
ERR_4092Acquirer declinedThe customer should contact their issuer or pay another way.
ERR_4093Request rejected upstreamThe request format was rejected during processing. Contact support; this usually indicates an integration issue.
ERR_4094Generic declineThe payment was declined without a more specific reason. The customer should contact their issuer or pay another way.
ERR_4095UnderpaidThe customer transferred less than the requested amount (async rails where the customer controls the amount). Reconcile per your policy: refund the partial amount, request the difference, or accept as final.
ERR_4096OverpaidThe customer transferred more than the requested amount. Refund the difference per your policy.
ERR_4097Confirmation timeoutThe payment was not confirmed within the expected window, including expired async invoices. Ask the customer to start a new payment if still required.
ERR_4098Payment rail unavailableThe rail itself is temporarily down, for example a network outage or a closed clearing window. Retry in 5 minutes or route through a different method.
ERR_4099Unclassified declineDeclined for an unspecified reason. Contact support if it persists; the failure will be reviewed and reclassified.

Server and rate limits (ERR_5xxx)

Platform-side failures and throttling. These are safe to retry with the same Idempotency-Key; alert if they persist.

CodeMeaningTypical cause / what to do
ERR_5003Upstream timeoutAn upstream service timed out. Retry in 15 seconds.
ERR_5004Database errorA storage operation failed. Retry in 30 seconds; contact support if persistent.
ERR_5005Upstream unavailableAn upstream service is unavailable. Retry in 1 minute.
ERR_5006Service not configuredThe payment service is not configured for this operation. Contact support; this is a configuration issue.
ERR_5007Idempotency check timeoutThe idempotency check timed out. Retry in 5 seconds with the same key.
ERR_5008Intent persistence failedThe payment intent could not be persisted. Retry in 30 seconds.
ERR_5009Audit logging failedRetry; contact support if persistent.
ERR_5010Sync failedA sync operation failed. Retry in 30 seconds.
ERR_5096Ledger imbalance detectedAn internal consistency check failed for this transaction. Contact support with the request identifier.
ERR_5097Integrity check failedA data integrity check failed. Retry; contact support if persistent.
ERR_5098Configuration errorA configuration problem on the account or platform. Contact support.
ERR_5099Internal errorAn unexpected internal error. Retry; contact support if persistent.
ERR_5101Rate limit exceededYou exceeded the request rate. Retry after the period in the Retry-After header.
ERR_5102Quota exceededYour account quota was exceeded. Retry after Retry-After, or contact support to raise the quota.
ERR_5103Sensitive operation rate limitedSensitive operations carry lower rate limits than general traffic. Wait before retrying.
ERR_5999Unknown errorAn unknown failure, already logged for review. Contact support.

Account policy and compliance (ERR_6xxx)

Account-level policy gates: verification, blocklists, uploads, and compliance records.

CodeMeaningTypical cause / what to do
ERR_6001KYB requiredBusiness verification must complete before this operation. Complete KYB from the dashboard.
ERR_6002KYB pendingVerification is under review. Wait; contact support if pending more than 5 business days.
ERR_6003BlocklistedThe entity is on a blocklist. Contact support to dispute the entry.
ERR_6004Velocity limit exceededAn account velocity limit was hit. Wait before retrying, or contact support to raise the limit.
ERR_6005File too largeThe uploaded file exceeds the size limit. Reduce it and re-upload.
ERR_6006Invalid file typeThe file type is not permitted. Re-upload using a supported type.
ERR_6101Compliance certificate not foundThe certificate identifier does not resolve. Verify it.
ERR_6102Invalid certificate typeUse a supported certificate type from the API reference.
ERR_6103Invalid certificate state transitionThe certificate cannot move to the requested state. Check its current state.
ERR_6104Certificate expiredThe certificate is expired or its dates are invalid. Renew or correct the dates.
ERR_6105Duplicate compliance recordA matching record already exists. Use it or modify the request.
ERR_6106Certificate validation failedReview the certificate fields against the API reference.

TensorRail, Limassol, Cyprus.