Skip to content
FX pricing basics

Mid-market rate: what it is and why your bank's rate differs

The mid-market exchange rate is the neutral reference point between buying and selling a currency. Here is how it is defined, why retail rates sit away from it, and how to use it to measure markups.

Last updated: · fxapi team

Look up the euro–dollar rate on a search engine, then check what your bank or card would give you, and you will see two different numbers. The first is usually the mid-market rate; the second is a retail rate with a margin built in. Understanding the mid-market rate is the starting point for pricing products fairly, checking what a payment provider really charges, and choosing the right reference rate for reporting.

The mid-market rate is the midpoint between the highest price buyers are willing to pay (bid) and the lowest price sellers are willing to accept (ask) for a currency pair at a given moment. Because it contains no spread or fee, it serves as a neutral benchmark for comparing exchange rates offered by banks, cards and payment providers.

Bid, ask and spread

Every dealer in the foreign exchange market quotes two prices for a currency pair such as EUR/USD:

TermAlso calledMeaning (for EUR/USD)
BidBuy priceUSD the dealer pays you for 1 EUR
AskOffer, sell priceUSD you pay the dealer for 1 EUR
SpreadBid–ask spreadAsk − bid; the dealer’s compensation for making the market
MidMid-market rate(Bid + ask) ÷ 2

An illustrative wholesale quote:

EUR/USD   bid 1.0850   ask 1.0852
spread  = 1.0852 − 1.0850 = 0.0002   (2 pips)
mid     = (1.0850 + 1.0852) ÷ 2 = 1.0851

In liquid pairs such as EUR/USD, the wholesale spread is tiny. In less traded currencies, or in volatile markets, it is wider. Either way, the mid-market rate sits exactly in the middle and favors neither side.

Mid-market rate vs the rate you actually get

Retail rates are built on top of the market. The typical layers between the mid-market rate and what an end customer sees:

LayerWho sets itTypical form
Mid-market rateMarket (midpoint of wholesale quotes)Reference only
Wholesale spreadDealers and liquidity providersSmall fraction of a percent in major pairs
Retail markupBank, card issuer, money transfer servicePercentage added to or subtracted from the rate
Explicit feesSame providersFlat fee or percentage per transaction
Timing differenceProvider’s rate-setting scheduleRate fixed once a day or at authorization, not at settlement

Why banks and cards differ

  • Markup inside the rate. Many providers advertise “no fee” but quote a rate a few percent away from mid-market. The cost is real; it is just hidden in the rate.
  • Different reference times. A card network may set its rate once a day, while your statement shows the transaction days later. Comparing against a mid-market rate from a different moment overstates or understates the markup.
  • Dynamic currency conversion. When a terminal or website offers to charge you in your home currency, the merchant’s provider chooses the rate, often with a larger markup than your own card issuer would apply.
  • Currency liquidity. Exotic currencies carry wider wholesale spreads, so even fair providers quote further from mid-market.

Regulators have noticed. In the EU, Regulation (EU) 2021/1230 (Article 4) requires providers of card-based currency conversion to express total conversion charges as a percentage markup over the latest euro foreign exchange reference rates published by the European Central Bank – in other words, to disclose the markup against a neutral reference.

How to calculate an FX markup

Measuring a markup needs two numbers taken at (roughly) the same time: the rate you were given and the mid-market rate.

Example (illustrative values). You convert 1,000 USD to EUR. The mid-market rate is 0.9200 EUR per USD; your provider credits 901.60 EUR.

effective rate   = 901.60 ÷ 1,000          = 0.9016 EUR per USD
amount at mid    = 1,000 × 0.9200          = 920.00 EUR
cost in EUR      = 920.00 − 901.60         = 18.40 EUR
markup           = (0.9200 − 0.9016) ÷ 0.9200 = 2.00 %

When you are selling the base currency and receive the quoted currency (as above), the markup reduces the rate you get. When you are buying the base currency, it increases the rate you pay, so the formula flips to (rate paid − mid) ÷ mid.

