Skip to main content

📄 Guide

A physical card comes from an activated (ACTIVE) virtual card upgraded in place through “virtual to physical”. The PAN, expiry, CVV2 and cardId 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:
Virtual-to-physical card pathVirtual-to-physical card path
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

Upgrades an ACTIVE virtual card to a physical card under the same number. How the card ships depends on whether shippingAddressId is sent. Without it the card ships individually to the card’s holder / custodian, with the address and mailing phone number taken from that employee. With it the card ships in bulk to the address that id points to, and cards accepted on the same day under the same id go out together as one batch.

Request parameters

Response data

Request and response examples

Error codes

Related webhooks: CARD_SHIPPED (dispatched) / CARD_ACTIVATED (activated).

② Tracking production and shipping

Queries the physical card’s production and shipping progress plus the tracking number.

Request parameters

Response data

Response examples (shipped / not shipped)

Error code: CARD_INVALID — the card does not exist / does not belong to your partnership.

③ Activating the physical card

Activates the physical card; the prerequisite is that the card has shipped. The endpoint is idempotent — repeated calls return the same success.

Request parameters and response

Request parameters: companyId (String, required, ≤36; the requesting company ID) and cardId (String, required, ≤32; the card id). This is an action endpoint: data is null.

Error codes

Related webhook: CARD_ACTIVATED.

④ Setting the PIN

Sets the physical card’s PIN; the prerequisite is that the physical card has been activated.
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

The response data carries cardId and success (Boolean, whether the PIN was set):

Error codes

Next steps