{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-payments/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Errors & rate limits","description":"Start today using our public API to power your next project."},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"errors--rate-limits"},"children":["Errors & rate limits"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["One envelope, stable codes, and the retry rules that keep you out of trouble."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"the-error-envelope"},"children":["The error envelope"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Every error carries the same four fields — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["message"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["code"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["statusCode"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["requestId"]},". ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["errors"]}," is added ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["only"]}," on field-level validation failures. Branch on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["statusCode"]}," first, then refine on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["code"]},": it is always there, so you never have to test for its presence."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"message\": \"Validation failed.\",\n  \"code\": \"validation_failed\",\n  \"statusCode\": 400,\n  \"requestId\": \"7186288b-2f41-4c6a-9d85-1b0e3a7c5f92\",\n  \"errors\": [\n    { \"field\": \"amount\", \"code\": \"invalid_format\", \"message\": \"amount has an invalid format.\" }\n  ]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Each ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["errors"]}," entry is exactly ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["field"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["code"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["message"]},". The field ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["code"]}," is one of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["required"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["invalid_format"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["unsupported_value"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["out_of_range"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["unknown_field"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["duplicate"]}," — and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["unknown_field"]}," means what it says: a field that isn't part of the request is rejected, not ignored. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["duplicate"]}," means a record with the same value already exists, for example a beneficiary with the same name, bank country and bank currency."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["On the beneficiary and payment-method endpoints, a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["422 validation_failed"]}," rebuilds ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["errors[]"]}," with a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["field"]}," that names where the problem is, such as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["bankingInformation.accountNumber"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["contactInformation.emailAddress"]},". The 422 on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v1/beneficiaries"]}," for a name field that doesn't match ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["entityType"]}," is the exception: it lists those fields in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["errorData.errors[]"]}," instead."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Keep the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["requestId"]},". It's the fastest way for Jeeves support to find what happened, and it echoes your own ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-Request-Id"]}," when you send one."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["message"]}," is localized and may be reworded without notice — never branch on it."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"status-codes-and-stable-codes"},"children":["Status codes and stable codes"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"Status"},"children":["Status"]},{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"code"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["code"]}]},{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"Meaning"},"children":["Meaning"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["400"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["invalid_request_body"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["The body could not be parsed at all — malformed JSON, or a JSON value that isn't an object. No ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["errors"]}," array, because nothing could be read."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["400"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["validation_failed"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["The body parsed, but field values were rejected. Offending fields listed in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["errors"]},". Also returned for an unrecognised query parameter."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["401"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["unauthorized"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Missing, invalid, or expired bearer token. Get a new token and retry."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["403"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["forbidden"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Token lacks the scope, client certificate missing/invalid, or source IP not allowlisted."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["404"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["payment_not_found"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Unknown payment, or one belonging to another customer (existence is never confirmed)."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["404"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["beneficiary_not_found"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Unknown, deleted, malformed or other-customer beneficiary. The body is identical in every case, and it is never a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["403"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["409"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["idempotency_conflict"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Same ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Idempotency-Key"]},", different body. Nothing created."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["409"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["payment_method_already_exists"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["The beneficiary already has a payment method on this rail. The check uses the payment method only, not the account number."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["422"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["quote_expired"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Quote consumed or expired with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["onQuoteExpiry: fail"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["422"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["validation_failed"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Well-formed but invalid for the corridor — purpose code not in the corridor's list, or a beneficiary detail failing corridor rules."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["422"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["insufficient_funds"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Balance below quoted amount plus fees."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["422"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["invalid_schedule"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["quoteId"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["scheduledDate"]}," together, or a scheduled payment without ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["amount"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["422"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["unsupported_pair"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["No rate for this currency pair on the selected account type."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["422"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["not_cancelable"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["The payment can't be cancelled: it is past ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["in-review"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["scheduled"]},", or it was already cancelled."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["429"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rate_limit"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Limit exceeded. ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Nothing was executed, not even partially."]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["500"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["service_error"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Unexpected error."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Note the token endpoint is the one exception: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /oauth/token"]}," errors follow the OAuth 2.0 format (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["error"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["error_description"]}," per RFC 6749), not this envelope."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Scope note: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["409"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["422"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["429"]}," are Payments API semantics. The cards/boletos/webhooks endpoints in the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/apis"},"children":["main reference"]}," return the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["400/401/403/404/500"]}," subset documented there, and their auth failures carry the older ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["code: AuthError"]}," rather than ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["unauthorized"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["forbidden"]}," — branch on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["statusCode"]}," if you call both APIs."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"rate-limits"},"children":["Rate limits"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Every response carries the window state:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"Header"},"children":["Header"]},{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"Meaning"},"children":["Meaning"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-RateLimit-Limit"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Requests allowed in the current window (e.g. 300/minute per credential)."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-RateLimit-Remaining"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Requests left."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-RateLimit-Reset"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Unix time the window resets."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Retry-After"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["On ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["429"]}," only: seconds to wait."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["On ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["429"]},", back off exponentially ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["with jitter"]},", honoring ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Retry-After"]},". Webhook deliveries to you don't count against your limits."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"retry-rules"},"children":["Retry rules"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"Situation"},"children":["Situation"]},{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"Do"},"children":["Do"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["429"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Wait ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Retry-After"]},", back off with jitter, retry. Nothing was executed."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Timeout or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["5xx"]}," on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v1/payments"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Retry with the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["same"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Idempotency-Key"]}," — the safe path. A new key risks a duplicate payment."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Timeout or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["5xx"]}," elsewhere"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Idempotent reads are safe to retry as-is."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["401"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Request a new token, retry once."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["409 idempotency_conflict"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Don't retry — use a fresh key for what is genuinely a new payment."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["422"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Don't blind-retry — the request was rejected deterministically; fix the cause (new quote, valid purpose code, funded account)."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Timeout on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v1/payments/{paymentId}/cancel"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v1/beneficiaries"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v1/payment-methods"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["These calls are ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["not idempotent"]}," and read no ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Idempotency-Key"]},". A retry after a success returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["422 not_cancelable"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["422"]}," with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["errors[].code: duplicate"]},", or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["409 payment_method_already_exists"]},". Read the resource first to see whether the first call went through."]}]}]}]}]}]},"headings":[{"value":"Errors & rate limits","id":"errors--rate-limits","depth":1},{"value":"The error envelope","id":"the-error-envelope","depth":2},{"value":"Status codes and stable codes","id":"status-codes-and-stable-codes","depth":2},{"value":"Rate limits","id":"rate-limits","depth":2},{"value":"Retry rules","id":"retry-rules","depth":2}],"frontmatter":{"seo":{"title":"Errors & rate limits"}},"lastModified":"2026-11-04T03:42:09.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/payments/payment-flow/errors-and-limits","userData":{"isAuthenticated":false,"teams":["anonymous"]}}