--- title: "Platforms quick start" description: "Start accepting payments and making payouts to your sub-merchants." url: "https://docs.adyen.com/classic-platforms/quick-start" source_url: "https://docs.adyen.com/classic-platforms/quick-start.md" canonical: "https://docs.adyen.com/classic-platforms/quick-start" last_modified: "2021-08-04T10:18:00+02:00" language: "en" --- # Platforms quick start Start accepting payments and making payouts to your sub-merchants. [View source](/classic-platforms/quick-start.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. ## Requirements Before you start using Adyen for Platforms, make sure to: 1. [Contact our Sales Team](https://www.adyen.com/contact/sales) to check if your use cases are eligible for Adyen for Platforms. When we confirm that Adyen for Platforms is a good fit for your use cases, you receive your Adyen test credentials including two API credentials. 2. Create API keys for your two API credentials. * Platform: **ws\_\[123456]@MarketPlace.\[YourPlatformAccount]**.\ You'll use the API key to onboard sub-merchants as account holders and to send payouts. * Payments: **ws\@Company.\[YourCompanyAccount]**.\ You'll use the API key to process payments for your account holders. ## Step 1: Sign up sub-merchants To start with your integration, sign up sub-merchants as account holders in your platform. For each sub-merchant, create a corresponding [account holder](/classic-platforms/account-structure), and one or more (if necessary) accounts. To create an account holder, call [/createAccountHolder](https://docs.adyen.com/api-explorer/#/Account/createAccountHolder), specifying: * `firstName` * `lastName`  * `email` * `legalEntity` (individual or business) * `country` The fields above are required for an account holder to start [accepting payments](#step-3-process-payments) and initiating the verification process. The following code illustrates how to create an individual account holder with the basic fields: **Create account holder** ```bash curl https://cal-test.adyen.com/cal/services/Account/v6/createAccountHolder \ -H 'x-API-key: YOUR_X-API-KEY' \ -H 'content-type: application/json' \ -d '{ "accountHolderCode":"TestAccountHolder5691", "accountHolderDetails":{ "address": { "country": "US" }, "email":"test@adyen.com", "individualDetails":{ "name":{ "firstName":"First name", "gender":"MALE", "lastName":"Last Name" } } }, "createDefaultAccount":true, "legalEntity":"Individual" }' ``` When you create an account holder, by default we also create an account for this account holder. If you'd rather create accounts manually using the [/createAccount](https://docs.adyen.com/api-explorer/#/Account/createAccount) endpoint, include in your [/createAccountHolder](https://docs.adyen.com/api-explorer/#/Account/createAccountHolder) request: * `createDefaultAccount`: **false** ## Step 2: Onboard and verify account holders During the onboarding process, you need to collect additional information from the account holder for verification checks. The account holder must pass these checks before they can process payments at higher [tiers](/classic-platforms/onboard-users) and have [payouts](/classic-platforms/payouts) enabled. You can either build your own onboarding implementation or send the account holders to a [Hosted Onboarding Page](/classic-platforms/onboard-users/hosted-onboarding-page) where they can directly submit their information. If you choose to build your own implementation, you'll have to collect the required information and send this information to Adyen using either the `/updateAccountHolder` or `/uploadDocument` API calls.  The account holder might also need to provide additional documents. The code below illustrates how to upload a passport using the `/uploadDocument` call. The image file, which contains the document, must be encoded as a Base64 string and assigned to the `documentContent` field, and the `documentDetail` object should contain an account holder code and other information about the document. **Upload a document** ```bash curl https://cal-test.adyen.com/cal/services/Account/v6/uploadDocument \ -H 'x-API-key: YOUR_X-API-KEY' \ -H 'content-type: application/json' \ -d '{ "documentContent":"dGVzdCBkb2N1bWVudCBjb250ZW50", "documentDetail":{ "accountHolderCode":"TestAccountHolder5691", "documentType":"PASSPORT", "filename":"passport.png", "description":"test passport description" } }' ``` The verification is usually performed asynchronously. Adyen sends the results to your backend through notification webhooks. To accept these notifications, configure them as described in [Set up notifications](#step-5-set-up-notifications). ## Step 3: Process payments After creating account holders with the basic information, you can immediately start processing payments for them. In this case, the amount customers pay to your platform should be split between an account holder's account and your platform's account.  To make a payment, you'll need to send a [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) request and provide the API key for your **ws\@Company.\[YourCompanyAccount]** API credential. In your request, pass [split-specific fields](https://docs.adyen.com/api-explorer/#/CheckoutService/latest/payments__reqParam_splits). In the example below, `paymentMethod` and `amount` fields contain payment details, while `split` contains instructions on how to split a payment. In this case, EUR 62.00 will be split between an account holder's account (EUR 60.00) and your platform commission (EUR 2.00). **Process payments** ```bash curl https://checkout-test.adyen.com/v68/payments \ -H 'x-api-key: ADYEN_API_KEY' \ -H 'content-type: application/json' \ -d '{ "reference":"platforms-test-6426782037", "merchantAccount":"YOUR_MERCHANT_ACCOUNT", "paymentMethod":{ "type":"scheme", "number":"4111 1111 1111 1111", "expiryMonth":"03", "expiryYear":"2030", "holderName":"John Smith", "cvc":"737" }, "amount":{ "value": 6200, "currency":"EUR" }, "splits":[ { "amount":{ "value": 6000, "currency":"EUR" }, "type": "MarketPlace", "account":"151272963", "reference":"6124145", "description":"Porcelain Doll: Eliza (20cm)" }, { "amount":{ "value": 200, "currency":"EUR" }, "type":"Commission", "reference":"6124146" } ] }' ``` After a transaction has been successfully authorised, you must capture it for the payment to be settled. You can either use automatic capture (contact the [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other) to set this up) or make the `/capture` request manually. In addition, you can partially capture or refund the payment. For more information, refer to [Processing payments](/classic-platforms/processing-payments). ## Step 4: Pay out After an account holder successfully passes required [verification checks](#step-2-onboard-sub-merchants), you can initiate a payout to either their bank account or to a [card eligible for payouts](/classic-platforms/payouts/manual-payout/payout-to-cards#check-and-store). For this, call `/payoutAccountHolder` as follows. In the example below, `currency` and `value` specify the amount to be paid out (EUR 997.92), `accountCode` and `accountHolderCode` uniquely identify the source account, while the `bankAccountUUID` specifies the bank account that receives the payout. **Send a payout** ```bash curl https://cal-test.adyen.com/cal/services/Fund/v6/payoutAccountHolder \ -H 'x-API-key: YOUR_X-API-KEY' \ -H 'content-type: application/json' \ -d '{ "accountCode":"118731451", "amount":{ "currency":"EUR", "value":99792 }, "accountHolderCode":"TestAccountHolder877209", "description":"12345 – Test", "bankAccountUUID":"000b81aa-ae7e-4492-aa7e-72b2129dce0c" }' ``` You can also schedule a payout job to automatically make a payout (e.g. once per day). For more information, refer to [Payouts](/classic-platforms/payouts). ## Step 5: Set up notifications All Platforms API create, update, and delete requests are asynchronous, so you must rely on notifications to know the final result of a request. To be aware of all the events that happen to your platform account, as well as get the results of verification and other important changes, your system must be able to accept notifications. You receive these notifications as callbacks to the URLs you specify in the [/createNotificationConfiguration](https://docs.adyen.com/api-explorer/NotificationConfiguration/latest/post/createNotificationConfiguration) call. In this case, we activate the [ACCOUNT\_HOLDER\_VERIFICATION](https://docs.adyen.com/api-explorer/#/NotificationService/latest/ACCOUNT_HOLDER_VERIFICATION) notification that should be sent to the endpoint on your server (https\://www\.merchant-domain.com/notification-handler) using the specified connection credentials (**testUserName** and **testPassword**). For more information, refer to [Configure notifications](/classic-platforms/configure-notifications) and [Notification types](/classic-platforms/notification-types). You may also want to configure HMAC signing of notifications for additional verification. To do this, see [Signing notifications with HMAC](/classic-platforms/configure-notifications/signing-notifications-with-hmac). **Create notification configuration request** ```bash curl https://cal-test.adyen.com/cal/services/Notification/v6/createNotificationConfiguration \ -H 'x-api-key: ADYEN_API_KEY' \ -H 'content-type: application/json' \ -d '{ "configurationDetails":{ "apiVersion": 6, "active": true, "description":"Your unique description", "eventConfigs":[ { "eventType":"ACCOUNT_HOLDER_VERIFICATION", "includeMode":"INCLUDE" }, { "eventType":"ACCOUNT_HOLDER_CREATED", "includeMode":"INCLUDE" } ], "notifyURL":"https://www.merchant-domain.com/notification-handler", "notifyUsername":"yourUsername", "notifyPassword":"yourPassword", "sslProtocol":"SSL" } }' ``` ## Step 6: Reconcile transactions using reports After you have made transactions in the test environment, check the generated reports so you can start building your reconciliation process. For more information on how most Adyen for Platforms merchants use the reports, refer to [Reconcile transactions using reports](/classic-platforms/reconciliation-use-cases). ## Next steps [required](/classic-platforms/onboard-users) [Onboarding and verification](/classic-platforms/onboard-users) [Onboard sub-merchants as account holders and move them through the verification process.](/classic-platforms/onboard-users) [required](/classic-platforms/processing-payments) [Process payments](/classic-platforms/processing-payments) [Split payments with your account holders.](/classic-platforms/processing-payments) [required](/classic-platforms/configure-notifications) [Set up notifications](/classic-platforms/configure-notifications) [Receive notifications about your platform account.](/classic-platforms/configure-notifications)