Default icon

Transaction fees

Learn how you can handle the fees incurred by transactions.

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

There are other fees due to Adyen that cannot be passed on to your users in payment requests:

  • Processing costs: These fees are aggregated and also applicable for refused and cancelled payments. Therefore, they cannot be allocated to individual payments. This also applies to other aggregated fees, such as 3DS enrollment costs.
  • Tiered pricing: Any discounts that are derived from tiered pricing structures cannot be allocated to individual payments.

To make reconciliation easier, we recommend to always include split instructions for the transaction fees in your payment or capture request, even if you book the fees against your liable balance account. If you do not include booking instructions for any of the transaction fee types in your payment request, Adyen automatically updates the request to include the PaymentFee split type, booking all transaction fees to your platform's liable balance account.

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
AdyenCommission The transaction fee due to Adyen under blended rates.
AdyenMarkup The transaction fee due to Adyen under Interchange ++ pricing.
Interchange The fee paid to the issuer for each payment made with the card network.
SchemeFee The fee paid to the card scheme for using their network.
AdyenFees -white_check_mark- The aggregated amount of Adyen's commission and markup fees.
AcquiringFees -white_check_mark- The aggregated amount of the interchange and scheme fees.
PaymentFee -white_check_mark- The aggregated amount of all transaction fees.

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:

  • type AdyenMarkup: booking Adyen's Markup to your platform's liable balance account
  • type PaymentFee: booking all other transaction fees (interchange, scheme fees, and Adyen's commission) to your user's 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.

Book transaction fees to specific balance accounts

The following example shows:

  • A split payment request, in which the transaction fees are booked to different balance accounts.
  • The API response for the successful payment.

The subsequent sections discuss the webhooks you receive for the transaction fees, and how these appear in your reports based on this payment request example.

Payment request

In this example, you send a payment request for EUR 400.00 split four ways:

  1. EUR 396.00 is booked to your user's balance account as payment for the goods or services rendered.
  2. EUR 4.00 is booked to your liable balance account as your platform's commission.
  3. The Interchange and Scheme fees are booked to your user's balance account.
  4. 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 the SaleToAcquirerData 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.

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.

The following tabs show the webhooks you receive after sending the payment request in the example above.

  1. Once the acquiring fees are calculated, Adyen sends a balancePlatform.transfer.created webhook with direction outgoing and status received, 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.

  2. When the transfer request for the acquiring fees is authorised, Adyen sends a balancePlatform.transfer.updated webhook with status authorised.

  3. When the funds are deducted from your user's balance account, Adyen sends a balancePlatform.transfer.updated webhook with status captured and the transactionId.

Reports and reconciliation

In the Balance Platform Accounting Report, all aggregated transaction fee types (PaymentFee, AcquiringFees, AdyenFees) have their own rows. For these fee types, we show the aggregated amount of the fees in the Amount column. 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 most granular level, in the four Platform Payment columns (Interchange, Scheme Fee, Markup, Commission).

If you do not send split instructions for any transaction fee type in your payment or capture request, Adyen automatically adds the type parameter with the PaymentFee value to the request, booking all transaction fees to your platform's liable balance account. This is also reflected in your report.

Here you can download a sample report that would be generated based on the example payment request above.

See also