Cards
List cards
https://api.firstleeward.com/v0/cardsRetrieves a paginated list of cards. Use cursor-based pagination. Filter by accountId to get cards for a specific account. Pass includeTotalCount=true to also get the number of cards matching the filters.
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
Query Parameters
limitintegerdefault: 20Maximum number of items to return (1-100, default: 20)
cursorstringOpaque cursor for pagination. Pass nextCursor from previous response to get next page.
idstring<uuid>Filter cards by exact ID match
statusstring[]Filter cards by status (comma-separated)
ACTIVEFROZENBLOCKEDEXPIREDtypestring[]Filter cards by type (comma-separated)
VIRTUALPHYSICALphysicalCardStatusstring[]Filter cards by physical card lifecycle status (comma-separated). Only meaningful for PHYSICAL cards.
NOT_ORDEREDREQUESTEDIN_PRODUCTIONPRODUCTION_COMPLETEDIN_TRANSITOUT_FOR_DELIVERYDELIVEREDACTIVATEDCANCELEDDELIVERY_FAILEDEXCEPTIONaccountIdstring<uuid>[]Filter cards by account ID(s) (comma-separated)
userIdstring<uuid>[]Filter cards by user ID(s) (comma-separated)
includeTotalCountstringWhen true, the response includes totalCount, the number of items matching the filters across all pages. Counting adds work to the request, so pass it only on the first page and only when you need it.
Response
200Response for status 200
itemsobject[]requiredShow child attributes
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
nextCursorstring | nullrequiredCursor for next page, or null if no more items
totalCountintegerNumber of items matching the filters across all pages, ignoring cursor and limit. Present only when includeTotalCount=true.
