---
title: "Onboard and verify users"
description: "Move your account holders through the verification process."
url: "https://docs.adyen.com/classic-platforms/onboard-users"
source_url: "https://docs.adyen.com/classic-platforms/onboard-users.md"
canonical: "https://docs.adyen.com/classic-platforms/onboard-users"
last_modified: "2020-04-08T14:30:00+02:00"
language: "en"
---

# Onboard and verify users

Move your account holders through the verification process.

[View source](/classic-platforms/onboard-users.md)

This page is for classic Adyen for Platforms integrations. If you are just starting your implementation, refer to our [new integration guide](/adyen-for-platforms-model) instead.

As required by payment industry regulations, sub-merchants have to go through a verification process before you can enable payouts for them. These checks are required to help prevent fraudulent activities in your platform.

Before you can start the verification process, you must decide on:

* When to collect information: all at once for upfront verification, or whenever necessary for staggered verification.
* How to collect information: Use Adyen's Hosted Onboarding Page, or build your own onboarding application.

After we receive information from you or directly from your account holders, we automatically conduct the required verification checks.

## Upfront verification

In the upfront verification approach, the information for all required verification checks is collected and verified right after an account holder is created, eliminating the need to go back to them for more data later in the process. Once the account holder is verified, payouts are allowed regardless of the volume the account holder will process later on, ensuring uninterrupted business.

To enable upfront verification for your platform, contact our [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other).

## Staggered verification

During a staggered verification process, you collect the required information only when needed. This approach enables a faster initial sign-up, as not all account holders have to go through the full verification process. Account holders that process small amounts, for example, individuals, will have an easy onboarding process and can get paid out quickly.

However, for account holders that process higher amounts, their business may be interrupted when payouts are temporarily disabled. When they reach the limits of their current processing tier, additional verification checks are required and payouts are disabled. You must contact your account holder to provide the required information. After all data has been verified by Adyen, the account holder will be placed in a higher payout tier and payouts will be enabled again.

### Verification tiers

In a staggered verification approach, the verification tiers determine what additional information has to be collected and verified by Adyen to enable or continue payouts for account holders. The tiers and limits are defined based on the account holder's country, legal entity, and processing volume.

The tier system consists of two categories:

* **Processing tiers** are determined by the amount of funds processed.
* **Payout tiers** are determined by the verification checks passed.

