Kembali ke Blog

What Is Dynamic Currency Conversion (DCC)? A Developer's Guide

V
Vlado Grigirov
July 18, 2026
Currency API Exchange Rates DCC Payments Fintech Tutorial

Ever tapped your card abroad and been asked, "Would you like to pay in USD or the local currency?" That single prompt is dynamic currency conversion (DCC) at work — and behind it sits a chain of card detection, exchange-rate lookups, and markup math that every fintech builder should understand. This guide explains what dynamic currency conversion is, how it works step by step, where its costs come from, and how you can build a transparent DCC offer yourself using a currency exchange rate API.

Whether you run a store that serves international shoppers or you're a developer wiring up a checkout, understanding DCC helps you make informed decisions — and, crucially, present rates your customers can trust.

What is dynamic currency conversion?

Dynamic currency conversion (DCC), sometimes called cardholder preferred currency (CPC) or "pay in your currency," is a service that lets a customer paying with a foreign card see and pay the transaction amount in their home currency instead of the merchant's local currency, at the point of sale.

Say a traveler from the United States buys a €100 dinner in Paris. Without DCC, the restaurant's terminal charges €100 and the customer's bank later converts it to dollars at whatever rate the card network applies. With DCC, the terminal recognizes the card was issued in the US, converts the amount on the spot, and offers the customer a choice: pay €100 or pay roughly $112 (the euro amount converted, plus a markup). The shopper sees the exact dollar figure before they confirm.

DCC works across many payment contexts: chip-and-PIN and contactless card-present transactions, mobile wallets like Apple Pay and Google Pay, ATM cash withdrawals, and card-not-present online payments (often called eDCC). The core idea is always the same — convert at the moment of payment so the cardholder pays in a familiar currency.

How DCC works, step by step

Once DCC is enabled on a payment terminal or in an online checkout, a transaction flows through five stages:

  1. Payment initiation. The customer taps, inserts, or enters a foreign card at checkout.
  2. Card detection and currency lookup. During authorization, the DCC provider reads the card's BIN (Bank Identification Number, the first 6–8 digits) to identify the issuing country and the cardholder's home currency — EUR, USD, GBP, JPY, and so on.
  3. Rate and markup calculation. The provider takes a base exchange rate and adds a markup, then computes the amount in the customer's home currency.
  4. Currency selection. The terminal or checkout screen presents two options — pay in local currency or pay in home currency — showing the exchange rate, the markup, and the final amount so the customer can choose.
  5. Settlement. Whichever currency the customer picks, the merchant's acquirer settles with the merchant in the local currency for the full amount. The DCC provider handles the conversion behind the scenes.

The exchange rate and totals shown on a DCC receipt are locked in at the time of the transaction, so the figure the customer approves matches what appears on their statement later. That predictability is DCC's main selling point.

The DCC markup: where the cost comes from

Here's the part that matters most. The rate offered in a DCC transaction is not the raw market rate. It's a base rate plus a markup that bundles the provider's currency-conversion fee and profit margin.

Those markups vary widely. They commonly land somewhere between roughly 3% and 12%, and independent reporting has documented DCC markups reaching as high as 18% above the standard exchange rate. By contrast, if the customer declines DCC and lets their own bank convert the transaction, the bank typically applies a rate much closer to the interbank (wholesale) rate plus a smaller foreign-transaction fee.

That's why consumer advocates and travel guidance from card networks generally warn that choosing DCC usually costs the cardholder more than declining it. The value DCC delivers is certainty and convenience, not a better rate.

For anyone building a payment experience, the lesson is clear: the more transparent your rate and markup, the more trust you earn — and the fewer disputes and chargebacks you'll field. That transparency starts with knowing the true mid-market rate so you can show customers exactly what they're paying over it.

DCC vs. traditional currency conversion

The two approaches differ on three axes:

  • Who sets the rate. In DCC, the merchant's DCC provider sets the rate and markup. In traditional conversion, the cardholder's issuing bank or the card network (Visa, Mastercard) sets it.
  • When conversion happens. DCC converts at the point of sale, up front and visible. Traditional conversion happens later, behind the scenes, and shows up on the statement.
  • Cost. DCC markups are usually higher than the issuer's own conversion fee, so traditional conversion is often cheaper — but the customer doesn't know the exact final amount until the statement arrives.

Neither is universally "better." DCC trades a higher cost for immediate certainty; traditional conversion trades that certainty for a typically lower cost. Understanding the trade-off is the foundation for building conversion features that are honest about both. If you want the deeper mechanics of how conversion rates are derived, see our guide on how exchange rates work and the difference between the mid-market exchange rate and marked-up retail rates.

The compliance rules developers must know

DCC is regulated, and if you're building it, the rules aren't optional. Both major card networks require genuine transparency and consent:

  • The base rate must be a wholesale/interbank rate. The markup is applied on top of that reference rate, not baked invisibly into a made-up number.
  • The markup must be disclosed. Visa requires that the markup over the reference rate be shown to the cardholder.
  • Consent is mandatory. "Back office DCC" — converting without the customer's explicit choice — is prohibited. The customer must actively opt in, and staff should never assume a preference.
  • The receipt must document the choice, including the local-currency amount, the converted amount, the rate used, the markup, and confirmation that the cardholder accepted DCC.

Meeting these requirements means your system needs a reliable, auditable source for the reference exchange rate. That's exactly where a dedicated currency exchange rate API comes in.

How to build a transparent DCC offer with a currency API

You don't need to be a global payment processor to present a fair, compliant conversion offer. The building blocks are: detect the card's home currency, fetch a clean reference rate, apply a disclosed markup, and show the customer the choice. Here's how to wire up the rate layer with the Finexly API.

