Skip to main content
TPA = Transaction Processing Authorization. It’s the legal agreement that says “this company’s card transaction data is allowed to flow through OpenCard to the EMS.” Without a signed TPA, no transactions.
New here? Start with the full customer onboarding flow — billing, organization, webhook, and card holders around this TPA step.

TPA lifecycle states


Step 1: Create TPA

Response 201:

Org number validation


Before adding signatories, query the public registry:
Example response:
Each entry in signature_combinations is one valid signing group — everyone listed in that group must sign for the combination to be satisfied.
The registry does not always list who may sign. Many organization types — foundations, associations, and similar entities — are not fully registered as companies in public records across the Nordic countries. The response may include company details but an empty signature_combinations array. In that case OpenCard cannot suggest signatories; your client must decide internally who is authorized to sign and you add them as signatories manually.

Step 3: Add signatories → email fires 📧

Only email is required. phone_number is stored but not returned in API responses. What happens immediately:
  1. token = random 40-char string generated
  2. Signatory record created with signed: false
  3. Email queued via issuer-specific mailer:
    • Subject: Authorise TPA for {tpaName}
    • Template: TPA signing invitation
    • Link: https://{env}/accounts/{accountId}/tpas/{tpaId}/sign/{token}
    • Language: English (hardcoded for signatory emails)
The signatory does not need an OpenCard account. The token in the URL is their auth.

Update / delete signatory

Reminder emails

If a signatory has not signed after 7+ days, OpenCard may send a reminder email automatically.

Step 4: Signatory signs with eID ✍️

This is a web flow, not an API call. The signatory:
  1. Clicks email link → GET /accounts/{accountId}/tpas/{tpaId}/sign/{token}
  2. Sees TPA legal text (markdown rendered)
  3. Clicks “Sign” → eID widget loads
  4. Completes signing with national eID — see eID Signing
  5. eID result is posted back → POST .../sign/{token}
When all required signatories have signed, OpenCard verifies signing rights against signature_combinations from the registry (stored on the TPA at creation) for Sweden and Norway. If no signatory combinations were available from the registry, OpenCard cannot verify automatically — the TPA goes through manual review before signatures_verified is set.

Step 5: TPA fully signed → stuff happens

When signing is complete:
  1. 📄 Signed PDF generated with all signatory eID approval blocks
  2. 📧 Email to each signatory with signed PDF attached
  3. 📧 Card issuer notified (signed PDF delivered)
  4. 🔔 tpa.signed webhook fires on orgs that subscribed
Webhook payload:

Download signed PDF via API


Step 6: Activation

TPA moves to activated when the TPA is confirmed — triggered on the issuer side, not something you call directly. Until activated, transactions won’t flow even if TPA is signed.

Delete TPA

If TPA was activated → issuer termination email sent, cascades delete organizations/webhooks/cardholders linked to it.
Only delete TPAs you’re sure are unused. Activated TPA deletion is destructive.

TPA embed plugin (optional)

OpenCard ships a JS wizard (ocTPA) for self-service TPA onboarding on your site. It collects issuer selection, signatory combos, billing info — then calls your onDataSend callback with the payload for you to hit the APIs. See Plugins.