--- title: "Split payments at authorization" description: "Learn how to split a Terminal API payment at the time of authorization." url: "https://docs.adyen.com/platforms/in-person-payments/split-transactions/split-payments-at-authorization" source_url: "https://docs.adyen.com/platforms/in-person-payments/split-transactions/split-payments-at-authorization.md" canonical: "https://docs.adyen.com/platforms/in-person-payments/split-transactions/split-payments-at-authorization" last_modified: "2023-03-27T10:32:00+02:00" language: "en" --- # Split payments at authorization Learn how to split a Terminal API payment at the time of authorization. [View source](/platforms/in-person-payments/split-transactions/split-payments-at-authorization.md) ##### Split configuration profiles Besides splitting payments at the transaction level, you can also set up [profiles](/platforms/automatic-split-configuration) to automatically direct fees and book funds to predefined balance accounts. When accepting in-person payments, you can split the payment amount between the balance accounts in your platform. This allows you to book the sale amount, tip, surcharge, transaction fees, and your platform's commission separately. This page describes how to provide split instructions in individual Terminal API payment requests. ## Requirements In addition to the [general requirements](/platforms/in-person-payments#requirements) for in-person payments with an Adyen for Platforms integration, take into account the following information. | Requirement | Description | | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Integration type** | A [Terminal API](/point-of-sale/design-your-integration/terminal-api) integration with [payment terminals](/point-of-sale/what-we-support/select-your-terminals) or with a [Mobile solution](/point-of-sale/ipp-mobile).The standalone solution does not support adding split instructions to individual payment authorization requests. | ## How it works To provide the split instructions in your payment request, you must: 1. [Gather](#gather-data) the split instructions you need to send in the request.\ The split instructions consist of general information such as the number of splits that the transaction will be divided into, and the details of every split such as the type of split and the account to book the split amount to. 2. [Format](#prepare-data) the split instructions.\ The split instructions must be provided as a single string value. To achieve that, you can create a JSON object and Base64 encode that, or you can concatenate key-value pairs. 3. [Make the payment request](#split-payment), specifying the string with the split instructions. 4. [Track the result](#track-fund-movements).\ The Terminal API does not validate the balance accounts specified in the split instructions. Using transfer and transaction webhooks, you can check if the funds were booked as intended The examples on this page are based on a split payment request for USD 80.00, split three ways: * USD 75.00 is booked to your user's balance account as payment for the goods or services. * USD 5.00 is booked to your liable balance account as your platform's commission. * All transaction fees are booked to your user's balance account. ## 1. Gather the split instructions The split instructions that you need to provide in your payment request consist of: * General information about the currency and total amount of the transaction, and the number of splits that the transaction will be divided into. * The details of every split, such as the type of split and the account to book the split amount to.\ Every split is called a split item, and is indicated with a number, starting at **1**. The details of the first split are preceded by `split.item1`, the details of the second split are preceded by `split.item2`, and so on. 1. Gather the following general split information: | Field | Required | Description | | -------------------- | ------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | | `split.api` | ![Required](/user/pages/reuse/image-library/01.icons/required/required.svg?decoding=auto\&fetchpriority=auto) | The version of the Split API: **1**. | | `split.totalAmount` | ![Required](/user/pages/reuse/image-library/01.icons/required/required.svg?decoding=auto\&fetchpriority=auto) | The transaction mount in [minor units](/development-resources/currency-codes). Must be equal to the sum of the split amounts. | | `split.currencyCode` | ![Required](/user/pages/reuse/image-library/01.icons/required/required.svg?decoding=auto\&fetchpriority=auto) | The currency of the transaction. | | `split.nrOfItems` | ![Required](/user/pages/reuse/image-library/01.icons/required/required.svg?decoding=auto\&fetchpriority=auto) | The number of splits you want to create. Must match the sum of split items in the request. | 2. For every split item, gather the following details: | Field | Required | Description | | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `split.item[ITEM_NUMBER].amount` | ![Conditionally required](/user/pages/reuse/image-library/01.icons/conditionally-required/conditionally-required.svg?decoding=auto\&fetchpriority=auto) | The amount of the split item, in minor units. Do not include this field when splitting fees, tips, or surcharges, because those amounts are not known at the time of payment. | | `split.item[ITEM_NUMBER].type` | ![Required](/user/pages/reuse/image-library/01.icons/required/required.svg?decoding=auto\&fetchpriority=auto) | Defines the part of the payment you want to book to the specified `split.item[ITEM_NUMBER].account`. Possible values:- **BalanceAccount**: Books the sale amount to the specified balance account. - **Commission**: Books the commission to your liable balance account. - **Tip**: Books the [tip](/platforms/in-person-payments/tipping) to the specified balance account. - **Surcharge**: Books the [surcharge](/platforms/in-person-payments/surcharge) to the specified balance account. - We recommend that you also include at least one [transaction fee type](/platforms/in-person-payments/transaction-fees) in your request, for example, **PaymentFee**. All undefined transaction fees are booked to your platform's liable balance account. | | `split.item[ITEM_NUMBER].account` | ![Conditionally required](/user/pages/reuse/image-library/01.icons/conditionally-required/conditionally-required.svg?decoding=auto\&fetchpriority=auto) | The account that will receive (or be charged) the split. This is the `balanceAccountID` of one of your user's balance accounts or your own liable account. Do not include this field when the `split.item[ITEM_NUMBER].type` is **Commission**. | | `split.item[ITEM_NUMBER].reference` | ![Conditionally required](/user/pages/reuse/image-library/01.icons/conditionally-required/conditionally-required.svg?decoding=auto\&fetchpriority=auto) | The reference for that specific transaction split, which is returned in our reporting. We strongly recommend that you always include a reference for the split item. Required when the `split.item[ITEM_NUMBER].type` is **BalanceAccount**. | | `split.item[ITEM_NUMBER].description` | | The description of that specific transaction split, which is returned in our reporting. | The following example shows the split instructions for a payment that will be divided into three split items. For two of the three split items an amount is known, and the sum of these two split amounts is the same as the total transaction amount. **Example data for splitting a payment** ```raw split.api: 1 split.nrOfItems: 3 split.totalAmount: 8000 split.currencyCode: USD split.item1.amount: 7500 split.item1.type: BalanceAccount split.item1.account: BA00000000000000000000001 split.item1.reference: Your reference for the sale amount split.item1.description: Your description for the sale amount split.item2.amount: 500 split.item2.type: Commission split.item2.reference: Your reference for your commission split.item2.description: Your description for your commission split.item3.type: PaymentFee split.item3.account: BA00000000000000000000001 split.item3.reference: Your reference for the payment fee split.item3.description: Your description for the payment fee ``` Now that you have gathered the split instructions, the next step is to format them so that you can pass them in the `SaleToAcquirerData` field of the payment request. ## 2. Format the split instructions There are two ways to pass data in the `SaleToAcquirerData` field of your request: * **Option 1**: as a string of form-encoded key-value pairs (using **&** as a separator). * **Option 2**: as a JSON object converted to a Base64-encoded string. The format you use in your request is the format that will be returned in the `AdditionalResponse`. To always receive the `AdditionalResponse` in a specific format, contact our [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other). Select the tab for the option you want to use. ### Tab: Key-value pairs 1. Turn the split instructions you gathered into key-value pairs. **Split instructions as key-value pairs** ```raw split.api=1 split.nrOfItems=3 split.totalAmount=8000 split.currencyCode=USD split.item1.amount=7500 split.item1.type=BalanceAccount split.item1.account=BA00000000000000000000001 split.item1.reference=Your reference for the sale amount split.item1.description=Your description for the sale amount split.item2.amount=500 split.item2.type=Commission split.item2.reference=Your reference for your commission split.item2.description=Your description for your commission split.item3.type=PaymentFee split.item3.account=BA00000000000000000000001 split.item3.reference=Your reference for the payment fee split.item3.description=Your description for the payment fee ``` 2. Concatenate the key-value pairs into a string by separating them with ampersands (**&**). You will pass the resulting string in `SaleData.SaleToAcquirerData`. **Concatenated key-value pairs** ```bash split.api=1&split.nrOfItems=3&split.totalAmount=8000&split.currencyCode=USD&split.item1.amount=7500&split.item1.type=BalanceAccount&split.item1.account=BA00000000000000000000001&split.item1.reference=Your reference for the sale amount&split.item1.description=Your description for the sale amount&split.item2.amount=500&split.item2.type=Commission&split.item2.reference=Your reference for your commission&split.item2.description=Your description for your commission&split.item3.type=PaymentFee&split.item3.account=BA00000000000000000000001&split.item3.reference=Your reference for the payment fee&split.item3.description=Your description for the payment fee ``` ### Tab: Base64-encoded JSON 1. Create a JSON object consisting of an `additionalData` object containing the split instructions you gathered. **JSON object** ```json { "additionalData": { "split.api": "1", "split.nrOfItems": "3", "split.totalAmount": "8000", "split.currencyCode": "USD", "split.item1.amount": "7500", "split.item1.type": "BalanceAccount", "split.item1.account": "BA00000000000000000000001", "split.item1.reference": "Your reference for the sale amount", "split.item1.description": "Your description for the sale amount", "split.item2.amount": "500", "split.item2.type": "Commission", "split.item2.reference": "Your reference for your commission", "split.item2.description": "Your description for your commission", "split.item3.type": "PaymentFee", "split.item3.account": "BA00000000000000000000001", "split.item3.reference": "Your reference for the payment fee", "split.item3.description": "Your description for the payment fee" } } ``` 2. Encode the JSON object to Base64. You will pass the resulting string in `SaleData.SaleToAcquirerData`. **Base64 string** ```bash ewogICAgICJhZGRpdGlvbmFsRGF0YSI6IHsKICAgICAgICAgInNwbGl0LmFwaSI6ICIxIiwKICAgICAgICAgInNwbGl0Lm5yT2ZJdGVtcyI6ICIzIiwKICAgICAgICAgInNwbGl0LnRvdGFsQW1vdW50IjogIjgwMDAiLAogICAgICAgICAic3BsaXQuY3VycmVuY3lDb2RlIjogIlVTRCIsCiAgICAgICAgICJzcGxpdC5pdGVtMS5hbW91bnQiOiAiNzUwMCIsCiAgICAgICAgICJzcGxpdC5pdGVtMS50eXBlIjogIkJhbGFuY2VBY2NvdW50IiwKICAgICAgICAgInNwbGl0Lml0ZW0xLmFjY291bnQiOiAiQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsCiAgICAgICAgICJzcGxpdC5pdGVtMS5yZWZlcmVuY2UiOiAiWW91ciByZWZlcmVuY2UgZm9yIHRoZSBzYWxlIGFtb3VudCIsCiAgICAgICAgICJzcGxpdC5pdGVtMS5kZXNjcmlwdGlvbiI6ICJZb3VyIGRlc2NyaXB0aW9uIGZvciB0aGUgc2FsZSBhbW91bnQiLAogICAgICAgICAic3BsaXQuaXRlbTIuYW1vdW50IjogIjUwMCIsCiAgICAgICAgICJzcGxpdC5pdGVtMi50eXBlIjogIkNvbW1pc3Npb24iLAogICAgICAgICAic3BsaXQuaXRlbTIucmVmZXJlbmNlIjogIllvdXIgcmVmZXJlbmNlIGZvciB5b3VyIGNvbW1pc3Npb24iLAogICAgICAgICAic3BsaXQuaXRlbTIuZGVzY3JpcHRpb24iOiAiWW91ciBkZXNjcmlwdGlvbiBmb3IgeW91ciBjb21taXNzaW9uIiwKICAgICAgICAgInNwbGl0Lml0ZW0zLnR5cGUiOiAiUGF5bWVudEZlZSIsCiAgICAgICAgICJzcGxpdC5pdGVtMy5hY2NvdW50IjogIkJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiLAogICAgICAgICAic3BsaXQuaXRlbTMucmVmZXJlbmNlIjogIllvdXIgcmVmZXJlbmNlIGZvciB0aGUgcGF5bWVudCBmZWUiLAogICAgICAgICAic3BsaXQuaXRlbTMuZGVzY3JpcHRpb24iOiAiWW91ciBkZXNjcmlwdGlvbiBmb3IgdGhlIHBheW1lbnQgZmVlIgogICAgIH0KfQ== ``` ## 3. Make a payment request 1. Make a [Terminal API](/point-of-sale/design-your-integration/terminal-api) payment request, specifying: * The standard [`SaleToPOIRequest.MessageHeader` ](/point-of-sale/design-your-integration/terminal-api#request-message-header)object, with `MessageClass` set to **Service** and `MessageCategory` set to **Payment**. | Parameter | Required | Description | | ----------------- | ------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | | `ProtocolVersion` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **3.0** | | `MessageClass` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **Service** | | `MessageCategory` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **Payment** | | `MessageType` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **Request** | | `ServiceID` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Your unique ID for this request, consisting of 1-10 alphanumeric characters. Must be unique within the last 48 hours for the terminal (`POIID`) being used. | | `SaleID` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Your unique ID for the POS system component to send this request from. | | `POIID` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The unique ID of the terminal to send this request to. Format: *\[device model]-\[serial number]*. | * The [PaymentRequest](https://docs.adyen.com/api-explorer/terminal-api/latest/post/payment) object with: | Parameter | Required | Description | | ------------------------------- | ------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `SaleData.SaleTransactionID` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | An object with:- `TransactionID`: Your reference to identify a payment. We recommend using a unique value per payment. In your Customer Area and Adyen reports, this will show as the **merchant reference** for the transaction. - `TimeStamp`: The date and time of the request in [UTC format](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_\(UTC\)). | | `SaleData.SaleToAcquirerData` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The split payment instructions you gathered, provided as a string of concatenated key-value pairs or as a JSON object converted to a Base64-encoded string. See [Format the data](#prepare-data). | | `PaymentTransaction.AmountsReq` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | An object with:- `Currency`: The transaction [currency](/development-resources/currency-codes). - `RequestedAmount`: The transaction amount. Specify the amount with a decimal point. Do not use minor units. For example, for an amount of USDĀ 10, enter **10.00** (not *1000*). | The following example shows a payment request for USD 80.00 with the split instructions formatted as concatenated key-value pairs. The payment is split three ways: * USD 75.00 is booked to your user's balance account as payment for the goods or services. * USD 5.00 is booked to your liable balance account as your platform's commission. * All transaction fees are booked to your user's balance account. **Payment request with split instructions** ```json { "SaleToPOIRequest": { "MessageHeader": { "ProtocolVersion": "3.0", "MessageClass": "Service", "MessageCategory": "Payment", "MessageType": "Request", "ServiceID": "0207111104", "SaleID": "POSSystemID12345", "POIID": "V400m-324688179" }, "PaymentRequest": { "SaleData": { "SaleTransactionID": { "TransactionID": "27908", "TimeStamp": "2025-10-20T10:11:04+00:00" }, "SaleToAcquirerData": "split.api=1&split.nrOfItems=3&split.totalAmount=8000&split.currencyCode=USD&split.item1.amount=7500&split.item1.type=BalanceAccount&split.item1.account=BA00000000000000000000001&split.item1.reference=Your reference for the sale amount&split.item1.description=Your description for the sale amount&split.item2.amount=500&split.item2.type=Commission&split.item2.reference=Your reference for your commission&split.item2.description=Your description for your commission&split.item3.type=PaymentFee&split.item3.account=BA00000000000000000000001&split.item3.reference=Your reference for the payment fee&split.item3.description=Your description for the payment fee" }, "PaymentTransaction": { "AmountsReq": { "Currency": "USD", "RequestedAmount": 80.00 } } } } } ``` The payment request is routed to the terminal or mobile device, for the customer to complete the payment. The payment is approved, and then sent to the Adyen payments platform for processing. 2. When you receive the [PaymentResponse](https://docs.adyen.com/api-explorer/terminal-api/latest/post/payment#responses-200), check the following parameters: * `POIData.POITransactionID.TransactionID`: The transaction identifier for the payment consisting of the [tender reference](/get-started-with-adyen/adyen-glossary#tender) followed by the [PSP reference](/get-started-with-adyen/adyen-glossary#psp-reference). For example, in the transaction identifier **BV0q001765198054002.CWBC43ZX2VTFWR82**, the PSP reference is CWBC43ZX2VTFWR82. * `Response.Result`: **Success** * `Response.AdditionalResponse`: The additional transaction data. Its format corresponds to the format of the `SaleToAcquirerData` in the payment request: form-encoded key-value pairs, or a Base64-encoded JSON object. * `PaymentReceipt`: The object with data you can use to [generate a receipt](/point-of-sale/basic-tapi-integration/generate-receipts). ```json { "SaleToPOIResponse": { "MessageHeader": {...}, "PaymentResponse": { "POIData": { "POITransactionID": { "TimeStamp": "...", "TransactionID":"BV0q001765198054002.CWBC43ZX2VTFWR82" } }, "PaymentReceipt": [...], "PaymentResult": {...}, "Response": { "AdditionalResponse": "...posAuthAmountCurrency=USD&posAuthAmountValue=8000&...pspReference=CWBC43ZX2VTFWR82...", "Result": "Success", }, "SaleData": {...} } } } ``` You can also view this information in your [Customer Area](https://ca-test.adyen.com/): * To view the details of the payment, go to **Transactions** > **Payments** * To view the breakdown of the splits, go to **Platforms** > **Transfers**. ## 4. Track fund movements The API request validates only the format of the split instructions, **not** the balance accounts specified in the request. This means that even if the transaction is successful, it is possible that the funds are not credited to/deducted from the specified balance account. If the balance account does not exist, or it is linked to an account holder with a **closed** [status](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/accountHolders#responses-200-status), the full transaction and its fees are booked to your platform's liable balance account. To correct the balances, you can [transfer the funds](/platforms/internal-fund-transfers) between the balance accounts in your platform. To track the status of the funds transfers initiated by a payment: 1. Listen to the following webhooks: * [Transfer webhooks](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/overview): Adyen sends a [balancePlatform.transfer.created](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created) webhook to inform your server that funds will be credited to balance accounts, and [balancePlatform.transfer.updated](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.updated) webhooks after every status change. * [Transaction webhooks](https://docs.adyen.com/api-explorer/transaction-webhooks/latest/overview): Adyen sends a [balancePlatform.transaction.created](https://docs.adyen.com/api-explorer/transaction-webhooks/latest/post/balancePlatform.transaction.created) webhook to inform your server that funds have been credited to a balance account. 2. Acknowledge the webhooks. We send these webhooks for every split item in the payment. 3. In the payload of the [balancePlatform.transfer.updated](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.updated) webhook, note that: * The `event` array includes all previous transfer events. * The `sequenceNumber` defines the number of webhooks sent for the transfer, including the current one. ### Examples Your server receives webhooks for each split of the payment amount. The following examples are based on a [standard split payment](#split-payment) use case. ### Tab: Payment You can identify payment-related transfer webhooks for the amount booked to your user by the following values: | Parameter | Description | Value | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------- | | [category](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created#request-data-category) | Specifies the category of the transfer. | **platformPayment** | | [direction](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created#request-data-direction) | The direction of the transfer based on the balance account. | **incoming** | | [type](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created#request-data-type) | Specifies the type of the transfer. | **payment** | | [platformPaymentType](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created#request-data-categoryData-PlatformPayment-platformPaymentType) | Specifies the nature of each transfer on the balance platform. This parameter helps categorize transfers so you can reconcile transactions at a later time using the [Balance Platform Accounting Report](/platforms/reports-and-fees/balance-platform-accounting-report/). | **BalanceAccount** | | [pspPaymentReference](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created#request-data-categoryData-PlatformPayment-pspPaymentReference) | The [PSP reference](/get-started-with-adyen/adyen-glossary#psp-reference) of the payment authorization that the transfer is associated with. | **CWBC43ZX2VTFWR82** | ** ### 1. Incoming transfer received When a transfer request is received to credit funds to your user's balance account, Adyen sends a [balancePlatform.transfer.created](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created) webhook with `status` **received** and `direction` **incoming**. The webhook provides information about the transfer, such as the payment and split references and which user and balance account is credited with the funds. **Transfer received** ```json { "data": { "accountHolder": { "description": "Your description for the account holder", "id": "AH00000000000000000000001", "reference": "Your reference for the account holder" }, "amount": { "currency": "USD", "value": 7500 }, "balanceAccount": { "description": "Your description for the balance account", "id": "BA00000000000000000000001", "reference": "Your reference for the balance account" }, "balancePlatform": "YOUR_BALANCE_PLATFORM", "balances": [ { "currency": "USD", "received": 7500 } ], "category": "platformPayment", "categoryData": { "modificationMerchantReference": "MRef#000001", "modificationPspReference": "PPKFQ89R6QRXGN82", "paymentMerchantReference": "Payment reference", "platformPaymentType": "BalanceAccount", "pspPaymentReference": "CWBC43ZX2VTFWR82", "type": "platformPayment" }, "creationDate": "2025-10-20T13:30:05+02:00", "description": "Your description for the sale", "direction": "incoming", "events": [ { "bookingDate": "2025-10-20T13:30:18+02:00", "id": "SKRL00000000000000000000000001", "mutations": [ { "currency": "USD", "received": 7500 } ], "status": "received", "type": "accounting" } ], "id": "JN4227222422265", "reason": "approved", "reference": "Your reference for the sale amount", "sequenceNumber": 1, "status": "received", "type": "payment" }, "environment": "test", "type": "balancePlatform.transfer.created" } ``` ** ### 2. Incoming transfer authorized When the transfer request is authorized, Adyen sends a [balancePlatform.transfer.updated](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.updated) webhook with `status` **authorised**. **Transfer authorised** ```json { "data": { "accountHolder": { "description": "Your description for the account holder", "id": "AH00000000000000000000001", "reference": "Your reference for the account holder" }, "amount": { "currency": "USD", "value": 7500 }, "balanceAccount": { "description": "Your description for the balance account", "id": "BA00000000000000000000001", "reference": "Your reference for the balance account" }, "balancePlatform": "YOUR_BALANCE_PLATFORM", "balances": [ { "currency": "USD", "received": 0, "reserved": 7500 } ], "category": "platformPayment", "categoryData": { "modificationMerchantReference": "MRef#000001", "modificationPspReference": "PPKFQ89R6QRXGN82", "paymentMerchantReference": "Payment reference", "platformPaymentType": "BalanceAccount", "pspPaymentReference": "CWBC43ZX2VTFWR82", "type": "platformPayment" }, "creationDate": "2025-10-20T13:30:05+02:00", "description": "Your description for the sale", "direction": "incoming", "events": [ { "bookingDate": "2025-10-20T13:30:18+02:00", "id": "SKRL00000000000000000000000001", "mutations": [ { "currency": "USD", "received": 7500 } ], "status": "received", "type": "accounting" }, { "bookingDate": "2025-10-20T13:30:18+02:00", "id": "SKRL00000000000000000000000002", "mutations": [ { "currency": "USD", "received": -7500, "reserved": 7500 } ], "status": "authorised", "type": "accounting" } ], "id": "JN4227222422265", "reason": "approved", "reference": "Your reference for the sale amount", "sequenceNumber": 2, "status": "authorised", "type": "payment" }, "environment": "test", "type": "balancePlatform.transfer.updated" } ``` ** ### 3. Incoming transfer captured When the funds are credited to your user's balance account, Adyen sends a [balancePlatform.transfer.updated](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.updated) webhook with `status` **captured** and the `transactionId`. **Transfer captured** ```json { "data": { "accountHolder": { "description": "Your description for the account holder", "id": "AH00000000000000000000001", "reference": "Your reference for the account holder" }, "amount": { "currency": "USD", "value": 7500 }, "balanceAccount": { "description": "Your description for the balance account", "id": "BA00000000000000000000001", "reference": "Your reference for the balance account" }, "balancePlatform": "YOUR_BALANCE_PLATFORM", "balances": [ { "balance": 7500, "currency": "USD", "received": 0, "reserved": 0 } ], "category": "platformPayment", "categoryData": { "modificationMerchantReference": "MRef#000001", "modificationPspReference": "PPKFQ89R6QRXGN82", "paymentMerchantReference": "Payment reference", "platformPaymentType": "BalanceAccount", "pspPaymentReference": "CWBC43ZX2VTFWR82", "type": "platformPayment" }, "creationDate": "2025-10-20T13:30:05+02:00", "description": "Your description for the sale", "direction": "incoming", "events": [ { "bookingDate": "2025-10-20T13:30:18+02:00", "id": "SKRL00000000000000000000000001", "mutations": [ { "currency": "USD", "received": 7500 } ], "status": "received", "type": "accounting" }, { "bookingDate": "2025-10-20T13:30:18+02:00", "id": "SKRL00000000000000000000000002", "mutations": [ { "currency": "USD", "received": -7500, "reserved": 7500 } ], "status": "authorised", "type": "accounting" }, { "bookingDate": "2025-10-20T13:30:20+02:00", "id": "SKRL00000000000000000000000003", "mutations": [ { "balance": 7500, "currency": "USD", "received": 0, "reserved": -7500 } ], "status": "captured", "transactionId": "EVJN42272224222B5JB8BRC84N686ZUSD", "type": "accounting", "valueDate": "2023-03-01T00:00:00+02:00" } ], "id": "JN4227222422265", "reason": "approved", "reference": "Your reference for the sale amount", "sequenceNumber": 3, "status": "captured", "type": "payment" }, "environment": "test", "type": "balancePlatform.transfer.updated" } ``` ** ### 4. Transaction booked When the funds are credited, Adyen also sends a [balancePlatform.transaction.created](https://docs.adyen.com/api-explorer/transaction-webhooks/latest/post/balancePlatform.transaction.created) webhook, which includes information about the related transaction. **Transaction created** ```json { "data": { "id": "EVJN42272224222B5JB8BRC84N686ZUSD", "amount": { "value": 7500, "currency": "USD" }, "status": "booked", "transfer": { "id": "JN4227222422265", "categoryData": { "modificationMerchantReference": "MRef#000001", "modificationPspReference": "PPKFQ89R6QRXGN82", "paymentMerchantReference": "Payment reference", "platformPaymentType": "BalanceAccount", "pspPaymentReference": "CWBC43ZX2VTFWR82", "type": "platformPayment" }, "reference": "Your reference for the sale amount" }, "valueDate": "2023-03-01T00:00:00+02:00", "bookingDate": "2025-10-20T13:30:20+02:00", "creationDate": "2025-10-20T13:30:05+02:00", "accountHolder": { "id": "AH00000000000000000000001", "description": "Your description for the account holder", "reference": "Your reference for the account holder" }, "balanceAccount": { "id": "BA00000000000000000000001", "description": "Your description for the balance account", "reference": "Your reference for the balance account" }, "balancePlatform": "YOUR_BALANCE_PLATFORM" }, "type": "balancePlatform.transaction.created", "environment": "test" } ``` ### Tab: Transaction fees You can identify payment-related transfer webhooks for the transaction fees by the following values: | Parameter | Description | Value | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------- | | [category](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created#request-data-category) | Specifies the category of the transfer. | **platformPayment** | | [direction](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created#request-data-direction) | The direction of the transfer based on the balance account. | **outgoing** | | [type](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created#request-data-type) | Specifies the type of the transfer. | **payment** | | [platformPaymentType](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created#request-data-categoryData-PlatformPayment-platformPaymentType) | Specifies the nature of each transfer on the balance platform. This parameter helps categorize transfers so you can reconcile transactions at a later time using the [Balance Platform Accounting Report](/platforms/reports-and-fees/balance-platform-accounting-report/). | **PaymentFee** | | [pspPaymentReference](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created#request-data-categoryData-PlatformPayment-pspPaymentReference) | The [PSP reference](/get-started-with-adyen/adyen-glossary#psp-reference) of the payment authorization that the transfer is associated with. | **CWBC43ZX2VTFWR82** | ** ### 1. Outgoing transfer received Once the transaction fees are calculated, Adyen sends a [balancePlatform.transfer.created](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created) webhook with `direction` **outgoing** to announce that funds will be deducted from your user's second balance account. **Received transfer request for transaction fees** ```json { "data": { "accountHolder": { "description": "Your description for the account holder", "id": "AH00000000000000000000001", "reference": "Your reference for the account holder" }, "amount": { "currency": "USD", "value": 344 }, "balanceAccount": { "description": "Your description for the second balance account", "id": "BA00000000000000000000002", "reference": "Your reference for the second balance account" }, "balancePlatform": "YOUR_BALANCE_PLATFORM", "balances": [ { "currency": "USD", "received": -344 } ], "category": "platformPayment", "categoryData": { "modificationMerchantReference": "MRef#000001", "modificationPspReference": "PPKFQ89R6QRXGN82", "paymentMerchantReference": "Payment reference", "platformPaymentType": "PaymentFee", "pspPaymentReference": "CWBC43ZX2VTFWR82", "type": "platformPayment" }, "creationDate": "2025-10-20T13:30:05+02:00", "description": "Your description for the payment fee", "direction": "outgoing", "events": [ { "bookingDate": "2025-10-20T13:30:18+02:00", "id": "RFDN00000000000000000000000001", "mutations": [ { "currency": "USD", "received": -344 } ], "status": "received", "type": "accounting" } ], "id": "4GD3R84BMWTKIWBL", "reason": "approved", "reference": "Your reference for the payment fee", "sequenceNumber": 1, "status": "received", "type": "payment" }, "environment": "test", "type": "balancePlatform.transfer.created" } ``` ** ### 2. Outgoing transfer authorized When the transfer request for the transaction fees is authorized, Adyen sends a [balancePlatform.transfer.updated](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.updated) webhook with `status` **authorised**. **Authorised transfer request** ```json { "data": { "accountHolder": { "description": "Your description for the account holder", "id": "AH00000000000000000000001", "reference": "Your reference for the account holder" }, "amount": { "currency": "USD", "value": 344 }, "balanceAccount": { "description": "Your description for the second balance account", "id": "BA00000000000000000000002", "reference": "Your reference for the second balance account" }, "balancePlatform": "YOUR_BALANCE_PLATFORM", "balances": [ { "currency": "USD", "received": 0, "reserved": -344 } ], "category": "platformPayment", "categoryData": { "modificationMerchantReference": "MRef#000001", "modificationPspReference": "PPKFQ89R6QRXGN82", "paymentMerchantReference": "Payment reference", "platformPaymentType": "PaymentFee", "pspPaymentReference": "CWBC43ZX2VTFWR82", "type": "platformPayment" }, "creationDate": "2025-10-20T13:30:05+02:00", "description": "Your description for the payment fee", "direction": "outgoing", "events": [ { "bookingDate": "2025-10-20T13:30:18+02:00", "id": "RFDN00000000000000000000000001", "mutations": [ { "currency": "USD", "received": -344 } ], "status": "received", "type": "accounting" }, { "bookingDate": "2025-10-20T13:30:18+02:00", "id": "RFDN00000000000000000000000002", "mutations": [ { "currency": "USD", "received": 344, "reserved": -344 } ], "status": "authorised", "type": "accounting" } ], "id": "4GD3R84BMWTKIWBL", "reason": "approved", "reference": "Your reference for the payment fee", "sequenceNumber": 2, "status": "authorised", "type": "payment" }, "environment": "test", "type": "balancePlatform.transfer.updated" } ``` ** ### 3. Outgoing transfer captured When the funds are deducted from your user's balance account, Adyen sends a [balancePlatform.transfer.updated](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.updated) webhook with `status` **captured** and the `transactionId`. **Captured transfer request** ```json { "data": { "accountHolder": { "description": "Your description for the account holder", "id": "AH00000000000000000000001", "reference": "Your reference for the account holder" }, "amount": { "currency": "USD", "value": 344 }, "balanceAccount": { "description": "Your description for the second balance account", "id": "BA00000000000000000000002", "reference": "Your reference for the second balance account" }, "balancePlatform": "YOUR_BALANCE_PLATFORM", "balances": [ { "balance": -344, "currency": "USD", "received": 0, "reserved": 0 } ], "category": "platformPayment", "categoryData": { "modificationMerchantReference": "MRef#000001", "modificationPspReference": "PPKFQ89R6QRXGN82", "paymentMerchantReference": "Payment reference", "platformPaymentType": "PaymentFee", "pspPaymentReference": "CWBC43ZX2VTFWR82", "type": "platformPayment" }, "creationDate": "2025-10-20T13:30:05+02:00", "description": "Your description for the payment fee", "direction": "outgoing", "events": [ { "bookingDate": "2025-10-20T13:30:18+02:00", "id": "RFDN00000000000000000000000001", "mutations": [ { "currency": "USD", "received": -344 } ], "status": "received", "type": "accounting" }, { "bookingDate": "2025-10-20T13:30:18+02:00", "id": "RFDN00000000000000000000000002", "mutations": [ { "currency": "USD", "received": 344, "reserved": -344 } ], "status": "authorised", "type": "accounting" }, { "bookingDate": "2025-10-20T13:30:18+02:00", "id": "RFDN00000000000000000000000003", "mutations": [ { "balance": -344, "currency": "USD", "received": 0, "reserved": 344 } ], "status": "captured", "transactionId": "EVJN42272224222B5JB8BRC84N686ZUSD", "type": "accounting", "valueDate": "2023-02-14T00:00:00+01:00" } ], "id": "4GD3R84BMWTKIWBL", "reason": "approved", "reference": "Your reference for the payment fee", "sequenceNumber": 3, "status": "captured", "type": "payment" }, "environment": "test", "type": "balancePlatform.transfer.updated" } ``` ** ### 4. Transaction booked When the funds are deducted, Adyen also sends a [balancePlatform.transaction.created](https://docs.adyen.com/api-explorer/transaction-webhooks/latest/post/balancePlatform.transaction.created) webhook, which includes information about the related transaction. **Transaction created** ```json { "data": { "id": "EVJN42272224222B5JB8BRC84N686ZUSD", "amount": { "value": -344, "currency": "USD" }, "status": "booked", "transfer": { "id": "4GD3R84BMWTKIWBL", "categoryData": { "modificationMerchantReference": "MRef#000001", "modificationPspReference": "PPKFQ89R6QRXGN82", "paymentMerchantReference": "Payment reference", "platformPaymentType": "PaymentFee", "pspPaymentReference": "CWBC43ZX2VTFWR82", "type": "platformPayment" }, "reference": "Your reference for the payment fee" }, "valueDate": "2023-02-14T00:00:00+01:00", "bookingDate": "2025-10-20T13:30:18+02:00", "creationDate": "2025-10-20T13:30:05+02:00", "accountHolder": { "id": "AH00000000000000000000001", "description": "Your description for the account holder", "reference": "Your reference for the account holder" }, "balanceAccount": { "id": "BA00000000000000000000001", "description": "Your description for the balance account", "reference": "Your reference for the balance account" }, "balancePlatform": "YOUR_BALANCE_PLATFORM" }, "type": "balancePlatform.transaction.created", "environment": "test" } ``` ### Tab: Commission You can identify payment-related transfer webhooks for your commission by the following values: | Parameter | Description | Value | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------- | | [category](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created#request-data-category) | Specifies the category of the transfer. | **platformPayment** | | [direction](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created#request-data-direction) | The direction of the transfer based on the balance account. | **incoming** | | [type](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created#request-data-type) | Specifies the type of the transfer. | **payment** | | [platformPaymentType](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created#request-data-categoryData-PlatformPayment-platformPaymentType) | Specifies the nature of each transfer on the balance platform. This parameter helps categorize transfers so you can reconcile transactions at a later time using the [Balance Platform Accounting Report](/platforms/reports-and-fees/balance-platform-accounting-report/). | **Commission** | | [pspPaymentReference](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created#request-data-categoryData-PlatformPayment-pspPaymentReference) | The [PSP reference](/get-started-with-adyen/adyen-glossary#psp-reference) of the payment authorization that the transfer is associated with. | **CWBC43ZX2VTFWR82** | ** ### 1. Incoming transfer received When a transfer request is received to credit your liable account with the commission fee for a payment, Adyen sends a [balancePlatform.transfer.created](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created) webhook with `status` **received** and `direction` **incoming**. The webhook provides information about the transfer, such as the payment and split references.When a transfer request is received to credit your liable account with the commission fee for a payment, Adyen sends a [balancePlatform.transfer.created](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.created) webhook with `status` **received** and `direction` **incoming**. The webhook provides information about the transfer, such as the payment and split references. **Received commission** ```json { "data": { "accountHolder": { "description": "Your description your liable account holder", "id": "AH00000000000000000000002", "reference": "Your reference for your liable account holder" }, "amount": { "currency": "USD", "value": 500 }, "balanceAccount": { "description": "Your description for your liable balance account", "id": "BA00000000000000000000003", "reference": "Your reference for your liable balance account" }, "balancePlatform": "YOUR_BALANCE_PLATFORM", "balances": [ { "currency": "USD", "received": 500 } ], "category": "platformPayment", "categoryData": { "modificationMerchantReference": "MRef#000001", "modificationPspReference": "PPKFQ89R6QRXGN82", "paymentMerchantReference": "Payment reference", "platformPaymentType": "Commission", "pspPaymentReference": "CWBC43ZX2VTFWR82", "type": "platformPayment" }, "creationDate": "2025-10-20T13:30:05+02:00", "description": "Your description for your commission", "direction": "incoming", "events": [ { "bookingDate": "2025-10-20T13:30:18+02:00", "id": "ZVTF00000000000000000000000001", "mutations": [ { "currency": "USD", "received": 500 } ], "originalAmount": { "currency": "USD", "value": 500 }, "status": "received", "type": "accounting" } ], "id": "6HBKR52BUWKKDWAM", "reason": "approved", "reference": "Your reference for your commission", "sequenceNumber": 1, "status": "received", "type": "payment" }, "environment": "test", "type": "balancePlatform.transfer.created" } ``` ** ### 2. Incoming transfer authorized When the transfer is authorised, Adyen sends a [balancePlatform.transfer.updated](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.updated) webhook with `status` **authorised**. **Authorised commission** ```json { "data": { "accountHolder": { "description": "Your description for your liable account holder", "id": "AH00000000000000000000001", "reference": "Your reference for your liable account holder" }, "amount": { "currency": "USD", "value": 500 }, "balanceAccount": { "description": "Your description for your liable balance account", "id": "BA00000000000000000000003", "reference": "Your reference for your liable balance account" }, "balancePlatform": "YOUR_BALANCE_PLATFORM", "balances": [ { "currency": "USD", "received": 0, "reserved": 500 } ], "category": "platformPayment", "categoryData": { "modificationMerchantReference": "MRef#000001", "modificationPspReference": "PPKFQ89R6QRXGN82", "paymentMerchantReference": "Payment reference", "platformPaymentType": "Commission", "pspPaymentReference": "CWBC43ZX2VTFWR82", "type": "platformPayment" }, "creationDate": "2025-10-20T13:30:05+02:00", "description": "Your description for your commission", "direction": "incoming", "events": [ { "bookingDate": "2025-10-20T13:30:18+02:00", "id": "ZVTF00000000000000000000000001", "mutations": [ { "currency": "USD", "received": 500 } ], "originalAmount": { "currency": "USD", "value": 500 }, "status": "received", "type": "accounting" }, { "bookingDate": "2025-10-20T13:30:18+02:00", "id": "ZVTF00000000000000000000000002", "mutations": [ { "currency": "USD", "received": -500, "reserved": 500 } ], "status": "authorised", "type": "accounting" } ], "id": "6HBKR52BUWKKDWAM", "reason": "approved", "reference": "Your reference for your commission", "sequenceNumber": 2, "status": "authorised", "type": "payment" }, "environment": "test", "type": "balancePlatform.transfer.updated" } ``` ** ### 3. Incoming transfer captured When the funds are credited to your liable account, Adyen sends a [balancePlatform.transfer.updated](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/post/balancePlatform.transfer.updated) webhook with `status` **captured** and the `transactionId`. **Captured commission** ```json { "data": { "accountHolder": { "description": "Your description for your liable account holder", "id": "AH00000000000000000000001", "reference": "Your reference for the account holder" }, "amount": { "currency": "USD", "value": 500 }, "balanceAccount": { "description": "Your description for your liable account", "id": "BA00000000000000000000002", "reference": "Your reference for the your liable account" }, "balancePlatform": "YOUR_BALANCE_PLATFORM", "balances": [ { "balance": 500, "currency": "USD", "received": 0, "reserved": 0 } ], "category": "platformPayment", "categoryData": { "modificationMerchantReference": "MRef#000001", "modificationPspReference": "PPKFQ89R6QRXGN82", "paymentMerchantReference": "Payment reference", "platformPaymentType": "Commission", "pspPaymentReference": "CWBC43ZX2VTFWR82", "type": "platformPayment" }, "creationDate": "2025-10-20T13:30:05+02:00", "description": "Your description for your commission", "direction": "incoming", "events": [ { "bookingDate": "2025-10-20T13:30:18+02:00", "id": "ZVTF00000000000000000000000001", "mutations": [ { "currency": "USD", "received": 500 } ], "originalAmount": { "currency": "USD", "value": 500 }, "status": "received", "type": "accounting" }, { "bookingDate": "2025-10-20T13:30:18+02:00", "id": "ZVTF00000000000000000000000002", "mutations": [ { "currency": "USD", "received": -500, "reserved": 500 } ], "status": "authorised", "type": "accounting" }, { "bookingDate": "2025-10-20T13:30:20+02:00", "id": "ZVTF00000000000000000000000003", "mutations": [ { "balance": 500, "currency": "USD", "received": 0, "reserved": -500 } ], "originalAmount": { "currency": "USD", "value": 500 }, "status": "captured", "transactionId": "EVJN42272224222B5JB8BRC84N686ZUSD", "type": "accounting", "valueDate": "T00:00:00+02:00" } ], "id": "6HBKR52BUWKKDWAM", "reason": "approved", "reference": "Your reference for your commission", "sequenceNumber": 3, "status": "captured", "type": "payment" }, "environment": "test", "type": "balancePlatform.transfer.updated" } ``` ** ### 4. Transaction booked When the funds are credited, Adyen also sends a [balancePlatform.transaction.created](https://docs.adyen.com/api-explorer/transaction-webhooks/latest/post/balancePlatform.transaction.created) webhook, which includes information about the related transaction. **Transaction created** ```json { "data": { "id": "EVJN42272224222B5JB8BRC84N686ZUSD", "amount": { "value": -500, "currency": "USD" }, "status": "booked", "transfer": { "id": "6HBKR52BUWKKDWAM", "categoryData": { "modificationMerchantReference": "MRef#000001", "modificationPspReference": "PPKFQ89R6QRXGN82", "paymentMerchantReference": "Payment reference", "platformPaymentType": "Commission", "pspPaymentReference": "CWBC43ZX2VTFWR82", "type": "platformPayment" }, "reference": "Your reference for your commission" }, "valueDate": "2023-02-14T00:00:00+01:00", "bookingDate": "2025-10-20T13:30:20+02:00", "creationDate": "2025-10-20T13:30:05+02:00", "accountHolder": { "id": "AH00000000000000000000001", "description": "Your description for the account holder", "reference": "Your reference for the account holder" }, "balanceAccount": { "id": "BA00000000000000000000001", "description": "Your description for the balance account", "reference": "Your reference for the balance account" }, "balancePlatform": "YOUR_BALANCE_PLATFORM" }, "type": "balancePlatform.transaction.created", "environment": "test" } ``` ## Additional split instructions In addition to the [standard use cases](#splits), you can also book the following split types to your user's balance account: * [Transaction fees](#different-types-of-transaction-fees) * [Chargebacks](#potential-chargebacks-and-costs) * [Surcharges](#surcharges) * [Top-ups](#top-ups) ### Different types of transaction fees The split `type` **PaymentFee** books the total amount of all your transaction fees to the specified balance account. However, you can also choose to split the total transaction fee amount, and book different kinds of fees to different balance accounts. For more information about the transaction fee types, and how to book them to different balance accounts, see [Transaction fees](/platforms/in-person-payments/transaction-fees). ### Surcharges When your users pass on the costs of accepting payments to their customers, this is called a surcharge. You can use split instructions to define how to book the surcharge within your platform. For more information, see [Surcharge](/platforms/in-person-payments/surcharge). ### Tips When your user receives a tip from their customer, you can book this tip directly to their balance account. For more information, see [Tipping](/platforms/in-person-payments/tipping). ## Best practices We strongly recommend sending a `reference` for each split. You can use the reference to reconcile the split amounts in the transaction overview and in the reports. Without a reference, the split amounts are aggregated in a single entry and you will be unable to reconcile the transactions. If you do not know the split amounts at the time of payment, you can [provide split instructions at capture](/platforms/in-person-payments/split-transactions/split-payments-at-capture) instead. Split instructions provided at capture overrides any split instructions provided with the initial payment request. However, we recommend that you provide the split instructions at the time of payment, rather than at capture. Because some payment methods do not support delayed captures, the funds may not be booked correctly unless the split instructions are provided in the payment request. ## See also * [Split at capture](/platforms/in-person-payments/split-transactions/split-payments-at-capture) * [Add information to POS payments](/point-of-sale/add-data/sale-to-acquirer-data) * [Enable manual capture of POS payments](/point-of-sale/capturing-payments#enable-manual-capture)