--- title: "Verification codes" description: "Verification errors and remediation codes in webhooks or API responses" url: "https://docs.adyen.com/issuing/kyc-verification-codes" source_url: "https://docs.adyen.com/issuing/kyc-verification-codes.md" canonical: "https://docs.adyen.com/issuing/kyc-verification-codes" last_modified: "2024-06-04T11:13:00+02:00" language: "en" --- # Verification codes Verification errors and remediation codes in webhooks or API responses [View source](/issuing/kyc-verification-codes.md) When a verification error occurs, Adyen uses specific verification codes. These codes provide information such as which checks failed and what your users can do to fix the errors. This page provides an overview of the codes and their structure. * **Remediating action codes**: Provides possible solutions to fix a verification error. Whenever possible, Adyen sends a remediating action for every error. * **General error codes**: Provides a broad description of the cause of the verification error. * **Specific suberror codes**: Provides a more granular and specific cause of the verification error. Suberrors are linked to the general error codes. Use the suberror codes to build your verification error handling flows or [test different verification scenarios](/issuing/test-verification-errors) ## Requirements Before you begin, take into account the following requirements, limitations, and preparations. | Requirement | Description | | -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Integration type** | You have an [Adyen for Platforms](/adyen-for-platforms-model/) or [Adyen Issuing](/issuing) integration. | | **[API credentials](/development-resources/api-credentials/)** | To view the verification codes using API requests, you must have an [API web service user credential](/issuing/manage-access/api-credentials-web-service) for the [Configuration API](https://docs.adyen.com/api-explorer/balanceplatform/latest/overview). | | **[Customer Area roles](/account/user-roles)** | To view the verification codes using the Customer Area, you must have the **Manage account holder capabilities** [user role](/account/user-roles#platforms). | ## How to view the verification codes Check the verification codes in your Customer Area, or through API responses or webhooks. ### Tab: Customer Area To view capabilities of an account holder in your [Customer Area](https://ca-test.adyen.com/): 1. Do one of the following: * Go to **Accounts & balances** > **Account holders** and select an account holder ID from the table. * Search for an account holder by selecting **Search**. You can use the account holder ID, account holder reference, or the ID of the linked legal entity. 2. On the **Account holder details** page, select the **Capabilities** tab. You can view the capabilities that are enabled, allowed and their verification status. ### Tab: APIs and webhooks To check the verification codes, you can: * Make a GET [/accountHolders/{id}](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/get/accountHolders/{id}) request. * Or keep track of the [balancePlatform.accountHolder.created](https://docs.adyen.com/api-explorer/#/balanceplatform-webhooks/latest/post/balancePlatform.accountHolder.created) and [balancePlatform.accountHolder.updated](https://docs.adyen.com/api-explorer/#/balanceplatform-webhooks/latest/post/balancePlatform.accountHolder.updated) webhooks. The verification codes are in the [`problems` array](#example-problems-array). ## Recommendations for API-only onboarding When using [API-only onboarding](/issuing/onboard-users), we recommend that you build your error handling flows using the codes that best fit your use cases and available development resources. We try to provide you with the most accurate feedback. This requires you to build your implementation so that it can handle all possible verification codes. Using all the codes allows you to resolve issues for your users by providing them with more information about errors and what they need to do next. ## Problems array example When a verification error occurs, you get information from the [problems](https://docs.adyen.com/api-explorer/balanceplatform/latest/get/accountHolders/\(id\)#responses-200-capabilities-problems) array in an API response or a webhook. This array contains the following. * [entity](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/get/accountHolders/{id}) object: The ID of the legal entity that has a verification error. * [verificationErrors](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/get/accountHolders/{id}__resParam_capabilities-problems-verificationErrors) array: Contains the details of the errors. Each item contains: * [type](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/get/accountHolders/{id}__resParam_capabilities-problems-verificationErrors-type): The type of error. Possible values are **invalidInput** and **dataMissing**. * [code](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/get/accountHolders/{id}__resParam_capabilities-problems-verificationErrors-code): The general error code. * [message](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/get/accountHolders/{id}__resParam_capabilities-problems-verificationErrors-message): The general error message. * [remediatingActions](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/get/accountHolders/{id}__resParam_capabilities-problems-verificationErrors-remediatingActions): This object is sent when there is a common remediating action in the suberrors. This contains a `code` and `message`. * [subErrors](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/get/accountHolders/{id}__resParam_capabilities-problems-verificationErrors-subErrors) array. Each entry contains a `type`, `code`, `message`, and a `remediatingActions` array. **Problems array example** ```json { ... "problems": [ { "entity": { "id": "LE00000000000000000000001", "type": "LegalEntity" }, "verificationErrors": [ { "code": "1_30", "message": "Individual details couldn't be verified", "remediatingActions": [ { "code": "1_300", "message": "Update individual details" } ], "subErrors": [ { "code": "1_3001", "message": "The name and date of birth couldn't be verified.", "remediatingActions": [ { "code": "1_301", "message": "Upload an ID document" }, { "code": "1_300", "message": "Update individual details" } ], "type": "invalidInput" }, { "code": "1_3000", "message": "The user couldn't be verified.", "remediatingActions": [ { "code": "1_300", "message": "Update individual details" }, { "code": "1_301", "message": "Upload an ID document" } ], "type": "invalidInput" } ], "type": "invalidInput" } ] } ], "verificationStatus": "invalid" ... } ``` ## Next steps Build your error handling flows using the codes below. [Test verification scenarios](/issuing/test-verification-errors) [Simulate verification scenarios in your API calls.](/issuing/test-verification-errors) [Remediating action codes](/issuing/kyc-verification-codes/remediating-actions) [Possible solutions to resolve verification errors.](/issuing/kyc-verification-codes/remediating-actions) [General error codes](/issuing/kyc-verification-codes/general-verification-errors) [General error codes for different check types.](/issuing/kyc-verification-codes/general-verification-errors) [Specific sub-error codes](/issuing/kyc-verification-codes/sub-errors) [More granular error codes for different check types.](/issuing/kyc-verification-codes/sub-errors)