> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ripio.com/llms.txt
> Use this file to discover all available pages before exploring further.

# KYC with liveness check

> KYC flow for partners that are not regulated entities: you submit the user's data and the user completes an ID document upload and liveness check on Ripio's KYC platform.

> [!NOTE]
>
> Not sure which flow applies to your account? Start with [Overview & which flow applies](/crypto-as-a-service/kyc/overview.md).

## How it works

This is the flow for partners that are **not regulated entities**. You collect the user's data in your own UI and submit it through the API, as in every KYC. Ripio then processes that data and asks the user to prove who they are: the response includes a `provider_url` where the user uploads their ID document and completes a liveness check with the identity provider.

The verification ends asynchronously, once the identity provider reports back. Until then the KYC Submission stays `IN_REVIEW`.

## The flow

**1. Get the KYC requirements**

Call [KYC Requirements](/crypto-as-a-service/kyc-requirements/kyc-requirements.md) to get the fields required for your account's country.

**2. Create the KYC Submission**

Call [Create KYC Submission](/crypto-as-a-service/kyc-submissions/create-kyc-submission.md) with the user's `email` and the `kyc_submission` data. The response comes back `IN_REVIEW`, with a `provider_url`:

```json Response theme={null}
{
    "submission_id": "6295fdf3-fae8-4a3f-a16b-6b43b258a6c0",
    "status": "IN_REVIEW",
    "provider_url": "https://kyc.ripio.com/?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...&id=20809&schema=B2B_AR",
    "created_at": "2026-10-20T16:45:56.778460Z"
}
```

Save the `submission_id` to follow the verification.

**3. Redirect the user to provider\_url**

Open `provider_url` in the user's browser or in a webview. That page is Ripio's KYC platform: the user uploads their ID document and completes the liveness check there, so you don't build any document-capture screen.

When they finish, they are sent back to the redirect URL configured for your account. Ripio sets it up for you; it is not part of the request.

**4. Get the result**

You get the outcome in two ways:

* **Webhook**: `KYC.COMPLETED` when the user is approved, `KYC.FAILED` when they are not. See [BaaS Webhooks](/crypto-as-a-service/webhooks/baas-webhooks.md#verification-submission-webhook).
* **Polling**: [Retrieve KYC Submission](/crypto-as-a-service/kyc-submissions/retrieve-kyc-submission.md) with the `submission_id`.

While the verification is in progress you may also receive `KYC.IN_REVIEW` notifications. Act on the final status only.

> [!NOTE]
>
> `provider_url` carries a token bound to this user's verification process. Treat it as a secret:
> do not log it, share it or reuse it for another user.

> [!WARNING]
>
> A successful response does not mean the KYC is approved: it only means the verification was
> opened. The final status comes from the identity provider, after the user goes through
> `provider_url`.
>
> If the submission ends `FAILED`, you can create a new one for the same user. If the user already
> has an approved KYC, a new submission is rejected.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.