The DCC feature is currently not available in the United States or Canada. For more information, check with your account manager.

info

With Dynamic Currency Conversion (DCC), you can provide customers purchasing internationally a final payment amount in the currency of their card. Either you or a third-party Currency Conversion Processor (CCP) provides the interbank exchange rate available at the time of transaction and displays it to the customer, as well as the markup percentage and commission applied. This way, the customer knows the exchange rate and any fees before they decide to use DCC to complete the payment.

Tabs
HPP

In this guide, you’ll learn how DCC can be enabled on the Hosted Payment Page (HPP). 

HPP request

Once configured on your account, DCC can be enabled or disabled in the request. However, this is not a mandatory field. The most up-to-date exchange rate will be obtained, and the HPP will present the choice of currencies to the customer.

// configure client, request and HPP settings
GatewayConfig config = new GatewayConfig();
config.setMerchantId("MerchantId");
config.setAccountId("internet");
config.setSharedSecret("secret");
config.setServiceUrl("https://pay.sandbox.realexpayments.com/pay");

HostedPaymentConfig hostedPaymentConfig = new HostedPaymentConfig();
hostedPaymentConfig.setVersion(HppVersion.Version2);
// optional value to enable or disable DCC
hostedPaymentConfig.setDynamicCurrencyConversionEnabled(true);
config.setHostedPaymentConfig(hostedPaymentConfig);

HostedService service = new HostedService(config);

try {
   String hppJson = service.charge(new BigDecimal("19.99"))
      .withCurrency("EUR")
      .serialize();
   // TODO: pass the HPP JSON to the client-side
} catch (ApiException exce) {
   // TODO: add your error handling here
}
<?php
require_once('vendor/autoload.php');

use GlobalPayments\Api\ServiceConfigs\Gateways\GpEcomConfig;
use GlobalPayments\Api\HostedPaymentConfig;
use GlobalPayments\Api\Services\HostedService;
use GlobalPayments\Api\Entities\Enums\HppVersion;
use GlobalPayments\Api\Entities\Exceptions\ApiException;

$config = new GpEcomConfig();
$config->merchantId = "MerchantId";
$config->accountId = "internet";
$config->sharedSecret = "secret";
$config->serviceUrl = "https://pay.sandbox.realexpayments.com/pay";
$config->hostedPaymentConfig = new HostedPaymentConfig();
$config->hostedPaymentConfig->version = HppVersion::VERSION_2;
$config->hostedPaymentConfig->dynamicCurrencyConversionEnabled = true;
$service = new HostedService($config);

try {
   $hppJson = $service->Authorize(19.99)
      ->withCurrency("EUR")
      ->serialize();
   // TODO: pass the HPP JSON to the client-side
} catch (ApiException $e) {
   // TODO: Add your error handling here
}
// configure client, request and HPP settings
var service = new HostedService(new GpEcomConfig
{
   MerchantId = "MerchantId",
   AccountId = "internet",
   SharedSecret = "secret",
   ServiceUrl = "https://pay.sandbox.realexpayments.com/pay",
   HostedPaymentConfig = new HostedPaymentConfig
   {
      Version = "2",
      DynamicCurrencyConversionEnabled = true
   }
});

try
{
   var hppJson = service.Authorize(10.01m)
      .WithCurrency("EUR")
      .Serialize();

   // TODO: pass the HPP JSON to the client-side
}

catch (ApiException exce)
{
   // TODO: add your error handling here
}
<form action="https://pay.sandbox.realexpayments.com/pay" method="POST" target="iframe">
  <input type="hidden" name="TIMESTAMP" value="20180613110737">
  <input type="hidden" name="MERCHANT_ID" value="MerchantId">
  <input type="hidden" name="ACCOUNT" value="internet">
  <input type="hidden" name="ORDER_ID" value="N6qsk4kYRZihmPrTXWYS6g">
  <input type="hidden" name="AMOUNT" value="1999">
  <input type="hidden" name="CURRENCY" value="EUR">
  <input type="hidden" name="AUTO_SETTLE_FLAG" value="1">
  <input type="hidden" name="HPP_VERSION" value="2">
  <input type="hidden" name="MERCHANT_RESPONSE_URL" value="https://www.example.com/responseUrl">
  <!-- DCC Optional Field -->
  <input type="hidden" name="DCC_ENABLE" value="1">
  <!-- End DCC Optional Field -->
  <input type="hidden" name="SHA1HASH" value="308bb8dfbbfcc67c28d602d988ab104c3b08d012">
  <input type="submit" value="Click To Pay">
