API ЄДРПОУ для Python: картка компанії з ЄДР у скрипті
Оновлено 26.09.2026
Отримати картку компанії з ЄДР у Python можна одним запитом `requests.get` до `https://dani.initask.com/v1/company/{edrpou}`. Відповідь приходить у JSON з полями `ok`, `data` і `error`: назва, стан, керівник, засновники, бенефіціари. Нижче робочий приклад, обробка помилок і лімітів, а також порада, як пройти список кодів з таблиці.
Мінімальний приклад
```python import os, requests
r = requests.get( "https://dani.initask.com/v1/company/00032129", headers={"Authorization": f"Bearer {os.environ['INITASK_KEY']}"}, timeout=10, ) body = r.json() print(r.headers["X-RateLimit-Remaining"], body["data"]) ```
Ключ береться зі змінної середовища `INITASK_KEY`, а не пишеться в коді: так він не потрапить у репозиторій. Без ключа працює і анонімний доступ, 100 запитів на добу з однієї IP-адреси, для перших експериментів цього досить. Параметр `timeout=10` обовʼязковий у будь-якому скрипті: без нього зависле зʼєднання тримає скрипт нескінченно.
Що лежить у data
Код 00032129 з прикладу належить АТ «Ощадбанк». Усередині відповіді прийдуть код, повна і скорочена назва, організаційно-правова форма, стан латиницею і українською, дата реєстрації, статутний капітал, керівник і підписанти, засновники, кінцеві бенефіціарні власники, відокремлені підрозділи, відомості про припинення і банкрутство, дата оновлення запису і посилання на сторінку компанії. Для аналітики найчастіше потрібні стан, дата реєстрації і капітал, для перевірки контрагента ще й підписанти з бенефіціарами.
Поле `capital` приходить рядком так, як записано в реєстрі, з комою як десятковим роздільником. Перед обчисленнями замініть кому на крапку і перетворіть на число. Підписанти, засновники, бенефіціари і підрозділи приходять списками рядків, навіть коли там один запис або жодного, тож у коді їх варто одразу обробляти як списки.
Обробка помилок
Скрипт має розрізняти три ситуації: відповідь по суті, помилку вхідних даних і вичерпаний ліміт. Кожна з них потребує своєї реакції, і змішувати їх в один загальний перехоплювач помилок не варто.
| Код | Помилка | Коли |
|---|---|---|
| 400 | bad_request | код містить не лише цифри або має більше 8 знаків |
| 404 | not_found | компанії з таким кодом у реєстрі немає |
| 429 | ліміт | після вичерпання ліміту, з заголовком Retry-After |
На 400 немає сенсу повторювати запит: код неправильний, і його треба виправити в джерелі. На 404 запишіть код у список ненайдених і рухайтесь далі. На 429 прочитайте `Retry-After`, зачекайте стільки секунд і повторіть той самий запит.
Короткий код з 5-7 цифр шлюз доповнює нулями зліва сам. Якщо коди в таблиці зберігались як числа і загубили нулі на початку, окремо дописувати їх не потрібно.
Як будувати скрипт, щоб він не ламався
Скрипти для роботи з реєстром зазвичай живуть довго і запускаються без нагляду: щоночі, щотижня, перед звітом. Тому варто одразу закласти кілька звичок. Записуйте в журнал кожен код, на якому сталася помилка, разом з кодом відповіді. Зберігайте сирі відповіді у файл поруч з результатом: якщо колонка в таблиці виглядає дивно, ви завжди зможете подивитись, що саме повернув реєстр. Не падайте на першій помилці: один неправильний код у таблиці на тисячу рядків не повинен зупиняти обробку решти.
Окрема порада щодо дат. Поле дати реєстрації приходить у форматі рік, місяць, день, а поле оновлення містить ще й час. Для таблиць зручно одразу перетворити їх на дату без часу.
Пакетна обробка списку кодів
Типова задача аналітика: є таблиця з кодами клієнтів, треба додати колонки з назвою і станом. Схема проста. Читаєте коди з файлу, для кожного робите запит, результат складаєте у новий файл. Перед кожним запитом дивіться на `X-RateLimit-Remaining` з попередньої відповіді: коли залишок наближається до нуля, скрипт зупиняється акуратно і записує, на якому коді закінчив. Наступного запуску він продовжить з цього місця.
Шлюз тримає відповідь у кеші 60 хвилин, тож повторний запуск по тих самих кодах протягом години працює швидше. Проте кожен запит усе одно рахується в ліміт, тому дублікати кодів краще прибрати до запуску.
Ліміти для скриптів
| План | Запитів | Ціна, грн на місяць |
|---|---|---|
| Безкоштовний | 100 на добу | 0 |
| Старт | 10000 на місяць | 990 |
| Про | 100000 на місяць | 2990 |
Для разового збагачення таблиці на кілька сотень кодів вистачить кількох днів безкоштовного ліміту або одного місяця плану Старт. Регулярний аналіз великої бази потребує плану Про. Заголовки `X-RateLimit-Limit` і `X-RateLimit-Reset` показують загальний ліміт і час його скидання: доба і місяць рахуються за Києвом.
Куди рухатись далі
Коли в таблиці лише назви, почніть з пошуку компаній: він повертає до 10 збігів з кодами. Для глибшого аналізу контрагентів тим самим кодом викликаються судові справи і тендери Prozorro. Структура відповіді в усіх ендпоінтах однакова: `ok`, `data`, `error`, `meta`.
Що робити
- Збережіть ключ у змінній середовища `INITASK_KEY` або почніть без ключа.
- Запустіть приклад вище і подивіться на `data` для коду 00032129.
- Додайте обробку 400, 404 і 429 з паузою за `Retry-After`.
- Для списку кодів приберіть дублікати і стежте за `X-RateLimit-Remaining`.
- Повний перелік полів дивіться в документації картки компанії, план під обсяг оберіть на сторінці Ціни і ліміти.
Питання і відповіді
Як отримати дані ЄДРПОУ на Python?
Зробіть requests.get до https://dani.initask.com/v1/company/{edrpou} з заголовком Authorization: Bearer КЛЮЧ і timeout=10. Відповідь у JSON містить поля ok, data і error.
Що робити, якщо API повертає 429?
Прочитайте заголовок Retry-After, зачекайте вказаний час і повторіть той самий запит. Залишок ліміту видно в заголовку X-RateLimit-Remaining.
Чи треба дописувати нулі до коду ЄДРПОУ?
Ні, код з 5-7 цифр шлюз доповнює нулями зліва сам.