Processing payments

Learn how to split transactions with your sub-merchants.


After creating an account holder, you can immediately start processing payments on their behalf.

When a shopper pays on your platform, MarketPay gives you the ability to automatically split these funds between multiple accounts. By splitting payments, you can send the funds belonging to your sub-merchants to their accounts, and your platform fee to your Liable Account.

With every payment, capture, or refund you can customize the split between any number of accounts and amounts including your own Liable Account.

Supported payment methods

MarketPay supports most of the widespread payment methods, such as major card brands (Visa, Mastercard, Amex, Discover/Diners), Apple Pay, Google Pay, SEPA, iDEAL, Sofort, and more.

Providing split information

You can split a payment as many times as you need and into any number of accounts. Payments are split into accounts and not account holders. You can optionally provide split information when capturing or refunding a payment. 

Provide split information as an array of split objects in the splits object. For each split object, you need to specify:

  • The amount to be split. 
  • The split type. A type of MarketPlace sends the amount to the account specified. A split type of Commission sends the split to your liable account.
  • The account to send the split. This is the accountCode of one of your account holder's accounts or your own liable account. This is not needed when split.type is Commission.
  • reference, this is returned in our reporting for that specific transaction split.

Here is an example for splitting a 400.00 USD transaction:

  • 300.00 is being split into an account with accountCode of 163298747.
  • 100.00 being split into the platform's liable account.
 {
   ...
   "splits":[
      {
         "amount":30000,
         "type":"MarketPlace",
         "account":"163298747",
         "reference":"QXhlbFN0b2x0ZW5iZXJnCg"
      },
      {
         "amount":10000,
         "type":"Commission",
         "reference":"THVjYXNCbGVkc29lCg"
      }
   ],
   ...
}

Transactions are split between accounts and not account holders.

Validating split information

Adyen frontend systems only validate the format of the split data. The accounts provided in split data will not be validated by the frontend.

If you provide split data with an account that does not exist, or an account belonging to an inactive account holder, the full amount of the transaction will be sent to the liable account regardless of the original split data.

You will receive a PAYMENT_FAILURE notification of the failed split. You can use Fund transfer to correct any account balances.

Processing split payments

Test cards

To verify how your payment requests work, use test cards provided by Adyen.

For more information, see Test card numbers.

To split a payment,  provide split data as part of the payment request. Split data can be used regardless of your  PCI level.

If you do not know what the total split will look like for your account holders at point of a payment, you can skip providing any split data at payment and instead provide split data at capture. Split data provided at capture will override any split data provided with the initial payment request.

Here is an example split provided with /payments call.

Request (POST /payments)
{
   "paymentMethod":{
      "type":"scheme",
      "number":"4400 0000 0000 0008",
      "expiryMonth":"10",
      "expiryYear":"2020",
      "holderName":"John Smith",
      "cvc":"737"
   },
   "amount":{
      "value":40000,
      "currency":"USD"
   },
   "reference":"YOUR_REFERENCE_NUMBER",
   "merchantAccount":"YOUR_MERCHANT_ACCOUNT",
   "returnUrl":"https://your-company.com/...",
   "splits":[
      {
         "amount":30000,
         "type":"MarketPlace",
         "account":"163298747",
         "reference":"QXhlbFN0b2x0ZW5iZXJnCg"
      },
      {
         "amount":10000,
         "type":"Commission",
         "reference":"THVjYXNCbGVkc29lCg"
      }
   ]
}

When using Checkout SDK, provide split data with the /paymentSession call.

Request (POST /paymentSession)
{
   "amount":{
      "value":40000,
      "currency":"USD"
   },
   "reference":"YOUR_REFERENCE_NUMBER",
   "merchantAccount":"YOUR_MERCHANT_ACCOUNT",
   "shopperReference":"yourShopperId_IOfW3k9G2PvXFu2j",
   "channel":"Android",
   "token":"TOKEN_YOU_GET_FROM_CHECKOUT_SDK",
   "returnUrl":"app://",
   "countryCode":"NL",
   "shopperLocale":"nl_NL",
   "sessionValidity":"2017-04-06T13:09:13Z",
   "splits":[
      {
         "amount":30000,
         "type":"MarketPlace",
         "account":"163298747",
         "reference":"QXhlbFN0b2x0ZW5iZXJnCg"
      },
      {
         "amount":10000,
         "type":"Commission",
         "reference":"THVjYXNCbGVkc29lCg"
      }
   ],
}

