Buvei
API ReferenceKYC

Create KYC Cardholder (Form)

Submit a full cardholder identity form for manual review.

POST/open-api/v1/kyc/cardholders/form

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

firstNamestringbodyrequired

Given name, max 128 chars.

lastNamestringbodyrequired

Family name, max 128 chars.

fullNamestringbodyrequired

Full name in the cardholder's native script (e.g. 김민수).

fullNameEnstringbodyrequired

Full name in Latin letters (e.g. Minsu Kim).

mobilePrefixstringbodyrequired

Mobile country calling code, digits only, 1–4 digits (e.g. 82).

mobilestringbodyrequired

Mobile number, digits only, 4–20 digits.

emailstringbodyrequired

Contact email, max 128 chars.

Personal

genderstringbodyrequired

MALE or FEMALE.

birthDatestringbodyrequired

Date of birth, yyyy-MM-dd. Must be in the past.

occupationstringbodyrequired

One of the occupation values below.

nationalitystringbodyrequired

Nationality as an ISO 3166 Alpha-2 country code (e.g. KR). Subject to the restricted-jurisdiction check.

Identity document

idTypestringbodyrequired

PASSPORT, ID_CARD, or DRIVER_LICENSE.

idNumberstringbodyrequired

Document number, max 128 chars.

idExpiryDatestringbodyrequired

Document expiry date, yyyy-MM-dd. Must not be expired.

Address

countrystringbodyrequired

Residential address country, ISO 3166 Alpha-2. Subject to the restricted-jurisdiction check.

statestringbodyrequired

State or province, max 128 chars.

citystringbodyrequired

City, max 128 chars.

streetstringbodyrequired

Street line (house number + street name), max 256 chars.

addressstringbodyrequired

Full residential address in native script, max 512 chars.

addressEnstringbodyrequired

Full residential address in Latin letters, max 512 chars.

postalCodestringbodyrequired

Postal code, max 32 chars.

Source of funds & residency

sourceOfFundstringbodyrequired

One of the source-of-fund values below.

livingCountrystringbodyrequired

Country 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.

idFrontTokenstringbodyrequired

Front of the identity document. Upload type: IDENTITY_PROOF.

idBackTokenstringbody

Back of the identity document. Upload type: IDENTITY_PROOF. Required when idType is ID_CARD; optional otherwise.

selfieTokenstringbody

Selfie of the cardholder. Upload type: SELFIE_PROOF. Optional.

addressProofTokenstringbody

Proof-of-address document. Upload type: ADDRESS_PROOF. Optional.

attachmentsarray<string>bodyrequired

1–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

idstring

Cardholder ID (kyc_…). Use this when issuing cards or querying KYC status.

kycStatusstring

Always PENDING immediately after creation.

modestring

Always FORM for this endpoint.

Request
{
  "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"
  ]
}
Response
{
  "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 / territoryCode
AfghanistanAF
AlbaniaAL
BelarusBY
Bosnia and HerzegovinaBA
Bouvet IslandBV
Burkina FasoBF
BurundiBI
Central African RepublicCF
China (mainland)CN
Congo, Democratic Republic of theCD
Congo, Republic of theCG
CroatiaHR
CubaCU
EritreaER
EthiopiaET
Guam (US territory)GU
Guinea-BissauGW
HaitiHT
IranIR
IraqIQ
JordanJO
KosovoXK
LebanonLB
LiberiaLR
LibyaLY
MaliML
MontenegroME
MyanmarMM
Netherlands AntillesAN
NicaraguaNI
North KoreaKP
North MacedoniaMK
Northern Mariana Islands (US territory)MP
PalestinePS
Puerto Rico (US territory)PR
RussiaRU
SerbiaRS
SloveniaSI
SomaliaSO
South SudanSS
SudanSD
Turks and Caicos IslandsTC
UkraineUA
United StatesUS
U.S. Virgin Islands (US territory)VI
VenezuelaVE
VietnamVN
YemenYE
ZimbabweZW

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 fileToken is 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-dd strings; birthDate must be in the past and idExpiryDate must not be expired.
  • A cardholder with the same idType + idNumber that is already PENDING or APPROVED is rejected as a duplicate. Re-submit is allowed once a prior submission is REJECTED.
  • Review is performed by Buvei's compliance team; turnaround depends on document quality and queue volume.
  • Listen for CARDHOLDER_KYC_STATUS for the final outcome. On APPROVED you can issue cards under this id.