Are you looking for test card numbers?

Would you like to contact support?

Marketpay 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

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:

  1. EUR 600.00 to be booked to your user's first balance account as the sale amount.
  2. The transaction fees to be booked against your user's first balance account. This will be deducted from the sale amount.
  3. 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 format tenderReference.pspReference. For example, oLkO0012498220087000.981517998282382C.
    • PaymentResponse.Response.Result: Success
    • PaymentResponse.Response.AdditionalResponse: additional transaction data. Its format corresponds to the format of the SaleToAcquirerData 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 -white_check_mark- Books the aggregated amount of all transaction fees to the specified balance account.
AcquiringFees -white_check_mark- 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 -white_check_mark- 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.

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:

  1. USD 396.00 is booked to your user's balance account as payment for the goods or services rendered.
  2. USD 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.

{
  "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.

  1. 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.

  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 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.

See also