--- title: "Periodic data reviews" description: "Learn how Adyen may request your user to verify that their data is up-to-date." url: "https://docs.adyen.com/platforms/verification-overview/data-review-process" source_url: "https://docs.adyen.com/platforms/verification-overview/data-review-process.md" canonical: "https://docs.adyen.com/platforms/verification-overview/data-review-process" last_modified: "2023-11-21T14:17:00+01:00" language: "en" --- # Periodic data reviews Learn how Adyen may request your user to verify that their data is up-to-date. [View source](/platforms/verification-overview/data-review-process.md) Adyen occasionally requires your users to review and confirm that their data is up-to-date. You also can choose to [proactively request the data review](#proactive-review) for your user. You may want to do this if your user does not engage with your platform on a regular basis. After a data review is triggered, Adyen immediately runs verification checks on the existing data of the user. This data includes information about their legal entity/legal arrangement and all entities associated with it, such as their ultimate beneficial owners (UBOs) and signatories. Adyen informs you through webhooks the review requirements for the user: ### Tab: User has verification errors The user must update their data (if needed), resolve the verification errors and then confirm the data. If the user data is updated, Adyen verifies their data again. ### Tab: No verification errors If there are no verification errors, the user must only review and confirm their data. In both scenarios, Adyen provides a verification deadline in the [webhook](#review-required). While the deadline is active, the user can continue using their capabilities that were allowed prior to the review request. If the user does not confirm the data and resolve any verification errors, their capabilities will be disallowed. The review is only considered finalized when the user has confirmed the data **and** resolved all verification errors. ## Step 1: Get updates when a review is required Adyen informs you if a user data review is required through a [balancePlatform.accountHolder.updated](https://docs.adyen.com/api-explorer/#/balanceplatform-webhooks/latest/post/balancePlatform.accountHolder.updated) webhook. The webhook contains the following information: | Field | Description | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | | [verificationStatus](https://docs.adyen.com/api-explorer/balanceplatform/latest/get/accountHolders/\(id\)#responses-200-capabilities-verificationStatus) | Set to `invalid` | | [allowed](https://docs.adyen.com/api-explorer/balanceplatform/latest/get/accountHolders/\(id\)#responses-200-capabilities-allowed) | Remains set to `true` | | [verificationErrors](https://docs.adyen.com/api-explorer/balanceplatform-webhooks/latest/post/balancePlatform.accountHolder.updated#request-data-accountHolder-capabilities-problems-verificationErrors) | Contains the verification error **3\_10** and message "Review of data is required". | | [verificationDeadlines](https://docs.adyen.com/api-explorer/balanceplatform-webhooks/latest/post/balancePlatform.accountHolder.updated#request-data-accountHolder-verificationDeadlines) | The date when the capability will be disallowed if the verification error is not resolved. | | [remediatingActions](https://docs.adyen.com/api-explorer/balanceplatform-webhooks/latest/post/balancePlatform.accountHolder.updated#request-data-accountHolder-capabilities-problems-verificationErrors-remediatingActions) | Contains the remediating action **3\_100** and message "Use `/legalEntities/{id}/confirmDataReview` to indicate that the data is confirmed". | Note that the webhook contains the capabilities that will be disallowed if the user does not confirm that they have reviewed and updated their data. **accountHolder.updated webhook - Data review required** ```json { "data": { "balancePlatform": "YourBalancePlatform", "id": "AH00000000000000000000001", "accountHolder": { "description": "Liable account holder used for international payments and payouts", "legalEntityId": "LE00000000000000000000001", "reference": "YOUR_INTERNAL_IDENTIFIER", "capabilities": { "sendToBalanceAccount": { "enabled": true, "requested": true, "allowed": true, "problems": [ { "entity": { "id": "LE00000000000000000000002", "type": "LegalEntity" }, "verificationErrors": [ { "code": "3_10", "message": "Review of data is required", "remediatingActions": [ { "code": "3_100", "message": "Use /legalEntities/{id}/confirmDataReview to indicate that the data is confirmed" } ], "type": "dataReview" } ] } ], "verificationStatus": "invalid" } }, "id": "AH00000000000000000000001", "status": "active", "verificationDeadlines": [ { "capabilities": [ "sendToBalanceAccount" ], "expiresAt": "2024-12-07T21:34:06+01:00" } ] } }, "environment": "test", "type": "balancePlatform.accountHolder.updated" } ``` ## Step 2 (optional): Proactively request a data review for your user This feature is only available if you are using onboarding v3 or v4. To streamline the process, we recommend that you request the data review during a time when your user is active in your platform. Note that we may also require a data review outside of the scheduled period if there is a significant change to the user's information or risk level. If you request a data review when the user is not eligible, for example when: * their next scheduled review date is more than a year away or * the user was onboarded or had their last review within in the past six months, we ensure the review is not activated and communicate the reason in an [error message](#troubleshooting). 1. To request the data review, make a POST `/legalEntities/{id}/requestPeriodicReview` request with the legal entity ID of the user in the path. 2. If the request is successful, you receive a **204** response. Adyen then informs you that a user data review is required through a [balancePlatform.accountHolder.updated](https://docs.adyen.com/api-explorer/#/balanceplatform-webhooks/latest/post/balancePlatform.accountHolder.updated) webhook. The webhook contains the following information: | Field | Description | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | | [verificationStatus](https://docs.adyen.com/api-explorer/balanceplatform/latest/get/accountHolders/\(id\)#responses-200-capabilities-verificationStatus) | Set to `invalid` | | [allowed](https://docs.adyen.com/api-explorer/balanceplatform/latest/get/accountHolders/\(id\)#responses-200-capabilities-allowed) | Remains set to `true` | | [verificationErrors](https://docs.adyen.com/api-explorer/balanceplatform-webhooks/latest/post/balancePlatform.accountHolder.updated#request-data-accountHolder-capabilities-problems-verificationErrors) | Contains the verification error **3\_10** and message "Review of data is required". | | [verificationDeadlines](https://docs.adyen.com/api-explorer/balanceplatform-webhooks/latest/post/balancePlatform.accountHolder.updated#request-data-accountHolder-verificationDeadlines) | The date when the capability will be disallowed if the verification error is not resolved. | | [remediatingActions](https://docs.adyen.com/api-explorer/balanceplatform-webhooks/latest/post/balancePlatform.accountHolder.updated#request-data-accountHolder-capabilities-problems-verificationErrors-remediatingActions) | Contains the remediating action **3\_100** and message "Use `/legalEntities/{id}/confirmDataReview` to indicate that the data is confirmed". | Note that the webhook contains the capabilities that will be disallowed if the user does not confirm that they have reviewed and updated their data. **accountHolder.updated webhook - Data review required** ```json { "data": { "balancePlatform": "YourBalancePlatform", "id": "AH00000000000000000000001", "accountHolder": { "description": "Liable account holder used for international payments and payouts", "legalEntityId": "LE00000000000000000000001", "reference": "YOUR_INTERNAL_IDENTIFIER", "capabilities": { "sendToBalanceAccount": { "enabled": true, "requested": true, "allowed": true, "problems": [ { "entity": { "id": "LE00000000000000000000002", "type": "LegalEntity" }, "verificationErrors": [ { "code": "3_10", "message": "Review of data is required", "remediatingActions": [ { "code": "3_100", "message": "Use /legalEntities/{id}/confirmDataReview to indicate that the data is confirmed" } ], "type": "dataReview" } ] } ], "verificationStatus": "invalid" } }, "id": "AH00000000000000000000001", "status": "active", "verificationDeadlines": [ { "capabilities": [ "sendToBalanceAccount" ], "expiresAt": "2024-12-07T21:34:06+01:00" } ] } }, "environment": "test", "type": "balancePlatform.accountHolder.updated" } ``` ### Troubleshooting * If you attempt to request a review more than one year prior to the user's next scheduled review, you will receive the error code **422** and message **A periodic review can only be requested when the next scheduled deadline is within one year**. * If you attempt to request a review and the endpoint is not available for any other reason, you will receive the error code **422** and message **Unable to request periodic review for this legal entity**. * If you attempt to request a review less than 180 days from the date of the previous review, you will receive the error code **422** and message **A periodic review cannot be started yet as a review was completed recently**. ## Step 3: Ask your users to review their data within the deadline Inform your user that they need to review their data and to provide updated information if needed. Follow the steps below depending on your type of integration. ### Tab: Hosted onboarding 1. Make a GET [/legalEntities/{id}](https://docs.adyen.com/api-explorer/legalentity/latest/get/legalEntities/\(id\)) request with the legal entity ID of the user in the path. Review any user information that you submitted to Adyen through API requests. For example, information about the user's legal entities. 2. If needed, make a PATCH [/legalEntities/{id}](https://docs.adyen.com/api-explorer/legalentity/latest/patch/legalEntities/\(id\)) request to update any user information. 3. Then, create a hosted onboarding link. When the user is redirected to the link, they are presented with a summary page where they can confirm or update their data. ![](/user/pages/reuse/pfs-verification/verification-overview/data-review/hosted-onboarding-review.png) 4. After the user completes their review, they need to select the checkbox and then select **Submit review** to confirm that their data is now up-to-date. This resolves the verification error related to the data review. ![](/user/pages/reuse/pfs-verification/verification-overview/data-review/submit-data-review.png) ### Tab: API-only onboarding 1. Present your user's information in your UI. To do this, first make a GET [/legalEntities/{id}](https://docs.adyen.com/api-explorer/legalentity/latest/get/legalEntities/\(id\)) request with the legal entity ID of the user in the path. You also need to make a GET [/legalEntities/{id}](https://docs.adyen.com/api-explorer/legalentity/latest/get/legalEntities/\(id\)) request for all the user's associated entities, such as their UBOs and signatories. 2. Make API requests to get information for the user's supporting entities. For example: * GET [/transferInstruments/{id}](https://docs.adyen.com/api-explorer/legalentity/latest/get/transferInstruments/\(id\)) for their transfer instruments. * GET [/legalEntities/{id}/businessLines](https://docs.adyen.com/api-explorer/legalentity/latest/get/legalEntities/\(id\)/businessLines) for their business lines. * GET [/merchants/{merchantId}/stores](https://docs.adyen.com/api-explorer/Management/latest/get/merchants/\(merchantId\)/stores) for their stores. 3. Ask your user to review and confirm if their data is up-to-date. If their data needs to be be updated, make a PATCH [/legalEntities/{id}](https://docs.adyen.com/api-explorer/legalentity/latest/patch/legalEntities/\(id\)) request with the updated information in the body of the request. 4. When the user confirms that their data is now up-to-date, make a POST [/legalEntities/{id}/confirmDataReview](https://docs.adyen.com/api-explorer/legalentity/latest/post/legalEntities/\(id\)/confirmDataReview) request. The response returns the time when the data review was confirmed in the [dataReviewedAt](https://docs.adyen.com/api-explorer/legalentity/latest/post/legalEntities/\(id\)/confirmDataReview#responses-200-dataReviewedAt) field. This resolves the verification error related to the data review. **confirmDataReview response** ```json { "dataReviewedAt":"2023-07-13T15:19:02Z" } ``` ## Step 4: Get the verification results Once the review has been submitted, Adyen verifies the user’s data and informs you of the results through the [balancePlatform.accountHolder.updated](https://docs.adyen.com/api-explorer/#/balanceplatform-webhooks/latest/post/balancePlatform.accountHolder.updated) webhook. To resolve any verification errors, follow the steps based on your integration type: [API-only onboarding](/platforms/onboard-users) or [Hosted onboarding](/platforms/onboard-users). After the user has reviewed their data and the verification is valid, there is no further action needed. ### Verification valid When the checks are completed successfully, Adyen sends a [balancePlatform.accountHolder.updated](https://docs.adyen.com/api-explorer/#/balanceplatform-webhooks/latest/post/balancePlatform.accountHolder.updated) webhook with: * [verificationStatus](https://docs.adyen.com/api-explorer/balanceplatform/latest/get/accountHolders/\(id\)#responses-200-capabilities-verificationStatus): Set to **valid**. * [allowed](https://docs.adyen.com/api-explorer/balanceplatform/latest/get/accountHolders/\(id\)#responses-200-capabilities-allowed): Set to **true**. **balancePlatform.accountHolder.updated webhook - verification completed** ```json { "data":{ "accountHolder":{ "capabilities":{ "sendToTransferInstrument":{ "allowed":"true", "enabled":"true", "requested":"true", "verificationStatus":"valid" } }, "description":"Test Account holder", "id":"AH00000000000000000000001", "legalEntityId":"LE00000000000000000000001", "reference":"YOUR_INTERNAL_IDENTIFIER", "status":"active" }, "balancePlatform":"YOUR_BALANCE_PLATFORM" }, "environment":"test", "type":"balancePlatform.accountHolder.updated" } ``` ### Verification invalid When there are problems with the verification, Adyen sends a [balancePlatform.accountHolder.updated](https://docs.adyen.com/api-explorer/#/balanceplatform-webhooks/latest/post/balancePlatform.accountHolder.updated) webhook. The webhook contains the following information: * [verificationStatus](https://docs.adyen.com/api-explorer/balanceplatform/latest/get/accountHolders/\(id\)#responses-200-capabilities-verificationStatus): Set to **invalid**. * [allowed](https://docs.adyen.com/api-explorer/balanceplatform/latest/get/accountHolders/\(id\)#responses-200-capabilities-allowed): Set to **false** or **true** with the [verificationDeadlines](https://docs.adyen.com/api-explorer/balanceplatform-webhooks/latest/post/balancePlatform.accountHolder.updated#request-data-accountHolder-verificationDeadlines) array showing when the capability will be disallowed if the verification error is not resolved. * [problems](https://docs.adyen.com/api-explorer/balanceplatform/latest/get/accountHolders/\(id\)#responses-200-capabilities-problems): Contains `verificationErrors`, `subErrors`, and `remediatingActions` arrays returned on the linked legal entity. If there are verification errors, you must resolve them. To see any [problems](https://docs.adyen.com/api-explorer/balanceplatform/latest/get/accountHolders/\(id\)#responses-200-capabilities-problems) also returned on the transfer instrument resource, reach out to your Adyen contact to enable the feature. For example, if your users have multiple transfer instruments, this can help them more easily see the errors and on which transfer instrument they need to be resolved. **balancePlatform.accountHolder.updated webhook - with verification errors array** ```json { "data":{ "accountHolder":{ "capabilities":{ "sendToTransferInstrument":{ "allowed":"false", "enabled":"true", "problems":[ { "entity":{ "id":"LE00000000000000000000001", "type":"LegalEntity" }, "verificationErrors":[ { "code":"2_8037", "message":"bankStatement was missing.", "remediatingActions":[ { "code":"1_703", "message":"Upload a bank statement" } ], "type":"dataMissing" } ] } ], "requested":"true", "verificationStatus":"invalid" } }, "description":"Test Account holder", "reference":"YOUR_INTERNAL_IDENTIFIER", "id":"AH00000000000000000000001", "legalEntityId":"LE00000000000000000000001", "status":"Active" }, "balancePlatform":"YOUR_BALANCE_PLATFORM" }, "environment":"test", "type":"balancePlatform.accountHolder.updated" } ``` ## Test the data review flow In this scenario, you force Adyen to send a verification error relating to one of your users (a legal entity). This verification error is due to an outstanding data review required by Adyen. The account holder for the legal entity must already have capabilities allowed to be able test the flow. ### Step 1: Make an API request Using the [Legal Entity Management API](https://docs.adyen.com/api-explorer/legalentity/latest/overview), make a PATCH [/legalEntities/{id}](https://docs.adyen.com/api-explorer/#/legalentity/latest/patch/legalEntities/{id}) request. Include the [x-requested-verification-code](https://docs.adyen.com/api-explorer/legalentity/latest/post/legalEntities#header-x_requested_verification_code) `3_10` in the header of your request. ### Step 2: Check verification results To confirm that the legal entity has an outstanding data review required, you can: * Listen to the [balancePlatform.accountHolder.updated](https://docs.adyen.com/api-explorer/#/balanceplatform-webhooks/latest/post/balancePlatform.accountHolder.updated) webhook or * Make a GET [/legalEntities/{id}](https://docs.adyen.com/api-explorer/legalentity/latest/get/legalEntities/\(id\)) request for the specified legal entity or * Make a POST [/checkVerificationErrors](https://docs.adyen.com/api-explorer/legalentity/latest/post/legalEntities/\(id\)/checkVerificationErrors) request for the specified legal entity. These all contain the verification error **3\_10** and message "Review of data is required". ### Step 3: Resolve the verification error Make a POST [/legalEntities/{id}/confirmDataReview](https://docs.adyen.com/api-explorer/legalentity/latest/post/legalEntities/\(id\)/confirmDataReview) request with the specified legal entity ID in the path. The response returns the time when the data review was confirmed in the [dataReviewedAt](https://docs.adyen.com/api-explorer/legalentity/latest/post/legalEntities/\(id\)/confirmDataReview#responses-200-dataReviewedAt) field. You can confirm the verification error was resolved by listening to webhooks or making a GET API request. ## See also * [Onboard users](/platforms/onboard-users)