> Toden documentation. For the full index fetch /llms.txt. Every page is available as Markdown by appending .md to its URL. Identity verification uses /api/kyc, Risk Intelligence uses /api/v1; they are separate contracts with different error shapes. Never invent an endpoint, field or enum value: read the API reference page for the operation first.

# Choose your integration

> Compare hosted verification links, client SDKs and the server API, and see which keys and effort each needs.

Every route below creates the same verification, runs the same checks and delivers the same result. They differ in who builds the screens and where the customer completes them.

> **Tip**
>
> If you are unsure, start with the **hosted link**. It needs one API call and no client code, and you can move to an SDK later without changing how you read results.

## Identity verification

|                             | Hosted link                                         | Web SDK                                       | Mobile SDK                                                                       | Server API                                        |
| --------------------------- | --------------------------------------------------- | --------------------------------------------- | -------------------------------------------------------------------------------- | ------------------------------------------------- |
| What you build              | One backend call                                    | A React component                             | A React Native or Flutter screen                                                 | Your own capture screens and backend calls        |
| Where the customer verifies | A page hosted by Toden                              | Inside your web app                           | Inside your mobile app                                                           | In your own screens                               |
| Key in the client           | None                                                | Publishable (`pk_`)                           | Publishable (`pk_`)                                                              | None                                              |
| Key on your backend         | Secret (`sk_`)                                      | Secret, to read results                       | Secret, to read results                                                          | Secret                                            |
| Document scan and liveness  | Yes                                                 | Yes                                           | Yes                                                                              | You capture and upload the media                  |
| NFC chip reading            | No                                                  | No                                            | Yes                                                                              | You read the chip yourself                        |
| Background address presence | No                                                  | No                                            | Yes                                                                              | Not applicable                                    |
| Typical effort              | Minutes                                             | An hour or two                                | Half a day, plus app permissions                                                 | Days                                              |
| Start here                  | [Hosted quickstart](/get-started/quickstart-hosted) | [SDK quickstart](/get-started/quickstart-sdk) | [React Native](/integrate/sdks/react-native), [Flutter](/integrate/sdks/flutter) | [Backend quickstart](/get-started/quickstart-api) |

### Which one is right for you

* **You have no app yet, or you onboard by email, SMS or WhatsApp.** Use a hosted link. You can also open the link inside a WebView or iframe and listen for [hosted link events](/integrate/hosted-links/hosted-events).
* **You have a React web app and want the flow inside it.** Use the [Web SDK](/integrate/sdks/react).
* **You have a mobile app, or you need NFC chip reading or address presence checks.** Use the [React Native](/integrate/sdks/react-native) or [Flutter](/integrate/sdks/flutter) SDK. Browsers cannot read identity-document chips.
* **You already collect ID numbers or photos yourself**, or you are checking a record with no customer present. Use the server API: [create a verification](/user-verification/server-api/create-verification) or run a [one-off check](/user-verification/server-api/one-off-checks).

### Configure the flow once, as a workflow

Whichever route you choose, describe the flow as a [workflow](/user-verification/workflows/workflows) in the dashboard: countries, ID types, capture steps, extra checks and the approve, review or decline [decision rules](/user-verification/workflows/decisioning). Hosted links and SDKs then reference it by ID (`wf_...`), so changing the flow is a re-publish in the dashboard, with no code release.

New organisations start with ready-made published workflows, so you can run a first verification without building one.

## Other identity products

| You want to                                       | Use                                                                        | Key                                     |
| ------------------------------------------------- | -------------------------------------------------------------------------- | --------------------------------------- |
| Verify a company and the people behind it         | [Business verification quickstart](/business-verification/quickstart)      | Publishable in an SDK, or a hosted link |
| Check one ID or one company from your back office | [One-off checks](/user-verification/server-api/one-off-checks)             | Secret                                  |
| Compare two face photos                           | [Face match](/user-verification/server-api/face-match)                     | Secret                                  |
| Prove an email address or phone number            | [Contact verification](/user-verification/server-api/contact-verification) | Secret                                  |
| Confirm a returning customer is the same person   | Biometric authentication (see the API reference)                           | Publishable                             |

## Risk Intelligence

Risk Intelligence is always called from your backend with a secret key. There is no client SDK, because a risk decision must never be made in code your customer controls.

| You want to                                            | Start with                                                               |
| ------------------------------------------------------ | ------------------------------------------------------------------------ |
| Allow, review or block a transaction or account action | [First risk decision](/risk-intelligence/quickstart)                     |
| Screen customers against sanctions and watchlists      | [Screening](/risk-intelligence/screening/screening)                      |
| Keep customers under continuous review                 | [Monitoring policies](/risk-intelligence/monitoring/policies)            |
| Screen a crypto wallet                                 | [On-demand wallet screening](/risk-intelligence/crypto/wallet-screening) |
| Apply Travel Rule controls to transfers                | [Travel Rule](/risk-intelligence/travel-rule/overview)                   |
| Work alerts and cases                                  | [Investigations](/risk-intelligence/operations/investigations)           |

Call the REST API directly from any language. A Node.js server SDK is in preparation and is **not yet published** to the public npm registry, so do not add it as a dependency yet.

## Next step

Pick a quickstart and get a sandbox result before you design anything else:

#### [Hosted link](/get-started/quickstart-hosted)

#### [SDK](/get-started/quickstart-sdk)

#### [Backend](/get-started/quickstart-api)