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.

By Madhushan, Founder & Lead Developer

In one line: one REST endpoint for live mid-market FX rates on 160+ currencies, refreshed every 60 seconds and timestamped, with daily history on paid plans and the official central-bank fixings keyless. Get a 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 getYou do not get
Mid-market rates for 160+ currencies, any pair, any directionBid/ask spreads or dealable quotes
A refresh every 60 seconds with a time field on every rateTick-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, keylessOrder books, volumes or futures
JSON, CSV, XML and XLSX from the same endpointsExecution — 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

  1. Create a free account and copy the key that begins with art_live_.
  2. 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

EndpointReturnsKey
/api/v1/rates?source=&target=Live mid-market rate for one or many pairs; add amount to convertFree
/api/v1/rates?…&time=YYYY-MM-DDThe rate on a past datePaid
/api/v1/rates?…&from=&to=Daily time series for one pairPaid
/api/v1/symbolsThe 160+ supported currencies with names and symbolsFree
/api/open/central-bank/{bank}Latest official table from a central bank or tax authorityNone
/api/v1/central-bank/{bank}/historyOfficial rates back to the bank's first tableOfficial plan
/api/open/geoThe caller's country and currency from their IPNone

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

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