How-to task page: let a user who already completed KYC under the DeCard-Managed model reuse that data when applying for a card under Partner-Managed (kycApplyMode=H5-MIGRATION / guide page type=9). Organized as a two-step flow with request fields and a minimal request; the three ticket statuses and all error codes are listed inline rather than linked out.
If your user already completed KYC under the DeCard-Managed model and you now want to issue them a card under the Partner-Managed model, they do not have to submit their documents, selfie and address all over again — you can start a KYC information migration and let the user simply confirm the reuse of their existing data on a DCS-hosted H5 page. As a licensed card issuer, DCS verifies whether the source user’s KYC is eligible for reuse and, once it passes, attaches usable KYC information to the target user.Migration reuses the same two-step H5 KYC flow; the only differences are that the application mode is H5-MIGRATION, the guide page type is type=9, and the source user must be identified.
A migration can be rejected. Once rejected the ticket is in a terminal state, so you must apply for a brand-new migration ticket to let the user retry — a terminal ticket cannot be reused.
Your own business idempotency key; you can query by it later
customerId
string
Yes
≤50
The target user — the customerId in this model you want to issue a card to
kycApplyMode
string
Yes
≤20
Fixed H5-MIGRATION
sourceCustomerId
string
Yes
≤50
The source user identifier — pass that user’s externalUserId from the DeCard-Managed model. Note that despite the ...CustomerId name this is not a customerId of this model
This step synchronously checks whether the source user is eligible for reuse. If not, no ticket is created and DAPI_KYC_MIGRATION_NOT_ELIGIBLE is returned (see the error codes below). In other words, once you have a kycTicketId the source user has already passed the pre-check and all that remains is the user’s confirmation on H5.
The H5 link has a limited lifetime. If it expires while the ticket is still INIT, call this endpoint again for a fresh link — you do not need to apply for a new ticket.
Learn the outcome from the KYC_TICKET webhook or by calling GET /open-api/kyc-ticket/v1/detail yourself (with kycTicketId or kycTicketRef):
PASSED: the migration is complete, the target user now has usable KYC, and you can go on to issue a card (cardApplyMode=NORMAL, submitting that kycTicketId and customerId).
REJECTED: this migration was rejected; errorCode / errorMessage explain why. Go back to step 1 and apply for a new ticket with a new kycTicketRef.