Skip to main content

Partner Quick Start

Time: ~10 minutes · Difficulty: Beginner · You will get: a successful test payment

What you’re going to build

By the end you’ll have a payment_xxx row visible in the TagadaPay dashboard and the test funds reflected on the settlement balance account (for MoR sub-merchants, that’s the partner’s shared balance — see Payouts, balances & fees).

Prerequisites

Test mode first. Append ?mode=test or use the test partner key (tp_sk_test_xxx) for the entire flow below. Once you’ve charged a test card successfully, switch to live keys.

1. Install the two SDKs

That’s the entire dependency footprint for partner S2S.

2. Provision a sub-merchant (server-side)

Payfac partners only. tpas.create() returns 403 payfac_required if your partner book has no payfac white-label. CRM-only partners: create the merchant with partners.crm.merchants.create, then submit applications or use embed onboarding — see Accounts.
Idempotent. Calling create() again with the same externalRef returns the existing TPA — safe to retry on network errors.
See Processing provisioning for KYB requirements and merchant portal policy. Need the CRM control plane too? See CRM provisioning.

3. Mint a Processing Key for that TPA (server-side)

The secret is only ever returned once. Store it in your secret manager immediately. If you lose it, you must revoke and mint a new Processing Key.
The Processing Key is scoped to one TPA. Even if it leaks, an attacker can only act on merchant_42’s processing — never on your other merchants.

4. Tokenize the card (client-side, in the browser)

PCI scope-out. The raw card number, expiry, and CVC never touch your server. The tagadaToken is a single-use vault reference — safe to log, safe to store. See @tagadapay/core-js.

5. Charge (server-side, with the Processing Key)

That’s the complete loop. Tokenize browser-side, charge server-side, no checkout session anywhere.

What you just built


Common next steps

Add Apple Pay / Google Pay

The wallet APMs use the same primitives in core-js, plus a small native sheet step. Native vs Stripe routing is explained on the APM page.

Add Klarna / iDEAL / Bancontact

Redirect APMs need no client tokenization — you call payments.process with paymentMethod: 'klarna' and a returnUrl, then redirect the customer to the URL we hand back.

Add 3DS where required

For European cards or high-risk transactions, run a 3DS challenge between tokenization and charge.

Discover what each merchant has enabled

Use paymentSetup.get(storeId) to fetch the method × provider config and render the right buttons per merchant. Get storeId from stores.list({ accountId }).