Are you looking for test card numbers?

Would you like to contact support?

Marketpay icon

Currency conversion

Learn how to convert the currency of a transaction.

When processing a payment through Adyen, it is possible to accept this payment in many different currencies.

If the currency in which the customer pays (the processing currency) does not match the currency in which your user wants to be paid (the settlement currency), you can exchange the processing currency for the settlement currency. That way, you can debit the customer in one currency and credit your user in another.

Supported currencies

Currently, Adyen supports foreign exchange between the following currencies when settling funds to your user:

  • AUD
  • CAD
  • CHF
  • CZK
  • DKK
  • EUR
  • GBP
  • HKD
  • HUF
  • NOK
  • PLN
  • RON
  • SEK
  • SGD
  • USD

Before you begin

Before you can convert the currency of a payment or refund:

  • Contact our Support Team to enable currency conversion for payments in your balance platform.

  • Make sure you have access to the following role:

Convert the currency of a payment

Step 1: Calculate the cost of the goods in the processing currency

When converting the currency of a payment, Adyen charges the prevailing exchange rate in addition to a conversion markup. To calculate the exact amount the customer must pay in their currency of choice (the processing currency):

  1. Get the exchange rates for the day from the Exchange Rate Report. To do this:

    1. Log in to your Customer Area, and go to Reports > Exchange rate.
    2. Select Manage report to generate the Exchange Rate Report for the day, or to enable automatic generation. Once generated, download the report.
    3. In the report, find the rate to convert the settlement currency to the processing currency.

    The rates found in this report already include the conversion markup, which does not need to be added separately.

  2. Use the following formula to calculate the cost of the goods in the processing currency, which is the amount the customer must pay:

    • The cost of goods in the processing currency =
      The cost of goods in the settlement currency × The exchange rate of the settlement currency to the processing currency

    For example, your user sells goods worth CZK 1000.00 to a customer who pays in PLN. Here, the processing currency is PLN and the settlement currency is CZK.

    The exchange rates for the day as found in the Exchange Rate Report are as follows:

    Base Currency Target Currency Exchange Rate
    CZK PLN 0.20174
    PLN CZK 5.07655

    We can now use the above formula to calculate the amount the customer needs to pay in PLN so that your user will receive exactly CZK 1000.00:

    Cost of goods in PLN = Cost of goods in CZK × Exchange rate of CZK to PLN

    In our example:
    CZK 1000.00 × 0.20174 = PLN 201.74

    The customer needs to pay PLN 201.74 in order for your user to receive CZK 1000.00.


Step 2: Send a payment request with the calculated amount

After you calculate the cost of the goods in the processing currency, send a POST /payments request. In the request, include the amount you calculated in step 1 and the data to split the payment. You can also provide split data at the time of capture.

We recommend that you always provide split data at the time of payment, rather than at capture. This is because:

  • For payment methods that do not support delayed captures, the funds may not be booked correctly unless split data is provided in the payment request.
  • When converting the currency at the time of capture, the exchange rates could vary from the rates at the time of payment. Therefore, the amount you calculated in step 1 and used in the payment authorisation may no longer match the cost of the goods in the settlement currency. To avoid this mismatch, you can adjust the authorised amount of a payment.

Provide the currency and amount for the payment and each split item using the following fields:

Parameter Description Example
amount.value The cost of the goods in the processing currency, calculated in step 1. amount.value: 20174
amount.currency The processing currency (the currency in which the customer pays). amount.currency: "PLN"
splits.amount.value The cost of the goods in the settlement currency. In case of multiple splits, the sum of the split amounts in the splits array must equal the cost of the goods in the settlement currency. Any mismatch will be booked to the balance account you specify in the split item with type Remainder . splits.amount.value: 100000
splits.amount.currency The settlement currency (the currency the user receives). splits.amount.currency: "CZK"
splits.type The type of the split item. We recommend to always add a split item for the types PaymentFee and Remainder split.type: BalanceAccount
split.type: PaymentFee
split.type: Remainder

The splits are guaranteed, and the payment will be booked according to the data you provide in the splits array. Any mismatch or miscalculation will be booked to the balance account you specify in the split item with type Remainder . You can reconcile these mismatches per transaction using the Balance Platform Accounting Report.

