> For a complete page index, fetch https://docs.transak.com/llms.txt

# How to use KYC Reliance

In this tutorial, we will walk you through building KYC Reliance into an app using Transak's Whitelabel APIs. By now, the user has selected a quote (using the [Look Up APIs](/api/whitelabel/lookup/get-countries)) and has been authenticated (using the [User APIs](/api/whitelabel/user/send-user-otp)). Before they can place an order, Transak needs to verify their identity.

**KYC Reliance** lets partners skip user identity verification if the user has already completed KYC with a trusted provider on the partner's end. Transak supports two paths for KYC Reliance.

## Two KYC Reliance Paths

| Path                                                                       | Who provides the KYC data                         | Best for                                                 |
| -------------------------------------------------------------------------- | ------------------------------------------------- | -------------------------------------------------------- |
| **[Path 1: KYC Reliance using Sumsub](#path-1-kyc-reliance-using-sumsub)** | KYC Sumsub — via a sharing token                  | Partners whose users already completed KYC inside Sumsub |
| **[Path 2: KYC Reliance using API](#path-2-kyc-reliance-using-api)**       | Partner passes all user details directly via APIs | Partners using any KYC provider (Sumsub, Onfido, etc.)   |

## Path 1: KYC Reliance using Sumsub

Partner generates a token from Sumsub and passes it to Transak via the [KYC Reliance Quote API](/api/whitelabel/kyc-reliance/get-kyc-reliance-quote). Transak fetches the user's verified identity data directly from Sumsub — the user skips KYC screening entirely.

Set up your Sumsub dashboard for KYC Reliance using [this guide](/features/kyc-reliance#how-to-integrate-1).

Before generating a share token, confirm the user's Sumsub record contains all required fields. Transak will reject tokens for incomplete profiles. <br />

[Mandatory Fields for KYC Reliance using Sumsub](/features/kyc-reliance#mandatory-fields)
(Full list of required fields, validations, and accepted formats — name, DOB, address, ID document, and liveness.)

Generate a **KYC share token** from your Sumsub dashboard or backend. This token is valid for 5 minutes and can only be used once — it is required to fetch the user's KYC data from Sumsub.

To generate the token, follow the steps in [How to Share Sumsub KYC](/guides/how-to-share-sumsub-kyc).

Once the KYC share token is generated, call the [Get KYC Reliance Quote](/api/whitelabel/kyc-reliance/get-kyc-reliance-quote) API with the `kycShareToken` and `kycShareTokenProvider` alongside the standard quote parameters. <br />

This returns a `quoteId` scoped to the KYC Reliance flow.

```bash title="Get KYC Reliance Quote"
curl "https://api-gateway-stg.transak.com/api/v2/kyc-reliance/quote?fiatCurrency=USD&cryptoCurrency=ETH&isBuyOrSell=BUY&fiatAmount=100&network=ethereum&paymentMethod=credit_debit_card&kycShareTokenProvider=SUMSUB&kycShareToken=YOUR_SUMSUB_SHARE_TOKEN" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "x-user-ip: USER_IP_ADDRESS"
```

Store the returned `quoteId` — it is required for the next step.

Call [Get KYC Reliance Status](/api/whitelabel/kyc-reliance/get-kyc-reliance-status) with the `quoteId` and `kycShareToken` to check whether Transak has successfully imported the user's KYC data from Sumsub.

```bash title="Get KYC Reliance Status"
curl "https://api-gateway-stg.transak.com/api/v2/kyc-reliance/status?quoteId=QUOTE_ID&kycShareToken=YOUR_SUMSUB_SHARE_TOKEN" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "x-user-ip: USER_IP_ADDRESS" \
  -H "Authorization: USER_ACCESS_TOKEN"
```

The response contains the KYC import status: `IMPORTED`, `DONE`, or `FAILED`. Route the user based on this value.

Call [Get Requirements](/api/whitelabel/kyc-reliance/get-requirements) to check whether all mandatory fields have been successfully submitted. This step validates the completeness of the user's KYC data before allowing order creation.

```bash title="Get Requirements"
curl "https://api-gateway-stg.transak.com/api/v2/kyc-reliance/requirements?quoteId=QUOTE_ID" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "x-user-ip: USER_IP_ADDRESS" \
  -H "Authorization: USER_ACCESS_TOKEN"
```

Inspect the response to determine next steps:

| Response                                             | Action                                           |
| ---------------------------------------------------- | ------------------------------------------------ |
| All fields present and valid                         | Proceed directly to order creation               |
| `personalDetails` or `addressDetails` fields missing | Go to Step 7 — patch the missing fields          |
| `additionalFormRequired: true`                       | Go to Step 8 — fetch the additional requirements |

The response lists every missing or invalid field. Use it to decide whether to patch identity data, collect an additional form, or proceed.

If the requirements check returned missing `personalDetails` or `addressDetails`, call [Patch Identity Details](/api/whitelabel/kyc-reliance/patch-identity-details) to supply only the missing fields. You do not need to re-submit fields that are already accepted.

```bash title="Patch Identity Details"
curl -X PATCH "https://api-gateway-stg.transak.com/api/v2/kyc-reliance/identity" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "x-user-ip: USER_IP_ADDRESS" \
  -H "Authorization: USER_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "personalDetails": {
      "firstName": "Jane",
      "lastName": "Doe",
      "dob": "1998-01-01",
      "mobileNumber": "+33791112345"
    },
    "addressDetails": {
      "addressLine1": "170 Rue du Faubourg Saint-Denis",
      "city": "Paris",
      "state": "Paris",
      "postCode": "75010",
      "countryCode": "FR"
    }
  }'
```

After a successful PATCH, call [Get Requirements](#get-requirements) again to confirm the fields are now accepted before proceeding.

If the requirements check returned `additionalFormRequired: true`, call [Get Additional Requirements](/api/whitelabel/kyc-reliance/get-additional-requirements) to find out exactly what supplementary data Transak needs.

```bash title="Get Additional Requirements"
curl "https://api-gateway-stg.transak.com/api/v2/kyc-reliance/additional-requirements?quoteId=QUOTE_ID" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "x-user-ip: USER_IP_ADDRESS" \
  -H "Authorization: USER_ACCESS_TOKEN"
```

The response describes what is still needed. Based on this, take the appropriate action:

| Additional requirement       | Action                                  |
| ---------------------------- | --------------------------------------- |
| Supporting document required | Go to Step 9a — upload the document     |
| Purpose of usage missing     | Go to Step 9b — submit purpose of usage |

Complete the additional requirements identified in Step 8.

Call [Upload Document](/api/whitelabel/kyc-reliance/upload-document) with the document type and base64-encoded image specified in the additional requirements response.

```bash title="Upload Document"
curl -X POST "https://api-gateway-stg.transak.com/api/v2/kyc-reliance/document" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "x-user-ip: USER_IP_ADDRESS" \
  -H "Authorization: USER_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "idType": "PROOF_OF_RESIDENCE",
    "idCountryCode": "FR",
    "frontImage": "data:image/jpeg;base64,..."
  }'
```

Accepted formats: `JPEG`, `PNG`, `WEBP` — max 5 MB per image.

Call [Submit Purpose of Usage](/api/whitelabel/kyc-reliance/submit-purpose) with the user's selected purpose from the list returned by Get Additional Requirements.

```bash title="Submit Purpose of Usage"
curl -X POST "https://api-gateway-stg.transak.com/api/v2/kyc-reliance/purpose" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "x-user-ip: USER_IP_ADDRESS" \
  -H "Authorization: USER_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "purposeList": ["Buying/selling crypto for investments"]
  }'
```

After fulfilling all additional requirements, call [Get Requirements](/api/whitelabel/kyc-reliance/get-requirements) one final time to confirm everything is accepted. Once the requirements check returns no missing fields, the user can proceed to order creation.

### KYC Reliance APIs

Returns a quote scoped to the KYC Reliance flow. Pass `kycShareToken` and `kycShareTokenProvider` alongside standard quote params.

Returns the KYC import status (`IMPORTED`, `DONE`, `FAILED`). Route the user based on this value.

Returns missing or invalid fields. Use this after getting status to confirm completeness before order creation.

Supplies missing personal or address fields without re-submitting already accepted data.

Returns the supplementary data Transak needs when `additionalFormRequired` is true.

Uploads a supporting document as a base64-encoded image to satisfy an additional document requirement.

Submits the user's selected purpose when purpose of usage is listed as an additional requirement.

## Path 2: KYC Reliance using API

The partner's backend submits the user's KYC data directly to Transak via three sequential API calls: `Identity Details`, `Document Details`, and `Biometrics Details`.

This path is **provider-agnostic** — it works with Sumsub, Onfido, or any KYC vendor your platform uses.

For KYC Reliance using API, Transak requires a compliance review before this feature can be enabled in production.

**To implement KYC Reliance using API, follow the steps in [this guide](/features/kyc-reliance#how-to-integrate).**

### KYC Reliance using APIs

Submits personal details, address, purpose of usage, and optional TIN.

Submits ID document images as base64-encoded data.

Submits selfie or liveness video to complete the KYC submission.