When to activate
Activate once the cardholder has the card in hand. The activate endpoint accepts cards inDELIVERED, IN_TRANSIT, or OUT_FOR_DELIVERY status — couriers report delivery on different schedules, and the cardholder often holds the card before our physicalCardStatus updates to DELIVERED. The 6-digit code in the mailer is the security boundary; no one can activate without it. You cannot activate a card that has not been shipped, has been canceled, or is already active.
Activation flow
Cardholder enters the code
Prompt the cardholder for the 6-digit activation code from the card mailer. Authenticate them in your app first (login, biometric, in-app PIN) so a stolen mailer alone cannot activate a card.
Submit the code
Call Activate physical card with the
cardId and activationCode. The endpoint requires an Idempotency-Key header, so retries are safe.On success the endpoint returns 204 No Content and the card’s physicalCardStatus flips to ACTIVATED on the next GET /cards/:id.Confirm to the cardholder
The card is ready for physical terminals. ATM withdrawals and contactless payments work immediately. The card’s online (
ECOMMERCE) usage is independent of activation, see 3D Secure for the e-commerce flow.Lost activation codes
The mailer carries the only copy of the code the cardholder ever sees. If they lose it, retrieve the same code through the API and forward it via your own secure channel. Call Get activation code for a physical card with thecardId. The response is the same 6-digit string the cardholder originally received.
Use this endpoint only for lost-code recovery. The standard flow is for the cardholder to read the code off the mailer.
Best practices
- Authenticate the cardholder before activation. The mailer code alone is not strong enough. Combine it with your own login or biometric check.
- Gate
GET /cards/:id/activation-codecarefully. This endpoint returns the secret with no cardholder verification on our side. Verify identity through your own channel before calling it, and deliver the code only over channels you control. - Retry safely. Activation is naturally idempotent —
physicalCardStatus = ACTIVATEDis sticky. A retry of a successful activate returns400 CARD_CANNOT_BE_ACTIVATEDwithreason: 'ALREADY_ACTIVATED', which is still an unambiguous “card is active” signal. Partners may pass anIdempotency-Keyfor their own bookkeeping, but it is not required. - Treat the code as a secret. Never log activation codes, never expose them in URLs, and never echo them back in error responses.
- Do not poll for activation. The
204response is authoritative. The card’sphysicalCardStatusflips toACTIVATEDon the nextGET /cards/:id.