Free Central Bank Rates API
Policy rates for 49 economies from the BIS dataset. Latest level per country plus full daily history back decades. Updated daily.
Endpoints
/api/markets/ratesLatest rate per country with last-change date.
/api/markets/rates/{country}?from=YYYY-MM-DDFull daily history for one country (us, xm, gb, jp...).
/api/markets/rates/csvAll rate-change events as CSV.
Example
import requests
r = requests.get("https://xoomar.com/api/markets/rates/us", params={"from": "2020-01-01"})
changes = [d for d in r.json()["data"] if d["changed"]]
print(f"{len(changes)} Fed moves since 2020")Response Shape
Every endpoint returns the same JSON envelope: { data, updatedAt, source, docs }. The data field is an array of records with these fields:
| Field | Type | Description |
|---|---|---|
| countryCode | string | ISO-ish BIS area code (US, XM = euro area, GB...) |
| country | string | Economy name |
| date | string (date) | Observation date |
| rate | string | Policy rate, percent per year |
| changed | boolean | True on days the rate moved (history endpoint) |
| lastChanged | string | null | Date of the most recent move (hub endpoint) |
History endpoints return newest first. The euro area is one entry (XM) covering all eurozone members.
Numeric values arrive as strings where precision matters (prices, rates); parse with your language's decimal type for accounting-grade math. Rate limiting is fair-use per IP; a 429 response includes a Retry-After header. No authentication or API key needed. Attribution is appreciated: xoomar.com/markets.
Need more headroom? A free account raises your limit to 120 requests a minute with an X-API-Key header.
Frequently Asked Questions
Where does the data come from?
How much history is there?
How do I get just the rate decisions?
What are the rate limits?
Data on this page is provided for informational purposes only and is not financial advice. See our editorial policy.