Create KYC Cardholder (Form)
Submit a full cardholder identity form for manual review.
Submit the user's basic information and a third-party KYC report (e.g. Sumsub) to proceed with KYC verification.
Document images must first be uploaded via POST /kyc/presignedUploads; pass the resulting fileTokens in the image fields below. The submission enters PENDING and is reviewed by our compliance team.
Body
Name & contact
firstNamestringbodyrequiredGiven name, max 128 chars.
lastNamestringbodyrequiredFamily name, max 128 chars.
fullNamestringbodyrequiredFull name in the cardholder's native script (e.g. 김민수).
fullNameEnstringbodyrequiredFull name in Latin letters (e.g. Minsu Kim).
mobilePrefixstringbodyrequiredMobile country calling code, digits only, 1–4 digits (e.g. 82).
mobilestringbodyrequiredMobile number, digits only, 4–20 digits.
emailstringbodyrequiredContact email, max 128 chars.
Personal
genderstringbodyrequiredMALE or FEMALE.
birthDatestringbodyrequiredDate of birth, yyyy-MM-dd. Must be in the past.
occupationstringbodyrequiredOne of the occupation values below.
nationalitystringbodyrequiredNationality as an ISO 3166 Alpha-2 country code (e.g. KR). Subject to the
restricted-jurisdiction check.
Identity document
idTypestringbodyrequiredPASSPORT, ID_CARD, or DRIVER_LICENSE.
idNumberstringbodyrequiredDocument number, max 128 chars.
idExpiryDatestringbodyrequiredDocument expiry date, yyyy-MM-dd. Must not be expired.
Address
countrystringbodyrequiredResidential address country, ISO 3166 Alpha-2. Subject to the restricted-jurisdiction check.
statestringbodyrequiredState or province, max 128 chars.
citystringbodyrequiredCity, max 128 chars.
streetstringbodyrequiredStreet line (house number + street name), max 256 chars.
addressstringbodyrequiredFull residential address in native script, max 512 chars.
addressEnstringbodyrequiredFull residential address in Latin letters, max 512 chars.
postalCodestringbodyrequiredPostal code, max 32 chars.
Source of funds & residency
sourceOfFundstringbodyrequiredOne of the source-of-fund values below.
livingCountrystringbodyrequiredCountry of residence, ISO 3166 Alpha-2. Subject to the restricted-jurisdiction check.
Document images
Each field takes a fileToken returned by POST /kyc/presignedUploads. The token's upload type must match the slot (shown below), otherwise the request is rejected.
idFrontTokenstringbodyrequiredFront of the identity document. Upload type: IDENTITY_PROOF.
idBackTokenstringbodyBack of the identity document. Upload type: IDENTITY_PROOF. Required when idType is ID_CARD; optional otherwise.
selfieTokenstringbodySelfie of the cardholder. Upload type: SELFIE_PROOF. Optional.
addressProofTokenstringbodyProof-of-address document. Upload type: ADDRESS_PROOF. Optional.
attachmentsarray<string>bodyrequired1–6 fileTokens for third-party verification reports (e.g. a Sumsub / Didit PDF). Any upload type is accepted here — no slot-type check. Each single-use, and cannot repeat a token already used in an image slot above.
Response
idstringCardholder ID (kyc_…). Use this when issuing cards or querying KYC status.
kycStatusstringAlways PENDING immediately after creation.
modestringAlways FORM for this endpoint.
{
"firstName": "Minsu",
"lastName": "Kim",
"fullName": "김민수",
"fullNameEn": "Minsu Kim",
"mobilePrefix": "82",
"mobile": "1012345678",
"email": "[email protected]",
"gender": "MALE",
"birthDate": "1992-03-15",
"occupation": "PRIVATE_BUSINESS_EMPLOYEES",
"nationality": "KR",
"idType": "PASSPORT",
"idNumber": "M12345678",
"idExpiryDate": "2031-05-20",
"country": "KR",
"state": "Seoul",
"city": "Seoul",
"street": "123 Teheran-ro",
"address": "서울특별시 강남구 테헤란로 123",
"addressEn": "123 Teheran-ro, Gangnam-gu, Seoul",
"postalCode": "06133",
"sourceOfFund": "SALARY_OR_EMPLOYMENT_INCOME",
"livingCountry": "KR",
"idFrontToken": "kyc_file_8f3a9c2b1d4e5f6a",
"idBackToken": "kyc_file_2c1d4e5f6a8f3a9b",
"selfieToken": "kyc_file_5f6a8f3a9b2c1d4e",
"addressProofToken": "kyc_file_9b2c1d4e5f6a8f3a",
"attachments": [
"kyc_file_1a2b3c4d5e6f7a8b"
]
}{
"code": 0,
"message": "SUCCESS",
"data": {
"id": "kyc_2c1d4e5f6a8f3a9b",
"kycStatus": "PENDING",
"mode": "FORM"
}
}Restricted jurisdictions
We do not onboard cardholders connected to a restricted country or territory.
All three country fields — nationality, country and livingCountry — are
screened, and a match on any one of them rejects the submission.
Unlike the hosted flow, the check runs synchronously at submission time, so the request fails outright and no KYC fee is charged:
{
"code": 400,
"message": "The current country is not supported for KYC at this time"
}No cardholder record is created and the fileTokens you passed are not
consumed — you may reuse them on a corrected submission.
Restricted countries and territories
Codes are ISO 3166 Alpha-2, matching the format of the three country fields.
| Country / territory | Code |
|---|---|
| Afghanistan | AF |
| Albania | AL |
| Belarus | BY |
| Bosnia and Herzegovina | BA |
| Bouvet Island | BV |
| Burkina Faso | BF |
| Burundi | BI |
| Central African Republic | CF |
| China (mainland) | CN |
| Congo, Democratic Republic of the | CD |
| Congo, Republic of the | CG |
| Croatia | HR |
| Cuba | CU |
| Eritrea | ER |
| Ethiopia | ET |
| Guam (US territory) | GU |
| Guinea-Bissau | GW |
| Haiti | HT |
| Iran | IR |
| Iraq | IQ |
| Jordan | JO |
| Kosovo | XK |
| Lebanon | LB |
| Liberia | LR |
| Libya | LY |
| Mali | ML |
| Montenegro | ME |
| Myanmar | MM |
| Netherlands Antilles | AN |
| Nicaragua | NI |
| North Korea | KP |
| North Macedonia | MK |
| Northern Mariana Islands (US territory) | MP |
| Palestine | PS |
| Puerto Rico (US territory) | PR |
| Russia | RU |
| Serbia | RS |
| Slovenia | SI |
| Somalia | SO |
| South Sudan | SS |
| Sudan | SD |
| Turks and Caicos Islands | TC |
| Ukraine | UA |
| United States | US |
| U.S. Virgin Islands (US territory) | VI |
| Venezuela | VE |
| Vietnam | VN |
| Yemen | YE |
| Zimbabwe | ZW |
This list is subject to change without notice; treat the 400 response above as
the source of truth.
Occupation values
| Value |
|---|
GOVERNMENT_OFFICERS |
GOVERNMENT_WORKERS |
SOE_AND_STATE_ORGAN_EXECUTIVES |
SOE_AND_STATE_ORGAN_EMPLOYEES |
PRIVATE_BUSINESS_OWNERS_AND_EXECUTIVES |
PRIVATE_BUSINESS_EMPLOYEES |
NONE_GOVERNMENT_ORGANIZATION_EXECUTIVES |
NONE_GOVERNMENT_ORGANIZATION_EMPLOYEES |
SOLE_TRADERS |
RETIREES |
STUDENTS |
UNEMPLOYED |
FREELANCER |
Source-of-fund values
| Value |
|---|
SALARY_OR_EMPLOYMENT_INCOME |
PENSION_OR_RETIREMENT_BENEFITS |
FINANCIAL_SUPPORT_FROM_IMMEDIATE_FAMILY |
BUSINESS_PROFITS |
INCOME_FROM_SOLE_PROPRIETORSHIP |
PROCEEDS_FROM_PERSONAL_INVESTMENTS |
DIVIDENDS_OR_SHARE_DISTRIBUTIONS |
LOAN_PROCEEDS |
INHERITANCE |
DONATION_OR_GIFT |
Notes
- Each
fileTokenis single-use and is consumed by the first successful submission that references it. The same token cannot be reused across two image slots. - Date fields are plain
yyyy-MM-ddstrings;birthDatemust be in the past andidExpiryDatemust not be expired. - A cardholder with the same
idType+idNumberthat is alreadyPENDINGorAPPROVEDis rejected as a duplicate. Re-submit is allowed once a prior submission isREJECTED. - Review is performed by Buvei's compliance team; turnaround depends on document quality and queue volume.
- Listen for
CARDHOLDER_KYC_STATUSfor the final outcome. OnAPPROVEDyou can issue cards under thisid.