Forex API: Real-Time FX Rates for 160+ Currencies
Forex API with real-time mid-market FX rates for 160+ currencies, refreshed every 60 seconds, plus daily history and official central-bank fixings. REST + JSON/CSV/XML/XLSX, SDKs for JavaScript, Python, PHP, Go and Rust. Free key, no card.
Forex API — Real-Time FX Rates, History and Official Fixings
The AllRatesToday forex API returns the mid-market rate for any pair of 160+ currencies, the rate on a past date, a daily time series, and the rate a central bank published for a given day. The responses are flat JSON, or CSV, XML and Excel on the same URL, and there are official SDKs for JavaScript, Python, PHP, Go and Rust.
What the forex API returns, and what it does not
| You get | You do not get |
|---|---|
| Mid-market rates for 160+ currencies, any pair, any direction | Bid/ask spreads or dealable quotes |
A refresh every 60 seconds with a time field on every rate | Tick-by-tick streaming or a WebSocket feed |
| Rates on a date and daily series over the last 365 days (paid) | Intraday OHLC candles |
| Official fixings from 121 central banks and 3 tax authorities, keyless | Order books, volumes or futures |
| JSON, CSV, XML and XLSX from the same endpoints | Execution — this is data, not a broker |
That makes it the right fit for pricing, conversion, invoicing, reporting, dashboards and analytics on daily data. If you are building a trading engine that needs dealable quotes or sub-second ticks, you need a broker or market-data vendor instead, and this page will not pretend otherwise.
Quick start
- Create a free account and copy the key that begins with
art_live_. - Request one or several pairs in a single call:
curl "https://allratestoday.com/api/v1/rates?source=EUR&target=USD,GBP,JPY" \
-H "Authorization: Bearer art_live_your_key" [
{ "rate": 1.12145, "source": "EUR", "target": "USD", "time": "2026-10-19T14:27:01+0000" },
{ "rate": 0.84215, "source": "EUR", "target": "GBP", "time": "2026-10-19T14:27:01+0000" },
{ "rate": 177.675, "source": "EUR", "target": "JPY", "time": "2026-10-19T14:27:01+0000" }
]
One row per target, each with the rate and the minute it belongs to. Add &amount=10000
to have the API return the converted figure as well, and &format=csv for a file.
With the SDKs:
import AllRatesToday from '@allratestoday/sdk';
const fx = new AllRatesToday({ apiKey: process.env.ALLRATES_API_KEY });
// Latest FX rates, several pairs in one call
const { rates } = await fx.latest({ base: 'EUR', symbols: ['USD', 'GBP', 'JPY'] });
// Convert an amount at the live rate
const { result } = await fx.convert('EUR', 'USD', 10_000); from allratestoday import AllRatesToday
fx = AllRatesToday(api_key="art_live_your_key")
data = fx.latest(base="EUR", symbols=["USD", "GBP", "JPY"])
print(data["rates"]) # {'USD': 1.12145, 'GBP': 0.84215, 'JPY': 177.675}
quote = fx.convert("EUR", "USD", 10_000)
print(quote["result"], quote["rate"]) FX history and time series
A dated lookup returns the mid-market rate for that day; a range returns one row per day, ready for a chart or a month-end revaluation. History is on the paid plans and is metered by volume (one unit per currency per month of data), so a year of EUR/USD is twelve units, not 365 calls.
# One pair, one row per day (paid plans)
curl "https://allratestoday.com/api/v1/rates?source=EUR&target=USD&from=2026-09-01&to=2026-09-30" \
-H "Authorization: Bearer art_live_your_key"
# Or as a spreadsheet
curl "https://allratestoday.com/api/v1/rates?source=EUR&target=USD&from=2026-09-01&to=2026-09-30&format=xlsx" \
-H "Authorization: Bearer art_live_your_key" -o eurusd-september.xlsx Official fixings next to the market rate
Most forex APIs stop at the market rate. Finance teams also need the number a central bank published for the day, because that is the one tax, customs and audit rules cite. The same API serves the latest table from 121 central banks and 3 tax authorities with no key, and dated tables and history on the Official Rates plan.
# The ECB's daily fixing — no key
curl "https://allratestoday.com/api/open/central-bank/ecb"
Swap ecb for fed, boe, rbi, boj or
any code on the central bank rates API page. The
difference between the two numbers, and when each applies, is explained in
official vs market rate.
Endpoints
| Endpoint | Returns | Key |
|---|---|---|
/api/v1/rates?source=&target= | Live mid-market rate for one or many pairs; add amount to convert | Free |
/api/v1/rates?…&time=YYYY-MM-DD | The rate on a past date | Paid |
/api/v1/rates?…&from=&to= | Daily time series for one pair | Paid |
/api/v1/symbols | The 160+ supported currencies with names and symbols | Free |
/api/open/central-bank/{bank} | Latest official table from a central bank or tax authority | None |
/api/v1/central-bank/{bank}/history | Official rates back to the bank's first table | Official plan |
/api/open/geo | The caller's country and currency from their IP | None |
Every table endpoint accepts &format=json|csv|xml|xlsx. The full reference is in the
documentation and the OpenAPI spec; the
playground runs any of these in the browser with your key.
Free tier and plans
- Free: 300 requests, one-time, no card. Live rates, conversion and symbols. Personal and evaluation use.
- Small to Large: from €4.99 a month for 5,000 requests, commercial use, dated history and time series. See pricing.
- Official Rates: dated central-bank tables and full history for finance teams.
- Trial key for agents and scripts:
POST /api/agent/keysissues a 100-call, 7-day key without a signup form.
Uptime and latency are published on the status page and measured hourly on the live benchmark.
Choosing a forex API
The honest comparisons are on their own pages: what each free forex API tier really gives you, the real-time forex API ranking, and the best exchange rate APIs roundup across ten providers. Our own fit is above; if you need ticks or spreads, those pages name who does.
Frequently asked questions
Is this a real-time forex API?
Rates are mid-market and refresh every 60 seconds, and every response carries the time the rate belongs to. That is real-time for pricing, conversion, dashboards and reporting. It is not a tick feed: there is no streaming connection and no bid/ask or order-book data.
Is there a free forex API tier?
Yes. A free key comes with 300 requests (one-time, non-commercial) and no credit card. Live rates and conversion work on the free plan; dated history and time series need a paid plan, from €4.99 a month.
Which currencies does the forex API cover?
Over 160 currencies, every pair in either direction, with the list available from /api/v1/symbols. Official central-bank tables add the currencies each bank publishes, including some that have no liquid market quote.
How far back does FX history go?
Market-rate history is available by date or as a daily series over the last 365 days on paid plans. Official central-bank history goes much further: the ECB reference rate back to 1999, for example.
What is the difference between the forex rate and the official rate?
The forex rate is what the market trades at now; it moves all day. The official rate is the figure a central bank publishes once a day and never revises. Pricing uses the first; tax, customs, accounting and contracts usually cite the second. The API returns both.
Can I use the forex API from a browser?
The keyed market-rate endpoints do not send CORS headers, so call them from your server. The keyless official-rate endpoints are CORS-open and can be fetched directly from a web page.
Start with the forex API
Free key in 30 seconds. 160+ currencies, 60-second refresh, no credit card.
Get a free API key Read the docs