{"title":"Custom onboarding","category":"Classic Platforms","creationDate":1776961628,"content":"<div class=\"sc-notice info\"><div>\n<p>This page is for classic Adyen for Platforms integrations. If you are just starting your implementation, refer to our <a href=\"\/pt\/adyen-for-platforms-model\">new integration guide<\/a> instead.<\/p>\n<\/div><\/div>\n<p>We recommend that you use the <a href=\"\/pt\/classic-platforms\/onboard-users\/hosted-onboarding-page\">Hosted Onboarding Page<\/a>, because it requires less implementation effort on your side and account holders can send the necessary information directly to Adyen. However, it is also possible to build your own onboarding flow. If you choose to build your own onboarding implementation, you need to set up a way to collect data from your account holder to pass the verification checks required by Adyen.<\/p>\n<p>Your onboarding process must follow these main steps:<\/p>\n<ol>\n<li><a href=\"#create-account-holder\">Create an account holder.<\/a><\/li>\n<li><a href=\"#update-account-holder\">Update the account holder<\/a> with additional details, depending on the verification check you are trying to pass.<\/li>\n<li><a href=\"#get-the-kyc-results\">Keep track of the verification results<\/a> through notification webhooks.<\/li>\n<li><a href=\"#upload-documents\">Upload additional documents<\/a> if necessary.<\/li>\n<\/ol>\n<h2>Requirements<\/h2>\n<ol>\n<li>\n<p>Before you start the verification process, you must decide whether to collect all required information once in the beginning, or later in stages as they become necessary.<\/p>\n<ul>\n<li><a href=\"\/pt\/classic-platforms\/onboard-users#upfront-verification\">Upfront verification<\/a> unlocks all payment processing and payouts tiers. It requires you to collect all necessary data at the beginning of the onboarding flow.<\/li>\n<li><a href=\"\/pt\/classic-platforms\/onboard-users#staggered-verification\">Staggered verification<\/a> requires you to collect additional information from the account holder whenever the funds processed exceed their current processing tier.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Get the <a href=\"\/pt\/classic-platforms\/verification-process\/required-information\">verification requirements<\/a> based on the country and legal entity type.<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"create-account-holder\">Step 1: Create an account holder<\/h2>\n<p>Before you start the verification process, you must <a href=\"\/pt\/classic-platforms\/account-holders-and-accounts#create-an-account-holder\">create an account holder<\/a>, taking note of the <code>accountHolderCode<\/code> in the response.<\/p>\n<p>After an account holder is created, they can immediately start processing payments.<\/p>\n<h2 id=\"update-account-holder\">Step 2: Update the account holder<\/h2>\n<p>When the account holder starts processing a larger volume of funds than what their current processing tier allows, they automatically advance to higher processing tier. This triggers additional verification checks.<\/p>\n<p>If you have chosen the upfront verification approach, the verification checks run automatically without any request for additional information from you, unlocking higher payout tiers when necessary. Adyen sends an <a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/NotificationService\/latest\/ACCOUNT_HOLDER_VERIFICATION\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ACCOUNT_HOLDER_VERIFICATION<\/a> notification to your server containing the <a href=\"\/pt\/classic-platforms\/verification-process\/check-verification-results#verification-statuses\">\n  <code>status<\/code>\n<\/a> of the verification checks.<\/p>\n<p>If you have chosen the <a href=\"\/pt\/classic-platforms\/onboard-users#staggered-verification\">staggered verification method<\/a> or if the previously collected data is missing or invalid, payouts will be disabled and Adyen sends an <a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/NotificationService\/latest\/ACCOUNT_HOLDER_STATUS_CHANGE\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ACCOUNT_HOLDER_STATUS_CHANGE<\/a> notification. You need to ask the account holder for more information at this point. The information that Adyen requires from the account holder depends on their legal entity type.<\/p>\n<ol>\n<li>Listen to the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Notification\/latest\/post\/ACCOUNT_HOLDER_UPDATED\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ACCOUNT_HOLDER_UPDATED<\/a> and  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Notification\/latest\/post\/ACCOUNT_HOLDER_VERIFICATION\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ACCOUNT_HOLDER_VERIFICATION<\/a> notifications to learn what information you need to collect from your account holder.<\/li>\n<li>Collect the information and provide the data in a POST <a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/Account\/updateAccountHolder\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/updateAccountHolder<\/a> call.<\/li>\n<\/ol>\n<p>The following example shows how to provide the full address of an existing account holder.<\/p>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Provide information for verification'\" :id=\"''\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/cal-test.adyen.com\\\/cal\\\/services\\\/Account\\\/v6\\\/updateAccountHolder \\\\\\n-H 'x-api-key: ADYEN_API_KEY' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-d '{\\n    \\&quot;accountHolderCode\\&quot;: \\&quot;YOUR_UNIQUE_ACCOUNT_HOLDER_CODE\\&quot;,\\n    \\&quot;accountHolderDetails\\&quot;: {\\n      \\&quot;address\\&quot;: {\\n        \\&quot;city\\&quot;: \\&quot;NY\\&quot;,\\n        \\&quot;country\\&quot;: \\&quot;US\\&quot;,\\n        \\&quot;postalCode\\&quot;: \\&quot;12345\\&quot;,\\n        \\&quot;stateOrProvince\\&quot;: \\&quot;NH\\&quot;,\\n        \\&quot;street\\&quot;: \\&quot;Teststreet 1\\&quot;,\\n        \\&quot;houseNumberOrName\\&quot;: \\&quot;100\\&quot;\\n     }\\n    }\\n  }'&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<p>The API response may contain any of the following HTTP status codes:<\/p>\n<ul>\n<li><strong>HTTP 200<\/strong>: You can use the information that the API returns in the response, such as the <code>accountCode<\/code>, but you should wait for the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Notification\/latest\/post\/ACCOUNT_HOLDER_UPDATED\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ACCOUNT_HOLDER_UPDATED<\/a> notification webhook before performing any business logic. The notification webhooks confirm when the resources have been updated in our central database.<\/li>\n<li><strong>HTTP 202<\/strong>: The request has been acknowledged and added to the queue. Use the response to check and confirm the changes you made. Wait for the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Notification\/latest\/post\/ACCOUNT_HOLDER_UPDATED\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ACCOUNT_HOLDER_UPDATED<\/a> notification webhook to confirm if the account holder has been successfully updated.<\/li>\n<\/ul>\n<p>For each verification check that did not pass, the account holder needs to provide information within a <a href=\"\/pt\/classic-platforms\/verification-process#inactivation-suspension-deadline\">deadline<\/a>. After you send the information to Adyen and the verification is successful, we will re-enable payouts in a higher tier and update the verification check status to <span translate=\"no\"><strong>PASSED<\/strong><\/span>.<\/p>\n<h2 id=\"get-the-kyc-results\">Step 3: Get the verification results<\/h2>\n<p>You receive all the subsequent verification results in  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Notification\/latest\/post\/ACCOUNT_HOLDER_VERIFICATION\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ACCOUNT_HOLDER_VERIFICATION<\/a> notification webhooks.<\/p>\n<p>For more information, refer to <a href=\"\/pt\/classic-platforms\/verification-process\/check-verification-results\">verification results<\/a>.<\/p>\n<h2 id=\"upload-documents\">Step 4: Upload documents<\/h2>\n<p>Additional documents, such as a passport, bank statement, or a business registration document, may be required by some countries or regions to verify the account holder's identity, or if the automatic verification of the provided information fails.<\/p>\n<p>For example, in the EU, we may require <a href=\"\/pt\/classic-platforms\/verification-process\/document-requirements#upload-photo-id\">photo identification<\/a> (such as passport) of your account holders. If the account holder's identity cannot be validated, the photo ID verification is used as the ultimate verification.<\/p>\n<p>Once you have collected the required document, submit the document to Adyen. To do this, make a POST  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Account\/latest\/post\/uploadDocument\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/uploadDocument<\/a> request with the following:<\/p>\n<ul>\n<li> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Account\/latest\/post\/uploadDocument#request-documentContent\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">documentContent<\/a>&#58; The document in base64-encoded string format.<\/li>\n<li> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Account\/6\/post\/uploadDocument#request-documentDetail-accountHolderCode\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">documentDetail.accountHolderCode<\/a>&#58; The code of the account holder that owns the document.<\/li>\n<li>\n<p> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Account\/latest\/post\/uploadDocument#request-documentDetail-documentType\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">documentDetail.documentType<\/a>&#58; The corresponding type of document.<\/p>\n<table>\n<thead>\n<tr>\n<th><code>documentType<\/code><\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><span translate=\"no\"><strong>BANK_STATEMENT<\/strong><\/span><\/td>\n<td>Bank statement or other document proving ownership of a specific bank account.<\/td>\n<\/tr>\n<tr>\n<td><span translate=\"no\"><strong>COMPANY_REGISTRATION_SCREENING<\/strong><\/span><\/td>\n<td>A company registration document. Supported from v5 and later.<\/td>\n<\/tr>\n<tr>\n<td><span translate=\"no\"><strong>CONSTITUTIONAL_DOCUMENT<\/strong><\/span><\/td>\n<td>A document containing information about the account holder's legal arrangement.<\/td>\n<\/tr>\n<tr>\n<td><span translate=\"no\"><strong>PASSPORT<\/strong><\/span><\/td>\n<td>The identity page(s) of a passport.<\/td>\n<\/tr>\n<tr>\n<td><span translate=\"no\"><strong>DRIVING_LICENCE_FRONT<\/strong><\/span><\/td>\n<td>The front of a driver's licence. When provided, the <span translate=\"no\"><strong>DRIVING_LICENCE_BACK<\/strong><\/span> is also required.<\/td>\n<\/tr>\n<tr>\n<td><span translate=\"no\"><strong>DRIVING_LICENCE_BACK<\/strong><\/span><\/td>\n<td>The back of a driver's licence. When provided, the <span translate=\"no\"><strong>DRIVING_LICENCE_FRONT<\/strong><\/span> is also required.<\/td>\n<\/tr>\n<tr>\n<td><span translate=\"no\"><strong>ID_CARD_FRONT<\/strong><\/span><\/td>\n<td>The front of a government-issued ID card. When this is provided, the <span translate=\"no\"><strong>ID_CARD_FRONT<\/strong><\/span> is also required.<\/td>\n<\/tr>\n<tr>\n<td><span translate=\"no\"><strong>ID_CARD_BACK<\/strong><\/span><\/td>\n<td>The back of a  government-issued ID card. When this is provided, the <span translate=\"no\"><strong>ID_CARD_FRONT<\/strong><\/span> is also required.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<\/ul>\n<p>The following example shows how to upload a scan of a passport.<\/p>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Upload a document'\" :id=\"''\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/cal-test.adyen.com\\\/cal\\\/services\\\/Account\\\/v6\\\/uploadDocument \\\\\\n-H 'x-api-key: ADYEN_API_KEY' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-d '{\\n   \\&quot;documentContent\\&quot;:\\&quot;dGVzdCBkb2N1bWVudCBjb250ZW50...VcdCB=\\&quot;,\\n   \\&quot;documentDetail\\&quot;:{\\n      \\&quot;accountHolderCode\\&quot;:\\&quot;YOUR_ACCOUNT_HOLDER_CODE\\&quot;,\\n      \\&quot;documentType\\&quot;:\\&quot;PASSPORT\\&quot;,\\n      \\&quot;filename\\&quot;: \\&quot;passport.png\\&quot;\\n   }\\n}'&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Response'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n    \\\"invalidFields\\\": [],\\n    \\\"pspReference\\\": \\\"8515658815512840\\\",\\n    \\\"accountHolderCode\\\": \\\"YOUR_ACCOUNT_HOLDER_CODE\\\",\\n    ...\\n    \\\"verification\\\": {}\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<p>Adyen validates documents asynchronously. On average, it takes Adyen about 30 seconds to validate a photo ID, and two days for registration documents and bank statements.<\/p>\n<h2>See also<\/h2>\n<div class=\"see-also-links output-inline\" id=\"see-also\">\n<ul><li><a href=\"\/classic-platforms\/notifications\"\n                        target=\"_self\"\n                        >\n                    Notifications\n                <\/a><\/li><li><a href=\"\/classic-platforms\/verification-process\/required-information\"\n                        target=\"_self\"\n                        >\n                    Verification requirements\n                <\/a><\/li><li><a href=\"\/classic-platforms\/verification-process\"\n                        target=\"_self\"\n                        >\n                    Verification process\n                <\/a><\/li><\/ul><\/div>\n","url":"https:\/\/docs.adyen.com\/pt\/classic-platforms\/onboard-users\/custom-onboarding","articleFields":{"description":"Onboard your account holders and move them through the verification process.","search_category":"Classic Platforms","id":"36197816","type":"page","_expandable":{"operations":""},"status":"current","last_edit_on":"08-09-2020 13:38","parameters":{"directoryPath":"\/classic-platforms"}},"algolia":{"url":"https:\/\/docs.adyen.com\/pt\/classic-platforms\/onboard-users\/custom-onboarding","title":"Custom onboarding","content":"\nThis page is for classic Adyen for Platforms integrations. If you are just starting your implementation, refer to our new integration guide instead.\n\nWe recommend that you use the Hosted Onboarding Page, because it requires less implementation effort on your side and account holders can send the necessary information directly to Adyen. However, it is also possible to build your own onboarding flow. If you choose to build your own onboarding implementation, you need to set up a way to collect data from your account holder to pass the verification checks required by Adyen.\nYour onboarding process must follow these main steps:\n\nCreate an account holder.\nUpdate the account holder with additional details, depending on the verification check you are trying to pass.\nKeep track of the verification results through notification webhooks.\nUpload additional documents if necessary.\n\nRequirements\n\n\nBefore you start the verification process, you must decide whether to collect all required information once in the beginning, or later in stages as they become necessary.\n\nUpfront verification unlocks all payment processing and payouts tiers. It requires you to collect all necessary data at the beginning of the onboarding flow.\nStaggered verification requires you to collect additional information from the account holder whenever the funds processed exceed their current processing tier.\n\n\n\nGet the verification requirements based on the country and legal entity type.\n\n\nStep 1: Create an account holder\nBefore you start the verification process, you must create an account holder, taking note of the accountHolderCode in the response.\nAfter an account holder is created, they can immediately start processing payments.\nStep 2: Update the account holder\nWhen the account holder starts processing a larger volume of funds than what their current processing tier allows, they automatically advance to higher processing tier. This triggers additional verification checks.\nIf you have chosen the upfront verification approach, the verification checks run automatically without any request for additional information from you, unlocking higher payout tiers when necessary. Adyen sends an ACCOUNT_HOLDER_VERIFICATION notification to your server containing the \n  status\n of the verification checks.\nIf you have chosen the staggered verification method or if the previously collected data is missing or invalid, payouts will be disabled and Adyen sends an ACCOUNT_HOLDER_STATUS_CHANGE notification. You need to ask the account holder for more information at this point. The information that Adyen requires from the account holder depends on their legal entity type.\n\nListen to the  ACCOUNT_HOLDER_UPDATED and  ACCOUNT_HOLDER_VERIFICATION notifications to learn what information you need to collect from your account holder.\nCollect the information and provide the data in a POST \/updateAccountHolder call.\n\nThe following example shows how to provide the full address of an existing account holder.\n\n    \n\nThe API response may contain any of the following HTTP status codes:\n\nHTTP 200: You can use the information that the API returns in the response, such as the accountCode, but you should wait for the  ACCOUNT_HOLDER_UPDATED notification webhook before performing any business logic. The notification webhooks confirm when the resources have been updated in our central database.\nHTTP 202: The request has been acknowledged and added to the queue. Use the response to check and confirm the changes you made. Wait for the  ACCOUNT_HOLDER_UPDATED notification webhook to confirm if the account holder has been successfully updated.\n\nFor each verification check that did not pass, the account holder needs to provide information within a deadline. After you send the information to Adyen and the verification is successful, we will re-enable payouts in a higher tier and update the verification check status to PASSED.\nStep 3: Get the verification results\nYou receive all the subsequent verification results in  ACCOUNT_HOLDER_VERIFICATION notification webhooks.\nFor more information, refer to verification results.\nStep 4: Upload documents\nAdditional documents, such as a passport, bank statement, or a business registration document, may be required by some countries or regions to verify the account holder's identity, or if the automatic verification of the provided information fails.\nFor example, in the EU, we may require photo identification (such as passport) of your account holders. If the account holder's identity cannot be validated, the photo ID verification is used as the ultimate verification.\nOnce you have collected the required document, submit the document to Adyen. To do this, make a POST  \/uploadDocument request with the following:\n\n documentContent&#58; The document in base64-encoded string format.\n documentDetail.accountHolderCode&#58; The code of the account holder that owns the document.\n\n documentDetail.documentType&#58; The corresponding type of document.\n\n\n\ndocumentType\nDescription\n\n\n\n\nBANK_STATEMENT\nBank statement or other document proving ownership of a specific bank account.\n\n\nCOMPANY_REGISTRATION_SCREENING\nA company registration document. Supported from v5 and later.\n\n\nCONSTITUTIONAL_DOCUMENT\nA document containing information about the account holder's legal arrangement.\n\n\nPASSPORT\nThe identity page(s) of a passport.\n\n\nDRIVING_LICENCE_FRONT\nThe front of a driver's licence. When provided, the DRIVING_LICENCE_BACK is also required.\n\n\nDRIVING_LICENCE_BACK\nThe back of a driver's licence. When provided, the DRIVING_LICENCE_FRONT is also required.\n\n\nID_CARD_FRONT\nThe front of a government-issued ID card. When this is provided, the ID_CARD_FRONT is also required.\n\n\nID_CARD_BACK\nThe back of a  government-issued ID card. When this is provided, the ID_CARD_FRONT is also required.\n\n\n\n\n\nThe following example shows how to upload a scan of a passport.\n\n    \n\n\n    \n\nAdyen validates documents asynchronously. On average, it takes Adyen about 30 seconds to validate a photo ID, and two days for registration documents and bank statements.\nSee also\n\n\n                    Notifications\n                \n                    Verification requirements\n                \n                    Verification process\n                \n","type":"page","locale":"pt","boost":17,"hierarchy":{"lvl0":"Home","lvl1":"Classic integration","lvl2":"Onboard and verify users","lvl3":"Custom onboarding"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/pt","lvl1":"https:\/\/docs.adyen.com\/pt\/classic-platforms","lvl2":"https:\/\/docs.adyen.com\/pt\/classic-platforms\/onboard-users","lvl3":"\/pt\/classic-platforms\/onboard-users\/custom-onboarding"},"levels":4,"category":"Classic Platforms","category_color":"green","tags":["Custom","onboarding"]},"articleFiles":{"ind-bus.json":"<p alt=\"\">ind-bus.json<\/p>","nonprofit.json":"<p alt=\"\">nonprofit.json<\/p>"}}
