CBR-XML-Daily (Bank of Russia rates) API
Free JSON feed of the Bank of Russia official RUB exchange rate fixing, with the previous day's rate on every currency. No key, permissive CORS, tested example included.
Endpoint tested and returned HTTP 200 on 21 Aug 2026
What is the CBR-XML-Daily (Bank of Russia rates) API?
CBR-XML-Daily republishes the Bank of Russia's official daily exchange rate fixing as JSON at a stable URL, with no key and no registration. Each currency carries its nominal, today's rouble value and the previous published value.
The Bank of Russia itself publishes only XML, from an endpoint that in practice refuses TLS connections from much of the world. This mirror solves both problems: it converts the same fixing to JSON, sends permissive CORS headers, and keeps a dated archive at predictable URLs. It is a community project rather than an official channel, and you should say so wherever the number is shown to users.
Two details make this feed unusually convenient. Every currency object carries `Previous` alongside `Value`, so a day-on-day change needs no second request and no local state. And `PreviousURL` points at the archived file for the prior publication, which turns backfilling a history into a walk down a linked list rather than a date-arithmetic exercise over weekends and Russian holidays.
Quick facts
- Base URL
https://www.cbr-xml-daily.ru- Authentication
- No key or registration. This is an unofficial mirror of the Bank of Russia fixing, not a Bank of Russia service — attribute it as such.
- Rate limit
- No published limit. The file changes once per working day; cache it and honour the returned `Timestamp`.
- Pricing
- Free.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the CBR-XML-Daily (Bank of Russia rates) API
Every request below was executed against the live API on 21 Aug 2026, and the response shown is the real body it returned — not an illustration.
1. Today's official RUB fixing for every quoted currency
GET https://www.cbr-xml-daily.ru/daily_json.js
curl 'https://www.cbr-xml-daily.ru/daily_json.js'const res = await fetch("https://www.cbr-xml-daily.ru/daily_json.js");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://www.cbr-xml-daily.ru/daily_json.js", timeout=20)
res.raise_for_status()
print(res.json()){
"Date": "2026-08-21T11:30:00+03:00",
"PreviousDate": "2026-08-20T11:30:00+03:00",
"PreviousURL": "//www.cbr-xml-daily.ru/archive/2026/08/20/daily_json.js",
"Timestamp": "2026-08-20T20:00:00+03:00",
"Valute": {
"AUD": {
"ID": "R01010",
"NumCode": "036",
"CharCode": "AUD",
"Nominal": 1,
"Name": "Австралийский доллар",
"Value": 59.3154,
"Previous": 60.1864
},
"AZN": {
"ID": "R01020A",
"NumCode": "944",
"CharCode": "AZN",
"Nominal": 1,
"Name": "Азербайджанский манат",
"Value": 49.0324,
"Previous": 50.0761
},
"DZD": {
"ID": "R01030",
"NumCode": "012",
"CharCode": "DZD",
"Nominal": 100,
"Name": "Алжирских динаров",
"Value": 62.7817,
"Previous": 64.0566
},
"GBP": {
"ID": "R01035",
"NumCode": "826",
"CharCode": "GBP",
"Nominal": 1,
"Name": "Фунт стерлингов",
"Value": 113.4295,
"Previous": 115.2906
},
"AMD": {
"ID": "R01060",
"NumCode": "051",
"CharCode": "AMD",
"Nominal": 100,
"Name": "Армянских драмов",
"Value": 22.8207,
"Previous": 23.3257
},
"BHD": {
"ID": "R01080",
"NumCode": "048",
"CharCode": "BHD",
"Nominal": 1,
"Name": "Бахрейнский динар",
"Value": 221.6409,
"Previous": 226.3588
},
"BYN": {
"ID": "R01090B",
"NumCode": "933",
"CharCode": "BYN",
"Nominal": 1,
"Name": "Белорусский рубль",
"Value": 27.9443,
"Previous": 28.1103Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
(none) | path | Optional | `/daily_json.js` takes no parameters. Dated archives live at `/archive/YYYY/MM/DD/daily_json.js`. |
archive path | path | Optional | Follow `PreviousURL` from any response to reach the previous publication without doing date arithmetic. /archive/2026/08/20/daily_json.js |
Response fields
Datestring- The date the rates take effect, with a +03:00 Moscow offset.
PreviousDate / PreviousURLstring- Timestamp and archive URL of the preceding publication.
Timestampstring- When the Bank of Russia generated this fixing.
Valuteobject- Map keyed by ISO code rather than an array, so `Valute.USD` addresses a currency directly.
Valute.*.Nominalinteger- Units the rate applies to — 1, 10, 100 or 1000. The Algerian dinar is quoted per 100.
Valute.*.Valuenumber- Roubles per `Nominal` units. Divide by `Nominal` for a per-unit rate.
Valute.*.Previousnumber- The same rate at the previous publication, for computing daily change without a second call.
What you can build with the CBR-XML-Daily (Bank of Russia rates) API
- Show the official RUB rate with its day-on-day movement in one request
- Backfill a rouble series by following `PreviousURL` backwards
- Convert rouble-denominated amounts in accounting exports
- Compare the official fixing against market quotes from an exchange API
Common errors and how to fix them
404 on an archive path
No fixing was published that day.
Fix: Weekends and Russian public holidays have no publication. Walk `PreviousURL` instead of constructing dates yourself.
Content-Type is application/javascript
The file is served with a JS content type for historical reasons.
Fix: The body is plain JSON. Parse it as JSON and ignore the header, or strip the check in strict HTTP clients.
Rate looks 100x too large
`Nominal` was ignored.
Fix: Divide `Value` by `Nominal`. Several currencies are quoted per 10, 100 or 1000 units.
CBR-XML-Daily (Bank of Russia rates) API — frequently asked questions
Is this the official Bank of Russia API?
No. It is a community mirror that republishes the Bank of Russia's official daily fixing as JSON, because the bank itself serves only XML from an endpoint that is frequently unreachable outside Russia. Credit the Bank of Russia as the source and the mirror as the transport.
How often does the Bank of Russia rate change?
Once per working day. The `Timestamp` field records when the fixing was generated and `Date` is the day it takes effect, typically the next business day.
Why are currency names in Russian?
The feed passes through the Bank of Russia's own Cyrillic labels. Use the `CharCode` key or the ISO code in `Valute` for anything programmatic and treat `Name` as display text only.
Can I call this from browser JavaScript?
Yes. The mirror returns a permissive Access-Control-Allow-Origin header, so a direct fetch from front-end code works without a proxy.
Tools that pair with this API
Percentage Change Calculator
Work out the percentage increase or decrease between an old and a new value. See the absolute change and whether it went up or down, instantly and privately.
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
Unit Converter
Convert between units of length, weight, temperature, area, volume, speed, time and data storage instantly, with a swap button and common conversion tables.
Alternatives to CBR-XML-Daily (Bank of Russia rates) API
If CBR-XML-Daily (Bank of Russia rates) does not fit, these finance & crypto apis cover similar ground. Every one was called before publishing, and each links to its own reference page with a working curl command and the response it returned.
| API | What it does | Auth | CORS | Last verified |
|---|---|---|---|---|
| CoinGecko | Free cryptocurrency price API covering 10,000+ coins. Live prices, market cap and volume in any currency, no API key on the public tier. Tested curl example. | No key | Yes | 19 Aug 2026 |
| Binance Public API | Binance public market data API needs no API key: live ticker prices, order books, klines and 24h stats for every trading pair. Tested curl example and response. | No key | Yes | 19 Aug 2026 |
| Coinbase Exchange Rates | Coinbase public exchange rates API with no key: convert any cryptocurrency to 100+ fiat currencies in a single request. Tested curl example and live JSON. | No key | Yes | 19 Aug 2026 |
| Frankfurter | Free currency exchange rate API with no key, built on European Central Bank data. Latest and historical rates, time series and conversion. Tested curl example. | No key | Yes | 19 Aug 2026 |
| CFPB Consumer Complaints | Free Consumer Financial Protection Bureau complaint database API with no key: millions of US consumer complaints by product, company, state and issue, with narratives. | No key | No | 21 Aug 2026 |
| CoinLore | Free cryptocurrency API with no key and no registration: prices, market cap, volume and supply for 10,000+ coins with generous limits. Tested curl example. | No key | Yes | 19 Aug 2026 |
CBR-XML-Daily (Bank of Russia rates) is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 21 Aug 2026; always check the official documentation before relying on this API in production, as terms and limits can change.