Cards
Create card
https://api.firstleeward.com/v0/cardsCreates a new virtual or physical card for a user. User must have approved application; account must be active. The phone number used for OTP verification is taken from the user record; the card is issued against the user's verified identity. On corporate employee projects there is no cardholder KYC, and the card is issued under the employee's company instead.
Authorizations
Authorizationstring · headerrequiredAPI key as Bearer token, e.g. Bearer YOUR_API_KEY
Headers
Leeward-Versionenum<string>requiredAPI version (YYYY-MM-DD). Available option: 2026-09-18
Idempotency-KeystringrequiredUnique key for safely retrying this request. Up to 255 characters; we recommend a UUIDv4. The first request executes and its response is cached; subsequent requests with the same key replay the cached response (24h retention).
Body
application/json
userIdstring<uuid>requiredID of the user to create the card for
accountIdstring<uuid>requiredID of the account to link the card to
typestringrequiredCard type (VIRTUAL or PHYSICAL)
VIRTUALPHYSICAL3dsChallengeMethodstringdefault: "SMS"3DS challenge verification method. Defaults to SMS if not specified.
SMSWEBHOOKcardDesignIdstringCard design to use. Defaults to the project default design when not specified. Throws error when default is not configured and no value is passed here.
Response
200Card resource
idstring<uuid>requiredUnique card identifier
accountIdstring<uuid>requiredID of the account the card belongs to
userIdstring<uuid>requiredID of the user the card belongs to
typestringrequiredCard type (VIRTUAL or PHYSICAL)
VIRTUALPHYSICALcardDesignIdstringrequiredDesign the card was issued with. For a physical card this is the design on the card record, which can differ from the one produced: the plastic is made from the design chosen on the shipment, returned as cardDesignId per card on the shipment endpoints.
statusstringrequiredCurrent card status
ACTIVEFROZENBLOCKEDEXPIREDblockReasonobject | nullrequiredBlock reason details (only present when status is BLOCKED)
Show child attributes
typestringrequiredMachine-readable code for the block reason
CLIENT_REQUESTEDSUSPECTED_FRAUD_CVVSUSPECTED_FRAUD_EXPIRYSUSPECTED_FRAUD_PINFRAUD_ALERT_CONFIRMEDOTHERmessagestringrequiredHuman-readable message for the block reason
blockLiftablebooleanrequiredWhether the current block can be lifted with the unblock endpoint. false for blocks that need First Leeward support, and for a card that holds no block.
frozenbooleanrequiredWhether the card is frozen. A block hides a freeze from status, so a card that is BLOCKED with frozen: true returns to FROZEN once the block lifts.
cardholderNamestringrequiredCardholder name displayed on card
last4stringrequiredLast 4 digits of the card number. Use reveal endpoint for full details.
3dsChallengeMethodstringrequired3DS challenge verification method
SMSWEBHOOKphysicalCardStatusstring | nullrequiredPhysical lifecycle of the card (production + shipping + activation rollup). Defaults to NOT_ORDERED for newly created physical cards. null for virtual cards, which have no physical lifecycle.
NOT_ORDEREDREQUESTEDIN_PRODUCTIONPRODUCTION_COMPLETEDIN_TRANSITOUT_FOR_DELIVERYDELIVEREDACTIVATEDCANCELEDDELIVERY_FAILEDEXCEPTIONcreatedAtstringrequiredISO 8601 timestamp of creation
updatedAtstringrequiredISO 8601 timestamp of last update
400Response for status 400
Option 1 · UserApplicationNotApprovedError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 2 · CardholderCountryNotSupportedError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 3 · CardCompanyNotFoundError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 4 · CardCompanyNotActiveError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 5 · CardAccountNotFoundError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 6 · AccountOwnerMismatchError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 7 · AccountNotActiveError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 8 · AccountNotEligibleError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 9 · CardDesignNotActiveError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 10 · DefaultCardDesignNotConfiguredError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 11 · CardCompanyNotReadyForIssuanceError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 12 · CardEmailDomainNotValidatedError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequired404Response for status 404
Option 1 · CardUserNotFoundError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 2 · CardDesignNotFoundError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequired409Response for status 409
Option 1 · CardQuotaExceededError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 2 · AuthorizationEndpointRequiredError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequired503Service is temporarily unavailable. Please retry.
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequired