Skip to main content
KYC is handled entirely inside the widget. You do not need to build any verification UI.

First-time user

When a user opens the widget for the first time, the widget detects that no KYC profile exists and guides them through:
  1. Document upload — passport, national ID, or driver’s licence.
  2. Liveness check — a short selfie via camera. Camera permission must be granted (see Mobile).
Verification is processed automatically. Once verified, the user proceeds to payment without leaving the widget. Typical verification time is a few minutes, but may take longer in some cases.

Returning user

KYC status is remembered across sessions. A verified user skips directly to payment.

Check KYC status

You can check a user’s KYC status at any time, for example to show a relevant message in your UI before opening the widget.
curl https://DOMAIN/widget/users/{partner_user_id}/kyc-status \
  -H "Authorization: Bearer <client_token>"
Response:
{
  "partner_user_id": "user-123",
  "status": "verified",
  "verified_at": "2026-03-15T10:00:00Z"
}

KYC Statuses

StatusMeaning
not_startedUser has never opened the widget or has not submitted KYC
pendingKYC submitted, under review
verifiedKYC passed — user can transact
failedVerification failed — user must retry inside the widget

Handling kyc_required errors

If you request a session for a user who cannot transact yet, the API returns 422 kyc_required:
{
  "error": "kyc_required",
  "message": "User must complete KYC verification before transacting",
  "partner_user_id": "user-123"
}
Recommended handling: embed the widget anyway. The widget will automatically start the KYC flow for the user. Alternatively, check kyc-status first and show a custom message like “Verify your identity before buying crypto” with a button that opens the widget.

Camera Permissions

The liveness check requires camera access. Without it, KYC cannot be completed.
  • iOS: Add NSCameraUsageDescription to Info.plist. See Mobile.
  • Android: Use Chrome Custom Tabs or grant CAMERA permission in your manifest. See Mobile.