</form>

HPP example

HPP example for DCC

HPP response

All of the DCC information returned by the HPP will be contained in the response. You can then record which currency the customer chose to pay with, the rate, and converted amount.

The Timestamp returned in the response will be identical to the one sent in the request (JSON). This, combined with the Order ID and other transaction variables, can be used to definitively link the response received with the transaction request and order created in your application. 

You should also check the other transaction variables—for example, the Amount—against what was stored in your application at the time the request (JSON) was sent.

The Timestamp returned in the response will be identical to the one sent in the request JSON. This, combined with the Order ID and other transaction variables, can be used to definitively link the response received with the transaction request and order created in your application. You should also check the other transaction variables, for example the Amount, against what was stored in your application at the time the request JSON was sent.

info
// configure client settings
GatewayConfig config = new GatewayConfig();
config.setMerchantId("MerchantId");
config.setSharedSecret("secret");
config.setServiceUrl("https://pay.sandbox.realexpayments.com/pay");

HostedService service = new HostedService(config);

/* TODO: grab the response JSON from the client-side.
   sample response JSON (values will be Base64 encoded):
   String responseJson = "{ \"MERCHANT_ID\": \"MerchantId\", \"ACCOUNT\": \"internet\", \"ORDER_ID\": \"GTI5Yxb0SumL_TkDMCAxQA\", \"AMOUNT\": \"1999\", "
 + "\"TIMESTAMP\": \"20170725154824\", \"SHA1HASH\": \"843680654f377bfa845387fdbace35acc9d95778\", \"RESULT\": \"00\", \"AUTHCODE\": \"12345\", "
 + "\"CARD_PAYMENT_BUTTON\": \"Place Order\", \"AVSADDRESSRESULT\": \"M\", \"AVSPOSTCODERESULT\": \"M\", \"BATCHID\": \"445196\", \"MESSAGE\": \"[ test system ] Authorised\", "
 + "\"PASREF\": \"15011597872195765\", \"CVNRESULT\": \"M\", \"HPP_FRAUDFILTER_RESULT\": \"PASS\", \"DCCCCP\": \"fexco\", \"DCCRATE\": \"1.7203\", "
 + "\"DCCMERCHANTAMOUNT\": \"1999\", \"DCCCARDHOLDERAMOUNT\": \"3439\", \"DCCMERCHANTCURRENCY\": \"EUR\", \"DCCCARDHOLDERCURRENCY\": \"AUD\", "
 + "\"DCCMARGINRATEPERCENTAGE\": \"3.75\", \"DCCEXCHANGERATESOURCENAME\": \"REUTERS WHOLESALE INTERBANK\", \"DCCCOMMISSIONPERCENTAGE\": \"0\", "
 + "\"DCCEXCHANGERATESOURCETIMESTAMP\": \"20170518162700\", \"DCCCHOICE\": \"YES\"}";
 */