Payment statuses

Once a payment has reached the SentForSettle state, the transaction will show up in the account as a PENDING_CREDIT transaction. Once Adyen has received the funds for the payment, the transaction will be updated to CREDITED and the funds will be available to payout on the account.

You can always look at the transaction associated to all accounts on a account holder using /accountHolderTransactionList call.

Split at capture

Providing a /capture request without split data will use the split data provided at payment authorization. 

Some platforms do not know the final split at point of payment. In this case, you can provide split data with a /capture request. Providing split data at capture overrules the split data provided during the original payment request.

Partial captures require you to supply split data. Not providing split data will cause all the funds to go to the liable account.

Request (POST /capture)
{
   "originalReference":"9914810184130051",
   "reference":"YOUR_REFERENCE_NUMBER",
   "merchantAccount":"YOUR_MERCHANT_ACCOUNT",
   "modificationAmount":{
      "value":599,
      "currency":"USD"
   },
   "splits":[
      {
         "amount":399,
         "type":"MarketPlace",
         "account":"151272963",
         "reference":"Partial capture #1"
      },
      {
         "amount":200,
         "type":"MarketPlace",
         "account":"181472818",
         "reference":"Partial capture #2"
      }
   ]
} 

Split a refund

Providing a /refund request without split data will use the split data provided at payment authorization or capture.

Here is an example refund request without providing split data.

Request (POST /refund)
{
   "originalReference":"9914810184130051",
   "reference":"YOUR_REFERENCE_NUMBER",
   "merchantAccount":"TestMerchant",
   "modificationAmount":{
      "value":599,
      "currency":"USD"
   }
}  

Splitting refund differently than payment or capture

If you want to make a partial refund or split the refund differently than the original split data, you will need to include split data in the refund.

When refunding, you can only use accounts that were part of the original split and you must use the same split reference you used in the original split. 

As an example, lets split a 10 USD payment with 2 USD going to your liable account and 8 USD going to account 12345. If you provide a split reference of splitId_1 for the payment, then on the refund, you will need to use the same split reference of splitId_1.

Here is the example payment of 10 USD with 2 USD going to your liable account and 8 USD to account 12345.

Original payment request
{
   "paymentMethod":{
      "type":"scheme",
      "number":"4400 0000 0000 0008",
      "expiryMonth":"10",
      "expiryYear":"2020",
      "holderName":"John Smith",
      "cvc":"737"
   },
   "amount":{
      "value":40000,
      "currency":"USD"
   },
   "reference":"YOUR_REFERENCE_NUMBER",
   "merchantAccount":"YOUR_MERCHANT_ACCOUNT",
   "returnUrl":"https://your-company.com/...",
   "splits":[
      {
         "amount":200,
         "type":"Commission"
      },
      {
         "amount":800,
         "type":"MarketPlace",
         "account":"12345",
         "reference":"splitId_1"
      }
   ]
}

This following example would be the refund of that payment if you were going to split the refund with 5 USD from your liable account and 5 USD from account 12345

Refund request
{
   "originalReference":"9914810184130051",
   "reference":"YOUR_REFERENCE_NUMBER",
   "merchantAccount":"TestMerchant",
   "modificationAmount":{
      "value":599,
      "currency":"USD"
   },
   "splits":[
      {
         "amount":500,
         "type":"Commission"
      },
      {
         "amount":500,
         "type":"MarketPlace",
         "account":"12345",
         "reference":"splitId_1" // !! Same reference used during payment !!
      }
   ]
}

Chargeback and disputes

You are responsible for all disputes and dispute management. This includes providing first line support to your shoppers and sub-merchants, clearly communicating your contact details on your website or app, and managing all disputes between your shoppers and your sub-merchants.

Split chargebacks

Chargebacks, by default, deduct according to original split data. If you want to configure your platform to deduct entirely from your liable account instead, reach out the Support Team.

Partial chargebacks are deducted entirely from your liable account. You can use Fund transfer to correct any account balances.

Next steps

Fund transfer

Manually transfer funds to and from your sub-merchants.

link

Payouts

Make scheduled and one-off payouts to sub-merchants.

link