Skip to main content

Alternative payment methods

APMs split into two operational categories from a code standpoint: Within wallet APMs there’s a further split: native (you tokenize directly via TagadaPay’s vault) vs through-processor (Stripe Payment Request, Airwallex Wallet, etc.). This page explains all three paths.

Supported methods

Beyond cards, TagadaPay supports the following methods. Availability per store depends on the connected processor and the merchant’s enabled config — always confirm with paymentSetup.get(storeId). Cards & bank debits Alternative payment methods
Managed = methods we run on your behalf when TagadaPay is your acquirer — no processor credentials of your own required.

Mental model: method × provider

Every APM in the system has two coordinates: The same method can ship through different providers, with different code paths. Example: a merchant might offer Apple Pay through native tokenization in one country, and through Stripe Payment Request in another. You discover this via paymentSetup.get(storeId):
Your client code reads the provider field to decide which browser SDK (if any) to load.

Wallet APMs — native path

This is the simplest, most efficient path. The customer’s wallet talks directly to TagadaPay’s vault. No third-party processor SDK loads in the browser.

Apple Pay (native)

Server side it’s identical to a card charge — just pass paymentMethod: 'apple_pay':

Google Pay (native)

Both wallet primitives are session-free. They never call TagadaPay’s backend during the sheet/tokenize phase — only Apple/Google + BasisTheory. The first TagadaPay call happens on your server when you create the payment instrument. This is why partners can use them without a checkoutSession.

Wallet APMs — through-processor (Stripe Express)

When paymentSetup exposes apple_pay:stripe or google_pay:stripe, the wallet runs through Stripe’s Payment Request API. You load Stripe.js, Stripe handles the wallet UI and tokenization, and you pass the resulting Stripe PaymentMethod to TagadaPay for the charge.
Server-side, the charge call references the Stripe PaymentMethod via the processor:

When does each path apply?

A merchant’s paymentSetup may include several of these at once. Render the buttons accordingly:

Redirect APMs

For Klarna, Afterpay, iDEAL, Bancontact, TWINT, BLIK, Affirm, EPS, PayPal: the browser does nothing beyond clicking. All processor differences are absorbed server-side.

Initiate from your server

Hand the redirect URL to the browser

The customer completes the APM flow on the processor’s page (Klarna, iDEAL, etc.), then is sent to your returnUrl. The final payment status comes through a webhook (payment.succeeded / payment.failed).

Same method, different processors

The exact same client code initiates Klarna whether the merchant’s paymentSetup routes through Stripe, Airwallex, or our native APM processor:
The processor decision is data-driven (read from paymentSetup), not code-driven. Your code just passes through the processorId.

Discovering what each merchant has enabled

Use paymentSetup.get(storeId) to fetch the full method × provider config for a merchant. See Payment setup config for the full shape.

Recurring with APMs

Pass recurring: true when calling payments.process for any APM that supports it — we’ll set the right processor flags so the issuer/wallet records the consent.

Quick decision table