Skip to main content
The default flow. You create the customer and launch them; the customer does everything else in the widget at /idv.

The flow

1

Create the customer's organization

Create a personal organization with POST /ramp/organization. You generate the id. This UUID is the customer’s org id and the customer_id you use everywhere else.
Send userInfo.email. It is the address the customer confirms during verification, and the only place it comes from. A customer with no email on file cannot be verified.
2

Launch the customer into /idv

An Identity verification launch, using JWT User Authentication.
The JWT sub MUST equal the org id from step 1. Any other sub registers a brand-new person instead, and the verification won’t attach to your customer.
Append &lang=es to the target (/idv?lang=es) for Spanish. Pass an optional return_url on the launch to send the customer back to your app when they finish.
3

The customer completes the steps in the widget

Everything in the Requirements List, plus any country-specific requirement, in one authenticated session. The customer can leave and come back; progress is kept.
4

Watch for the result

The kyc_updated webhook fires with status: "approved" and the customer’s wallet becomes order-eligible. See Tracking verification status.

Error handling

Failures specific to launching. Verification outcomes (denied, needs-work) are in Tracking verification status; a rejected customer is resubmitted by launching them again.

Sandbox

The verification checks don’t run, so any document images and any selfie will pass. The one exception is Mexico’s constancia. See Country-specific requirements and Test environment.

When to reach for something else

KYC API

You already collect identity data and documents in your own UI.

Sumsub shared token

You already verified the customer in your own Sumsub account.