Skip to main content
Onboarding a person takes three calls: create them, upload a photo ID, upload a selfie. Everything else is optional.

Create the customer

POST /api/v0/customer with identity fields, the questionnaire and custom fields. The whole payload is validated first — one bad field and nothing is created.
Required fields
Returns 201 with the userId. Save it — every later call uses it.

Upload the photo ID

POST /api/v0/customer/{userId}/documents as multipart/form-data.
This auto-submits the applicant — status moves to PENDING once the provider has everything it needs.

Upload the selfie

Same endpoint, idDocType=SELFIE.
The response’s missing array tells you what is still outstanding:

Identity fields

Document types

idDocType is validated — a value outside this list returns 400. PASSPORT · ID_CARD · DRIVERS_LICENSE · RESIDENCE_PERMIT · SELFIE
side is not validated. FRONT and BACK are meaningful only for two-sided documents (ID_CARD, DRIVERS_LICENSE). For a passport or selfie it is ignored, and any value — even nonsense — is accepted and passed through.
Files must be JPEG, PNG or PDF, at most 2 MB. Content is sniffed, not trusted by extension: a text file renamed .jpg returns 400.

Hosted verification instead of uploads

If you would rather not handle documents yourself, generate a KYC link and send the customer to it.
The link expires — ttlSeconds is one hour. Requesting one for an already verified customer returns 409.

Importing an already-verified customer

Pass a shareToken instead of the identity payload. Only email is required alongside it; identity comes from the token, and any identity fields you send are ignored and listed back in warnings.
Request
Share tokens are single-use per partner. Reusing one returns 400, and the message is a generic Bad Request. Use a fresh token each time.

Deleting

Delete is a soft delete. The customer stops appearing in listings and a later GET returns 404. The email is released, so the same person can be onboarded again. A customer holding a balance cannot be deleted — that returns 409, and the amount is never disclosed.