try {
   Transaction response = service.parseResponse(responseJson, true);
   String responseCode = response.getResponseCode(); // 00
   HashMap<String, String> responseValues = response.getResponseValues(); // get values accessible by key
   String conversionProcessor = responseValues.get("DCCCCP"); // fexco
   String conversionRate = responseValues.get("DCCRATE"); // 1.7203
   String merchantAmount = responseValues.get("DCCMERCHANTAMOUNT"); // 1999
   String cardholderAmount = responseValues.get("DCCCARDHOLDERAMOUNT"); // 3439
   String merchantCurrency = responseValues.get("DCCMERCHANTCURRENCY"); // EUR
   String cardholderCurrency = responseValues.get("DCCCARDHOLDERCURRENCY"); // AUD
   String marginPercentage = responseValues.get("DCCMARGINRATEPERCENTAGE"); // 3.75
   String exchangeSource = responseValues.get("DCCEXCHANGERATESOURCENAME"); // REUTERS WHOLESALE INTERBANK
   String commissionPercentage = responseValues.get("DCCCOMMISSIONPERCENTAGE"); // 0
   String exchangeTimestamp = responseValues.get("DCCEXCHANGERATESOURCETIMESTAMP"); // 20170518162700
   String dccChoice = responseValues.get("DCCCHOICE"); // Yes
   // TODO: update your application and display transaction outcome to the customer
} catch (ApiException e) {
   // TODO: add your error handling here
}
<?php
require_once('vendor/autoload.php');

use GlobalPayments\Api\ServiceConfigs\Gateways\GpEcomConfig;
use GlobalPayments\Api\Services\HostedService;
use GlobalPayments\Api\Entities\Exceptions\ApiException;

// configure client settings
$config = new GpEcomConfig();
$config->merchantId = "MerchantId";
$config->accountId = "internet";
$config->sharedSecret = "secret";
$config->serviceUrl = "https://pay.sandbox.realexpayments.com/pay";
$service = new HostedService($config);

/*
 * TODO: grab the response JSON from the client-side.
 * sample response JSON (values will be Base64 encoded):
 * $responseJson ='{"MERCHANT_ID":"MerchantId","ACCOUNT":"internet","ORDER_ID":"GTI5Yxb0SumL_TkDMCAxQA","AMOUNT":"1999",' .
 * '"TIMESTAMP":"20170725154824","SHA1HASH":"843680654f377bfa845387fdbace35acc9d95778","RESULT":"00","AUTHCODE":"12345",' .
 * '"CARD_PAYMENT_BUTTON":"Place Order","AVSADDRESSRESULT":"M","AVSPOSTCODERESULT":"M","BATCHID":"445196",' .
 * '"MESSAGE":"[ test system ] Authorised","PASREF":"15011597872195765","CVNRESULT":"M","HPP_FRAUDFILTER_RESULT":"PASS",' .
 * '"DCCCCP":"fexco","DCCRATE":"1.7203","DCCMERCHANTAMOUNT":"1999","DCCCARDHOLDERAMOUNT":"3439","DCCMERCHANTCURRENCY":"EUR",' .
 * '"DCCCARDHOLDERCURRENCY":"AUD","DCCMARGINRATEPERCENTAGE":"3.75","DCCEXCHANGERATESOURCENAME":"REUTERS WHOLESALE INTERBANK",' .
 * '"DCCCOMMISSIONPERCENTAGE":"0","DCCEXCHANGERATESOURCETIMESTAMP":"20170518162700","DCCCHOICE":"YES"}";
 */

try {
   $parsedResponse = $service->parseResponse($responseJson, true);
   $responseCode = $parsedResponse->responseCode; // 00
   $responseValues = $parsedResponse->responseValues; // get values accessible by key

   $conversionProcessor = $responseValues["DCCCCP"]; // fexco
   $conversionRate = $responseValues["DCCRATE"]; // 1.7203
   $merchantAmount = $responseValues["DCCMERCHANTAMOUNT"]; // 1999
   $cardholderAmount = $responseValues["DCCCARDHOLDERAMOUNT"]; // 3439
   $merchantCurrency = $responseValues["DCCMERCHANTCURRENCY"]; // EUR
   $cardholderCurrency = $responseValues["DCCCARDHOLDERCURRENCY"]; // AUD
   $marginPercentage = $responseValues["DCCMARGINRATEPERCENTAGE"]; // 3.75
   $exchangeSource = $responseValues["DCCEXCHANGERATESOURCENAME"]; // REUTERS WHOLESALE INTERBANK
   $commissionPercentage = $responseValues["DCCCOMMISSIONPERCENTAGE"]; // 0
   $exchangeTimestamp = $responseValues["DCCEXCHANGERATESOURCETIMESTAMP"]; // 20170518162700
   $dccChoice = $responseValues["DCCCHOICE"]; // Yes
   // TODO: update your application and display transaction outcome to the customer
} catch (ApiException $e) {
   // TODO: Add your error handling here
}
// configure client settings
var service = new HostedService(new GpEcomConfig
{
   MerchantId = "MerchantId",
   AccountId = "internet",
   SharedSecret = "secret",
   ServiceUrl = "https://pay.sandbox.realexpayments.com/pay",
});

