Официальные курсы валют Центрального банка Российской Федерации (ЦБ РФ) являются основным эталоном для бухгалтерского учета, налогового учета, таможенного оформления и расчетов по валютным контрактам на территории России. Понимание того, как получить доступ к архивам курсов валют, автоматизировать их загрузку и правильно интерпретировать данные — критически важный навык для финансистов, бухгалтеров, разработчиков и аналитиков;
В этой статье мы подробно разберем структуру архивов ЦБ РФ, способы доступа (веб-интерфейс, API, файлы), форматы данных, нюансы работы с выходными днями и праздниками, а также дадим практические примеры интеграции.
Что такое архив курсов валют ЦБ РФ?
Архив курсов валют — это историческая база данных официальных курсов иностранных валют по отношению к рублю Российской Федерации, устанавливаемых ЦБ РФ ежедневно (в рабочие дни).
Ключевые характеристики:
- Периодичность: Ежедневно в рабочие дни (исключения — выходные и праздничные дни по производственному календарю РФ).
- Время публикации: Обычно курсы на «завтра» публикуются в 13:00–14:00 МСК текущего дня. Курсы на «сегодня» устанавливаются на основе торгов вчерашнего дня.
- Юридическая сила: Официальные курсы обязательны для расчетов по налогам, таможенным пошлинам, статистике и отчетности, если иное не предусмотрено договором сторон.
- Глубина архива: Данные доступны с 1992 года (с введения новой валюты РФ).
Структура данных курса:
- Цифровой код валюты (ISO 4217 Num): Например, 840 для USD, 978 для EUR, 156 для CNY.
- Буквенный код (ISO 4217 Alpha): USD, EUR, CNY, TRY и т.д.
- Номинал: Количество единиц валюты (1, 10, 100, 1000), за которое устанавливается курс. Важно: курс всегда указывается за номинал.
- Название валюты: На русском языке.
- Курс: Значение в рублях за указанный номинал (с 4 знаками после запятой до 2018 года, с 2018 года — с 4 знаками, но для расчетов часто округляют до 2 или 4).
Способы доступа к архивам
ЦБ РФ предоставляет несколько каналов получения данных: от ручного просмотра на сайте до машинно-читаемых API для автоматизации.
Веб-интерфейс (Ручное получение)
Самый простой способ — раздел «Курсы валют» на официальном сайте cbr.ru.
- Адрес: https://cbr.ru/currency_base/daily/ (текущие курсы)
- Архив: https://cbr.ru/currency_base/dynamics/ (динамика курсов за период)
Функционал: выбор диапазона дат, выбор конкретной валюты, экспорт в Excel (XLS) или печать. Подходит для разовых проверок и ручной выгрузки небольших объемов.
XML API (Основной способ автоматизации)
Это стандарт де-факто для интеграции в 1С, ERP-системы, сайты и боты. Данные отдаются в формате XML по HTTP/HTTPS.
Ежедневные курсы (Daily):
https://www.cbr.ru/scripts/XML_daily.asp?date_req=DD/MM/YYYY - Параметр
date_req— обязателен для архива. Формат: день/месяц/год (например, ). - Если параметр не указан, возвращаются курсы на текущую дату (или последнюю рабочую).
- Кодировка ответа: windows-1251 (важно для парсеров!).
Динамика курсов за период (Dynamic):
https://www.cbr.ru/scripts/XML_dynamic.asp?date_req1=DD/MM/YYYY&date_req2=DD/MM/YYYY&VAL_NM_RQ=CODE date_req1— начальная дата.date_req2— конечная дата.VAL_NM_RQ— цифровой код валюты (ISO Num), напримерR01235для USD,R01239для EUR. Внимание: Это внутренние коды ЦБ (R01…), а не стандартные ISO 4217. Их список можно получить черезXML_valFull.asp.
Справочник валют (ValFull):
https://www.cbr.ru/scripts/XML_valFull.asp Возвращает полный список валют с их внутренними кодами (ID), номиналами и названиями. Необходим для маппинга ISO-кодов на внутренние коды ЦБ при работе с XML_dynamic.
JSON API (Современный альтернативный формат)
ЦБ РФ постепенно внедряет поддержку JSON. На данный момент стабильно работает эндпоинт для ежедневных курсов:
https://www.cbr-xml-daily.ru/daily_json.js Примечание: Этот хост (cbr-xml-daily.ru) является неофициальным, но давно работающим прокси-сервисом, преобразующим официальный XML ЦБ в удобный JSON. Официальный сайт ЦБ (cbr.ru) также начал отдавать JSON по аналогичным путям, но cbr-xml-daily.ru остается стандартом индустрии из-за стабильности и CORS-заголовков.
Пример структуры JSON:
{
"Date": "2026-06-10T00:00:00+03:00",
"PreviousDate": "2026-06-09T00:00:00+03:00",
"Timestamp": "2026-06-09T13:00:00+03:00",
"Valute": {
"USD": {
"ID": "R01235",
"NumCode": "840",
"CharCode": "USD",
"Nominal": 1,
"Name": "Доллар США",
"Value": 71.7300,
"Previous": 71.3700
},
...
}
} Файловые выгрузки (CSV/XLS) для массовой загрузки
Для загрузки больших массивов данных (например, за 10 лет по всем валютам) удобнее использовать готовые файлы.
- На странице динамики (
currency_base/dynamics) есть кнопка «Excel» — формирует XLS за выбранный период. - Существуют сторонние агрегаторы (например,
cbr.ru/statisticsили репозитории на GitHub), где выложены готовые CSV/Parquet датасеты за всю историю.
Нюансы и «подводные камни» работы с архивом
Выходные и праздничные дни
Правило: Курс на нерабочий день (суббота, воскресенье, праздник) равен курсу на предыдущий рабочий день.
- В XML/JSON API за нерабочие дни данные могут отсутствовать (тег
Valuteне будет содержать запись за эту дату в динамике, или daily-запрос вернет курсы на последнюю рабочую дату). - При расчетах за период необходимо «пробрасывать» последний известный курс вперед до следующего рабочего дня.
Изменение номенала и деноминации
Иногда ЦБ меняет номинал валюты (например, был 1000, стал 1 после деноминации в стране-эмитенте, как было с белорусским рублем BYR -> BYN или турецкой лирой).
- В архиве это отражается как смена поля
Nominal. - При построении графиков или расчете доходности обязательно нормализуйте курс к 1 единице валюты (Value / Nominal).
Кодировка Windows-1251
Официальный XML API ЦБ (cbr.ru/scripts/...) отдает данные в кодировке windows-1251.
- Современные библиотеки (Python requests, Node.js fetch, Go http) по умолчанию ожидают UTF-8.
- Необходимо явно указать декодирование:
response.encoding = 'windows-1251'(Python) или использоватьiconv-lite(Node.js). Иначе кириллица в названиях валют превратится в «кракозябры».
Внутренние коды валют (R01XXX) vs ISO
Для запроса динамики (XML_dynamic) нужен именно внутренний код (например, R01235 для USD).
- Не хардкодьте их в коде — они могут меняться (редко, но бывает при введении новых валют).
- Всегда качайте
XML_valFull.aspпри старте приложения и строим мапу:CharCode (USD) -> ID (R01235).
Точность и округление
- Официально курс публикуется с 4 знаками после запятой.
- Для налогового и бухгалтерского учета используется именно это значение (или пересчет по курсу ЦБ на дату операции).
- В JSON (
cbr-xml-daily.ru) полеValueуже приходит как число (float) с 4 знаками.
Практические примеры интеграции
Пример 1: Python (получение курса USD на конкретную дату)
import requests
import xml.etree.ElementTree as ET
from datetime import datetime
def get_usd_rate(date_str: str) -> float:
# date_str в формате 'DD/MM/YYYY'
url = f"https://www.cbr.ru/scripts/XML_daily.asp?date_req={date_str}"
response = requests.get(url)
# Критически важно: ЦБ отдает windows-1251
response.encoding = 'windows-1251'
root = ET.fromstring(response.text)
# Ищем валюту с ID="R01235" (USD)
for valute in root.findall('Valute'):
if valute.get('ID') == 'R01235':
value_str = valute.find('Value').text.replace(',', '.')
nominal = int(valute.find('Nominal').text)
return round(float(value_str) / nominal, 4)
raise ValueError("USD not found")
rate = get_usd_rate("")
print(f"Курс USD на : {rate} RUB") Пример 2: JavaScript / Node.js (использование JSON API)
const fetch = require('node-fetch'); // или нативный fetch в Node 18+
async function getRateJSON(date) {
// cbr-xml-daily.ru поддерживает историю через параметр date (YYYY-MM-DD)
// Официальный API ЦБ для JSON истории может отличаться, проверяйте актуальность.
const url = `https://www.cbr-xml-daily.ru/archive/${date.split('-').reverse.join('/')}/daily_json.js`;
// Либо для актуальных: https://www.cbr-xml-daily.ru/daily_json.js
try {
const res = await fetch(url);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data = await res.json;
return data.Valute.USD.Value; // Уже нормализовано за номинал
} catch (e) {
console.error("Ошибка загрузки курса:", e);
return null;
}
}
// Пример: 2026-06-10
getRateJSON('2026-06-10').then(rate => console.log(`USD: ${rate} RUB`)); Пример 3: 1С:Предприятие 8.3 (стандартная обработка)
В 1С есть встроенные механизмы. Обычно используеться обработка «Загрузка курсов валют из Интернета» (входит в поставку типовых конфигураций ERP, КА, БП 3.0).
- Адрес загрузки:
https://www.cbr.ru/scripts/XML_daily;asp - Метод:
ЧтениеXML. - Важно: В настройках ИБ проверить, что используется кодировка UTF-8, а при чтении XML указать кодировку «Windows-1251».
Альтернативные источники и резервные каналы
Хотя ЦБ РФ — первичный источник, для высоконагруженных систем рекомендуется иметь зеркала:
| Источник | Формат | Особенности |
|---|---|---|
| cbr.ru (Официальный) | Первичный источник, высокая надежность, но строгие лимиты по запросам (DDoS-защита). | |
| cbr-xml-daily.ru | JSON, JS | Популярное неофициальное зеркало, CORS enabled, удобный JSON, архив по датам в URL. |
| bank.gov.ua / nbrb.by / api.exchangerate;host | JSON | Агрегаторы, тянущие данные из ЦБ РФ. Хороши для кросс-чека. |
| Московская биржа (MOEX ISS) | JSON, CSV | Рыночные курсы (торговые), отличаются от официальных ЦБ. Используются для трейдинга, не для учета. |
Чек-лист для разработчика: правильная интеграция
- Кэширование: Не опрашивайте API ЦБ при каждом запросе пользователя. Курсы меняются 1 раз в день. Кэшируйте на 24 часа (или до 14:00 МСК следующего дня).
- Обработка ошибок: Реализуйте ретраи (exponential backoff) при 5xx ошибках или тайаутах.
- Fallback: При недоступности основного API переключайтесь на зеркало (
cbr-xml-daily.ru) или используйте последнее успешно загруженное значение из БД. - Валидация: Проверяйте, что дата в ответе совпадает с запрашиваемой (или является последней рабочей).
- Логирование: Логируйте дату запроса, источник, полученный курс USD/EUR/CNY для аудита.
- Тестирование на праздниках: Проверьте логику за майские/новогодние каникулы (10 дней без обновлений).
Актуальные примеры из недавней практики (Июнь 2026)
Исходя из доступных данных за июнь 2026 года, можно проследить динамику:
- 29 мая: Курс доллара установлен на уровне 71,37 руб.
- 2 июня: Курс евро установлен на уровне 86,24 руб. (рост на 3,61 руб. по сравнению с 30 мая — 82,63 руб.).
- 9 июня: Рубль демонстрирует уверенный рост. Пара CNY/RUB на Мосбирже упала до 10,55.
- 10 июня: Курс доллара установлен на уровне 71,73 руб.
Примечание: Курсы ЦБ РФ и биржевые котировки (Мосбиржа) могут отличаться. Официальный курс ЦБ используется для отчетности, биржевой — для реальных конвертаций и трейдинга.
Архивы валют ЦБ РФ — это фундаментальный ресурс для финансовой инфраструктуры страны. Грамотная работа с ними требует понимания:
- Разницы между официальным курсом (для учета) и рыночным (для торговли).
- Технических особенностей API: кодировки Windows-1251, внутренних кодов валют R01XXX, логики выходных дней.
- Необходимости кэширования и наличия резервных каналов получения данных.
Использование современного JSON-интерфейса (cbr-xml-daily.ru) значительно упрощает разработку по сравнению с парсингом XML, однако для критически важных систем (банковский софт, госотчетность) рекомендуется дублировать запрос к официальному XML API ЦБ РФ для гарантии юридической значимости полученных данных.
Статья подготовлена на основе документации ЦБ РФ и практики интеграции финансовых систем. Актуально на 10 июля 2026 г.