Who does what
You own the UX. OpenCard owns signing pages, identity verification, and data delivery.
Big picture
Phase 1 — Client setup
This is what the client walks through in your product (same order as the optional ocTPA plugin). You collect choices in the UI, then create the OpenCard resources.1. Choose card program
card_issuer_id for the TPA.
Enabling new issuers on the account is one-time platform setup — not part of this per-client wizard. → Quickstart
2. Choose products
What OpenCard should deliver for this client. Stored as flags on the billing profile when you create it:| Field | Meaning | Typical UX |
|---|---|---|
product_transaction | Real-time transaction states to your webhooks | Usually always on |
product_digital_receipt | Digital receipts from the merchant network | Optional toggle |
product_aland_index | Environmental impact estimates | Optional toggle |
3. Invoice details (for your OpenCard bill)
Collect how you (the EMS) want this client represented on the invoice OpenCard sends you:- Invoice email (
email_invoice) - Your reference (
your_reference_invoice) - Legal name / org number / address (often from public records)
4. Create the TPA (company authorisation)
A TPA (Transaction Processing Authorisation) is the legal agreement that this company allows card transaction data from the chosen card program to flow through OpenCard to your EMS. Look up who is allowed to sign:signature_combinations when present so the client picks a valid signing group. Collect name + email for each person who will sign (or allow manual entry when the registry has no combinations).
You create the TPA and signatories in the next step. Full walkthrough → TPA flow · eID signing
5. Configure the client
When the client confirms steps 1–4, create the OpenCard resources (same payload shape the ocTPA plugin returns inonDataSend):
Organization body — link the TPA and billing you created.
reference_id is your internal client ID (returned on every webhook):
active=true and events can be delivered.
→ Billing · Organization · Webhook setup · TPA flow
Client setup is complete when the TPA is signed (ideally activated), the organization exists with billing_id + tpa_id, and the webhook is active.
Phase 2 — Cardholder setup
Goal: each person whose card spend you want is identified in OpenCard.
OpenCard handles PDPC email + eID. You handle status in your UI (
card_holder.identified, card_holder.signed.pdpc).
→ Card holder onboarding · Model: Card holder · eID signing
Cardholder is onboarded when you receive card_holder.identified — then expect transactions (including a retroactive batch).
Phase 3 — Live
Once card holders are identified and the TPA is activated:- Card issuer pushes transaction states to OpenCard
- OpenCard POSTs to your organization webhook (
card.transaction.*) - Enrichment may follow:
receipt.fetched, true VAT, line items, environmental impact
Ordered checklist
Do this per client (after your account + OAuth client exist):Build it yourself vs embed plugin
The plugin mirrors steps 1–4 in the UI and gives you billing / TPA / signatory data in
onDataSend. Step 5 (organization + webhook) and card holders stay in your integration.
Deep dives in this section
Models (what each entity is): Billing · Organization · TPA · Card holder