// TODO: grab the response JSON from the client-side for example:
// var responseJson = Request.Form["hppResponse"];

try
{
   Transaction response = service.ParseResponse(responseJson, true);
   var responseCode = response.ResponseCode; // 00
   var responseValues = response.ResponseValues; // get values accessible by key

   var conversionProcessor = responseValues["DCCCCP"]; // fexco
   var conversionRate = responseValues["DCCRATE"]; // 1.7203
   var merchantAmount = responseValues["DCCMERCHANTAMOUNT"]; // 1999
   var cardholderAmount = responseValues["DCCCARDHOLDERAMOUNT"]; // 3439
   var merchantCurrency = responseValues["DCCMERCHANTCURRENCY"]; // EUR
   var cardholderCurrency = responseValues["DCCCARDHOLDERCURRENCY"]; // AUD
   var marginPercentage = responseValues["DCCMARGINRATEPERCENTAGE"]; // 3.75
   var exchangeSource = responseValues["DCCEXCHANGERATESOURCENAME"]; // REUTERS WHOLESALE INTERBANK
   var commissionPercentage = responseValues["DCCCOMMISSIONPERCENTAGE"]; // 0
   var exchangeTimestamp = responseValues["DCCEXCHANGERATESOURCETIMESTAMP"]; // 20170518162700
   var dccChoice = responseValues["DCCCHOICE"]; // Yes

   // TODO: update your application and display transaction outcome to the customer
}

catch (ApiException exce)
{
   // TODO: add your error handling here
}
<!-- Additional Response Fields -->
[DCCCCP=Currency Conversion Processor,
 DCCRATE=1.6728,
 DCCMERCHANTAMOUNT=1001,
 DCCCARDHOLDERAMOUNT=1674,
 DCCMERCHANTCURRENCY=GBP,
 DCCCARDHOLDERCURRENCY=AUD,
 DCCMARGINRATEPERCENTAGE=3,
 DCCEXCHANGERATESOURCENAME=Reuters Wholesale Interbank,
 DCCCOMMISSIONPERCENTAGE=0,
 DCCEXCHANGERATESOURCETIMESTAMP=20180613173251,
 DCCCHOICE=Yes]

EEA currencies

Background

In April 2020, the European Union introduced new rules governing the transparency of a merchant markup on currency conversions for certain currencies in the European Economic Area (EEA). These currencies include: EUR, BGN, HRK, DKK, HUF, PLN, CZK, RON, and SEK.

For merchants utilizing DCC, the EEA rules mean that if the exchange rate offered to the customer has a markup that makes the amount above the European Central Bank (ECB) exchange rate, this percentage rate must be displayed to the consumer. 

Compliance

On the HPP, when the customer is presented with the choice to pay in the currency of their card or the merchant’s base currency, the markup amount applied will be displayed to them. If the exchange rate offered is the same or less than the ECB rate, the markup will be displayed as 0%.

The value of the rate field returned in the Rate Lookup response will be the rate provided by the merchant or CCP, inclusive of their markup. The value of the margin percentage field will reflect the markup rate of the merchant or CCP in relation to the current ECB rate.

Enhance your solution

Explore more functionality to enrich your application.

Buttons
DCC - HPP Reference

Dynamic Currency Conversion

