Before a cardholder can use their card to make a payment, the balance account associated with the card needs to have funds.
You can get funds into balance accounts by:
- Depositing funds to your liable balance account and then transferring funds to other balance accounts.
- Making split payments if you are acquiring payments with Adyen.
Deposit funds to your liable account
You can fund your liable balance account, and from there you can transfer funds to your users' balance accounts.
To find out how you can deposit funds into your liable balance account, reach out to your Adyen contact.
Transfer funds between balance accounts
When you have funds in your liable account, you can make internal fund transfers within your platform. Depending on your use cases, there might also be scenarios that require you to make internal transfers. For example, sending a bonus to an account holder, or when an account holder has multiple balance accounts and they want to move funds.
Before you can make internal transfer funds, reach out to your Adyen contact to:
- Add a role for your API credential, which you will use for the Transfers API.
- Enable transfers for the source balance account.
To transfer funds between balance accounts in your platform, ensure that your API credential has the roles to use with the Transfers API. If it does, make a transfer as follows:
-
Make a POST /transfers request specifying:
Parameter Required Description amount Object containing the currency and value of the transfer. balanceAccountId Unique identifier of the source balance account. category Set to internal. counterparty.balanceAccountId Unique identifier of the recipient balance account. description Your description for the transfer. reference Your unique reference for the transfer. referenceForBeneficiary Your reference for the transfer that is sent to the recipient and in all webhooks. Here is an example of how you can transfer 100 EUR from your liable balance account to another balance account.
curl https://balanceplatform-api-test.adyen.com/btl/v3/transfers \ -H "x-api-key: YOUR_BALANCE_PLATFORM_API_KEY" \ -H "content-type: application/json" \ -X POST \ -d '{ "amount": { "currency": "EUR", "value": 10000 }, "balanceAccountId": "BA00000000000000000000001", "category" : "internal", "counterparty": { "balanceAccountId": "LBA00000000000000000000002" }, "description": "YOUR_DESCRIPTION_FOR_THE_TRANSFER", "reference": "YOUR_UNIQUE_REFERENCE_FOR_THE_TRANSFER" }'
The response contains a unique
id
for the transfer request.{ "id": "48NJIB9TWQJ6L7U7", "amount": { "currency": "EUR", "value": 10000 }, "balanceAccountId": "BA00000000000000000000001", "category" : "internal", "description": "YOUR_DESCRIPTION_FOR_THE_TRANSFER", "reference": "YOUR_UNIQUE_REFERENCE_FOR_THE_TRANSFER", "counterparty": { "balanceAccountId": "BA00000000000000000000002" }, "direction": "outgoing", "reason": "approved", "status": "authorised" }
-
To know if the transfer has been completed, keep track of webhooks. You can also make GET /balanceAccounts/{id} request.
Split payments
If you are acquiring payments with Adyen, you can also fund balance accounts by distributing the payment amount in any number of ways among any number of balance accounts.
To make a split payment:
-
Make a POST /payments request, specifying the splits array.
For each split object in the array, specify the following fields:
Parameter Required Description type Set to BalanceAccount. account The unique identifier of the balance account where you want to send the funds to. amount The amount to be sent to the balance account. reference Your unique identifier for the split. Check that the balance account IDs in your request are correct. The API only validates the format of the split data. See validating split information.
For example, you can split a 150.00 USD payment such that:
- 3.00 USD goes to your liable balance account as commission.
- 147.00 USD goes to your user's balance account with
id
BAA1B2C3D4E5F6G7H8I9J0.
curl https://checkout-test.adyen.com/v68/payments \ -H "x-API-key: YOUR_X-API-KEY" \ -H "content-type: application/json" \ -X POST \ -d '{ "paymentMethod":{ "type":"scheme", "number":"4400 0000 0000 0008", "expiryMonth":"10", "expiryYear":"2020", "holderName":"John Smith", "cvc":"737" }, "amount":{ "value":15000, "currency":"USD" }, "reference":"YOUR_REFERENCE_NUMBER", "merchantAccount":"YOUR_MERCHANT_ACCOUNT", "splits":[ { "amount":{ "value":14700 }, "type":"BalanceAccount", "account":"BAA1B2C3D4E5F6G7H8I9J0", "reference":"YOUR_IDENTIFIER_FOR_THIS_PAYMENT" }, { "amount":{ "value":300 }, "type":"Commission", "reference":"YOUR_IDENTIFIER_FOR_THIS_COMMISSION" } ] }'
The response informs you if the payment was successful.
-
To know if the split has been settled to the balance account in the request, keep track of webhooks. You can also make GET /balanceAccounts/{id} request.
Validating split information
Adyen front-end systems only validate the format of the split data, and not the statuses of the balance accounts. This means that payments may succeed, but splits are not applied if the balance account specified in the request does not exist or is linked to an account holder with a closed status. When this happens, the full amount is sent to your platform's liable balance account.
To correct balances, you can transfer funds between balance accounts.