> ## Documentation Index
> Fetch the complete documentation index at: https://rain-sandbox-trial.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Standard and Hybrid Compliance Flows

> Choose how much of onboarding (identity verification, documents, terms acceptance) Rain handles for you under Standard Compliance, versus what you run in your own compliance program under Hybrid Compliance.

Every program takes end users through the same onboarding work: identity verification, supporting documents, and terms acceptance. What you choose is how much of that Rain handles. Under **Standard Compliance**, redirect users to Rain's hosted flow and Rain runs whatever is left. Under **Hybrid Compliance**, keep them in your own UI and compliance program, and integrate each piece yourself.

The two aren't exclusive. The hosted flow accepts a user at any point after the application is created, so a Hybrid Compliance integration can hand off to it whenever it needs to. Hybrid Compliance is generally available on Enterprise plans. Enabling it starts with a compliance audit of your program, coordinated by Rain: expect a kickoff call, about five weeks of review, and a findings call to close it out.

<Info>
  Your compliance model is separate from your [management model](/docs/first-steps).
  Rain-Managed and Partner-Managed describe how collateral and funds are handled,
  not who verifies your customers.
</Info>

## Standard Compliance

Rain verifies your customers and hosts the onboarding flow at the `applicationCompletionLink` URL. While an application is in a non-approved state, user and company API responses, and [`user.updated`](/changelog/webhooks/v1/user/updated) / [`company.updated`](/changelog/webhooks/v1/company/updated) webhooks, include the link. It disappears once the application is `approved`. The link resolves to `/kyc` for consumer applications and `/kyb` for corporate ones.

Send a user there as often as you like: the flow reads the application's current state, picks up at the first outstanding step, and runs the remaining steps in order.

| Where the application is                    | What the user gets                                                            |
| ------------------------------------------- | ----------------------------------------------------------------------------- |
| Just created                                | A Rain intro page, then the Sumsub SDK, then terms acceptance if it's enabled |
| Submitted, documents outstanding            | The Sumsub SDK to upload documents, then terms acceptance if it's enabled     |
| Documents already submitted through the API | Terms acceptance, if it's enabled                                             |
| Nothing outstanding                         | A success state                                                               |

Redirect to the link's `url` with all of its `params` as query parameters, plus two you control:

| Parameter  | Description                                          |
| ---------- | ---------------------------------------------------- |
| `redirect` | Where to send the user on your site once they finish |
| `lang`     | Flow language: `en` (default) or `es`                |

Track the application status through [webhooks](/docs/webhooks) or by refetching it; see [Application States](/docs/application-states) for what each state means.

## Hybrid Compliance

You verify customers in your own compliance program, render the onboarding UI, and integrate each piece:

* **Create and update applications:** see [Signing Up a Customer](/docs/signing-up-a-customer).
* **Submit compliance documents** programmatically: see [Submit pre-collected documents](/docs/submit-pre-collected-documents) and [KYC/KYB documents](/docs/kyc-kyb-documents).
* **Reuse an existing compliance vendor** instead of re-verifying users: see [Reuse an existing verification](/docs/reuse-existing-verification) for Sumsub and Persona token sharing and other vendors.
* **Embed the steps that render on a Rain surface:** terms acceptance embeds as an iframe your page drives over `postMessage`; see [Capturing End User Acceptance of Terms](/docs/terms-acceptance).
* **Track progress with webhooks** so your UI reflects the application's real state.

You can stop at any point and hand the rest to Rain: surface the `applicationCompletionLink` and the hosted flow picks the user up wherever they are. That's your escape hatch when a step isn't built yet, a user gets stuck, or a new onboarding requirement ships before you've integrated it.

## Choosing between them

|                      | Standard Compliance     | Hybrid Compliance                                              |
| -------------------- | ----------------------- | -------------------------------------------------------------- |
| Integration          | One redirect            | API integration plus embedded steps                            |
| UI                   | Rain's hosted UI        | Your UI, with Rain's hosted steps embedded where required      |
| New onboarding steps | Picked up automatically | Integrated by you as they ship                                 |
| Availability         | All programs            | Generally Enterprise, confirm with your Implementation Manager |

You don't have to choose once for everything. Most programs create and manage applications through the API, hand users to the hosted flow for the interactive steps, and move individual steps into their own UI as the program grows.

## What's next

<CardGroup cols={2}>
  <Card title="Signing up a customer" icon="user-plus" href="/docs/signing-up-a-customer">
    Create and manage applications through the API.
  </Card>

  <Card title="Application states" icon="list-check" href="/docs/application-states">
    What each application state means and what to do about it.
  </Card>

  <Card title="Terms acceptance" icon="file-signature" href="/docs/terms-acceptance">
    Embed the terms acceptance step in your own UI.
  </Card>

  <Card title="Webhooks overview" icon="webhook" href="/docs/webhooks">
    Track application progress in real time.
  </Card>
</CardGroup>
