{"templateId":"markdown","versions":[{"version":"v0-beta","label":"Beta (v0)","link":"/products/native-api/docs/how-it-works/supported-psp","default":true,"active":true,"folderId":"e4cb5a06"}],"sharedDataIds":{"sidebar":"sidebar-products/native-api/@v0-beta/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Supported Payment Methods","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## 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"},"hide":false,"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"supported-payment-methods","__idx":0},"children":["Supported Payment Methods"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Banxa Native supports bank transfers, cards, and native wallets. Different methods are executed through different layers of the integration."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"reference-table","__idx":1},"children":["Reference table"]},{"$$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":{"data-label":"Payment method"},"children":["Payment method"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Execution"},"children":["Execution"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Interac (Canada)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Native API — headless"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["PayID (Australia)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Native API — headless"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["SEPA (EU / EEA)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Native API — headless"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["ACH (US)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Native API — headless"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Visa, Mastercard"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["SDK native payment sheet"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Apple Pay"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["SDK native payment sheet"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Google Pay"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["SDK native payment sheet"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["iDEAL, Klarna, PayPal"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["External redirect (cannot use webview)"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Prepaid cards are not supported."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"why-bank-transfers-and-cards-are-handled-differently","__idx":2},"children":["Why bank transfers and cards are handled differently"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Bank transfers are executed directly via the Native API — no card data is involved, so there are no PCI compliance requirements on the partner side."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Card payments, Apple Pay, and Google Pay cannot be handled through the API alone without PCI compliance, which is a significant certification burden that most partners do not hold. The Banxa SDK integrates with Primer to process card data securely in a certified environment, meaning partners can offer native card and wallet payments without needing to achieve PCI compliance themselves."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"payment-methods-requiring-provider-redirects","__idx":3},"children":["Payment methods requiring provider redirects"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Some payment methods — such as ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["iDEAL"]},", ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Klarna"]},", and ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["PayPal"]}," — cannot be completed inside a webview and will fail if attempted. Instead, the partner must redirect the user outside the app to the provider (via the system browser or the provider's own app) for authentication and payment."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Because the user is taken fully outside the app, there is no automatic return. Partners should account for this when designing the post-payment UX — for example, displaying a confirmation or summary screen with a link back to the app. The exact return mechanism is to be confirmed."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"next-steps","__idx":4},"children":["Next steps"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/native-api/docs/guides/foundations"},"children":["Integration Guide"]}," — full walkthrough with API calls and SDK examples."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/native-api/docs/sdk/sdk-reference"},"children":["React Native SDK Reference"]}," — SDK configuration and methods."]}]}]},"headings":[{"value":"Supported Payment Methods","id":"supported-payment-methods","depth":1},{"value":"Reference table","id":"reference-table","depth":2},{"value":"Why bank transfers and cards are handled differently","id":"why-bank-transfers-and-cards-are-handled-differently","depth":2},{"value":"Payment methods requiring provider redirects","id":"payment-methods-requiring-provider-redirects","depth":2},{"value":"Next steps","id":"next-steps","depth":2}],"frontmatter":{"title":"Supported Payment Methods","description":"Payment methods supported by Banxa Native and how each is handled.","seo":{"title":"Supported Payment Methods"}},"lastModified":"2026-06-01T06:52:05.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/products/native-api/docs/how-it-works/supported-psp","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}