At a glance
Path 🅰️ — Email + eID (self-service)
Use when the person doesn’t exist in OpenCard yet — typical for new employees joining a client.Create
What happens
- Card holder + PDPC record created
- 📧 Email queued — subject:
We need your approval. - Link:
https://{env}/accounts/{accountId}/pdpcs/{pdpcId}/sign/{token} - User reads PDPC → checks consent → identifies with eID
- On eID success → identity linked →
card_holder.identifiedwebhook - Retroactive transactions dispatched (everything since last card invoice)
- New transactions flow in real time
Timeline
Path 🅱️ — identity_id (instant)
Use when the person already exists in OpenCard on this TPA — e.g. they have corporate cards from the issuer, or were onboarded to another organization under the same TPA.
An identity = a physical person (SSN-linked via eID). They may already have cards attached. You skip the email entirely and link directly.
Step 1: List identities on the TPA
Response (per identity):
Step 2: Create card holder with identity_id
What happens
- Card holder created
- Immediately linked to existing identity →
identify()called - 🔔
card_holder.identifiedwebhook fires right away - 🚀
SendRetroactiveWebhookEventsJobdispatched — all historical transaction states for their cards on this TPA are replayed to your webhook - New transactions flow in real time from this point
Timeline
Validation rules
identity_idmust exist- Identity must belong to a client linked to this TPA — you can’t use identities from a different client’s TPA
- Either
emailoridentity_idrequired (not both required, but one must be present) reference_idmust be unique within the organization (create and update)
Which path should I use?
Client already receives transactions from the issuer another way? See Current card issuer integration.
Webhooks to handle
Your integration should key off
card_holder.identified as the moment transactions are expected.
Update / delete
Update
reference_id is required. email is optional — omit it to keep the current value (including null for identity-linked holders without email).
Change reference ID only (no PDPC email if already identified / no email on record):
PDPC email is resent only when all of: PDPC unsigned or no
identity_id, skip_pdpc_email is false, and the card holder has an email address.
reference_id must be unique within the organization. Duplicate → 400 Bad Request with message Card holder reference … already exists (same as create).
List card holders
q, reference_id, where_ssn_set, where_signed_pdpc, where_email_delivered).
Response (per item):