Disabled
Icon Name
euro-sign
Digital Wallets

Digital Wallets

Disabled
Icon Name
wallet
Non-Card Payment Methods

Payment Methods

Disabled
Icon Name
piggy-bank
3D Secure 2 & SCA

3D Secure

Disabled
Icon Name
lock-alt
Unavailable
Off
API

In this guide, you'll learn how to obtain the relevant currency and exchange rate, present the option to the customer, and process the authorization with 3D Secure 2 (3DS2) authentication (if applicable).

Step 1: Check the card currency and exchange rate

To start, we need to check if the card is available for DCC and what the current exchange rate is.

If the card is not eligible for DCC or the card currency is the same as your base currency, you will receive a "105" as response code. In this case, proceed with a standard Authorization without DCC details.

// configure client & request settings
GatewayConfig config = new GatewayConfig();
config.setMerchantId("MerchantId");
config.setAccountId("internet");
config.setSharedSecret("secret");
config.setServiceUrl("https://api.sandbox.realexpayments.com/epage-remote.cgi");
ServicesContainer.configureService(config);

// create the card object
CreditCardData card = new CreditCardData();
card.setNumber("4006097467207025");
card.setExpMonth(12);
card.setExpYear(2025);
card.setCvn("131");
card.setCvnPresenceIndicator(CvnPresenceIndicator.Present);
card.setCardHolderName("James Mason");

try {
   DccRateData dccRateData = card.getDccRate(DccRateType.Sale, new BigDecimal("10.01"), "EUR", DccProcessor.Fexco);
   // get the details to present the choice to the customer
   String cardHolderCurrency = dccRateData.getCurrency(); // AUD
   BigDecimal cardHolderAmount = dccRateData.getAmount(); // 1722
   BigDecimal cardHolderRate = dccRateData.getDccRate(); // 1.7203
} 

catch (ApiException exce) {
   // TODO: add your error handling here
}
<?php
require_once('vendor/autoload.php');

use GlobalPayments\Api\ServiceConfigs\Gateways\GpEcomConfig;
use GlobalPayments\Api\ServicesContainer;
use GlobalPayments\Api\PaymentMethods\CreditCardData;
use GlobalPayments\Api\Entities\Exceptions\ApiException;
use GlobalPayments\Api\Utils\GenerationUtils;

$config = new GpEcomConfig();
$config->merchantId = "MerchantId";
$config->accountId = "internet";
$config->sharedSecret = "secret";
$config->serviceUrl = "https://api.sandbox.realexpayments.com/epage-remote.cgi";
ServicesContainer::configureService($config);

// create the card object
$card = new CreditCardData();
$card->number = "4006097467207025";
$card->expMonth = 12;
$card->expYear = 2025;
$card->cvn = "131";
$card->cardHolderName = "James Mason";

try {
   // check if Dynamic Currency Conversion is available
   $response = $card->getDccRate("1", "19.99", "EUR", "fexco", GenerationUtils::getGuid());
} catch (ApiException $e) {
   // TODO: add your error handling here
}

if (isset($response)) {
   $dccResponseResult = $response->dccResponseResult;
   // get the details to present to the customer
   $cardHolderCurrency = $dccResponseResult->cardHolderCurrency; // AUD
   $customerAmount = $dccResponseResult->cardHolderAmount; // 3439
   $exchangeRate = $dccResponseResult->cardHolderRate; // 1.7203
   // TODO: update your application and display the conversion option to the customer
}
// coming soon
<?xml version="1.0" encoding="UTF-8"?>
<request type="dccrate" timestamp="20180613173251">
  <merchantid>MerchantId</merchantid>
  <account>internet</account>
  <orderid>HUrD-jsFSniaul_g0_z4YA</orderid>
  <amount currency="EUR">1001</amount>
  <card>
    <number>4006097467207025</number>
    <expdate>1218</expdate>
    <chname>James Mason</chname>
    <type>VISA</type>
  </card>
  <!-- Begin DCC Elements -->
  <dccinfo>
    <ccp>Currency Conversion Processor</ccp>
    <type>1</type>
    <ratetype>S</ratetype>
  </dccinfo>
  <!-- End DCC Elements -->
  <sha1hash>30e37e11a44ff9eee125933bd48455991820a7d7</sha1hash>
