📄 Guide
A physical card comes from an activated (ACTIVE) virtual card upgraded in place through “virtual to physical”. The PAN, expiry, CVV2 andcardId all stay the same throughout the upgrade — queries return the original virtual card’s details before activation and take effect as the physical card after it — so you never need to replace the card or migrate any targets after upgrading. For the card-state background see State machines and freezing.
The four-step chain:
The shipping address hangs off the employee’s record; it is read when the virtual-to-physical application is accepted and locked as a snapshot — later address changes do not affect cards already in production.
① Upgrade application: virtual to physical
Request parameters
Response data
Request and response examples
Error codes
Related webhooks:
CARD_SHIPPED (dispatched) / CARD_ACTIVATED (activated).
② Tracking production and shipping
Request parameters
Response data
Response examples (shipped / not shipped)
CARD_INVALID — the card does not exist / does not belong to your partnership.
③ Activating the physical card
Request parameters and response
Request parameters:cardId (String, required, ≤32; the card id). Card-scoped endpoints locate by cardId alone and never carry organizationId. This is an action endpoint: data is null.
Error codes
Related webhook:
CARD_ACTIVATED.
④ Setting the PIN
The PIN and the identity-check fields are AES-GCM encrypted with your SK before upload — the same crypto contract as
retrieve-secure-card, in the opposite direction (for the contract see Retrieving secure card details: AES/GCM/NoPadding, 128-bit tag, keyed with the SK).Request parameters
Request and response examples
cardId and success (Boolean, whether the PIN was set):
Error codes
Next steps
- No upgradable virtual card yet? Issue one first: Applying for a virtual card
- Card states and the freeze capability domains: State machines and freezing

