> ## 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 for non-regulated entities

> 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](https://docs.ripio.com/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](https://docs.ripio.com/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](https://docs.ripio.com/crypto-as-a-service/kyc-submissions/create-kyc-submission.md) with the user's `email`, the `kyc_submission` data and, optionally, the `redirect_url` to send them back to. 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` you sent when creating the KYC Submission (`https`, `worldapp` or `worldappstg` schemes), so you can bring each user back to their own screen or deep link. If you don't send one, the redirect URL configured for your account is used; if neither exists, the request answers `400` with code `20092`.

**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](https://docs.ripio.com/crypto-as-a-service/webhooks/baas-webhooks.md#verification-submission-webhook).
* **Polling**: [Retrieve KYC Submission](https://docs.ripio.com/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.

In sandbox, you can decide the outcome yourself to test both cases: see [KYC in sandbox](https://docs.ripio.com/crypto-as-a-service/kyc/kyc-in-sandbox.md).

> [!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.