</request>

Step 2: Offer the choice of currency to the customer

Now that we have the card currency, exchange rate, and amount, we can present the option to the customer. For this example, the card currency is Swedish Krona (SEK) and our base currency is Euro (EUR). The screenshot below shows an example of how the HPP presents this choice to the customer.

Example of DCC on the HPP
HPP Choice of Currency to Customer

Step 3: Authenticate payment using correct currency

A requirement of 3DS is that the amount and currency authenticated should match the amount and currency authorized. Therefore, where DCC is used, you must ensure to authenticate the customer with the correct currency. The 3D Secure implementation flow you use depends on the customer’s actions: 

Step 4: Send the authorization with DCC details

Once the customer makes their decision, you can send the authorization along with the DCC information. In our example, the customer chose to pay in the currency of their card. You can populate the converted amount, rate, and currency into the request.

// configure client & request settings
GatewayConfig config = new GatewayConfig();
config.setMerchantId("MerchantId");
config.setAccountId("internet");
config.setSharedSecret("secret");
config.setServiceUrl("https://api.sandbox.realexpayments.com/epage-remote.cgi");
ServicesContainer.configureService(config);

// create the card object
CreditCardData card = new CreditCardData();
card.setNumber("4006097467207025");
card.setExpMonth(12);
card.setExpYear(2025);
card.setCvn("131");
card.setCvnPresenceIndicator(CvnPresenceIndicator.Present);
card.setCardHolderName("James Mason");

// populate the dcc data based on the customer's choice
DccRateData dccRateData = new DccRateData();
dccRateData.setDccProcessor("fexco");
dccRateData.setDccRateType("S");
dccRateData.setCurrency("AUD");
dccRateData.setAmount(new BigDecimal("1722"));
dccRateData.setDccRate(new BigDecimal("1.7203"));

try {
   // process an auto-settle authorization with dcc data
   Transaction response = card.charge(new BigDecimal("10.01"))
      .withOrderId("9QDdMAGhTeiCyNxkuiMXYA")
      .withDccRateData(dccRateData)
      .withCurrency("EUR")
      .execute();

   String result = response.getResponseCode(); // 00 == Success
   String message = response.getResponseMessage(); // [ test system ] AUTHORISED

   // get the details to save to the DB for future requests
   String authCode = response.getAuthorizationCode(); // 12345
   String paymentsReference = response.getTransactionId(); // pasref 14622680939731425
   String schemeReferenceData = response.getSchemeId(); // MMC0F00YE4000000715
} 

catch (ApiException exce) {
   // TODO: add your error handling here
}
<?php
require_once('vendor/autoload.php');

use GlobalPayments\Api\ServiceConfigs\Gateways\GpEcomConfig;
use GlobalPayments\Api\ServicesContainer;
use GlobalPayments\Api\PaymentMethods\CreditCardData;
use GlobalPayments\Api\Entities\DccRateData;
use GlobalPayments\Api\Entities\Exceptions\ApiException;

$config = new GpEcomConfig();
$config->merchantId = "MerchantId";
$config->accountId = "internet";
$config->sharedSecret = "secret";
$config->serviceUrl = "https://api.sandbox.realexpayments.com/epage-remote.cgi";
ServicesContainer::configureService($config);

// create the card object
$card = new CreditCardData();
$card->number = "4006097467207025";
$card->expMonth = 12;
$card->expYear = 2025;
$card->cvn = "131";
$card->cardHolderName = "James Mason";

// populate the dcc data based on the customer's choice
$dccRateData = new DccRateData();
$dccRateData->dccProcessor = "fexco";
$dccRateData->dccRateType = "S";
$dccRateData->currency = "AUD";
$dccRateData->dccRate = "1.7203";
$dccRateData->amount = "3439";

