Real-Time Exchange Rate API: How Fresh the Rates Really Are

Real-time exchange rate API with mid-market rates stamped every minute and served from a 60-second cache, so a response is at most two minutes behind the market. Measured figures, what real-time means here, what it does not, and the official daily rates next to it. Free key, no card.

By Madhushan, Founder & Lead Developer ·

In one line: the market rate is stamped every minute and cached for 60 seconds, so what you get is at most about two minutes old and usually under one. No ticks, no streaming, no bid/ask. The official central-bank rates beside it are daily by design. Get a free key — no card.

Real-Time Exchange Rate API: What "Real-Time" Means Here

Most exchange rate APIs say "real-time" and leave you to guess whether that is one second, one minute or one hour. This page gives the measured answer for AllRatesToday, shows how to check it from your own code, and says plainly where the line is.

Measured, not claimed

Each rate in a response carries a time field: the minute the upstream mid-market rate was stamped. Sampling USD→EUR every 20 seconds shows the stamp advancing by exactly one minute at a time:

# Seven calls, 20 seconds apart, 2026-11-02 12:05–12:07 UTC
12:05:17  {"rate":0.89214,  "time":"2026-11-02T12:04:01+0000"}
12:05:38  {"rate":0.89214,  "time":"2026-11-02T12:04:01+0000"}
12:05:58  {"rate":0.89214,  "time":"2026-11-02T12:05:01+0000"}
12:06:19  {"rate":0.89214,  "time":"2026-11-02T12:05:01+0000"}
12:06:39  {"rate":0.89214,  "time":"2026-11-02T12:05:01+0000"}
12:07:00  {"rate":0.892021, "time":"2026-11-02T12:06:01+0000"}
12:07:20  {"rate":0.892021, "time":"2026-11-02T12:06:01+0000"}

Two things set the freshness you will see:

SourceUpdatesWorst case behind the marketTypical
Mid-market rate (/api/v1/rates)Every minute, including weekendsAbout 2 minutesUnder 1 minute
Central bank and tax authority tablesOnce per publication day, at the bank's own timeMinutes after the bank publishesSame
Daily reference rate (16:00 London)Once a dayn/a, a daily figuren/a

Check it live

This box calls the same rate endpoint from your browser and shows how old the stamp is. It refreshes every 90 seconds.

USD → EUR …
Rate stamped …
Age when you read this …

What real-time does not mean here

You getYou do not get
A one-minute mid-market snapshot over RESTTick-by-tick or sub-second updates
Pull on your schedule, up to once a minute per pairWebSocket or push streaming
One mid rate per pairBid/ask, spreads or dealable quotes
Daily history and series (paid)Intraday candles or order-book data

If your application prices goods, converts at checkout, revalues balances, drives a dashboard or fires an alert when a pair crosses a level, a one-minute rate is real-time for that job. If it executes trades on the quote it receives, you need a broker or market-data feed, and the real-time forex API ranking names who provides that.

Using it

curl "https://allratestoday.com/api/v1/rates?source=USD&target=EUR" \
  -H "Authorization: Bearer art_live_your_key"

Poll once a minute. Calls inside the same minute return the same stamped rate, so a faster loop only spends quota. Put several targets in one call when you need a board of pairs.

// Refresh a price display once a minute. Polling faster than that
// returns the same minute's rate, so it only spends your quota.
async function tick() {
  const r = await fetch('https://allratestoday.com/api/v1/rates?source=USD&target=EUR', {
    headers: { Authorization: 'Bearer ' + process.env.ALLRATES_API_KEY },
  });
  const [{ rate, time }] = await r.json();
  console.log(rate, 'as of', time);
}
tick();
setInterval(tick, 60_000);

The SDKs for JavaScript, Python, PHP, Go and Rust wrap the same call, and the playground runs it in the browser with your key.

When the upstream feed fails

A real-time API is only useful if it tells you when it is not. If the upstream source is unreachable, the API keeps serving the last good rate for up to seven days and flags it:

// If the upstream feed is unreachable the API keeps answering from the last
// good rate and says so, instead of returning an error or a silent old number.
[{ "rate": 0.89214, "source": "USD", "target": "EUR",
   "time": "2026-11-02T12:06:01+0000",
   "stale": true, "as_of": "2026-11-02T12:06:01+0000",
   "note": "last good market rate; upstream unavailable" }]

Treat stale: true however your application needs: show it, hold the price, or fall back to the day's official rate. Incidents and uptime are on the status page, and the hourly benchmark measures latency and freshness of the keyless endpoints in public.

The daily rates beside it

Tax, customs, accounting and contracts usually cite the rate a central bank published for the day, not the market rate at a given minute. The same API serves the latest table from 123 central banks and 4 tax authorities with no key, each response carrying the publication date, a stale flag when a bank is behind its own schedule, and the UTC time by which the next table normally appears.

curl "https://allratestoday.com/api/open/central-bank/ecb"

Which rate to use when is covered in official vs market rate.

Frequently asked questions

How real-time is the exchange rate API?

The mid-market rate is stamped once per minute and each pair is cached at the edge for 60 seconds. A response is therefore never more than about two minutes behind the market and is usually under one minute. Every rate carries a time field so you can check this yourself.

Is it tick-by-tick or streaming?

No. There is no WebSocket, no push feed and no bid/ask. The rate is a one-minute mid-market snapshot over REST. That is enough for pricing, checkout, invoices, dashboards and alerts; it is not enough for execution or high-frequency strategies.

Do the rates update at weekends?

The mid-market feed keeps stamping rates at weekends, but the market is thin then and the rate moves little between Friday evening and Sunday evening. Official central-bank rates do not update at weekends because the banks do not publish then.

How often should I poll?

Once a minute per pair. Calls inside the same minute return the same stamped rate, so a shorter interval only uses quota. Several targets can go in one call with target=EUR,GBP,JPY.

What happens if the upstream feed goes down?

The API serves the last good rate for up to seven days and marks it with stale: true, an as_of timestamp and a note. You get a number you can reason about rather than an error or an old value pretending to be current.

Are the central-bank rates real-time too?

No, and they should not be. A central bank publishes one table a day at a fixed time and never revises it. The API serves that table within minutes of publication and returns an available_by_utc field so you know when to expect the next one.

Is the real-time rate on the free plan?

Yes. The free key gets the same one-minute mid-market rate as paid plans. Paid plans add commercial use, more requests, dated history and time series.

Try the real-time rate

Free key in 30 seconds. One-minute mid-market rates on 160+ currencies, no credit card.

Get a free API key Read the docs