BYTETOOLS

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.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

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 2026-08-21, 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
curl 'https://www.cbr-xml-daily.ru/daily_json.js'
JavaScript (fetch)
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);
Python (requests)
import requests

res = requests.get("https://www.cbr-xml-daily.ru/daily_json.js", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "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.1103

Parameters

ParameterTypeRequiredDescription
(none)pathOptional`/daily_json.js` takes no parameters. Dated archives live at `/archive/YYYY/MM/DD/daily_json.js`.
archive pathpathOptionalFollow `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

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 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.