Skip to content

Submit User KYC

POST /openapi/v1/users/kyc
ItemValue
HTTP methodPOST
Request path/openapi/v1/users/kyc
Request typeapplication/json

Request parameters

FieldTypeRequiredDescription
emailstringYesUser email address, used according to the existing API contract.
namestringYesFull name.
birthdaystringYesDate of birth, in the format yyyy-MM-dd.
documentTypestringYesDocument type: passport, id_card, or driver_license.
documentNumberstringYesDocument number.
documentCountrystringYesDocument issuing country or region, as a two-letter code such as HK.
documentExpiryDatestringConditionalDocument expiry date, in the format yyyy-MM-dd; provide either this or documentPermanentlyValid.
documentPermanentlyValidbooleanConditionalPass true for a permanently valid document; provide either this or documentExpiryDate. Passing false is not equivalent to omitting the field.
frontImageUrlstringYesURL returned after uploading the front image of the document.
backImageUrlstringConditionalURL returned after uploading the back image of the document; required for id_card and driver_license, optional for passport.
selfieImageUrlstringYesURL returned after uploading the identity selfie image.
phoneCountryCodestringYesPhone country calling code, such as +852.
phoneNumberstringYesDigits only, 4 to 20 digits.
genderstringYesGender: male or female.
annualIncomestringYesAnnual income range: <20000, 20000-50000, 50000-200000, 200000-500000, or >500000.
occupationstringYesOccupation.
positionstringYesPosition.
nationalitystringYesNationality, as a two-letter country or region code.
contactAddressstringYesContact address.
supportingDocumentsarrayConditionalRequired for non-HK users, with 1 to 10 items; optional for HK users. See the table below.
memberIdstringYesPlatform member ID, used only to identify the user on the platform; not sent to CPlus.

supportingDocuments items

FieldTypeRequiredDescription
documentTypestringYesUTILITY_BILL, TENANCY_AGREEMENT, ADDRESS_PROOF, BANK_STATEMENT, TRAVEL_PERMIT_FRONT, TRAVEL_PERMIT_BACK, or PROOF_OF_VISIT.
fileUrlstringYesURL returned after uploading a supporting document.

Provide exactly one of the expiry fields:

  • For a document with an expiry date, pass documentExpiryDate and omit documentPermanentlyValid.
  • For a permanently valid document, pass documentPermanentlyValid: true and omit documentExpiryDate.

Requests that provide both fields, omit both fields, or pass documentPermanentlyValid: false are rejected.

Upload images through the existing KYC image upload endpoint to obtain their URLs before submitting KYC.

Request example

json
{
  "email": "user@example.com",
  "name": "Test User",
  "birthday": "1990-01-01",
  "documentType": "passport",
  "documentNumber": "P1234567",
  "documentCountry": "HK",
  "documentExpiryDate": "2030-12-31",
  "frontImageUrl": "https://example.com/front.jpg",
  "selfieImageUrl": "https://example.com/selfie.jpg",
  "phoneCountryCode": "+852",
  "phoneNumber": "91234567",
  "gender": "male",
  "annualIncome": "50000-200000",
  "occupation": "Engineer",
  "position": "Senior Engineer",
  "nationality": "HK",
  "contactAddress": "Hong Kong",
  "memberId": "member-123"
}

Response data

FieldTypeDescription
successbooleanWhether processing succeeded.
codestringPlatform response code.
messagestringPlatform response message.
externalUserIdstringExternal user ID.
kycRecordIdstringKYC record ID.
statusstring/nullFuturePay unified primary KYC status: PENDING, PENDING_APPROVAL, APPROVED, or REJECTED.
subStatusstring/nullRaw KYC sub-status from the external provider; additional values may be introduced. Currently known values are not_submitted, pending_approval, approved, rejected.
cardAccountIdstring/nullExternal provider card account ID; null when not returned by the provider.