DEV Community

viraj geeth
viraj geeth

Posted on Originally published at allratestoday.com

Mid-Market vs Retail Exchange Rates: What Developers Need to Know

When you integrate an exchange rate API into your application, one of the most important questions to ask is: "Is this the mid-market rate or a retail rate?" The difference can mean a 1–5% hidden markup on every conversion your users see — and most API documentation doesn't make this clear.

What Is the Mid-Market Rate?

The mid-market rate (also called the interbank rate) is the midpoint between the buy price and the sell price of a currency pair on the global foreign exchange market. It is the "true" exchange rate — the rate at which banks trade with each other in large volumes.

When you see an exchange rate on Google, XE, or Bloomberg, you are seeing the mid-market rate.

Example: If banks are buying EUR at 1.0820 USD and selling EUR at 1.0830 USD, the mid-market rate is 1.0825 — the midpoint between the two.

What Is a Retail Rate?

A retail rate is the mid-market rate plus a spread (markup). This spread is how banks, exchange services, and money transfer companies make money.

Provider Type Typical Spread Impact on $10,000
Mid-market (interbank) 0% $0
Online transfer (e.g. Wise) 0.3–0.7% $30–$70
Bank wire transfer 1–3% $100–$300
Credit card foreign transaction 1–3% $100–$300
Airport currency exchange 3–8% $300–$800

Why This Matters for Your Application

If your API returns retail rates instead of mid-market rates, you have a transparency problem. Your users might think they are getting the "real" exchange rate, but there is already a hidden markup baked into the data.

E-Commerce Price Display

If your online store shows "1 USD = 0.92 EUR" but the real mid-market rate is 0.9350, your international customers are seeing prices that are 1.6% higher than they should be. On a $500 purchase, that is $8 in invisible overcharge.

Multi-Currency SaaS Billing

If you bill customers in their local currency using retail rates, you are effectively applying a markup your customers didn't agree to.

Financial Reporting

Auditors and compliance teams expect rates traceable to a recognized source. Mid-market rates from Reuters, Bloomberg, or Central Banks are accepted. Retail rates from unnamed sources are not.

How to Tell What Your API Returns

  1. Compare against Google: Search "1 USD to EUR" on Google (mid-market rate). If your API's rate differs by more than 0.05%, it may include a spread.
  2. Check the documentation: Look for "interbank," "mid-market," or "wholesale." If the docs say "indicative rates" or don't specify, be cautious.
  3. Ask about the source: Reuters, Refinitiv, or Bloomberg = mid-market. Unnamed "multiple sources" = potentially includes retail spreads.

Red flag: If an exchange rate API is completely free with unlimited requests and doesn't disclose its data source, the data may be low-quality or include a hidden spread.

Adding Your Own Transparent Markup

If your business model requires a spread, start with the mid-market rate and apply your own transparent margin:

import AllRatesToday from '@allratestoday/sdk';

const client = new AllRatesToday('YOUR_API_KEY');
const MARKUP = 0.005; // 0.5% spread

async function getCustomerRate(from, to) {
  const midMarketRate = await client.getRate(from, to);
  const customerRate = midMarketRate * (1 - MARKUP);
  return {
    midMarket: midMarketRate,
    customerRate: customerRate,
    spread: MARKUP
  };
}

const rate = await getCustomerRate('USD', 'EUR');
console.log(`Mid-market: ${rate.midMarket}`);
console.log(`Customer rate: ${rate.customerRate} (includes ${rate.spread * 100}% fee)`);
Enter fullscreen mode Exit fullscreen mode

This approach gives you full control over your pricing while being transparent with your users about the markup.

Quick Reference

Aspect Mid-Market Rate Retail Rate
Definition Midpoint between buy/sell Mid-market + provider's spread
Markup None 0.3% to 8%
Used by Google, XE, Bloomberg Banks, exchange bureaus
Best for apps Price display, invoicing, comparison Simulating actual transfer cost
Audit-friendly Yes (traceable source) Depends on provider

AllRatesToday provides mid-market rates from institutional interbank market data for 160+ currencies. No hidden spreads, no markup. Free tier available.

Get your free API key | Documentation | GitHub


Written by the team behind AllRatesToday — an exchange rate API with real-time mid-market rates for 150+ currencies and the official published rates of 116 central banks and tax authorities, with keyless open endpoints for the central-bank data. Browse the API docs or grab a free key to start building.

Open source: official SDKs for JavaScript, Python, PHP, Go and Rust,
plus an MCP server (@allratestoday/mcp-server) for AI agents.

Follow along: GitHub

Top comments (0)