- Option 1: Sumsub Share Token — the user has already been verified in your own Sumsub account, so you hand the Share Token to DCS and upload no document files;
- Option 2: document file upload — you collect the documents yourself and upload them to DCS.
📄 Guide
Whether you are an exchange, a wallet or a platform, you can submit a user’s KYC information to DCS in a single API call. This is a required step before you can issue a card to that user. As a card issuer licensed by the Monetary Authority of Singapore (MAS), DCS receives the data securely, assesses risk against anti-money laundering (AML) rules, and returns the verification result through a webhook.Who does what
Prerequisites
- You hold the Enterprise ApiKey / SecretKey — see the Authentication guide.
- You have created the user and hold their
customerId— see Create a user. - On the Sumsub route: you have set up a sharing partner relationship between your own Sumsub account and DCS (see the KYC vendor notes) and hold the user’s Share Token.
- On the upload route: you have the user’s identity document to hand (an ID card, passport or driving license, for example), plus a proof of address if one is required.
Choosing between the two options
How DCS tells them apart: when the document-file fields (
identifyProofList / addressProofList) are left empty, DCS skips validating them; when they are supplied, they are checked against the enumerations and the length limits. sumsubShareToken is passed downstream with the request and used to pull the data the user has already had verified in Sumsub. Both may appear in the same request, in which case the downstream risk service decides which one prevails. Either way you must submit career information (kycCareerInfo) — that part is required on both routes.
Option 1: Sumsub Share Token
Minimum request
POST /open-api/kyc-ticket/v1/apply-kyc
On the Sumsub route you can leaveidentifyProofList/addressProofListempty.sumsubShareTokenis passed downstream, where it is used to fetch the documents the user has already had verified in Sumsub.
Option 2: document file upload
Step 1: upload the document files
Identity and address documents are not embedded in the application request itself. Instead you request an S3 pre-upload link, PUT the file to it, and quote the returnedobjectKey in the application.
Call POST /open-api/intent-ticket/v1/generate-pre-upload-url with businessType set to CREATE_CARD_KYC:
objectKey for each file. After you PUT the file to the URL, keep the objectKey: it is what goes into the identityProofUrl / addressProofUrl field in the next step, not the full URL.
Step 2: submit the KYC application
POST /open-api/kyc-ticket/v1/apply-kyc
Request fields at a glance
Common fields (both options)
Field specific to option 1
Fields used by option 2
identifyProofList[] identity document
addressProofList[] address document
kycCareerInfo career information (required on both options)
Career information is sensitive data. If you want it encrypted end to end, serialisekycCareerInfoto JSON, encrypt it with AES-GCM, put the ciphertext inkycCareerInfoEncryptionand the IV inencryptionIV; the plaintextkycCareerInfocan then be omitted. The fields above are validated against server-side enumerations rather than accepting arbitrary strings. For the full set of values, see the KYC application parameter dictionary.
Response
Every/open-api/ endpoint shares the same response envelope, { code, message, messageDetail, data }. On success, data carries the newly created KYC ticket:
About the envelope: judge success or failure bycode(SYS_SUCCESS, for example);messageis a short caption.messageDetailis an optional display object (withmessage/title/type/icon/action/linkTitle/linkUrl) meant for front-end prompts, and should never be used to decide whether a call succeeded.
Following up on the result
Once submitted, the KYC ticket moves through the statuses below. Both options share the same status machine.
When
status=REJECTED, both the Query KYC endpoint and the KYC_TICKET webhook return an errorCode and an errorMessage giving the reason. For how to handle each one, see KYC reject codes.
Prefer webhook subscriptions over polling for status updates; see Webhook events and schema.
Next steps
Once KYC isPASSED, go to the card issuing flow to issue the user a card. If the status is stuck at NEED_VERIFY, start with the face verification page and walk the user through the face scan.