In the splits array of your request, include two additional split items with the following split types:

  • PaymentFee: Use this split item to choose the balance account to which the transaction fees must be booked. It is important to include this split item when performing foreign exchange on a payment. That way, you can distinguish the transaction fees from the foreign exchange fees in the Balance Platform Accounting Report.
  • Remainder: Use this split item to specify the balance account against which a mismatch in the converted amount(s) should be booked. If you do not provide this split item, the mismatched amount will be booked against your liable balance account.

    We recommend always providing this split item in your request so that you can reconcile the remainder per transaction using the Balance Platform Accounting Report.

Payment request with currency conversion
# Set your X-API-KEY with the API key from the Customer Area.
curl https://checkout-test.adyen.com/v70/payments \
-H 'x-api-key: YOUR_X-API-KEY' \
-H 'content-type: application/json' \
-d '{
      "paymentMethod": {
          "type": "scheme",
          "number": "4111111111111111",
          "cvc": "737",
          "expiryMonth": "03",
          "expiryYear": "2030",
          "holderName": "John Doe"
      },
      "billingAddress": {
          "city":"London",
          "country":"GB",
          "houseNumberOrName":"10",
          "postalCode":"SW1A 2AA",
          "street":"Downing Street"
      },
      "amount": {
          "value": 20174,
          "currency": "PLN"
      },
      "reference": "YOUR_PAYMENT_REFERENCE",
      "merchantAccount": "YOUR_MERCHANT_ACCOUNT",
      "splits": [
          {
              "type": "BalanceAccount",
              "account": "BA00000000000000000000001",
              "amount": {
                  "currency": "CZK",
                  "value": 100000
              },
              "reference": "YOUR_SPLIT_REFERENCE_1",
              "description": "YOUR_SPLIT_DESCRIPTION_1"
          },
          {
              "type": "Remainder",
              "account": "BA00000000000000000000001",
              "reference": "YOUR_REMAINDER_REFERENCE",
              "description": "YOUR_REMAINDER_DESCRIPTION"
          },
          {
              "type": "PaymentFee",
              "account": "BA00000000000000000000001",
              "reference": "YOUR_PAYMENT-FEE_REFERENCE",
              "description": "YOUR_PAYMENT-FEE_DESCRIPTION"
          }
      ]
    }'
Response
{
   ...
   "pspReference":"LVP53Z9PQGNG5S82",
   "resultCode":"Authorised",
   "amount":{
      "currency":"PLN",
      "value":20174
   },
   "merchantReference":"YOUR_PAYMENT_REFERENCE",
   "paymentMethod":{
      "brand":"mc",
      "type":"scheme"
   }
}

Convert the currency of a refund

When refunding a payment with a currency conversion, you can exchange currencies once again. This way, the customer receives the refund in the currency with which they originally paid (the processing currency).

In our example payment, you debited the customer in PLN and credited your user in CZK. To refund this payment, you must debit your user in CZK and credit the customer in PLN. When converting the currency of this refund, Adyen charges the prevailing exchange rate in addition to a conversion markup.

Due to this markup and the constantly fluctuating exchange rates, the refund amount in CZK, when re-converted to PLN, may no longer match the amount the customer originally paid in PLN. This mismatch in amounts leaves a remainder. When a refund occurs on the same day as the payment, the remainder is usually negative.

Handling the remainder

In your refund request, you can choose to book the remainder to the customer, your user, or your liable account by adding a split item with type Remainder. If you do not specify how to handle the remainder in your request, it will be booked to your liable account by default.

We recommend always providing the Remainder split item in your request so that you can reconcile the remainder per transaction using the Balance Platform Accounting Report.

You can book the remainder amount to the customer. In this case, the user will be debited the exact amount they originally received in the settlement currency. The customer will be credited a different amount in the processing currency than what they originally paid.

