Card Product Discovery and Issuance Preparation
This guide explains how to identify card product capabilities, then create the cardholder and complete issuance preparation. Once preparation is ready, continue with the Card Issuance Guide.
Identify the Product Before PreparingCard capabilities are returned in the
issuanceobject byGET /cards/bins.Products with
requiresPreparation=falsecan proceed directly to issuance. Products withrequiresPreparation=truemust complete the preparation steps in this guide before issuance.For physical cards,
flowandfulfillmentModesdescribe different aspects of issuance:
flowdefines the card issuance API flow.fulfillmentModesdefines how the physical card is fulfilled.For c_015, both virtual and physical cards use
flow=standard. Physical cards supportmerchant_stockandplatform_deliveryfulfillment modes.
Position in the Flow
flowchart TD
A["List card products"] --> B["Identify card form and capabilities"]
B --> C["Create or reuse cardholder"]
C --> D{"requiresPreparation?"}
D -- "true" --> E["Complete preparation"]
E --> F["isPrepared=true"]
D -- "false" --> G["Skip preparation"]
F --> H["Proceed to issuance"]
G --> H
H --> I{"Card form and fulfillment mode"}
I -- "Virtual card" --> J["POST /cards"]
I -- "Physical: merchant_stock" --> K["POST /cards"]
I -- "Physical: platform_delivery" --> L["Quote → POST /cards"]
Step 1: Identify the Card Product
Call List available card products, then inspect issuance.virtual or issuance.physical for the requested card form.
1.1 Determine the Issuance Flow
Value in issuance | Action |
|---|---|
null | This card form is not supported. Select another product. |
requiresPreparation=false | No independent preparation is required. Proceed to issuance. |
requiresPreparation=true | Complete Step 3 before issuance. |
flow=standard | Use POST /cards to create the card. |
flow=application | Use the application flow only when explicitly supported by the product's current API capabilities. |
Important: c_015 issuance rules
Both c_015 virtual and physical cards use flow=standard.
For c_015 physical cards, the fulfillment mode determines the subsequent process:
| Fulfillment mode | Description | Issuance process |
|---|---|---|
merchant_stock | The merchant already has physical cards in stock. | Create the card directly using POST /cards, then bind the physical card. |
platform_delivery | The platform arranges physical card fulfillment and delivery. | Obtain a quote, then create the card using POST /cards with the quoted application information. |
Check the product's returned fulfillmentModes to determine which fulfillment modes are supported. Do not assume every physical card product supports both modes.
1.2 Product ID Mapping
The product id returned by GET /cards/bins is used under different parameter names:
| API operation | Parameter |
|---|---|
| Preparation | cardChannelId |
| Physical card quote | cardChannelId |
| Create card | channelId |
These parameters refer to the same product ID.
Capabilities Do Not Reserve Funds or StockThe
issuanceobject describes supported capabilities and flows. It does not reserve funds, card stock, or bank approval.
Step 2: Create or Reuse the Cardholder
| Operation | Endpoint | Purpose |
|---|---|---|
| List | Get card holder list | Find an existing local cardholder. |
| Create | Create card holder | Create a local cardholder record. |
| Update | Update card holder | Correct local details using the returned id. |
Save the returned holder ID and pass it as cardHolderId in subsequent operations where required.
For c_015 enterprise holders, valid names, email, phone number, and calling code are required before preparation.
Creating a Local Holder Is Not Bank ApprovalA local cardholder record only stores your business data. It does not mean that the bank has approved the holder. For products requiring preparation,
isPrepared=trueindicates that the preparation requirement has been satisfied.The legacy
/card-holders/preparationendpoint is deprecated. Use/cards/preparationfor new integrations.
Step 3: Complete Issuance Preparation
Skip this step when the selected product and card form return requiresPreparation=false.
3.1 Query Preparation Readiness
Call Get card preparation.
| Parameter | Location | Required | Description |
|---|---|---|---|
dgp-entity-id | Header | No | Pass for child-account operations. |
cardChannelId | Query | Yes | Card product ID returned by GET /cards/bins. |
cardType | Query | No | virtual (default) or physical. |
cardHolderId | Query | No | Local cardholder ID. |
fulfillmentMode | Query | No | Physical card fulfillment mode: merchant_stock or platform_delivery, subject to product support. |
Fulfillment mode selection
For physical cards, specify the intended fulfillment mode when querying preparation:
merchant_stock: The merchant provides the physical card.platform_delivery: The platform arranges physical card fulfillment and delivery.
For c_015 physical cards, explicitly pass fulfillmentMode=merchant_stock when using merchant-owned stock. Do not rely on the default value.
If fulfillmentMode is omitted, the API default is platform_delivery. Always verify the selected mode against the product's supported fulfillmentModes.
preparation.requiredContextFields describes the context required for the preparation query, not the material fields to submit.
If missingContextFields is returned, provide the missing context and query again. No preparation record or form URL is created until the required context is complete.
Read steps, requirements, revision, nextAction, and form availability.
Identify steps using steps[].type together with steps[].id. The current steps[].type is holder; do not use form.type as a template identifier.
3.2 Submit Materials
| Method | Sequence |
|---|---|
| Hosted H5 | Call Get preparation form URL with type, id, and action=edit. Open the returned url immediately. The user submits the form in H5. Query preparation again afterward. |
| Direct API | Upload files using Upload preparation files (multipart/form-data) to obtain fileId. Then call Submit card preparation with type, id, revision, and the complete values snapshot. Query preparation again afterward. |
| Read-only preview | When canPreview=true, request a URL with action=preview. The URL is single-use and cannot be used to edit or submit materials. |
Request a Form URL Only When the User Is Ready to Open ItForm URLs are one-time resources that may expire as business state changes.
canEditreflects current editability, not a permanent permission.
3.3 Handle the Preparation Result
| Result | Next action |
|---|---|
isPrepared=true | Preparation is ready. Proceed to issuance. |
COMPLETE_FORM | Complete or correct the required materials while editing is allowed. |
WAIT / RETRY | Wait for retryAfter, then query again. Do not resubmit blindly. |
CONTACT_SUPPORT | Follow the feedback and contact technical support. Do not create replacement holders automatically. |
A Successful Submission Is Not ApprovalSubmission is a complete snapshot, not a
PATCHoperation. There is no API draft state. Successful submission only confirms that the materials were received; the final outcome depends on preparation readiness and review.
Changing local names or contact details does not update a bank-registered holder identity.
If a mismatch occurs, compare records through preview, restore the original local details, or contact technical support. Do not overwrite the bank identity automatically.
Stage Constraints
- The product
idiscardChannelIdin preparation and quote, andchannelIdin create card. Both represent the same product ID. - For c_015, both virtual and physical cards use
flow=standard. - Physical card fulfillment is selected through
fulfillmentMode, not by changingflow. - For merchant-owned physical stock, explicitly pass
fulfillmentMode=merchant_stock. - For platform delivery, use
fulfillmentMode=platform_deliveryand follow the quote → create flow. - Do not send
accountIdto select an account. Usedgp-entity-idfor child-account operations. - Product discovery, preparation, issuance, and subsequent queries must use the same
dgp-entity-id. isPrepared=truemeans preparation is ready; it does not guarantee successful card issuance.- Preparation materials are submitted as a complete snapshot. Incremental submission is not supported.
Updated about 11 hours ago