When an account holder processes a larger volume of funds than what their current processing tier allows, they are moved to higher tier. Reaching a higher processing tier disables payouts and automatically triggers new verification checks. If the information required by the verification checks is missing or incorrect, we send [ACCOUNT\_HOLDER\_UPDATED](https://docs.adyen.com/api-explorer/Notification/latest/post/ACCOUNT_HOLDER_UPDATED) and [ACCOUNT\_HOLDER\_VERIFICATION](https://docs.adyen.com/api-explorer/Notification/latest/post/ACCOUNT_HOLDER_VERIFICATION) notifications, specifying the data the account holder needs to provide. After we receive all the data and there has been no request to precheck this information, the validation runs automatically. The account holders move to a higher payout tier when the validation is successful.

### Precheck the required information

When onboarding your account holders with a staggered verification process, Adyen does not verify their details until they reach a certain processing tier. However, there may be situations where you want to verify your account holder's details before they meet the thresholds. For example, verify an account holder early to prevent a pending verification from temporarily disabling payouts, or verify a high-risk account holder before allowing them to pay out.

To precheck the required information, send a POST [/checkAccountHolder](https://docs.adyen.com/api-explorer/Account/latest/post/checkAccountHolder) request and set the `accountStateType` to:

* **Payout** if you want to verify account holder details proactively.
* **Processing** if you want to force immediate verification.

### Tab: Proactively verify account holder details

You can run verification checks before they are required without interrupting processing and payouts by sending a POST [/checkAccountHolder](https://docs.adyen.com/api-explorer/Account/latest/post/checkAccountHolder) request and providing the following information:

* `accountHolderCode` of the account holder you want to verify.
* `accountStateType` set to **Payout**.
* `tier` set to the tier that you want to verify your account holder up to. Reach out to our [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other) if you are unsure which tier you need to set.

**Set payout tier to 2**

```bash
curl https://cal-test.adyen.com/cal/services/Account/v6/checkAccountHolder \
-H 'x-api-key: ADYEN_API_KEY' \
-H 'content-type: application/json' \
-d '{
  "accountHolderCode": "CODE_OF_ACCOUNT_HOLDER",
  "accountStateType": "Payout",
  "tier": 2
}'
```

**Response**

```json
{
    "pspReference": "8836183819713023",
    "resultCode": "Success"
}
```

We will perform verification on the account holder for all checks in the tier number provided. If the checks do not have enough information to verify or if a check fails, the current payout state will not be affected. Your account holder can continue processing payments and being paid out in their current tier.

For each verification check performed, we send the following notifications:

*  [ACCOUNT\_HOLDER\_VERIFICATION](https://docs.adyen.com/api-explorer/#/NotificationService/latest/ACCOUNT_HOLDER_VERIFICATION) : Contains the result of the verification.
*  [ACCOUNT\_HOLDER\_STATUS\_CHANGE](https://docs.adyen.com/api-explorer/#/NotificationService/latest/ACCOUNT_HOLDER_STATUS_CHANGE): Contains the tier the account holder has been verified against.

**Example ACCOUNT\_HOLDER\_STATUS\_CHANGE notification**

```json
{
   "eventDate": "2019-02-13T15:26:32+01:00",
   "eventType": "ACCOUNT_HOLDER_STATUS_CHANGE",
   "executingUserKey": "Status Update",
   "live": false,
   "pspReference": "8836183819713023",
   "content": {
      "accountHolderCode": "AH000001",
      "oldStatus": {...},
      "newStatus": {
         "status": "Active",
         "statusReason": "Reason of status",
         "processingState": {
            "disabled": false,
            "processedFrom": {
               "currency": "USD",
               "value": 0
            },
            "processedTo": {
               "currency": "USD",
               "value": 0
            },
            "tierNumber": 0
         },
         "payoutState": {
            "allowPayout": true,
            "disabled": false,
            "tierNumber": 2
         },
         "events": [
            ]
      }
   }
}
```

### Tab: Force immediate verification

Verifying an account holder before allowing them to pay out can help protect your platform from high-risk users. You can set the tier you want the account holder to successfully verify before they can pay out.

To verify while disabling payouts, make a POST [/checkAccountHolder](https://docs.adyen.com/api-explorer/Account/latest/post/checkAccountHolder) call and provide:

* `accountHolderCode` of the account holder you want to verify.
* `accountStateType` set to **Processing**.
* `tier` set to the tier that you want to verify your account holder up to. Reach out to [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other) if you are unsure which tier you need to set.

**Set processing tier to 2**

```bash
curl https://cal-test.adyen.com/cal/services/Account/v6/checkAccountHolder \
-H 'x-api-key: ADYEN_API_KEY' \
-H 'content-type: application/json' \
-d '{
  "accountHolderCode": "CODE_OF_ACCOUNT_HOLDER",
  "accountStateType": "Processing",
  "tier": 2
}'
```

**Response**

```json
{
    "pspReference": "8836183819713023",
    "resultCode": "Success"
}
```

We will perform verification on the account holder for all checks in the tier number provided. This immediately initiates the required checks for that tier, and only allow payouts if the verification is successful. If the checks do not have enough information to verify or if a check fails, payouts are disabled. You then need to collect the appropriate details from your account holder and make another `/checkAccountHolder` call to restart the verification.

For each verification check performed, we send the following notifications:

*  [ACCOUNT\_HOLDER\_VERIFICATION](https://docs.adyen.com/api-explorer/#/NotificationService/latest/ACCOUNT_HOLDER_VERIFICATION) : Contains the result of the verification.
*  [ACCOUNT\_HOLDER\_STATUS\_CHANGE](https://docs.adyen.com/api-explorer/#/NotificationService/latest/ACCOUNT_HOLDER_STATUS_CHANGE): Contains the tier the account holder has been verified against.

**Example ACCOUNT\_HOLDER\_STATUS\_CHANGE notification**

```json
{
   "eventDate" : "2019-02-13T15:25:32+01:00",
   "eventType" : "ACCOUNT_HOLDER_STATUS_CHANGE",
   "executingUserKey" : "Status Update",
   "live" : false,
   "pspReference" : "8836183819713023",
   "content" : {
      "accountHolderCode" : "CODE_OF_ACCOUNT_HOLDER",
      "oldStatus" : {
         "status" : "Active",
         "processingState" : {
            "disabled" : false,
            "processedFrom" : {
               "currency" : "USD",
               "value" : 50000
            },
            "tierNumber" : 2
         },
         "payoutState" : {
            "allowPayout" : false,
            "disabled" : false
         },
         "events" : [
            {
               "event" : "InactivateAccount",
               "executionDate" : "2019-03-15T15:25:16+01:00",
               "reason" : "Processed more than USD 500.00 or equivalent, deadline triggered"
            }
         ]
      },
      "newStatus" : {
         "status" : "Active",
         "processingState" : {
            "disabled" : false,
            "processedFrom" : {
               "currency" : "USD",
               "value" : 50000
            },
            "tierNumber" : 2
         },
         "payoutState" : {
            "allowPayout" : true,
            "disabled" : false,
            "tierNumber" : 2
         },
         "events" : [
         ]
      }
   }
}
```

## Onboarding options

To get the required information and verify your account holders, you can choose from the following onboarding options:

* **Hosted Onboarding Page**: Send account holders to an onboarding page where they provide additional information directly to Adyen. This is our recommended solution, because it requires less implementation effort on your side.
* **Custom onboarding application**: Collect information from account holders and pass it to Adyen using our API. You are in full control of the user interface and experience.

### Choose an option

[Hosted Onboarding Page](/classic-platforms/onboard-users/hosted-onboarding-page)

[Redirect account holders to an onboarding page.](/classic-platforms/onboard-users/hosted-onboarding-page)

[Custom onboarding](/classic-platforms/onboard-users/custom-onboarding)

[Build your own onboarding application.](/classic-platforms/onboard-users/custom-onboarding)
