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

# Onboarding (KYB Widget)

> Embed end-to-end Know Your Business verification in your product.

Vouchmark Onboarding lets you embed a full KYB verification flow into your own product. Your applicants complete the checks inside a hosted widget — you get a risk score and decision delivered via webhook.

## How it works

<Steps>
  <Step title="Configure a widget">
    Pick which verification modules to run, set branding, configure risk thresholds, and define the flow order. Use a pre-built template (Fintech, Marketplace, Crypto, Lending) or start from scratch.
  </Step>

  <Step title="Integrate the SDK">
    Add the widget to your frontend with a single script tag or React/Flutter/RN component. See [SDKs](/sdks/overview).
  </Step>

  <Step title="Applicant completes the flow">
    The widget guides the applicant through each module — collecting data, running live verifications, and uploading documents. Progress is saved automatically.
  </Step>

  <Step title="Risk engine decides">
    Once all modules complete, the risk engine computes a score. Based on your thresholds, the applicant is auto-approved, auto-rejected, or flagged for manual review.
  </Step>

  <Step title="You act on the decision">
    Read the applicant's final `status` — `approved`, `rejected`, or `requires_review` — via `GET /v1/kyb/applicants/:applicantId`, and update your system accordingly. You can also register a `kyc_widget` webhook endpoint for this app (see [Webhooks](/webhooks)).
  </Step>
</Steps>

## Key concepts

### Widgets

A widget is a named, versioned configuration for an onboarding flow. You can have multiple widgets — one for each use case (e.g. seller onboarding, lending KYB, exchange compliance).

### Modules

Modules are the individual verification checks within a widget. Each module has:

* An **enabled** flag (include in the flow or not)
* A **required** flag (applicant cannot skip)
* A cost (deducted from your wallet per execution)

See [Pricing](/pricing) for per-module costs.

### Applicants

An applicant is a single entity going through your widget. Each applicant session has:

* A **status** lifecycle: `created` → `in_progress` → `submitted` → `approved`/`rejected`/`requires_review`
* A **risk score** (0–100)
* A **total cost** (sum of all modules executed)

### Risk tiers

| Tier         | Behaviour                                                                               |
| ------------ | --------------------------------------------------------------------------------------- |
| **Low**      | Fewer modules, higher auto-approve threshold. Fast track for known-low-risk applicants. |
| **Standard** | Balanced module set. Default for most use cases.                                        |
| **Enhanced** | Full due diligence including UBOs, adverse media, and operational proof.                |

### Templates

Pre-configured starting points:

| Template          | Modules included                                      | Typical use case           |
| ----------------- | ----------------------------------------------------- | -------------------------- |
| Fintech           | CAC, TIN, Bank, Directors KYC, AML, Sanctions, PEP    | Payment platforms, lending |
| Marketplace       | Business profile, CAC, Bank, Address, Sanctions       | Seller onboarding          |
| Crypto Exchange   | All modules                                           | Regulated exchanges        |
| Lending           | CAC, TIN, Bank, Operational proof, Directors KYC, AML | Credit providers           |
| Payment Processor | CAC, TIN, Bank, AML, Sanctions, PEP                   | PSPs and aggregators       |

## Security

* **Domain allowlisting** — the widget only renders on approved origins.
* **Signed requests** — optionally require your server to generate a signed session token before the widget opens.
* **IP allowlisting** — restrict API-initiated sessions to specific IPs.
* **Session timeout** — configurable inactivity timeout (default 60 minutes).

## Where to go next

<CardGroup cols={2}>
  <Card title="SDK integration" icon="code" href="/sdks/overview">
    Install the widget in your frontend.
  </Card>

  <Card title="Widget API" icon="puzzle-piece" href="/api-reference/onboarding/list-widgets">
    Manage widgets programmatically.
  </Card>
</CardGroup>
