📄 Guide
Whether your customers originate from an exchange, a wallet or a platform application, you can issue them a virtual card through the DCS card issuing endpoints and upgrade it to a physical card at a later stage. The issuing path is consistent in all cases: establish the customer record and complete KYC with DCS first, then submit a virtual card application once KYC has been approved. As a licensed issuer operating its own BIN, DCS is responsible for card issuance, KYC review, authorization forwarding, clearing and reconciliation. As the partner, you own the cardholder-facing experience and your own limit and risk decisions.Card issuing sequence
The sequence is the same regardless of how the KYC documents are collected: create the customer, apply for KYC (uploading documents first only if required), wait for KYC to pass, then apply for a virtual card. When the same customer applies for another card later, the existingkycTicketId can be reused and the KYC documents do not have to be submitted again.
You choose one of two document-collection routes: collect the KYC documents in your own interface and submit them to DCS, or hand the customer off to a DCS-hosted H5 page that captures them for you. In both cases the review is performed by our KYC vendor — see KYC vendor for details. Everything after KYC approval is identical.
The two URLs do different jobs:generate-pre-upload-urlonly issues an S3 upload address, whereascard-redirect/v1/guidance-linkissues a DCS-hosted H5 page. Use the former when you collect the documents in your own interface and upload the files yourself; use the latter when the end user has to complete liveness, information verification, supplementary card application details, KYC or KYC renewal on a DCS page.
Core endpoint: apply for a virtual card
POST /open-api/card-order/v1/apply-virtual
For the request and response fields, the corresponding endpoint page in the API reference is authoritative.
Request parameters
Minimum request example
Response
The unified response structure is{ code, message, messageDetail, data }:
code/message: the system-level return code and its text.messageDetail: a prompt you can show to the end user (title/message/type/action/linkUrland so on), used in your front end to guide a document resubmission or a retry.data: the business payload, described in the table below.
data fields:
Virtual card order state machine
Once the order reaches
COMPLETED, data.cardId is usable. A virtual card needs no activation: it is ready to spend as soon as it is issued.
Note: the success value for this endpoint is COMPLETED.
When extra information is requested
DCS may require supplementary information from the cardholder before an application can be approved. When we do, the card application returnsneedExtraInfo = true; the application stays in progress and will not reach COMPLETED until the request is resolved.
There is no dedicated open-api endpoint for this: the cardholder has to complete the supplementary application details on the H5 guidance page (guidance-link type=6). Where our review determines that the cardholder must supply additional KYC information, DCS automatically creates a KYC extra information ticket that tracks the request from creation through to approval or rejection. You do not create the ticket yourself.
- Detect the request. The card order’s
needExtraInfobecomestrueand you receive aKYC_EXTRA_INFO_TICKETwebhook with the ticket in statusINIT. - Direct the user to submit.
POST /open-api/card-redirect/v1/guidance-linkwithtype=6and thecardOrderIdto obtain the H5 link, then open it for the user. - Track the outcome. The ticket moves to
PENDINGon submission, then toPASSED(the card order continues) orREJECTED, where the webhook carriesrejectReasonandrejectRemark. - Query at any time.
GET /open-api/kyc-extra-info-ticket/v1/listreturns the ticket list, statuses and rejection reasons for the card.
Query by
cardOrderId to return every ticket for that order, newest first, including the rejection reasons of earlier tickets. Pass kycExtraInfoTicketId (from the webhook) to narrow the result to one ticket.
After the card is issued
- Poll
GET /open-api/card-order/v1/detailwithcardOrderId(the response fields are the same as in the table above), or wait for the card order status webhook. TakecardIdonce the status isCOMPLETED. - Call card detail with
cardIdto read non-sensitive data such aspanFirst6andpanLast4. - To display the full card number or CVV: PCI-certified partners use get sensitive card data; partners without PCI certification use the DCS-hosted page (guidance link), where the sensitive data is rendered directly in the end user’s front end and never passes through your back end.
- When the cardholder needs a physical card, call the virtual-to-physical endpoint (see Physical card).
- If the order returns
needExtraInfo, resolve the request first — see the section “When extra information is requested” above.
Next steps
- Applying for, shipping and activating a physical card: see Physical card.
- Day-to-day operations such as freeze, unfreeze, termination and PIN reset: see Card management.
- Card order statuses and how failure
errorCodevalues are grouped, including whether a retry or a document resubmission helps: see Card application error codes.

