Skip to main content
KYC (Know Your Customer) verifies a customer’s identity using an official document (passport, ID card, driver’s license). Once approved, the customer upgrades from basic to verified. The KYC API has two endpoints: one to get the verification link, one to read the result.

Flow

The body is optional. callback_url is where your customer lands after the verification, lang is the language of the verification screen.
Always send a callback_url if you want your customer to come back to your application once the verification is done. Without it, your customer is not redirected back to you: rely on the kyc.* webhooks or the status endpoint to know the result.

You can call it as many times as you need

The call is refused when the KYC is already approved, or when the customer is suspended or closed.

The customer profile must be complete

A link can only be generated for a customer whose profile is complete: first_name, last_name, email, phone_country_code, phone, address, city, state, postal_code and country. These fields are required when you create a customer. If a field is missing (for example phone_country_code on a customer created before it became required), the call returns a 422:
Update the customer with PATCH /customers/{code}, then request the link again.

Step 2: Customer completes verification

Redirect your customer to the verification_url. They take a picture of their document and a selfie.

Step 3: Get the result

Via the status endpoint

Declared identity vs verified identity

When the KYC is approved, the identity read on the document is stored next to the one you declared. Both are returned by the customer endpoints and by the kyc.approved webhook:
Letter case, accents, hyphens and word order are ignored when comparing names.

What happens on a mismatch

When the KYC is approved with identity_mismatch: true:
  1. The KYC stays approved and the customer is verified, but its status becomes restricted with restriction_reason: identity_mismatch. A restricted customer cannot be used.
  2. You receive kyc.approved, then kyc.identity_mismatch with both identities.
  3. You call the synchronize endpoint. Your declared identity is replaced by the verified one, the customer is active again and restriction_reason is back to null.
No new verification is needed and nothing is billed.
A restricted customer cannot be reactivated with POST /customers/{code}/activate, and its first_name, last_name and date_of_birth cannot be changed with PATCH /customers/{code}. Synchronizing the identity is the only way to lift the restriction.

Customer statuses

Pricing

A verification is billed 2 USD, only when it is approved. The amount is debited from your others ops balance and triggers a balance.debited webhook with reason: kyc_verification. Getting a link is free, but your others balance must cover the price of one verification, otherwise the call returns INSUFFICIENT_BALANCE.

KYC status values

If a verified customer’s identity fields are modified (first_name, last_name, date_of_birth), they are automatically demoted back to basic and must redo KYC.