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:
| Term | Also called | Meaning (for EUR/USD) |
|---|---|---|
| Bid | Buy price | USD the dealer pays you for 1 EUR |
| Ask | Offer, sell price | USD you pay the dealer for 1 EUR |
| Spread | Bid–ask spread | Ask − bid; the dealer’s compensation for making the market |
| Mid | Mid-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:
| Layer | Who sets it | Typical form |
|---|---|---|
| Mid-market rate | Market (midpoint of wholesale quotes) | Reference only |
| Wholesale spread | Dealers and liquidity providers | Small fraction of a percent in major pairs |
| Retail markup | Bank, card issuer, money transfer service | Percentage added to or subtracted from the rate |
| Explicit fees | Same providers | Flat fee or percentage per transaction |
| Timing difference | Provider’s rate-setting schedule | Rate 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?
Can I exchange money at the mid-market rate?
Is the mid-market rate the same as the interbank rate?
How do I calculate an exchange rate markup?
Does fxapi provide mid-market rates?
/v1/latest and /v1/historical. It does not provide bid/ask quotes or trade execution.