API курсу НБУ для Python: офіційний курс на дату у скрипті
Оновлено 26.09.2026
Офіційний курс НБУ на будь-яку дату в Python отримується одним запитом `requests.get` до `https://dani.initask.com/v1/rates` з параметрами `date` і `cur`. Відповідь приходить у JSON: дата курсу, базова валюта і список курсів, де кожен курс подано за одну одиницю валюти. Архів доступний з 1996-01-06, тож скрипт може рахувати і поточні операції, і історичні звіти.
Приклад
```python import os, requests
r = requests.get( "https://dani.initask.com/v1/rates?date=2026-09-25&cur=USD,EUR", headers={"Authorization": f"Bearer {os.environ['INITASK_KEY']}"}, timeout=10, ) body = r.json() print(r.headers["X-RateLimit-Remaining"], body["data"]) ```
Ключ береться зі змінної середовища, у коді його немає. Без ключа працює анонімний доступ на 100 запитів на добу з однієї IP-адреси. Таймаут у десять секунд захищає від зависання скрипта, коли мережа поводиться дивно.
Як розібрати відповідь
Усередині відповіді лежать дата курсу, базова валюта (завжди гривня) і список курсів. Кожен елемент списку містить буквений код валюти, її назву, курс у гривнях за одиницю і цифровий код. Для прикладу на 2026-09-25 скрипт отримає євро за 51.122 і долар США за 44.9729 гривні.
Зручно одразу перетворити список на словник з буквеним кодом як ключем. Тоді курс долара береться одним зверненням за кодом, і не треба щоразу шукати потрібну валюту в списку.
Курс завжди подано за одну одиницю, навіть для єни і форинта. Додатково ділити нічого не треба: те, що НБУ для деяких валют публікує курс за кілька одиниць, шлюз уже врахував.
Параметри
| Параметр | Обовʼязковий | Опис |
|---|---|---|
| date | ні | дата у форматі YYYY-MM-DD, від 1996-01-06 до завтра; без параметра береться сьогодні за Києвом |
| cur | ні | коди валют ISO 4217 через кому, до 20 кодів; без параметра повертаються всі валюти |
Якщо скрипту потрібні лише долар і євро, передавайте їх у `cur`: відповідь буде коротшою, а розбір простішим.
Помилки, які варто обробити
| Код | Коли | Що робити у скрипті |
|---|---|---|
| 400 | дата у форматі, відмінному від YYYY-MM-DD, або поза межами | виправити формат дати, повтор не допоможе |
| 404 | на дату немає курсів або серед них немає запитаних валют | перевірити код валюти або дочекатися публікації |
| 429 | вичерпано ліміт | зачекати час із заголовка Retry-After і повторити |
Окремий випадок 404 стосується завтрашньої дати. НБУ встановлює курс на наступний робочий день близько 15:30 за Києвом. Скрипт, який запускається раніше і питає завтрашній курс, отримає 404, і це нормальна відповідь: курсу ще немає. Плануйте такі запуски на пізніший час.
Звіт за період: як не витратити ліміт
Для звіту за місяць потрібен курс на кожен день. Найпростіше пройти всі дати циклом і зберегти результати у файл або базу. Курс на минулу дату не змінюється, тому зберігайте його назавжди і більше не запитуйте. На нашому боці курс на минулу дату тримається в кеші добу, на сьогодні і завтра 10 хвилин.
Корисна звичка для таких скриптів: перед запуском перевіряти, які дати вже є у вашому сховищі, і запитувати лише відсутні. Так щоденний запуск робить один-два запити, а історія наповнюється сама.
Ліміти
| План | Запитів | Ціна, грн на місяць |
|---|---|---|
| Безкоштовний | 100 на добу | 0 |
| Старт | 10000 на місяць | 990 |
| Про | 100000 на місяць | 2990 |
Для курсів безкоштовного ліміту вистачає більшості скриптів, якщо зберігати відповіді у себе. Поточний залишок видно в заголовку `X-RateLimit-Remaining`, момент скидання у `X-RateLimit-Reset`.
Джерело
Національний банк України: архів kurs.initask.com з 2020 року, раніші дати напряму з bank.gov.ua. Скрипту не треба знати, звідки саме прийшов курс: формат відповіді однаковий для всього архіву.
Що робити
- Запустіть приклад і перевірте курс на знайому вам дату.
- Перетворіть список курсів на словник за буквеним кодом валюти.
- Додайте обробку 400, 404 і 429 за таблицею вище.
- Для звітів зберігайте курси минулих дат у себе і запитуйте лише відсутні.
- Повний опис полів дивіться в документації курсу НБУ, тарифи на сторінці Ціни і ліміти.
Питання і відповіді
Як отримати курс НБУ на Python?
Зробіть requests.get до https://dani.initask.com/v1/rates з параметрами date у форматі YYYY-MM-DD і cur з кодами валют. Відповідь у JSON містить курс за одну одиницю кожної валюти.
Чому API повертає 404 для завтрашньої дати?
НБУ встановлює курс на наступний робочий день близько 15:30 за Києвом. До цього часу курсу на завтра ще немає, і відповідь 404 означає саме це.
Як часто можна запитувати курс?
Без ключа 100 запитів на добу з однієї IP-адреси. Курс на минулу дату не змінюється, тому його варто зберігати і не запитувати повторно.