try {
   // Submit the Authorization with the customer's DCC choice
   $response = $card->charge(19.99)
      ->withOrderId("cd82c0aa-cf3c-4887-aed9-0680aee9f484") // same Order ID as Rate Lookup
      ->withDccRateData($dccRateData)
      ->withCurrency("EUR")
      ->execute();
} catch (ApiException $e) {
   // TODO: add your error handling here
}

if (isset($response)) {
   $result = $response->responseCode; // 00 == Success
   $message = $response->responseMessage; // [ test system ] AUTHORISED

   // get the details to save to the DB for future requests
   $orderId = $response->orderId; // N6qsk4kYRZihmPrTXWYS6g
   $authCode = $response->authorizationCode; // 12345
   $paymentsReference = $response->transactionId; // pasref: 14610544313177922
   $schemeReferenceData = $response->schemeId; // MMC0F00YE4000000715
   // TODO: update your application and display transaction outcome to the customer
}
// coming soon
<?xml version="1.0" encoding="UTF-8"?>
<request type="auth" timestamp="20180613104233">
  <merchantid>MerchantId</merchantid>
  <account>internet</account>
  <orderid>AWfoT2k9TzuA0wn8Ze_IIQ</orderid>
  <amount currency="EUR">1000</amount>
  <card>
    <number>4263970000005262</number>
    <expdate>0525</expdate>
    <chname>Philip Marlowe</chname>
    <type>VISA</type>
    <cvn>
      <number>123</number>
      <presind>1</presind>
    </cvn>
  </card>
  <autosettle flag="1"/>
  <mpi>
    <eci>5</eci>
    <ds_trans_id>c272b04f-6e7b-43a2-bb78-90f4fb94aa25</ds_trans_id>
    <authentication_value>ODQzNjgwNjU0ZjM3N2JmYTg0NTM=</authentication_value>
    <message_version>2.2.0</message_version>
    <exempt_status>LOW_VALUE</exempt_status>
  </mpi>
  <!-- Begin DCC Elements -->
  <dccinfo>
    <ccp>Currency Conversion Processor</ccp>
    <type>1</type>
    <rate>1.6728</rate>
    <ratetype>S</ratetype>
    <amount currency="AUD">167</amount>
  </dccinfo>
  <!-- End DCC Elements -->
  <sha1hash>c87e5fa0858671510a02477d146ef744233e4ba8</sha1hash>
</request>

EEA currencies

Background

In April 2020, the European Union introduced new rules governing the transparency of a merchant markup on currency conversions for certain currencies in the European Economic Area (EEA). These currencies include: EUR, BGN, HRK, DKK, HUF, PLN, CZK, RON, and SEK.

For merchants utilizing DCC, the EEA rules mean that if the exchange rate offered to the customer has a markup that makes the amount above the European Central Bank (ECB) exchange rate, this percentage rate must be displayed to the consumer. 

Compliance

When the customer is presented with the choice to pay in the currency of their card or the merchant’s base currency, the markup amount should be displayed to them. If the exchange rate offered is the same or less than the ECB rate, the markup should be displayed as 0%.

The value of the rate field returned in the Rate Lookup response will be the rate provided by the merchant or CCP, inclusive of their markup. The value of the margin percentage field will reflect the markup rate of the merchant or CCP in relation to the current ECB rate.

Enhance your solution

Explore more functionality to enrich your application.

Buttons
DCC - API Reference

Dynamic Currency Conversion

Disabled
Icon Name
euro-sign
Digital Wallets

Digital Wallets

Disabled
Icon Name
wallet
Non-Card Payment Methods

Payment Methods

Disabled
Icon Name
piggy-bank
3D Secure 2 & SCA

3D Secure

Disabled
Icon Name
lock-alt
Unavailable
Off
Internal Title
XML (Ecommerce Only)
Show Content Nav
On
Tags
Subtitle
Let international customers pay in their home currency.