Step 1: Calculate the refund amount in the processing currency

  1. Get the exchange rates for the day from the Exchange Rate Report. To do this:

    1. Log into your Customer Area, and go to Reports > Exchange rate.
    2. Select Manage report to generate the Exchange Rate Report for the day, or to enable automatic generation. Once generated, download the report.
    3. In the report, find the rate to convert the processing currency to the settlement currency.

    The rates found in this report already include the conversion markup, which does not need to be added separately.

  2. Use the following formula to calculate the amount in the processing currency that the customer will receive in the refund:

    • Amount to be refunded to the customer in the processing currency =
      Amount to be refunded in settlement currency ÷ The exchange rate of the processing currency to the settlement currency

    In the above example payment, your user received CZK 1000.00 and the customer paid PLN 201.74. The exchange rates at the time of the refund are:

    Base currency Target currency Exchange rate
    CZK PLN 0.20014
    PLN CZK 5.11703

    We can calculate the amount to be refunded to the customer using the following formula:

    Amount to be refunded to the customer in PLN = Amount to be refunded in CZK ÷ PLN to CZK exchange rate

    In our example:
    CZK 1000.00 ÷ 5.11703 = PLN 195.43

    The customer will receive PLN 195.43 in the refund, which is PLN 6.31 less than the amount they originally paid. This mismatched amount of PLN 6.31 is the remainder.


Step 2: Send a refund request

To book the remainder to the customer, send a POST /payments/paymentPspReference/refunds request. In the amount and splits.amount objects of your request, include the following values:

Parameter Description Example
amount.value The amount to be refunded to the customer in the processing currency, calculated in step 1. amount.value: 19543
amount.currency The original processing currency. amount.currency: "PLN"
splits.amount.value The original cost of the goods in the settlement currency. In case of multiple splits, the sum of the split amounts in the splits array must equal the original cost of the goods in the settlement currency. Any mismatch will be booked to the balance account you specify in the split item with type Remainder. splits.amount.value: 100000
splits.amount.currency The original settlement currency. splits.amount.currency: "CZK"
splits.type The type of the split item. We recommend to always add a split item for the type Remainder. split.type: BalanceAccount
split.type: Remainder

The splits are guaranteed, and the refund will be booked according to the data you provide in the splits array. Any mismatch or miscalculation will be booked to the balance account you specify in the split item with type Remainder. You can reconcile these mismatches per transaction using the Balance Platform Accounting Report.

Refund request where the remainder is booked to the customer
# Set your X-API-KEY with the API key from the Customer Area.
curl https://checkout-test.adyen.com/v70/payments/{paymentPspReference}/refunds \
-H 'x-api-key: YOUR_X-API-KEY' \
-H 'content-type: application/json' \
-d '{
   "reference":"YOUR_REFUND_REFERENCE",
   "merchantAccount":"YOUR_MERCHANT_ACCOUNT",
   "amount":{
      "value":19543,
      "currency":"PLN"
   },
   "splits":[
      {
         "amount":{
             "value":100000,
             "currency":"CZK"
         },
         "type":"BalanceAccount",
         "account": "BA00000000000000000000001",
         "reference":"YOUR_SPLIT_REFERENCE",
         "description": "YOUR_SPLIT_DESCRIPTION"
      },
      {
         "type": "Remainder"
         "account": "BA00000000000000000000001",
         "reference":"YOUR_REMAINDER_REFERENCE",
         "description": "YOUR_REMAINDER_DESCRIPTION"
      }
   ]
}'
Response
{
   "merchantAccount":"YOUR_MERCHANT_ACCOUNT",
   "paymentPspReference":"MWFFBLTRQGNG5S82",
   "pspReference":"RTW3GFL7WMK2WN82",
   "reference":"YOUR_REFUND_REFERENCE",
   "status":"received",
   "amount":{
      "currency":"PLN",
      "value":19543
   },
   "splits":[
      {
         "account":"BA00000000000000000000001",
         "amount":{
            "currency":"CZK",
            "value":100000
         },
         "description":"YOUR_SPLIT_DESCRIPTION",
         "reference":"YOUR_SPLIT_REFERENCE",
         "type":"BalanceAccount"
      },
      {
         "account":"BA00000000000000000000001",
         "description":"YOUR_REMAINDER_DESCRIPTION",
         "reference":"YOUR_REMAINDER_REFERENCE",
         "type":"Remainder"
      }
   ]
}

See also