{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-products/hosted-checkout/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition"]},"type":"markdown"},"seo":{"title":"Refunds and Chargebacks","description":"Official Banxa API documentation – on-ramp and off-ramp transfers with identity verification and compliance.","llmstxt":{"title":"Banxa Developer Documentation","description":"Integrate crypto-fiat exchange with Banxa's licensed infrastructure: payments, KYC, compliance, and settlement handled. 150+ countries, 45 global licences.","details":{"content":"Two integration products: **Banxa Native API** for partners who manage their own KYC and want full UX control (headless, HMAC server-to-server, no Banxa-hosted screens); **Banxa Hosted Checkout** for partners who want Banxa to handle KYC and payments (three paths: Referral URL, API, or React Native SDK). Both use the same sandbox and production environments at `https://api.banxa-sandbox.com` and `https://api.banxa.com`.\n\n## When to use Banxa\n\nReach for Banxa when a product needs to let people **buy crypto with fiat or sell crypto for fiat** without the partner holding money-transmitter or VASP licences. Banxa is the licensed counterparty: it takes the payment, runs compliance, and delivers the asset. Typical fits are wallets, exchanges, dApps, gaming platforms and fintech apps adding an on-ramp or off-ramp.\n\nPick the product by who owns KYC:\n\n- **Banxa Native API** - the partner already runs its own KYC and wants no Banxa screens at all. Headless, HMAC-signed server-to-server, partner owns the entire interface. Needs a backend. Days to weeks to integrate.\n- **Banxa Hosted Checkout** - the partner does not want to run KYC. Banxa handles identity, payment and delivery in its own flow, reached by redirect, embedded iFrame, or React Native SDK. No backend required for the referral path. Hours to days to integrate.\n- **Legacy API** - existing integrations only. Do not start here.\n\nBanxa is not the right tool for crypto-to-crypto swaps, custody or wallet infrastructure, or for any flow where the partner wants to settle funds itself.\n\n## Constraints\n\n- **Authentication**: HMAC credentials must be stored server-side only, never expose in frontend, mobile, or client-side code. HMAC is required for all Native API calls and for KYC sharing in Hosted Checkout; `x-api-key` is used for all other Hosted Checkout endpoints.\n- **`externalCustomerId`**: Required on every buy and sell order. Use a stable opaque identifier, never PII.\n- **`identityReference`**: Must remain constant for the same user across all requests. Must not contain PII. If you attempt to create an identity for an email that already exists, you will receive a 422 / code 81, so retrieve the existing record rather than retrying creation. Use `GET /eapi/v0/identities/{identityReference}?email=user@example.com` to look up the real `identityReference` linked to an email.\n- **`quoteId`**: Only supported by `POST /eapi/v0/ramps` (bank transfer). The React Native SDK and Embedded Payment Button do not accept a `quoteId`, so use indicative pricing (`GET /eapi/v0/price`) for SDK and Embedded Payment Button flows.\n- **Quotes**: Indicative prices are not rate-locked, so refresh close to order creation to minimise rate drift. Locked quotes (`GET /eapi/v0/quote`) expire after approximately 3 minutes and are only valid for bank transfer ramp creation.\n- **Eligibility gate**: Never create a ramp or invoke the SDK when `paymentReady` is `false`. Always check eligibility and satisfy all requirements before payment execution.\n- **Webhooks**: Verify all inbound webhook signatures with HMAC-SHA256 before processing. Return HTTP 200 immediately and process asynchronously.\n- **Product selection**: Banxa Native is for partners who manage their own KYC. Banxa Hosted Checkout is for partners who do not do KYC. These are separate products with separate flows: do not mix endpoints across products.\n- **SDK scope**: The React Native SDK has no `banxa.customerIdentity` module. Identity and KYC are handled through the Native API only. `primerCallbacks` and `primerSettings` are Native context only and must not be referenced in Hosted Checkout integrations.\n- **Payment method naming**: Never use \"eAPI\" or \"EAPI\" as a product name. The correct name is \"Banxa Native API\". The URL path prefix `/eapi/` is correct and should not be changed.\n"}}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For the complete documentation index, see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://docs.banxa.com/llms.txt"},"children":["llms.txt"]},". Append ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":[".md"]}," to any page URL for its markdown version."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"refunds-and-chargebacks","__idx":0},"children":["Refunds and Chargebacks"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["How refunds are triggered, who is in the flow of funds, and where liability sits."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"refunds","__idx":1},"children":["Refunds"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A refund happens when the customer cancels the transaction, when Banxa cancels due to unacceptable risk (fraud, AML, sanctions), or when enhanced verification is not completed by the customer. High-risk cancellations are immediate; incomplete-verification cases can have a delay between payment and refund."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Refunds are always for the full amount, returned to the original payment method. Partial refunds are not supported."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["You are never in the flow of funds: the customer paid Banxa, Banxa refunds the customer, and no crypto is delivered."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["You are notified via a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cancelled"]}," webhook when Banxa initiates a refund. How quickly the customer sees funds returned depends on their card issuer."]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Crypto is irrevocable"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Once crypto has been delivered on-chain, the transaction cannot be reversed. Refunds only apply to orders cancelled before delivery."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For fraud-flagged cancellations, no funds are captured; the customer may see a temporary authorisation hold that reverts per their bank's normal timeframe."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"chargebacks","__idx":2},"children":["Chargebacks"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Banxa, as merchant of record, handles and contests chargebacks. Partners are not in the flow of funds and do not absorb chargeback costs. "]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A customer can raise a chargeback on an accepted payment within 120 days."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Customers cannot contest a payment that Banxa declined or refunded."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["There is no chargeback webhook or API endpoint. When a chargeback is processed you receive a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cancelled"]}," webhook and a note appears in the merchant dashboard. Periodic chargeback CSV reports are available on request."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The disclaimer requirement exists to reduce chargebacks: see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/hosted-checkout/docs/getting-started/required-disclaimer"},"children":["Third-Party Disclaimer"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"common-reasons-orders-fail","__idx":3},"children":["Common reasons orders fail"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Bank or issuer decline, including insufficient funds"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Failed 3DS card authentication"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Name or date-of-birth mismatch against the ID document, routing the order to manual review"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Fraud, PEP, or sanctions screening"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Order expiry: payment not received within the payment window"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When escalating a failed order to support, provide the order key and, if possible, the customer email."]}]},"headings":[{"value":"Refunds and Chargebacks","id":"refunds-and-chargebacks","depth":1},{"value":"Refunds","id":"refunds","depth":2},{"value":"Chargebacks","id":"chargebacks","depth":2},{"value":"Common reasons orders fail","id":"common-reasons-orders-fail","depth":2}],"frontmatter":{"title":"Refunds & Chargebacks | Banxa Docs","description":"How Banxa refunds work, who is in the flow of funds, chargeback liability, and common reasons orders fail.","seo":{"title":"Refunds and Chargebacks"}},"lastModified":"2026-08-20T06:59:29.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/products/hosted-checkout/docs/reference/refunds-and-chargebacks","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}