Transaction fees refer to the costs you incur on a transaction in your platform, that are not known at the time of payment. They are calculated by Adyen after we receive the payment request.
By default, these fees are deducted from your liable balance account. However, you can also book them directly your user. This is useful if you want to pass on the transaction fees, instead of settling this later by transferring funds between balance accounts. You can charge the following fees directly to your user:
- Interchange
- Scheme Fees
- Adyen's Markup
- Adyen's Commission
You can book these fees together to one balance account, or the separately to different balance account.
Processing fees and discounts due to tiered pricing structures cannot be booked directly to the user’s balance account, since these are aggregated amounts (inclusive of refused and cancelled transactions) and cannot be allocated to individual payments.
Book the transaction fees to your user
To book all transaction fees to your user's balance account, send a payment request with an additional split item.
For this split item, specify:
Key | Description | Example |
---|---|---|
split.item[ITEM_NUMBER].type |
The type of split. Set this to PaymentFee. | split.item3.type=PaymentFee |
split.item[ITEM_NUMBER].account |
Account that will be charged the transaction fees. This is the balanceAccountId of one of your user's balance accounts.You cannot charge the transaction fees to multiple balance accounts. |
split.item3.account=BA00000000000000000000001 |
split.item[ITEM_NUMBER].reference |
Your reference for the transaction fees, reflected in the Balance Platform Accounting Report. | split.item3.reference=reference_PaymentFee |
split.item[ITEM_NUMBER].description |
Your description for the transaction fees, reflected in the Balance Platform Accounting Report. | split.item3.description=description_PaymentFee |
You do not need to specify the split.item[ITEM_NUMBER].amount
field, since the transaction fees are not known when creating the payment request.
For example, you want to split a payment of EUR 620.00 into three parts:
- EUR 600.00 to be booked to your user's first balance account as the sale amount.
- The transaction fees to be booked against your user's first balance account. This will be deducted from the sale amount.
- EUR 20.00 to be booked to your liable account as your platform's commission.
In this case, set split.nrOfItems
to 3 and split.totalAmount
to 62000.
If the payment is successful:
- Approved is shown on the terminal display.
- You receive a payment response with:
POIData.POITransactionID.TransactionID
: transaction identifier for the payment in the formattenderReference.pspReference
. For example, oLkO0012498220087000.981517998282382C.PaymentResponse.Response.Result
: SuccessPaymentResponse.Response.AdditionalResponse
: additional transaction data. Its format corresponds to the format of theSaleToAcquirerData
in the payment request: a Base64-encoded JSON object or form-encoded key-value pairs.PaymentReceipt
: object with data you can use to generate a receipt.
You can also view the details of a payment in your Customer Area under Transactions > Payments, and the splits in your Balance Platform Customer Area.
Book transaction fees separately
This feature is in pilot phase. Reach out to your Adyen contact to enable it for your platform.
Transaction fee types
You can book different types of transaction fees to different balance accounts in your platform. Depending on whether you want to aggregate fees or book individual fee types to specific balance accounts, you can include additional split items with a different type
in your request.
Type | Aggregated fees | Description |
---|---|---|
PaymentFee | ![]() |
Books the aggregated amount of all transaction fees to the specified balance account. |
AcquiringFees | ![]() |
Books the aggregated amount of the Interchange and Scheme fees to the specified balance account. |
Interchange | Books the Interchange fees to the specified balance account. | |
SchemeFee | Books the Scheme fees to the specified balance account. | |
AdyenFees | ![]() |
Books the aggregated amount of Adyen's Commission and Markup to the specified balance account. |
AdyenCommission | Books Adyen's Commission to the specified balance account. | |
AdyenMarkup | Books Adyen's Markup to the specified balance account. |
The following diagram shows how the transaction fee types relate to each other.
If you send a payment request with multiple split items for different transaction fee types, they are processed based on the granularity of the fee type. The booking instructions sent for more granular fee types override the instructions for the aggregated fees.
Type | Behaviour |
---|---|
PaymentFee | If another fee type is sent in the request as well, it overrides part of the instructions sent for PaymentFee: that specific fee type is booked to another balance account, while the remaining fee types are booked to the balance account specified for PaymentFee. |
AcquiringFees | Overrides part of the instructions sent for the PaymentFee split type, booking the Interchange and Scheme fees to another balance account. |
Interchange | Overrides part of the instructions sent for the PaymentFee or AcquiringFees split types, booking the Interchange to another balance account. |
SchemeFee | Overrides part of the instructions sent for the PaymentFee or AcquiringFees split types, booking the Scheme fees to another balance account. |
AdyenFees | Overrides part of the instructions sent for the PaymentFee split type, booking Adyen's Commission and Markup to another balance account. |
AdyenCommission | Overrides part of the instructions sent for the PaymentFee or AdyenFees split type, booking Adyen's Commission to another balance account. |
AdyenMarkup | Overrides part of the instructions sent for the PaymentFee or AdyenFees split type, booking Adyen's Markup to another balance account. |
For example, you can include two split items for transaction fees in your payment request: one with type
PaymentFee booked to your user's balance account, and another with type
AdyenMarkup booked to your platform's liable balance account.
If only the PaymentFee were specified in the request, all transaction fees would be booked to the same balance account, because PaymentFee aggregates all fee types, including the Markup. However, because AdyenMarkup is also sent in the request, and it's on a more granular level than PaymentFee, AdyenMarkup overrides PaymentFee for booking the Markup. This means that the Interchange, Scheme fee, and Adyen's Commission are booked to BA00000000000000000000001, while the Markup is booked to BA00000000000000000LIABLE.
Example: Split a payment with transaction fees
The example shows:
- A split payment request in which the transaction fees are booked to different balance accounts.
- The API responses for the successful payment request.
The following sections will discuss the webhooks you receive for the transaction fees, and how these appear in your reports.
Payment request
In this example, you send a payment request for EUR 400.00 split four ways:
- USD 396.00 is booked to your user's balance account as payment for the goods or services rendered.
- USD 4.00 is booked to your liable balance account as your platform's commission.
- The Interchange and Scheme fees are booked to your user's balance account.
- Adyen's Commission and Markup are booked to your liable balance account.
This means that you must set split.nrOfItems
to 4 and split.totalAmount
to 40000.
Based on the gathered data, here is the full payment request.
Payment response
When your payment has been processed by the terminal, you receive the payment result. This is provided either in a synchronous API response if your integration uses local communications or synchronous cloud communications, or in an event notification if your integration uses asynchronous cloud communications.
If the payment is successful:
- The terminal display shows Approved.
- You receive a payment response with the
PaymentResponse.Response.AdditionalResponse
field. Its format corresponds to the format of theSaleToAcquirerData
in the payment request: a Base64-encoded JSON object or form-encoded key-value pairs.
Here is the example result you get if splitting the payment above was successful.
{
"SaleToPOIResponse":{
"MessageHeader":{...},
"PaymentResponse":{
"POIData":{
"POITransactionID":{
"TransactionID": "oLkO0012498220087000.981517998282382C"
},
...
},
"Response":{
"AdditionalResponse":"split.api=1&split.nrOfItems=4&split.totalAmount=40000&split.currencyCode=EUR&split.item1.amount=39600&split.item1.type=BalanceAccount&split.item1.account=BA00000000000000000000001&split.item1.reference=reference_split_1&split.item1.description=description_split_1&split.item2.amount=400&split.item2.type=Commission&split.item2.reference=reference_commission&split.item2.description=description_commission&split.item3.type=PaymentFee&split.item3.account=BA00000000000000000000001&split.item3.reference=reference_PaymentFee&split.item3.description=description_PaymentFee&split.item4.type=AdyenMarkup&split.item4.account=BA00000000000000000LIABLE&split.item4.reference=reference_AdyenMarkup&split.item4.description=description_AdyenMarkup",
"Result":"Success",
},
...
},
"PaymentReceipt":{...}
}
}
Webhooks
After the transaction fees are calculated, you receive balancePlatform.transfer.created and balancePlatform.transfer.updated webhooks for each split type you sent in the payment request.
-
Once the acquiring fees are calculated, Adyen sends a balancePlatform.transfer.created webhook with
direction
outgoing, to announce that the acquiring fees will be deducted from your user's balance account. This is the aggregated amount of the interchange and scheme fees. -
When the transfer request for the acquiring fees is authorised, Adyen sends a balancePlatform.transfer.updated webhook with
status
authorised. -
When the funds are deducted from your user's balance account, Adyen sends a balancePlatform.transfer.updated webhook with
status
captured and thetransactionId
.
Reports and reconciliation
In the Balance Platform Accounting Report, all transaction fee type groups (PaymentFee, AcquiringFees, AdyenFees) have their own rows. In the Amount column on these fee types, we show the aggregated amount of the fees contained in that specific group. For example, the row for all acquiring fees contains the sum of the interchange and scheme fee incurred by the transaction. However, the transaction fee types are also displayed separately, on the highest level, in the four Platform Payment columns (Interchange, Scheme Fee, Markup, Commission).
Here you can download a sample report that would be generated based on the example payment request above.