B6 Dynamic currency conversion (DCC)

Needs: Supporter

Lesson B6: Letting a foreign cardholder pay in their own currency: eligibility, the rate and markup, the cardholder's choice and the receipt, the amounts in the messages, refunds, and how DCC compares with the network's conversion.

This is a supporter feature. Create a free account, then try every supporter feature free for 7 days.

Sign in Create a free account See plans

The opening of the lesson

Why it matters

A visitor from another country pays by card. Without DCC, the merchant charges in its own currency and the card network converts the amount for the issuer, which may add a fee. The cardholder learns the exact amount from their statement.

With dynamic currency conversion, the terminal, the ATM or the checkout page offers to charge the card in the cardholder's own currency, right now, at a rate the merchant's DCC provider sets:

  • the cardholder sees the final amount in their currency at once, and usually pays a margin for that certainty;
  • the merchant and the acquirer earn part of the margin, which is why DCC is common in hotels, shops, restaurants and ATMs that serve travellers;
  • the networks allow DCC only under strict rules ⚠: the choice must be the cardholder's, the offer must show the amounts, the rate and the markup, and the receipt must say what was chosen.

A terminal that gets these rules wrong exposes the acquirer to chargebacks and penalties. For a developer or tester, DCC touches almost every layer: the BIN table, the rate file, the cardholder screen, the EMV kernel, the authorisation and clearing amounts, refunds and receipts.

In the full lesson

  1. The concept
  2. The rate, the markup and rounding
  3. In the messages
  4. Refunds, reversals and pre-authorisations
  5. Common mistakes
  6. What to test
  7. Try it

What module B6 covers →

The rest of the lesson opens with a supporter pass, which you can try free for 7 days.
An unhandled error has occurred. Reload 🗙

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.