basic to verified.
The KYC API has two endpoints: one to get the verification link, one to read the result.
Flow
Step 1: Get the verification link
callback_url is where your customer lands after the verification, lang is the language of the verification screen.
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:
PATCH /customers/{code}, then request the link again.
Step 2: Customer completes verification
Redirect your customer to theverification_url. They take a picture of their document and a selfie.
Step 3: Get the result
Via webhook (recommended)
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 thekyc.approved webhook:
Letter case, accents, hyphens and word order are ignored when comparing names.
What happens on a mismatch
When the KYC is approved withidentity_mismatch: true:
- The KYC stays approved and the customer is
verified, but itsstatusbecomesrestrictedwithrestriction_reason: identity_mismatch. A restricted customer cannot be used. - You receive
kyc.approved, thenkyc.identity_mismatchwith both identities. - You call the synchronize endpoint. Your declared identity is replaced by the verified one, the customer is
activeagain andrestriction_reasonis back tonull.
Customer statuses
Pricing
A verification is billed 2 USD, only when it is approved. The amount is debited from yourothers 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.