Skip to main content
Every customer must clear identity verification before they can transact.

Choosing a flow

Requirements List

Some countries add specific additional requirements. See Country-specific requirements. Supply userInfo.email when creating the customer. Read the overall status with GET /organization/{organizationId}/kyc.

Requirements unlock in stages

A customer does not owe every requirement at once. Verification runs in stages, and each stage asks for its own requirements. Today a customer moves through these stages in this order:
  1. Routing. The country in their personal data decides which requirements apply. Nothing else can be sent until this lands.
  2. Identity. personalData, identityDocument, selfie, occupation, and any country-specific requirement.
  3. Proof of address. Only when the identity document carried no address.
  4. Agreement. customerAgreement.
Drive your integration from the requirements breakdown, not from this list. We add and reorder stages, and some countries may gain stages of their own. The rules:
  • The breakdown lists only the current stage, plus requirements already satisfied. A requirement from a later stage is not in the list at all until the customer reaches that stage.
  • Send a requirement only once it is in the list as pending or actionRequired. If you send it earlier, the request is accepted with a 202, then refused in the background. A kycUpdated webhook arrives with needsWork: true, and nothing retries it.
  • A stage moves on by itself. When everything the current stage asks for has landed, it is submitted for review and the overall status becomes submitted. When the review clears, the next stage’s requirements appear in the list and status returns to inProgress. Both moves send kycUpdated. Review is usually a few seconds; a manual review takes longer.
  • Proof of address is the one exception. You may send it before its stage, as long as the identity stage has not been submitted yet. Send it in the same request as the identity document. It is used only if the proof of address stage is reached.
So the loop for anything you submit over the API is:
2

Send what is pending

Everything in the list with status: "pending" or "actionRequired" and requiresLaunch: false.
3

Wait for the next kycUpdated

It arrives when the stage is submitted, and again when the next stage arrives. Without a kycUpdated subscription, read the breakdown again after a few seconds.
4

Repeat until only launch rows are left

When everything outstanding reads requiresLaunch: true, launch the customer. When nothing is outstanding, wait for status: "approved".

Tracking verification status

The overall status

The per-requirement breakdown

Add ?requirements=true for a step-by-step account of what the customer still needs. It is opt-in: without it the response leaves requirements out.
This customer is on the identity stage. customerAgreement is not in the list yet, so it cannot be sent yet. Once the identity stage clears, the same call returns:
Each type matches a requirement in the Requirements List or a country-specific one. requiresLaunch: true marks the rows only the WebSDK can satisfy.
requirements is absent until the customer has been routed to their country’s requirements, so it is missing immediately after their personal data is submitted. Read it again a moment later. After that it grows as the customer moves through the stages: proofOfAddress and customerAgreement appear only when their stage is reached. Re-read it after every kycUpdated; no single response is the full list.
We reserve the right to add new requirements, and will update these docs when we do. Some countries may also gain requirements of their own.

Requirement statuses

Country-specific requirements

It must be legible and belong to the customer being verified. Submit it as the tax_document part of POST /organization/{organizationId}/verification/documents, or let the customer upload it in the widget.
In sandbox, the constancia is the one document that has to look real. Any real constancia with any data in it works. Use this example constancia.In sandbox, the customer’s name must be LETICIA HERNANDEZ GONZALEZ. The RFC registry check still runs, and the sandbox registry returns only this test person. Any other name is rejected.

Reference