Why charges and payouts fail, and what to tell the customer.
When a charge or payout fails after Tanda accepted it, the webhook shows status: "failed" and Get transaction shows chargeStatus: "failed". The reason is in note, or in failureReason on payout webhooks.
Show these messages to your support team or customers, but don’t parse them in code. The wording can change. Use status to decide what happens next.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Tanda API","description":"Collect and send KES payments in Kenya through M-PESA, Airtel Money and bank transfer with one API.","colors":{"primary":"#0B1F4D","light":"#6CC9CC","dark":"#3B6FE0"},"logo":{"light":"https://mintcdn.com/tanda-6d92e4c8/WLzaE2tVNOoFC6-o/logo/light.png?fit=max\u0026auto=format\u0026n=WLzaE2tVNOoFC6-o\u0026q=85\u0026s=35d489d1621649859cab1ef6b1ea8a5e","dark":"https://mintcdn.com/tanda-6d92e4c8/WLzaE2tVNOoFC6-o/logo/dark.png?fit=max\u0026auto=format\u0026n=WLzaE2tVNOoFC6-o\u0026q=85\u0026s=b61b3cf9a11f1fd0a637a5ad77b6b1e4","href":"https://tandapay.io"},"favicon":"https://mintcdn.com/tanda-6d92e4c8/WLzaE2tVNOoFC6-o/favicon.png?fit=max\u0026auto=format\u0026n=WLzaE2tVNOoFC6-o\u0026q=85\u0026s=0a392b52e00f8aa03ee430ce436e9366","api":{"openapi":"api-reference/openapi.json","playground":{"display":"interactive"},"examples":{"languages":["curl","javascript","python","php"]}},"navbar":{"links":[{"href":"mailto:ceo@tandapay.ke","label":"Support"}]},"footer":{"links":[{"header":"Tanda","items":[{"label":"Dashboard","href":"https://app.tandapay.io"},{"label":"Support","href":"mailto:ceo@tandapay.ke"}]}]},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"tanda-6d92e4c8","hasAudioNarration":false,"actualSubdomain":"tanda-6d92e4c8","customDomains":["api.tandapay.io"],"gitSource":{"type":"github","owner":"estherkisachi","repo":"tanda-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":"","_id":"6ae2e03d44b99f76d5a41cbf"},"chroma":{"latestBuiltDeploymentHistoryId":"6ae2e6832a8fb241de752ff2","collectionId":"4330618d-ff21-409f-a7b5-517a1de76954","liveDeploymentHistoryId":"6ae2e6832a8fb241de752ff2","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae31e3b9757c0f6dff39bab","clientVersion":"0.0.4006","searchFilterCounts":[{"language":"default","tag":"API reference","count":26},{"language":"default","tag":"Guides","count":19},{"language":"default","tag":"Webhooks","count":7},{"language":"default","tag":"Reference data","count":5},{"language":"default","tag":"Beneficiaries","count":5},{"language":"default","tag":"Get started","count":5},{"language":"default","tag":"Accept payments","count":5},{"language":"default","tag":"Collections","count":4},{"language":"default","tag":"Go live","count":3},{"language":"default","tag":"Send payouts","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"guides/errors/transaction-errors","slug":"/guides/errors/transaction-errors","pageMetadata":{"title":"Transaction errors","description":"Why charges and payouts fail, and what to tell the customer.","href":"/guides/errors/transaction-errors"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Why charges and payouts fail, and what to tell the customer.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Heading,Table,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`When a charge or payout fails after Tanda accepted it, the webhook shows `,_jsx(_components.code,{children:`status: \"failed\"`}),` and `,_jsx(_components.a,{href:`/api-reference/endpoint/get-transaction`,children:`Get transaction`}),` shows `,_jsx(_components.code,{children:`chargeStatus: \"failed\"`}),`. The reason is in `,_jsx(_components.code,{children:`note`}),`, or in `,_jsx(_components.code,{children:`failureReason`}),` on payout webhooks.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Show these messages to your support team or customers, but don’t parse them in code. The wording can change. Use `,_jsx(_components.code,{children:`status`}),` to decide what happens next.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`the-customer-didn’t-respond-in-time`,children:`The customer didn’t respond in time`}),`\n`,_jsxs(_components.p,{children:[`Start a new charge with a new `,_jsx(_components.code,{children:`externalReference`}),`.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`Message`}),_jsx(_components.th,{style:{textAlign:`left`},children:`What it means`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`The user took too long to respond.`}),_jsx(_components.td,{style:{textAlign:`left`},children:`The customer didn’t act on the prompt before it expired.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`No response from user.`}),_jsx(_components.td,{style:{textAlign:`left`},children:`The prompt arrived but the customer didn’t act on it.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Transaction time out. / Request timed out.`}),_jsx(_components.td,{style:{textAlign:`left`},children:`The transaction or upstream request expired.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Payment request expired.`}),_jsx(_components.td,{style:{textAlign:`left`},children:`The request, link or session expired.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`the-customer-needs-to-do-something`,children:`The customer needs to do something`}),`\n`,_jsx(_components.p,{children:`Don’t retry until the customer has fixed the problem.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`Message`}),_jsx(_components.th,{style:{textAlign:`left`},children:`What it means`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`The user cancelled the request.`}),_jsx(_components.td,{style:{textAlign:`left`},children:`The customer declined the prompt.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`The user did not authorize the transaction.`}),_jsx(_components.td,{style:{textAlign:`left`},children:`The customer saw the prompt and chose not to approve.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`The User could not be reached.`}),_jsx(_components.td,{style:{textAlign:`left`},children:`The phone was off or out of coverage.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`The User cannot be reached by STK Push`}),_jsx(_components.td,{style:{textAlign:`left`},children:`The number can’t receive a payment prompt.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`The PIN entered is invalid or was not provided.`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Wrong, skipped or locked PIN.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`The user has another active USSD session.`}),_jsx(_components.td,{style:{textAlign:`left`},children:`The customer must close the other session first.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`The number is invalid.`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Fix the phone number format.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`not-enough-money`,children:`Not enough money`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`Message`}),_jsx(_components.th,{style:{textAlign:`left`},children:`What it means`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`The balance is insufficient for the transaction.`}),_jsx(_components.td,{style:{textAlign:`left`},children:`The customer’s wallet is too low. Ask them to top up or pay another way.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Low balance or payee limit reached or not allowed`}),_jsx(_components.td,{style:{textAlign:`left`},children:`The customer’s balance is low, or a limit applies.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`network-or-provider-problems`,children:`Network or provider problems`}),`\n`,_jsxs(_components.p,{children:[`Usually worth retrying after a short delay. Check `,_jsx(_components.a,{href:`/api-reference/endpoint/service-status`,children:`Service status`}),` before retrying in bulk.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`Message`}),_jsx(_components.th,{style:{textAlign:`left`},children:`What it means`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Mpesa system is busy.`}),_jsx(_components.td,{style:{textAlign:`left`},children:`M-PESA is under heavy load.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Provider service is temporarily unavailable.`}),_jsx(_components.td,{style:{textAlign:`left`},children:`The network or processor is down.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`We did not receive a response from the mobile network. Please check your phone for an STK prompt or try again.`}),_jsx(_components.td,{style:{textAlign:`left`},children:`No callback from the network. Ask the customer to check their phone.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Transaction could not be completed in time. Please try again and approve within 5 minutes.`}),_jsx(_components.td,{style:{textAlign:`left`},children:`Retry and ask the customer to approve promptly.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Connection was lost.`}),_jsx(_components.td,{style:{textAlign:`left`},children:`The upstream connection dropped.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Transaction failed due to system error`}),_jsx(_components.td,{style:{textAlign:`left`},children:`A generic provider failure.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Duplicate transaction detected. Please wait 2 minutes before retrying`}),_jsx(_components.td,{style:{textAlign:`left`},children:`An identical request was sent moments ago. Wait two minutes.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`recipient-or-account-problems`,children:`Recipient or account problems`}),`\n`,_jsxs(_components.p,{children:[`Fix the details before retrying. For payouts, `,_jsx(_components.a,{href:`/api-reference/endpoint/account-resolver`,children:`Account resolver`}),` catches most of these before money moves.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`Message`}),_jsx(_components.th,{style:{textAlign:`left`},children:`What it means`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`The recipient’s number is invalid or not registered for Mobile Money.`}),_jsx(_components.td,{style:{textAlign:`left`},children:`The recipient isn’t on M-PESA or Airtel Money.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`The sender’s number is invalid or not registered for Mobile Money.`}),_jsx(_components.td,{style:{textAlign:`left`},children:`The paying number isn’t registered.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Account does not exist.`}),_jsx(_components.td,{style:{textAlign:`left`},children:`The bank account wasn’t found.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Transfer to the specified shortcode is declined.`}),_jsx(_components.td,{style:{textAlign:`left`},children:`The paybill or till rejected the payment. Check the number.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Invalid transaction amount.`}),_jsx(_components.td,{style:{textAlign:`left`},children:`The amount is outside the allowed range.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`anything-else`,children:`Anything else`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`left`},children:`Message`}),_jsx(_components.th,{style:{textAlign:`left`},children:`What to do`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`left`},children:`Unknown error occurred.`}),_jsxs(_components.td,{style:{textAlign:`left`},children:[`Log the `,_jsx(_components.code,{children:`transactionId`}),` and contact `,_jsx(_components.a,{href:`mailto:ceo@tandapay.ke`,children:`support`}),`.`]})]})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Transaction errors","description":"Why charges and payouts fail, and what to tell the customer.","href":"/guides/errors/transaction-errors"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"The customer didn’t respond in time","slug":"the-customer-didn’t-respond-in-time","depth":2,"children":[]},{"title":"The customer needs to do something","slug":"the-customer-needs-to-do-something","depth":2,"children":[]},{"title":"Not enough money","slug":"not-enough-money","depth":2,"children":[]},{"title":"Network or provider problems","slug":"network-or-provider-problems","depth":2,"children":[]},{"title":"Recipient or account problems","slug":"recipient-or-account-problems","depth":2,"children":[]},{"title":"Anything else","slug":"anything-else","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"tanda-6d92e4c8","siteName":"Tanda API","title":"Transaction errors - Tanda API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-29T05:58:45.648Z","originalFileLocation":"guides/errors/transaction-errors.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Why charges and payouts fail, and what to tell the customer.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Tanda API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/tanda-6d92e4c8/GWHYk96m1oPSKHkP/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/tanda-6d92e4c8/GWHYk96m1oPSKHkP/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/tanda-6d92e4c8/GWHYk96m1oPSKHkP/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/tanda-6d92e4c8/GWHYk96m1oPSKHkP/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/tanda-6d92e4c8/GWHYk96m1oPSKHkP/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/tanda-6d92e4c8/GWHYk96m1oPSKHkP/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/tanda-6d92e4c8/GWHYk96m1oPSKHkP/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/tanda-6d92e4c8/GWHYk96m1oPSKHkP/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/tanda-6d92e4c8/GWHYk96m1oPSKHkP/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Transaction errors - Tanda API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Why charges and payouts fail, and what to tell the customer.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Tanda API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://api.tandapay.io/guides/errors/transaction-errors\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://tanda-6d92e4c8.mintlify.app/_mintlify/api/og/v2?division=Go+live\u0026amp;title=Transaction+errors\u0026amp;description=Why+charges+and+payouts+fail%2C+and+what+to+tell+the+customer.\u0026amp;theme=38cd26a39b955f3038322f6a\u0026amp;signature=3dc9813f0e160badca7a1e2e0841531d8b6821b03d512d6aeda624e908adf5f9\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Transaction errors - Tanda API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Why charges and payouts fail, and what to tell the customer.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://tanda-6d92e4c8.mintlify.app/_mintlify/api/og/v2?division=Go+live\u0026amp;title=Transaction+errors\u0026amp;description=Why+charges+and+payouts+fail%2C+and+what+to+tell+the+customer.\u0026amp;theme=38cd26a39b955f3038322f6a\u0026amp;signature=3dc9813f0e160badca7a1e2e0841531d8b6821b03d512d6aeda624e908adf5f9\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/tanda-6d92e4c8/GWHYk96m1oPSKHkP/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Tanda API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0B1F4D\">\u003clink data-mint-head rel=\"canonical\" href=\"https://api.tandapay.io/guides/errors/transaction-errors\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/guides/errors/transaction-errors.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://api.tandapay.io/#organization\",\"name\":\"Tanda API\",\"url\":\"https://api.tandapay.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/tanda-6d92e4c8/WLzaE2tVNOoFC6-o/logo/light.png?fit=max\u0026auto=format\u0026n=WLzaE2tVNOoFC6-o\u0026q=85\u0026s=35d489d1621649859cab1ef6b1ea8a5e\"}},{\"@type\":\"WebSite\",\"@id\":\"https://api.tandapay.io#website\",\"name\":\"Tanda API\",\"url\":\"https://api.tandapay.io\",\"publisher\":{\"@id\":\"https://api.tandapay.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://api.tandapay.io/guides/errors/transaction-errors#webpage\",\"url\":\"https://api.tandapay.io/guides/errors/transaction-errors\",\"name\":\"Transaction errors\",\"description\":\"Why charges and payouts fail, and what to tell the customer.\",\"dateModified\":\"2026-10-29T05:58:45.648Z\",\"isPartOf\":{\"@id\":\"https://api.tandapay.io#website\"},\"breadcrumb\":{\"@id\":\"https://api.tandapay.io/guides/errors/transaction-errors#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://api.tandapay.io/guides/errors/transaction-errors#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Go live\",\"item\":\"https://api.tandapay.io/guides/testing\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Transaction errors\",\"item\":\"https://api.tandapay.io/guides/errors/transaction-errors\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://api.tandapay.io/guides/errors/transaction-errors#article\",\"headline\":\"Transaction errors\",\"name\":\"Transaction errors\",\"description\":\"Why charges and payouts fail, and what to tell the customer.\",\"url\":\"https://api.tandapay.io/guides/errors/transaction-errors\",\"mainEntityOfPage\":{\"@id\":\"https://api.tandapay.io/guides/errors/transaction-errors#webpage\"},\"dateModified\":\"2026-10-29T05:58:45.648Z\",\"publisher\":{\"@id\":\"https://api.tandapay.io/#organization\"},\"isPartOf\":{\"@id\":\"https://api.tandapay.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Tanda API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Tanda API","nav":{"global":null,"tabs":[{"tab":"Guides","groups":[{"group":"Get started","pages":[{"title":"Tanda API","href":"/introduction"},{"title":"Quickstart","href":"/quickstart"},{"title":"Authentication","href":"/guides/authentication"},{"title":"Environments","href":"/guides/environments"},{"title":"Kenya payment methods","href":"/guides/kenya-payment-methods"}]},{"group":"Accept payments","pages":[{"title":"Accepting payments","href":"/guides/collections/overview"},{"title":"Checkout","href":"/guides/collections/checkout"},{"title":"M-PESA and Airtel Money","href":"/guides/collections/mobile-money"},{"title":"Bank transfer","href":"/guides/collections/bank-transfer"},{"title":"Refunds","href":"/guides/collections/refunds"}]},{"group":"Send payouts","pages":[{"title":"Payouts","href":"/guides/payouts/overview"},{"title":"Sending payouts","href":"/guides/payouts/sending-payouts"},{"title":"Beneficiaries","href":"/guides/payouts/beneficiaries"}]},{"group":"Webhooks","pages":[{"title":"Webhooks","href":"/guides/webhooks/overview"},{"title":"Verify webhooks","href":"/guides/webhooks/verify-signatures"},{"title":"Events and payloads","href":"/guides/webhooks/events"}]},{"group":"Go live","pages":[{"title":"Testing","href":"/guides/testing"},{"title":"API errors","description":"HTTP status codes and errorCode values for rejected requests.","href":"/guides/errors/api-errors"},{"title":"Transaction errors","href":"/guides/errors/transaction-errors"}]}]},{"tab":"API reference","pages":[{"title":"API reference","href":"/api-reference/introduction"}]}]},"title":"Transaction errors - Tanda API","buildId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","deploymentId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","dynamics":[],"chunks":[]}