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 Preparing

Card capabilities are returned in the issuance object by GET /cards/bins.

Products with requiresPreparation=false can proceed directly to issuance. Products with requiresPreparation=true must complete the preparation steps in this guide before issuance.

For physical cards, flow and fulfillmentModes describe different aspects of issuance:

  • flow defines the card issuance API flow.
  • fulfillmentModes defines how the physical card is fulfilled.

For c_015, both virtual and physical cards use flow=standard. Physical cards support merchant_stock and platform_delivery fulfillment 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 issuanceAction
nullThis card form is not supported. Select another product.
requiresPreparation=falseNo independent preparation is required. Proceed to issuance.
requiresPreparation=trueComplete Step 3 before issuance.
flow=standardUse POST /cards to create the card.
flow=applicationUse 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 modeDescriptionIssuance process
merchant_stockThe merchant already has physical cards in stock.Create the card directly using POST /cards, then bind the physical card.
platform_deliveryThe 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 operationParameter
PreparationcardChannelId
Physical card quotecardChannelId
Create cardchannelId

These parameters refer to the same product ID.

⚠️

Capabilities Do Not Reserve Funds or Stock

The issuance object describes supported capabilities and flows. It does not reserve funds, card stock, or bank approval.

Step 2: Create or Reuse the Cardholder

OperationEndpointPurpose
ListGet card holder listFind an existing local cardholder.
CreateCreate card holderCreate a local cardholder record.
UpdateUpdate card holderCorrect 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 Approval

A local cardholder record only stores your business data. It does not mean that the bank has approved the holder. For products requiring preparation, isPrepared=true indicates that the preparation requirement has been satisfied.

The legacy /card-holders/preparation endpoint is deprecated. Use /cards/preparation for 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.

ParameterLocationRequiredDescription
dgp-entity-idHeaderNoPass for child-account operations.
cardChannelIdQueryYesCard product ID returned by GET /cards/bins.
cardTypeQueryNovirtual (default) or physical.
cardHolderIdQueryNoLocal cardholder ID.
fulfillmentModeQueryNoPhysical 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

MethodSequence
Hosted H5Call 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 APIUpload 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 previewWhen 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 It

Form URLs are one-time resources that may expire as business state changes. canEdit reflects current editability, not a permanent permission.

3.3 Handle the Preparation Result

ResultNext action
isPrepared=truePreparation is ready. Proceed to issuance.
COMPLETE_FORMComplete or correct the required materials while editing is allowed.
WAIT / RETRYWait for retryAfter, then query again. Do not resubmit blindly.
CONTACT_SUPPORTFollow the feedback and contact technical support. Do not create replacement holders automatically.
❗

A Successful Submission Is Not Approval

Submission is a complete snapshot, not a PATCH operation. 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 id is cardChannelId in preparation and quote, and channelId in 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 changing flow.
  • For merchant-owned physical stock, explicitly pass fulfillmentMode=merchant_stock.
  • For platform delivery, use fulfillmentMode=platform_delivery and follow the quote → create flow.
  • Do not send accountId to select an account. Use dgp-entity-id for child-account operations.
  • Product discovery, preparation, issuance, and subsequent queries must use the same dgp-entity-id.
  • isPrepared=true means preparation is ready; it does not guarantee successful card issuance.
  • Preparation materials are submitted as a complete snapshot. Incremental submission is not supported.

Did this page help you?