Using the mid-market rate as a benchmark

Pricing in multiple currencies

E-commerce and SaaS companies convert a base price list with mid-market rates, then apply their own explicit buffer – for example 2% to cover card and payout costs – and round to local price points. Keeping the buffer separate from the rate makes the logic auditable. See multi-currency pricing and SaaS billing.

Auditing payment providers

Fintech and finance teams compare each settled conversion with the mid-market rate for the same day or hour to see what a PSP, bank or payout partner really charges. Historical rates make this possible after the fact – see fintech and payments.

Showing indicative rates to users

A converter, travel app or wallet can display the mid-market rate as “the market rate” and show the provider’s rate next to it, so the markup is visible. The currency converter API does the arithmetic server-side.

Reporting and analytics

Mid-market rates are the usual basis for management reporting, dashboards and analytics because they do not depend on any one bank’s pricing. For statutory accounts, follow your accounting policy – see closing vs average exchange rates.

Remember: a mid-market rate is a reference, not a price you can trade at. Your payment provider settles at its own rate. Use the mid-market rate to measure and explain, not to promise customers an exact settled amount.

Example: measure a markup with fxapi

fxapi returns mid-market reference rates. This Python snippet fetches the current USD→EUR rate and computes the markup of a quote you received from a provider:

import os
import requests

def mid_rate(base: str, quote: str) -> float:
    r = requests.get(
        "https://api.fxapi.com/v1/latest",
        params={"base_currency": base, "currencies": quote},
        headers={"apikey": os.environ["FXAPI_KEY"]},
        timeout=10,
    )
    r.raise_for_status()
    return r.json()["data"][quote]["value"]

mid = mid_rate("USD", "EUR")
offered = 0.9016                      # rate quoted by your provider (illustrative)
markup_pct = (mid - offered) / mid * 100
print(f"mid {mid:.4f} · offered {offered:.4f} · markup {markup_pct:.2f} %")

For a past transaction, call /v1/historical with the transaction date instead, and for hour-level checks use /v1/range with accuracy=hour on Professional and up. Rates refresh daily on Free, hourly on Basic and every 60 seconds on Professional and Enterprise – the real-time exchange rate API page has the details.

Key takeaways

  • The mid-market rate is the midpoint of bid and ask – the fairest single number for a currency pair at a point in time.
  • Retail rates add a spread, a markup and sometimes fees; the gap to mid-market is the true cost of conversion.
  • Always compare rates from the same moment, and store the timestamp with every converted amount.
  • Use mid-market rates for pricing logic, provider audits, indicative display and analytics. New to rate APIs? Start with what is an exchange rate API.

Want to try it? fxapi is a foreign exchange rates API that returns live and historical rates for 190+ currencies as JSON – free for up to 300 requests a month.

Frequently asked questions

What does mid-market rate mean?
It is the midpoint between the bid (buy) and ask (sell) prices for a currency pair at a given moment. It has no spread or fee built in, which makes it a neutral reference rate.
Can I exchange money at the mid-market rate?
Usually not as a retail customer. Banks, card networks and money transfer services add a spread or markup on top of the mid-market rate, and sometimes a separate fee. The mid-market rate is best used as a benchmark.
Is the mid-market rate the same as the interbank rate?
The terms are often used interchangeably. Strictly, interbank dealers also trade at a bid and an ask; the mid-market rate is the midpoint of those wholesale quotes.
How do I calculate an exchange rate markup?
Compare the rate you were given with the mid-market rate at the same time: markup % = (mid − rate received) ÷ mid × 100 when you are converting into the quoted currency. The worked example on this page shows the math.
Does fxapi provide mid-market rates?
Yes. fxapi returns mid-market reference rates for 190+ currencies through /v1/latest and /v1/historical. It does not provide bid/ask quotes or trade execution.
Free plan · no credit card

Get your free exchange rate API key

300 requests a month, latest and historical rates, fluctuation and averages – free forever. Upgrade when you need faster updates or more requests.