--- title: "Split payments at authorization" description: "Learn how to split a payment at the time of authorization." url: "https://docs.adyen.com/platforms/online-payments/split-transactions/split-payments-at-authorization" source_url: "https://docs.adyen.com/platforms/online-payments/split-transactions/split-payments-at-authorization.md" canonical: "https://docs.adyen.com/platforms/online-payments/split-transactions/split-payments-at-authorization" last_modified: "2023-02-16T17:23:00+01:00" language: "en" --- # Split payments at authorization Learn how to split a payment at the time of authorization. [View source](/platforms/online-payments/split-transactions/split-payments-at-authorization.md) When you authorize an online payment on behalf of your user, you can split the payment amount between the balance accounts in your platform by including the split instructions in your authorization request. This allows you to separately book the sale amount, your platform's commission, transaction fees, and the leftover amount after currency conversion. ## Requirements Take into account the following requirements, limitations, and preparations to start processing payments. | Requirement | Description | | ----------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Integration type** | You must have an Adyen [online payments integration and a checkout UI](/online-payments/build-your-integration). | | **[API credentials](/development-resources/api-credentials/)** | You must have credentials for the following APIs:- [Checkout API](https://docs.adyen.com/api-explorer/Checkout/latest/overview) - [Transfers API](https://docs.adyen.com/api-explorer/transfers/latest/overview) | | **[Webhooks](/development-resources/webhooks)** | Ensure that your server can receive and accept [standard webhooks](/development-resources/webhooks). Subscribe to any of the following webhooks:- [Transfer webhooks](https://docs.adyen.com/api-explorer/transfer-webhooks/latest/overview) - [Transaction webhooks](https://docs.adyen.com/api-explorer/transaction-webhooks/latest/overview) | | **[Capabilities](/platforms/verification-overview/capabilities)** | Make sure that your account holders have the following capabilities:- **receivePayments** - **receiveFromPlatformPayments** - **sendToTransferInstrument** | | **Limitations** | If an account holder does not have the **receiveFromPlatformPayments** capability in a **valid** state, the funds cannot be allocated to their balance account. The full amount is booked to your liable balance account. | | | | ## Split a payment between balance accounts To split the payment amount at the time of authorization: 1. Add a `splits` array to your POST [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-splits) or POST [/sessions](https://docs.adyen.com/api-explorer/Checkout/latest/post/sessions#request-splits) request. For each item in the [/payments splits array](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-splits) or the [/sessions splits array](https://docs.adyen.com/api-explorer/Checkout/latest/post/sessions#request-splits), specify the following fields: | Parameter | Required | Description | | | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | | `account` | ![Required](/user/pages/reuse/image-library/01.icons/required/required.svg?decoding=auto\&fetchpriority=auto) | The account that will receive (or be charged) the split amount. This is the `balanceAccountId` of one of your user's balance accounts or your platform's liable balance account. You do not need to specify this field when `type` is **Commission**. | | | `amount.currency` | ![Required](/user/pages/reuse/image-library/01.icons/required/required.svg?decoding=auto\&fetchpriority=auto) | Required for currency conversion The currency of the part of the payment you want to the specified `account`. | | | `amount.value` | ![Required](/user/pages/reuse/image-library/01.icons/required/required.svg?decoding=auto\&fetchpriority=auto) | The value of the part of the payment you want to the specified `account`. You do not need to specify this field for transaction fees or the remainder, because they are not known at the time of payment. | | | `store` | ![Required](/user/pages/reuse/image-library/01.icons/required/required.svg?decoding=auto\&fetchpriority=auto) | The [reference](https://docs.adyen.com/api-explorer/Management/latest/post/stores#request-reference) of the store through which you want to process the payment. | | | `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 `account`. Possible values:- **BalanceAccount**: books the sale amount to the specified balance account. - **Commission**: books your commission to your [liable balance account](/platforms/account-structure-resources). - **Remainder**: books the amount left over after a [currency conversion](/platforms/online-payments/currency-conversion) to the specified balance account. By default, the amount is booked to your platform's liable balance account. - We recommend that you also include at least one [transaction fee type ](/platforms/online-payments/transaction-fees)in your request. All undefined transaction fees are booked to your platform's liable balance account. - **TopUp**: books the [top-up amount](/platforms/top-up-balance-account/on-demand-top-ups) paid by your user to the specified balance account. This split type is not supported for a [/sessions](https://docs.adyen.com/api-explorer/Checkout/latest/post/sessions) request. | | | `reference` | ![Conditionally required](/user/pages/reuse/image-library/01.icons/conditionally-required/conditionally-required.svg?decoding=auto\&fetchpriority=auto) | Required if `type` is **BalanceAccount** Your unique identifier for the part of the payment you want to book to the specified `account`. You need this for reconciliation, as explained under [Best practices](#best-practices). | | | `description` | | Your description for the part of the payment you want to booking to the specified `account`, returned in our reports. | | The following example shows how to split the payment amount at the time of payment, when a customer pays USD 80.00: * With `type` **BalanceAccount**, we book USD 75.00 to your user's balance account as payment for the goods or services. * With `type` **PaymentFee**, we book all the transaction fees to your user's balance account. * With `type` **Commission**, we book USD 5.00 to your liable balance account as your platform's commission. ### Tab: Platforms **Split funds at time of payment** #### curl ```bash curl https://checkout-test.adyen.com/v72/payments \ -H 'x-api-key: ADYEN_API_KEY' \ -H 'content-type: application/json' \ -X POST \ -d '{ "paymentMethod": { "type": "scheme", "encryptedCardNumber": "test_4111111111111111", "encryptedSecurityCode": "test_737", "encryptedExpiryMonth": "test_03", "encryptedExpiryYear": "test_2030" }, "amount": { "value": 8000, "currency": "USD" }, "store": "USER_STORE_REFERENCE", "reference": "YOUR_ORDER_NUMBER", "merchantAccount": "YOUR_MERCHANT_ACCOUNT", "returnUrl": "https://your-company.example.com/...", "splits":[ { "amount": { "value": 7500 }, "type": "BalanceAccount", "account": "BA00000000000000000000001", "reference": "Your reference for the sale amount", "description": "Your description for the sale amount" }, { "amount": { "value": 500 }, "type": "Commission", "reference": "Your reference for your commission", "description": "Your description for your commission" }, { "type": "PaymentFee", "account": "BA00000000000000000000001", "reference": "Your reference for the payment fee", "description": "Your description for the payment fee" } ] }' ``` #### Java ```java // Adyen Java API Library v40.0.0 import com.adyen.Client; import com.adyen.enums.Environment; import com.adyen.model.checkout.*; import java.time.OffsetDateTime; import java.util.*; import com.adyen.model.RequestOptions; import com.adyen.service.checkout.*; // For the LIVE environment, also include your liveEndpointUrlPrefix. Client client = new Client("ADYEN_API_KEY", Environment.TEST); // Create the request object(s) SplitAmount splitAmount1 = new SplitAmount() .value(7500L); SplitAmount splitAmount2 = new SplitAmount() .value(500L); Amount amount = new Amount() .currency("USD") .value(8000L); Split split1 = new Split() .reference("Your reference for the sale amount") .amount(splitAmount1) .description("Your description for the sale amount") .type(Split.TypeEnum.BALANCEACCOUNT) .account("BA00000000000000000000001"); Split split2 = new Split() .reference("Your reference for your commission") .amount(splitAmount2) .description("Your description for your commission") .type(Split.TypeEnum.COMMISSION); Split split3 = new Split() .reference("Your reference for the payment fee") .description("Your description for the payment fee") .type(Split.TypeEnum.PAYMENTFEE) .account("BA00000000000000000000001"); CardDetails cardDetails = new CardDetails() .encryptedCardNumber("test_4111111111111111") .encryptedSecurityCode("test_737") .encryptedExpiryYear("test_2030") .encryptedExpiryMonth("test_03") .type(CardDetails.TypeEnum.SCHEME); PaymentRequest paymentRequest = new PaymentRequest() .reference("YOUR_ORDER_NUMBER") .amount(amount) .splits(Arrays.asList(split1, split2, split3)) .merchantAccount("YOUR_MERCHANT_ACCOUNT") .paymentMethod(new CheckoutPaymentMethod(cardDetails)) .store("USER_STORE_REFERENCE") .returnUrl("https://your-company.example.com/..."); // Send the request PaymentsApi service = new PaymentsApi(client); PaymentResponse response = service.payments(paymentRequest, new RequestOptions().idempotencyKey("UUID")); ``` #### PHP ```php setXApiKey("ADYEN_API_KEY"); // For the LIVE environment, also include your liveEndpointUrlPrefix. $client->setEnvironment(Environment::TEST); // Create the request object(s) $splitAmount1 = new SplitAmount(); $splitAmount1 ->setValue(7500); $splitAmount2 = new SplitAmount(); $splitAmount2 ->setValue(500); $amount = new Amount(); $amount ->setCurrency("USD") ->setValue(8000); $split1 = new Split(); $split1 ->setReference("Your reference for the sale amount") ->setAmount($splitAmount1) ->setDescription("Your description for the sale amount") ->setType("BalanceAccount") ->setAccount("BA00000000000000000000001"); $split2 = new Split(); $split2 ->setReference("Your reference for your commission") ->setAmount($splitAmount2) ->setDescription("Your description for your commission") ->setType("Commission"); $split3 = new Split(); $split3 ->setReference("Your reference for the payment fee") ->setDescription("Your description for the payment fee") ->setType("PaymentFee") ->setAccount("BA00000000000000000000001"); $checkoutPaymentMethod = new CheckoutPaymentMethod(); $checkoutPaymentMethod ->setEncryptedCardNumber("test_4111111111111111") ->setEncryptedSecurityCode("test_737") ->setEncryptedExpiryYear("test_2030") ->setEncryptedExpiryMonth("test_03") ->setType("scheme"); $paymentRequest = new PaymentRequest(); $paymentRequest ->setReference("YOUR_ORDER_NUMBER") ->setAmount($amount) ->setSplits(array($split1, $split2, $split3)) ->setMerchantAccount("YOUR_MERCHANT_ACCOUNT") ->setPaymentMethod($checkoutPaymentMethod) ->setStore("USER_STORE_REFERENCE") ->setReturnUrl("https://your-company.example.com/..."); $requestOptions['idempotencyKey'] = 'UUID'; // Send the request $service = new PaymentsApi($client); $response = $service->payments($paymentRequest, $requestOptions); ``` #### C\# ```cs // Adyen .NET API Library v32.2.1 using Adyen; using Environment = Adyen.Model.Environment; using Adyen.Model; using Adyen.Model.Checkout; using Adyen.Service.Checkout; // For the LIVE environment, also include your liveEndpointUrlPrefix. var config = new Config() { XApiKey = "ADYEN_API_KEY", Environment = Environment.Test }; var client = new Client(config); // Create the request object(s) SplitAmount splitAmount1 = new SplitAmount { Value = 7500 }; SplitAmount splitAmount2 = new SplitAmount { Value = 500 }; Amount amount = new Amount { Currency = "USD", Value = 8000 }; Split split1 = new Split { Reference = "Your reference for the sale amount", Amount = splitAmount1, Description = "Your description for the sale amount", Type = Split.TypeEnum.BalanceAccount, Account = "BA00000000000000000000001" }; Split split2 = new Split { Reference = "Your reference for your commission", Amount = splitAmount2, Description = "Your description for your commission", Type = Split.TypeEnum.Commission }; Split split3 = new Split { Reference = "Your reference for the payment fee", Description = "Your description for the payment fee", Type = Split.TypeEnum.PaymentFee, Account = "BA00000000000000000000001" }; CardDetails cardDetails = new CardDetails { EncryptedCardNumber = "test_4111111111111111", EncryptedSecurityCode = "test_737", EncryptedExpiryYear = "test_2030", EncryptedExpiryMonth = "test_03", Type = CardDetails.TypeEnum.Scheme }; PaymentRequest paymentRequest = new PaymentRequest { Reference = "YOUR_ORDER_NUMBER", Amount = amount, Splits = new List{ split1, split2, split3 }, MerchantAccount = "YOUR_MERCHANT_ACCOUNT", PaymentMethod = new CheckoutPaymentMethod(cardDetails), Store = "USER_STORE_REFERENCE", ReturnUrl = "https://your-company.example.com/..." }; // Send the request var service = new PaymentsService(client); var response = service.Payments(paymentRequest, requestOptions: new RequestOptions { IdempotencyKey = "UUID"}); ``` #### NodeJS (JavaScript) ```js // Adyen Node API Library v30.0.1 const { Client, CheckoutAPI } = require('@adyen/api-library'); // For the LIVE environment, also include your liveEndpointUrlPrefix. const config = new Config({ apiKey: "ADYEN_API_KEY", environment: EnvironmentEnum.TEST }); const client = new Client(config); // Create the request object(s) const paymentRequest = { paymentMethod: { type: "scheme", encryptedCardNumber: "test_4111111111111111", encryptedSecurityCode: "test_737", encryptedExpiryMonth: "test_03", encryptedExpiryYear: "test_2030" }, amount: { value: 8000, currency: "EUR" }, store: "USER_STORE_REFERENCE", reference: "YOUR_ORDER_NUMBER", merchantAccount: "YOUR_MERCHANT_ACCOUNT", returnUrl: "https://your-company.example.com/...", splits: [ { amount: { value: 7500 }, type: "BalanceAccount", account: "BA00000000000000000000001", reference: "Your reference for the sale amount.", description: "Your description for the sale amount." }, { amount: { value: 500 }, type: "Commission", reference: "Your reference for the commission.", description: "Your description for the commission." }, { type: "PaymentFee", account: "BA00000000000000000000001", reference: "Your reference for the transaction fees.", description: "Your description for the transaction fees." } ] } // Send the request const checkoutAPI = new CheckoutAPI(client); const response = checkoutAPI.PaymentsApi.payments(paymentRequest, { idempotencyKey: "UUID" }); ``` #### Go ```go // Adyen Go API Library v21.1.0 import ( "context" "github.com/adyen/adyen-go-api-library/v21/src/common" "github.com/adyen/adyen-go-api-library/v21/src/adyen" "github.com/adyen/adyen-go-api-library/v21/src/checkout" ) // For the LIVE environment, also include your liveEndpointUrlPrefix. client := adyen.NewClient(&common.Config{ ApiKey: "ADYEN_API_KEY", Environment: common.TestEnv, }) // Create the request object(s) splitAmount1 := checkout.SplitAmount{ Value: 7500, } splitAmount2 := checkout.SplitAmount{ Value: 500, } amount := checkout.Amount{ Currency: "USD", Value: 8000, } split1 := checkout.Split{ Reference: common.PtrString("Your reference for the sale amount"), Amount: &splitAmount1, Description: common.PtrString("Your description for the sale amount"), Type: "BalanceAccount", Account: common.PtrString("BA00000000000000000000001"), } split2 := checkout.Split{ Reference: common.PtrString("Your reference for your commission"), Amount: &splitAmount2, Description: common.PtrString("Your description for your commission"), Type: "Commission", } split3 := checkout.Split{ Reference: common.PtrString("Your reference for the payment fee"), Description: common.PtrString("Your description for the payment fee"), Type: "PaymentFee", Account: common.PtrString("BA00000000000000000000001"), } cardDetails := checkout.CardDetails{ EncryptedCardNumber: common.PtrString("test_4111111111111111"), EncryptedSecurityCode: common.PtrString("test_737"), EncryptedExpiryYear: common.PtrString("test_2030"), EncryptedExpiryMonth: common.PtrString("test_03"), Type: common.PtrString("scheme"), } paymentRequest := checkout.PaymentRequest{ Reference: "YOUR_ORDER_NUMBER", Amount: amount, Splits: []checkout.Split{ split1, split2, split3, }, MerchantAccount: "YOUR_MERCHANT_ACCOUNT", PaymentMethod: checkout.CardDetailsAsCheckoutPaymentMethod(&cardDetails), Store: common.PtrString("USER_STORE_REFERENCE"), ReturnUrl: "https://your-company.example.com/...", } // Send the request service := client.Checkout() req := service.PaymentsApi.PaymentsInput().IdempotencyKey("UUID").PaymentRequest(paymentRequest) res, httpRes, err := service.PaymentsApi.Payments(context.Background(), req) ``` #### Python ```py # Adyen Python API Library v14.0.0 import Adyen adyen = Adyen.Adyen() adyen.client.xapikey = "ADYEN_API_KEY" # For the LIVE environment, also include your liveEndpointUrlPrefix. adyen.client.platform = "test" # The environment to use library in. # Create the request object(s) json_request = { "paymentMethod": { "type": "scheme", "encryptedCardNumber": "test_4111111111111111", "encryptedSecurityCode": "test_737", "encryptedExpiryMonth": "test_03", "encryptedExpiryYear": "test_2030" }, "amount": { "value": 8000, "currency": "USD" }, "store": "USER_STORE_REFERENCE", "reference": "YOUR_ORDER_NUMBER", "merchantAccount": "YOUR_MERCHANT_ACCOUNT", "returnUrl": "https://your-company.example.com/...", "splits": [ { "amount": { "value": 7500 }, "type": "BalanceAccount", "account": "BA00000000000000000000001", "reference": "Your reference for the sale amount", "description": "Your description for the sale amount" }, { "amount": { "value": 500 }, "type": "Commission", "reference": "Your reference for your commission", "description": "Your description for your commission" }, { "type": "PaymentFee", "account": "BA00000000000000000000001", "reference": "Your reference for the payment fee", "description": "Your description for the payment fee" } ] } # Send the request result = adyen.checkout.payments_api.payments(request=json_request, idempotency_key="UUID") ``` #### Ruby ```rb # Adyen Ruby API Library v11.1.0 require "adyen-ruby-api-library" adyen = Adyen::Client.new adyen.api_key = 'ADYEN_API_KEY' # For the LIVE environment, also include your liveEndpointUrlPrefix. adyen.env = :test # Set to "live" for live environment # Create the request object(s) request_body = { :paymentMethod => { :type => 'scheme', :encryptedCardNumber => 'test_4111111111111111', :encryptedSecurityCode => 'test_737', :encryptedExpiryMonth => 'test_03', :encryptedExpiryYear => 'test_2030' }, :amount => { :value => 8000, :currency => 'USD' }, :store => 'USER_STORE_REFERENCE', :reference => 'YOUR_ORDER_NUMBER', :merchantAccount => 'YOUR_MERCHANT_ACCOUNT', :returnUrl => 'https://your-company.example.com/...', :splits => [ { :amount => { :value => 7500 }, :type => 'BalanceAccount', :account => 'BA00000000000000000000001', :reference => 'Your reference for the sale amount', :description => 'Your description for the sale amount' }, { :amount => { :value => 500 }, :type => 'Commission', :reference => 'Your reference for your commission', :description => 'Your description for your commission' }, { :type => 'PaymentFee', :account => 'BA00000000000000000000001', :reference => 'Your reference for the payment fee', :description => 'Your description for the payment fee' } ] } # Send the request result = adyen.checkout.payments_api.payments(request_body, headers: { 'Idempotency-Key' => 'UUID' }) ``` #### NodeJS (TypeScript) ```ts // Adyen Node API Library v30.0.1 import { Client, CheckoutAPI, Types } from "@adyen/api-library"; // For the LIVE environment, also include your liveEndpointUrlPrefix. const config = new Config({ apiKey: "ADYEN_API_KEY", environment: EnvironmentEnum.TEST }); const client = new Client(config); // Create the request object(s) const splitAmount1: Types.checkout.SplitAmount = { value: 7500 }; const splitAmount2: Types.checkout.SplitAmount = { value: 500 }; const amount: Types.checkout.Amount = { currency: "USD", value: 8000 }; const split1: Types.checkout.Split = { reference: "Your reference for the sale amount", amount: splitAmount1, description: "Your description for the sale amount", type: Types.checkout.Split.TypeEnum.BalanceAccount, account: "BA00000000000000000000001" }; const split2: Types.checkout.Split = { reference: "Your reference for your commission", amount: splitAmount2, description: "Your description for your commission", type: Types.checkout.Split.TypeEnum.Commission }; const split3: Types.checkout.Split = { reference: "Your reference for the payment fee", description: "Your description for the payment fee", type: Types.checkout.Split.TypeEnum.PaymentFee, account: "BA00000000000000000000001" }; const cardDetails: Types.checkout.CardDetails = { encryptedCardNumber: "test_4111111111111111", encryptedSecurityCode: "test_737", encryptedExpiryYear: "test_2030", encryptedExpiryMonth: "test_03", type: Types.checkout.CardDetails.TypeEnum.Scheme }; const paymentRequest: Types.checkout.PaymentRequest = { reference: "YOUR_ORDER_NUMBER", amount: amount, splits: [split1, split2, split3], merchantAccount: "YOUR_MERCHANT_ACCOUNT", paymentMethod: cardDetails, store: "USER_STORE_REFERENCE", returnUrl: "https://your-company.example.com/..." }; // Send the request const checkoutAPI = new CheckoutAPI(client); const response = checkoutAPI.PaymentsApi.payments(paymentRequest, { idempotencyKey: "UUID" }); ``` 2. In the response, note that your `reference` from the request is returned as the `merchantReference`. You need this information for reconciliation, as explained under [Best practices](#best-practices). **Response** ```json { "additionalData": {...}, "pspReference": "CWBC43ZX2VTFWR82", "resultCode": "Authorised", "amount": { "currency": "USD", "value": 8000 }, ... "merchantReference": "YOUR_ORDER_NUMBER", "paymentMethod": { "brand": "visa", "type": "scheme" } } ``` ### Tab: Payment facilitators If you are registered as a payment facilitator and have not configured stores in your account, you must send additional data points with each payment request. **Split funds at time of payment** #### curl ```bash curl https://checkout-test.adyen.com/v72/payments \ -H 'x-api-key: ADYEN_API_KEY' \ -H 'content-type: application/json' \ -X POST \ -d '{ "paymentMethod": { "type": "scheme", "encryptedCardNumber": "test_4111111111111111", "encryptedSecurityCode": "test_737", "encryptedExpiryMonth": "test_03", "encryptedExpiryYear": "test_2030" }, "amount": { "value": 8000, "currency": "USD" }, "reference": "YOUR_ORDER_NUMBER", "merchantAccount": "YOUR_MERCHANT_ACCOUNT", "returnUrl": "https://your-company.example.com/...", "splits":[ { "amount": { "value": 7500 }, "type": "BalanceAccount", "account": "BA00000000000000000000001", "reference": "Your reference for the sale amount", "description": "Your description for the sale amount" }, { "amount": { "value": 500 }, "type": "Commission", "reference": "Your reference for your commission", "description": "Your description for your commission" }, { "type": "PaymentFee", "account": "BA00000000000000000000001", "reference": "Your reference for the payment fee", "description": "Your description for the payment fee" } ], "additionalData" : { "subMerchant.numberOfSubSellers" : 1, "subMerchant.subSeller1.id" : "12345", "subMerchant.subSeller1.name" : "Test Merchant", "subMerchant.subSeller1.street" : "Street Address", "subMerchant.subSeller1.postalCode" : "POSTAL_CODE", "subMerchant.subSeller1.city" : "CITY", "subMerchant.subSeller1.state" : "STATE", "subMerchant.subSeller1.country" : "COUNTRY" } }' ``` #### Java ```java // Adyen Java API Library v40.0.0 import com.adyen.Client; import com.adyen.enums.Environment; import com.adyen.model.checkout.*; import java.time.OffsetDateTime; import java.util.*; import com.adyen.model.RequestOptions; import com.adyen.service.checkout.*; // For the LIVE environment, also include your liveEndpointUrlPrefix. Client client = new Client("ADYEN_API_KEY", Environment.TEST); // Create the request object(s) SplitAmount splitAmount1 = new SplitAmount() .value(7500L); SplitAmount splitAmount2 = new SplitAmount() .value(500L); Amount amount = new Amount() .currency("USD") .value(8000L); Split split1 = new Split() .reference("Your reference for the sale amount") .amount(splitAmount1) .description("Your description for the sale amount") .type(Split.TypeEnum.BALANCEACCOUNT) .account("BA00000000000000000000001"); Split split2 = new Split() .reference("Your reference for your commission") .amount(splitAmount2) .description("Your description for your commission") .type(Split.TypeEnum.COMMISSION); Split split3 = new Split() .reference("Your reference for the payment fee") .description("Your description for the payment fee") .type(Split.TypeEnum.PAYMENTFEE) .account("BA00000000000000000000001"); CardDetails cardDetails = new CardDetails() .encryptedCardNumber("test_4111111111111111") .encryptedSecurityCode("test_737") .encryptedExpiryYear("test_2030") .encryptedExpiryMonth("test_03") .type(CardDetails.TypeEnum.SCHEME); PaymentRequest paymentRequest = new PaymentRequest() .reference("YOUR_ORDER_NUMBER") .amount(amount) .splits(Arrays.asList(split1, split2, split3)) .merchantAccount("YOUR_MERCHANT_ACCOUNT") .paymentMethod(new CheckoutPaymentMethod(cardDetails)) .additionalData(new HashMap(Map.of( "subMerchant.subSeller1.postalCode", "POSTAL_CODE", "subMerchant.subSeller1.id", "12345", "subMerchant.subSeller1.street", "Street Address", "subMerchant.subSeller1.country", "COUNTRY", "subMerchant.subSeller1.city", "CITY", "subMerchant.subSeller1.state", "STATE", "subMerchant.numberOfSubSellers", "1", "subMerchant.subSeller1.name", "Test Merchant" ))) .returnUrl("https://your-company.example.com/..."); // Send the request PaymentsApi service = new PaymentsApi(client); PaymentResponse response = service.payments(paymentRequest, new RequestOptions().idempotencyKey("UUID")); ``` #### PHP ```php setXApiKey("ADYEN_API_KEY"); // For the LIVE environment, also include your liveEndpointUrlPrefix. $client->setEnvironment(Environment::TEST); // Create the request object(s) $splitAmount1 = new SplitAmount(); $splitAmount1 ->setValue(7500); $splitAmount2 = new SplitAmount(); $splitAmount2 ->setValue(500); $amount = new Amount(); $amount ->setCurrency("USD") ->setValue(8000); $split1 = new Split(); $split1 ->setReference("Your reference for the sale amount") ->setAmount($splitAmount1) ->setDescription("Your description for the sale amount") ->setType("BalanceAccount") ->setAccount("BA00000000000000000000001"); $split2 = new Split(); $split2 ->setReference("Your reference for your commission") ->setAmount($splitAmount2) ->setDescription("Your description for your commission") ->setType("Commission"); $split3 = new Split(); $split3 ->setReference("Your reference for the payment fee") ->setDescription("Your description for the payment fee") ->setType("PaymentFee") ->setAccount("BA00000000000000000000001"); $checkoutPaymentMethod = new CheckoutPaymentMethod(); $checkoutPaymentMethod ->setEncryptedCardNumber("test_4111111111111111") ->setEncryptedSecurityCode("test_737") ->setEncryptedExpiryYear("test_2030") ->setEncryptedExpiryMonth("test_03") ->setType("scheme"); $paymentRequest = new PaymentRequest(); $paymentRequest ->setReference("YOUR_ORDER_NUMBER") ->setAmount($amount) ->setSplits(array($split1, $split2, $split3)) ->setMerchantAccount("YOUR_MERCHANT_ACCOUNT") ->setPaymentMethod($checkoutPaymentMethod) ->setAdditionalData( array( "subMerchant.subSeller1.postalCode" => "POSTAL_CODE", "subMerchant.subSeller1.id" => "12345", "subMerchant.subSeller1.street" => "Street Address", "subMerchant.subSeller1.country" => "COUNTRY", "subMerchant.subSeller1.city" => "CITY", "subMerchant.subSeller1.state" => "STATE", "subMerchant.numberOfSubSellers" => "1", "subMerchant.subSeller1.name" => "Test Merchant" ) ) ->setReturnUrl("https://your-company.example.com/..."); $requestOptions['idempotencyKey'] = 'UUID'; // Send the request $service = new PaymentsApi($client); $response = $service->payments($paymentRequest, $requestOptions); ``` #### C\# ```cs // Adyen .NET API Library v32.2.1 using Adyen; using Environment = Adyen.Model.Environment; using Adyen.Model; using Adyen.Model.Checkout; using Adyen.Service.Checkout; // For the LIVE environment, also include your liveEndpointUrlPrefix. var config = new Config() { XApiKey = "ADYEN_API_KEY", Environment = Environment.Test }; var client = new Client(config); // Create the request object(s) SplitAmount splitAmount1 = new SplitAmount { Value = 7500 }; SplitAmount splitAmount2 = new SplitAmount { Value = 500 }; Amount amount = new Amount { Currency = "USD", Value = 8000 }; Split split1 = new Split { Reference = "Your reference for the sale amount", Amount = splitAmount1, Description = "Your description for the sale amount", Type = Split.TypeEnum.BalanceAccount, Account = "BA00000000000000000000001" }; Split split2 = new Split { Reference = "Your reference for your commission", Amount = splitAmount2, Description = "Your description for your commission", Type = Split.TypeEnum.Commission }; Split split3 = new Split { Reference = "Your reference for the payment fee", Description = "Your description for the payment fee", Type = Split.TypeEnum.PaymentFee, Account = "BA00000000000000000000001" }; CardDetails cardDetails = new CardDetails { EncryptedCardNumber = "test_4111111111111111", EncryptedSecurityCode = "test_737", EncryptedExpiryYear = "test_2030", EncryptedExpiryMonth = "test_03", Type = CardDetails.TypeEnum.Scheme }; PaymentRequest paymentRequest = new PaymentRequest { Reference = "YOUR_ORDER_NUMBER", Amount = amount, Splits = new List{ split1, split2, split3 }, MerchantAccount = "YOUR_MERCHANT_ACCOUNT", PaymentMethod = new CheckoutPaymentMethod(cardDetails), AdditionalData = new Dictionary { { "subMerchant.subSeller1.postalCode", "POSTAL_CODE" }, { "subMerchant.subSeller1.id", "12345" }, { "subMerchant.subSeller1.street", "Street Address" }, { "subMerchant.subSeller1.country", "COUNTRY" }, { "subMerchant.subSeller1.city", "CITY" }, { "subMerchant.subSeller1.state", "STATE" }, { "subMerchant.numberOfSubSellers", "1" }, { "subMerchant.subSeller1.name", "Test Merchant" } }, ReturnUrl = "https://your-company.example.com/..." }; // Send the request var service = new PaymentsService(client); var response = service.Payments(paymentRequest, requestOptions: new RequestOptions { IdempotencyKey = "UUID"}); ``` #### NodeJS (JavaScript) ```js // Adyen Node API Library v30.0.1 const { Client, CheckoutAPI } = require('@adyen/api-library'); // For the LIVE environment, also include your liveEndpointUrlPrefix. const config = new Config({ apiKey: "ADYEN_API_KEY", environment: EnvironmentEnum.TEST }); const client = new Client(config); // Create the request object(s) const paymentRequest = { paymentMethod: { type: "scheme", encryptedCardNumber: "test_4111111111111111", encryptedSecurityCode: "test_737", encryptedExpiryMonth: "test_03", encryptedExpiryYear: "test_2030" }, amount: { value: 8000, currency: "EUR" }, reference: "YOUR_ORDER_NUMBER", merchantAccount: "YOUR_MERCHANT_ACCOUNT", returnUrl: "https://your-company.example.com/...", splits: [ { amount: { value: 7500 }, type: "BalanceAccount", account: "BA00000000000000000000001", reference: "Your reference for the sale amount.", description: "Your description for the sale amount." }, { amount: { value: 500 }, type: "Commission", reference: "Your reference for the commission.", description: "Your description for the commission." }, { type: "PaymentFee", account: "BA00000000000000000000001", reference: "Your reference for the transaction fees.", description: "Your description for the transaction fees." } ], additionalData: { "subMerchant.numberOfSubSellers": 1, "subMerchant.subSeller1.id": "12345", "subMerchant.subSeller1.name": "Test Merchant", "subMerchant.subSeller1.street": "Street Address", "subMerchant.subSeller1.postalCode": "POSTAL_CODE", "subMerchant.subSeller1.city": "CITY", "subMerchant.subSeller1.state": "STATE", "subMerchant.subSeller1.country": "COUNTRY" } } // Send the request const checkoutAPI = new CheckoutAPI(client); const response = checkoutAPI.PaymentsApi.payments(paymentRequest, { idempotencyKey: "UUID" }); ``` #### Go ```go // Adyen Go API Library v21.1.0 import ( "context" "github.com/adyen/adyen-go-api-library/v21/src/common" "github.com/adyen/adyen-go-api-library/v21/src/adyen" "github.com/adyen/adyen-go-api-library/v21/src/checkout" ) // For the LIVE environment, also include your liveEndpointUrlPrefix. client := adyen.NewClient(&common.Config{ ApiKey: "ADYEN_API_KEY", Environment: common.TestEnv, }) // Create the request object(s) splitAmount1 := checkout.SplitAmount{ Value: 7500, } splitAmount2 := checkout.SplitAmount{ Value: 500, } amount := checkout.Amount{ Currency: "USD", Value: 8000, } split1 := checkout.Split{ Reference: common.PtrString("Your reference for the sale amount"), Amount: &splitAmount1, Description: common.PtrString("Your description for the sale amount"), Type: "BalanceAccount", Account: common.PtrString("BA00000000000000000000001"), } split2 := checkout.Split{ Reference: common.PtrString("Your reference for your commission"), Amount: &splitAmount2, Description: common.PtrString("Your description for your commission"), Type: "Commission", } split3 := checkout.Split{ Reference: common.PtrString("Your reference for the payment fee"), Description: common.PtrString("Your description for the payment fee"), Type: "PaymentFee", Account: common.PtrString("BA00000000000000000000001"), } cardDetails := checkout.CardDetails{ EncryptedCardNumber: common.PtrString("test_4111111111111111"), EncryptedSecurityCode: common.PtrString("test_737"), EncryptedExpiryYear: common.PtrString("test_2030"), EncryptedExpiryMonth: common.PtrString("test_03"), Type: common.PtrString("scheme"), } paymentRequest := checkout.PaymentRequest{ Reference: "YOUR_ORDER_NUMBER", Amount: amount, Splits: []checkout.Split{ split1, split2, split3, }, MerchantAccount: "YOUR_MERCHANT_ACCOUNT", PaymentMethod: checkout.CardDetailsAsCheckoutPaymentMethod(&cardDetails), AdditionalData: &map[string]string{ "subMerchant.subSeller1.postalCode": "POSTAL_CODE", "subMerchant.subSeller1.id": "12345", "subMerchant.subSeller1.street": "Street Address", "subMerchant.subSeller1.country": "COUNTRY", "subMerchant.subSeller1.city": "CITY", "subMerchant.subSeller1.state": "STATE", "subMerchant.numberOfSubSellers": "1", "subMerchant.subSeller1.name": "Test Merchant", }, ReturnUrl: "https://your-company.example.com/...", } // Send the request service := client.Checkout() req := service.PaymentsApi.PaymentsInput().IdempotencyKey("UUID").PaymentRequest(paymentRequest) res, httpRes, err := service.PaymentsApi.Payments(context.Background(), req) ``` #### Python ```py # Adyen Python API Library v14.0.0 import Adyen adyen = Adyen.Adyen() adyen.client.xapikey = "ADYEN_API_KEY" # For the LIVE environment, also include your liveEndpointUrlPrefix. adyen.client.platform = "test" # The environment to use library in. # Create the request object(s) json_request = { "paymentMethod": { "type": "scheme", "encryptedCardNumber": "test_4111111111111111", "encryptedSecurityCode": "test_737", "encryptedExpiryMonth": "test_03", "encryptedExpiryYear": "test_2030" }, "amount": { "value": 8000, "currency": "USD" }, "reference": "YOUR_ORDER_NUMBER", "merchantAccount": "YOUR_MERCHANT_ACCOUNT", "returnUrl": "https://your-company.example.com/...", "splits": [ { "amount": { "value": 7500 }, "type": "BalanceAccount", "account": "BA00000000000000000000001", "reference": "Your reference for the sale amount", "description": "Your description for the sale amount" }, { "amount": { "value": 500 }, "type": "Commission", "reference": "Your reference for your commission", "description": "Your description for your commission" }, { "type": "PaymentFee", "account": "BA00000000000000000000001", "reference": "Your reference for the payment fee", "description": "Your description for the payment fee" } ], "additionalData": { "subMerchant.numberOfSubSellers": 1, "subMerchant.subSeller1.id": "12345", "subMerchant.subSeller1.name": "Test Merchant", "subMerchant.subSeller1.street": "Street Address", "subMerchant.subSeller1.postalCode": "POSTAL_CODE", "subMerchant.subSeller1.city": "CITY", "subMerchant.subSeller1.state": "STATE", "subMerchant.subSeller1.country": "COUNTRY" } } # Send the request result = adyen.checkout.payments_api.payments(request=json_request, idempotency_key="UUID") ``` #### Ruby ```rb # Adyen Ruby API Library v11.1.0 require "adyen-ruby-api-library" adyen = Adyen::Client.new adyen.api_key = 'ADYEN_API_KEY' # For the LIVE environment, also include your liveEndpointUrlPrefix. adyen.env = :test # Set to "live" for live environment # Create the request object(s) request_body = { :paymentMethod => { :type => 'scheme', :encryptedCardNumber => 'test_4111111111111111', :encryptedSecurityCode => 'test_737', :encryptedExpiryMonth => 'test_03', :encryptedExpiryYear => 'test_2030' }, :amount => { :value => 8000, :currency => 'USD' }, :reference => 'YOUR_ORDER_NUMBER', :merchantAccount => 'YOUR_MERCHANT_ACCOUNT', :returnUrl => 'https://your-company.example.com/...', :splits => [ { :amount => { :value => 7500 }, :type => 'BalanceAccount', :account => 'BA00000000000000000000001', :reference => 'Your reference for the sale amount', :description => 'Your description for the sale amount' }, { :amount => { :value => 500 }, :type => 'Commission', :reference => 'Your reference for your commission', :description => 'Your description for your commission' }, { :type => 'PaymentFee', :account => 'BA00000000000000000000001', :reference => 'Your reference for the payment fee', :description => 'Your description for the payment fee' } ], :additionalData => { :subMerchant.numberOfSubSellers => 1, :subMerchant.subSeller1.id => '12345', :subMerchant.subSeller1.name => 'Test Merchant', :subMerchant.subSeller1.street => 'Street Address', :subMerchant.subSeller1.postalCode => 'POSTAL_CODE', :subMerchant.subSeller1.city => 'CITY', :subMerchant.subSeller1.state => 'STATE', :subMerchant.subSeller1.country => 'COUNTRY' } } # Send the request result = adyen.checkout.payments_api.payments(request_body, headers: { 'Idempotency-Key' => 'UUID' }) ``` #### NodeJS (TypeScript) ```ts // Adyen Node API Library v30.0.1 import { Client, CheckoutAPI, Types } from "@adyen/api-library"; // For the LIVE environment, also include your liveEndpointUrlPrefix. const config = new Config({ apiKey: "ADYEN_API_KEY", environment: EnvironmentEnum.TEST }); const client = new Client(config); // Create the request object(s) const splitAmount1: Types.checkout.SplitAmount = { value: 7500 }; const splitAmount2: Types.checkout.SplitAmount = { value: 500 }; const amount: Types.checkout.Amount = { currency: "USD", value: 8000 }; const split1: Types.checkout.Split = { reference: "Your reference for the sale amount", amount: splitAmount1, description: "Your description for the sale amount", type: Types.checkout.Split.TypeEnum.BalanceAccount, account: "BA00000000000000000000001" }; const split2: Types.checkout.Split = { reference: "Your reference for your commission", amount: splitAmount2, description: "Your description for your commission", type: Types.checkout.Split.TypeEnum.Commission }; const split3: Types.checkout.Split = { reference: "Your reference for the payment fee", description: "Your description for the payment fee", type: Types.checkout.Split.TypeEnum.PaymentFee, account: "BA00000000000000000000001" }; const cardDetails: Types.checkout.CardDetails = { encryptedCardNumber: "test_4111111111111111", encryptedSecurityCode: "test_737", encryptedExpiryYear: "test_2030", encryptedExpiryMonth: "test_03", type: Types.checkout.CardDetails.TypeEnum.Scheme }; const paymentRequest: Types.checkout.PaymentRequest = { reference: "YOUR_ORDER_NUMBER", amount: amount, splits: [split1, split2, split3], merchantAccount: "YOUR_MERCHANT_ACCOUNT", paymentMethod: cardDetails, additionalData: { "subMerchant.subSeller1.postalCode": "POSTAL_CODE", "subMerchant.subSeller1.id": "12345", "subMerchant.subSeller1.street": "Street Address", "subMerchant.subSeller1.country": "COUNTRY", "subMerchant.subSeller1.city": "CITY", "subMerchant.subSeller1.state": "STATE", "subMerchant.numberOfSubSellers": "1", "subMerchant.subSeller1.name": "Test Merchant" }, returnUrl: "https://your-company.example.com/..." }; // Send the request const checkoutAPI = new CheckoutAPI(client); const response = checkoutAPI.PaymentsApi.payments(paymentRequest, { idempotencyKey: "UUID" }); ``` * In the response, note that your `reference` from the request is returned as the `merchantReference`. You need this information for reconciliation, as explained under [Best practices](#best-practices). **Response** ```json { "additionalData": {...}, "pspReference": "CWBC43ZX2VTFWR82", "resultCode": "Authorised", "amount": { "currency": "USD", "value": 8000 }, ... "merchantReference": "YOUR_ORDER_NUMBER", "paymentMethod": { "brand": "visa", "type": "scheme" } } ``` ### Troubleshooting 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. ## Track fund movements 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) * [Leftover amount after currency conversion (remainder)](#remainder-after-currency-conversion) * [Chargebacks](#potential-chargebacks-and-costs) * [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/online-payments/transaction-fees). ### Remainder after currency conversion When you process payments on behalf of your users, you can convert the currency of those payments. Due to the constantly fluctuating exchange rates, you may have a leftover amount after currency conversion, called a **Remainder**. You can book this remainder to the balance account of your choice. For more information about currency conversion and booking the remainder, see [Currency conversion](/platforms/online-payments/currency-conversion). ### Potential chargebacks and costs When payments of your users are charged back, you can choose how to book the disputed amount to the balance accounts in your platform. For more information, see [Chargebacks and disputes](/platforms/online-payments/split-transactions/split-chargebacks/). ### Top-ups A payment made by your user to increase the balance in their balance account is called a top-up. You can book this top-up to your user's balance account. For more information about booking the top-up, see [Top-ups](/platforms/top-up-balance-account/on-demand-top-ups). ## Best practices We strongly recommend sending a `reference` for all sets of split instructions in your [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments#request-splits) or [/sessions](https://docs.adyen.com/api-explorer/Checkout/latest/post/sessions#request-splits) request. 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/online-payments/split-transactions/split-payments-at-capture) instead. Split instructions provided at capture override 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. Only send split instructions in the capture request if you want to update the amount, for example, for partial captures or overcaptures. ## See also * [Handle transaction fees](/platforms/online-payments/transaction-fees) * [Convert the currency of a transaction](/platforms/online-payments/currency-conversion) * [Split payments automatically](/platforms/automatic-split-configuration)