Step 1: Detect the card's issuing currency

Map the card BIN to an issuing country and currency. Most acquirers and BIN-lookup services return an ISO country code you can translate to an ISO 4217 currency code. For this example, assume detection returned USD as the cardholder's home currency and the merchant operates in EUR.

Step 2: Fetch the mid-market reference rate

Pull the current rate from EUR (the merchant currency) to USD (the cardholder currency). With cURL:

curl "https://api.finexly.com/v1/latest?base=EUR&symbols=USD" \
  -H "Authorization: Bearer YOUR_API_KEY"

A typical JSON response:

{
  "base": "EUR",
  "date": "2026-07-18",
  "rates": {
    "USD": 1.0842
  }
}

Step 3: Apply and disclose your markup

Take the mid-market rate, add a transparent markup, and compute both amounts. In JavaScript:

async function buildDccOffer(merchantAmount, base, home, markupPct) {
  const res = await fetch(
    `https://api.finexly.com/v1/latest?base=${base}&symbols=${home}`,
    { headers: { Authorization: "Bearer YOUR_API_KEY" } }
  );
  const data = await res.json();

  const midMarketRate = data.rates[home];
  const dccRate = midMarketRate * (1 + markupPct / 100);
  const homeAmount = merchantAmount * dccRate;

  return {
    payInLocal: { amount: merchantAmount.toFixed(2), currency: base },
    payInHome: {
      amount: homeAmount.toFixed(2),
      currency: home,
      rate: dccRate.toFixed(4),
      midMarketRate: midMarketRate.toFixed(4),
      markup: `${markupPct}%`,
    },
  };
}

// A €100 charge, cardholder in USD, 2.5% disclosed markup
buildDccOffer(100, "EUR", "USD", 2.5).then(console.log);

The same logic in Python:

import requests

def build_dcc_offer(merchant_amount, base, home, markup_pct):
    r = requests.get(
        "https://api.finexly.com/v1/latest",
        params={"base": base, "symbols": home},
        headers={"Authorization": "Bearer YOUR_API_KEY"},
    )
    mid = r.json()["rates"][home]
    dcc_rate = mid * (1 + markup_pct / 100)
    return {
        "pay_in_local": {"amount": round(merchant_amount, 2), "currency": base},
        "pay_in_home": {
            "amount": round(merchant_amount * dcc_rate, 2),
            "currency": home,
            "rate": round(dcc_rate, 4),
            "mid_market_rate": round(mid, 4),
            "markup": f"{markup_pct}%",
        },
    }

print(build_dcc_offer(100, "EUR", "USD", 2.5))

Step 4: Present the choice honestly

Render both options side by side — the local amount and the home-currency amount — and show the mid-market rate, your markup, and the resulting rate. Because you fetched the reference rate from a wholesale source, you can prove the markup is exactly what you disclosed. Storing the API response date alongside the transaction gives you the auditable record networks expect.

Because rates move continuously, cache responses sensibly and refresh them on a schedule that fits your volume — see our notes on caching and error handling for patterns that keep you fast without serving stale quotes. As your transaction volume grows, review the pricing plans to match your request rate.

Benefits and risks of DCC

DCC isn't inherently good or bad — it's a tool with clear upsides and real trade-offs.

For merchants, DCC can broaden international appeal, reduce payment confusion, and open a revenue-share stream, since some providers rebate a portion of the conversion margin. It can also cut disputes, because customers approve an exact amount in a currency they understand.

For shoppers, DCC delivers convenience and certainty: no mental math, and the amount on the receipt matches the bank statement. The trade-off is cost — the markup usually makes DCC more expensive than letting their own bank convert.

The risk for both sides is opacity. When markups are hidden or the choice is made for the customer, trust erodes fast and regulators take notice. Build for transparency and DCC becomes a genuine convenience rather than a hidden fee.

Frequently asked questions

Is dynamic currency conversion worth it for customers? Usually it costs more than declining it, because the DCC markup tends to exceed the fee a cardholder's own bank would charge. Its value is certainty — you see the exact home-currency amount before paying. Cost-sensitive customers generally save by paying in the local currency.

What is a typical DCC markup? Markups commonly range from about 3% to 12% over the reference exchange rate, and have been documented as high as 18%. Card networks require the markup to be disclosed and applied on top of a wholesale interbank rate.

Is DCC the same as multi-currency pricing? No. DCC converts at the moment of payment based on the card's issuing currency. Multi-currency pricing displays prices in a shopper's currency throughout the browsing experience, before checkout. Many merchants use both.

Can I build my own DCC-style conversion offer? You can build the rate and disclosure layer yourself using a currency API to source the reference rate, then apply and show a transparent markup. Actually settling card transactions still runs through your acquirer and must comply with Visa and Mastercard DCC rules, including consent and disclosure.

How do I get the mid-market rate for conversions? Use a real-time exchange rate API. Finexly serves live and historical rates for 170+ currencies, so you can fetch the mid-market rate, apply your own disclosed markup, and present an honest conversion. Try the free currency API to get started.

Get accurate rates for your conversion flows

Dynamic currency conversion lives or dies on rate transparency. Whether you're offering DCC, building multi-currency checkout, or just showing shoppers what they'll really pay, it starts with a trustworthy source for the mid-market rate.

Ready to build transparent conversion into your product? Get your free Finexly API key — no credit card required. Start with 1,000 free requests per month, pull real-time rates for 170+ currencies, and scale up as your transaction volume grows.

Vlado Grigirov

Senior Currency Markets Analyst & Financial Strategist

Vlado Grigirov is a senior currency markets analyst and financial strategist with over 14 years of experience in foreign exchange markets, cross-border finance, and currency risk management. He has wo...

View full profile →