📄 Guide
Issuing always starts with a virtual card:POST /open-api-corp/card/v1/apply returns an cardApplyId on acceptance; risk checks and card creation run fully asynchronously, with the final state pushed via the webhooks CARD_CREATED / CARD_REJECTED and GET /open-api-corp/card/v1/query-apply as the polling fallback. Once the card is created, use the cardId for single-card and list queries. For where this chain sits among the card pages, see Managing cards.
Applying for a virtual card
Request parameters
The four cardProfileId types and their subjectType pairing
A card type is the combination of two orthogonal dimensions: the holder (who the card is issued to) × the balance mode (which account the money comes from). For the full card-type introduction see Overview · Card types.Per regulatory requirements, a company card must designate a current employee of the company as its custodian. The custodian is who gets contacted when something is wrong with the card, and who completes verification when a purchase triggers a 3DS challenge.
Binding rules with ruleIds
Every rule inruleIds must simultaneously: exist, belong to the same company, and be ACTIVE; a rule that configures amount limits must share at least one currency with the card’s settlement currencies. The array must not contain duplicates — carrying the same rule twice is rejected outright (it is not silently deduplicated), so deduplicate before submitting.
Request examples
Response data and example
Error codes
Related webhooks:
CARD_CREATED / CARD_REJECTED.
Querying application progress
cardApplyId (String, required, ≤20; the card application ID).
Response data:
APPLY_NOT_FOUND — the application does not exist (or does not belong to your partnership).
Querying a single card
cardId (String, required, ≤20; the card ID).
Response data:
CARD_INVALID — the card does not exist / does not belong to your partnership / is not ACTIVE.
Listing cards
Response data: the paging envelope is
page (current page, Integer), pageSize (page size, Integer), total (total count) and result (the cards); each element of result carries exactly the same fields as the single-card query response above (cardId / panFirst6 / panLast4 / organizationId / subjectType / subjectId / cardProfileId / cardNetwork / cardProfileId / currency / status).
Next steps
- SHARED cards need bindable velocity rules before issuance: Setting spend limits
- Display the PAN and CVV2 once the card is created: Retrieving secure card details

