Досье. API v1 · схема 1.0

API проверки контрагентов

На входе ИНН, на выходе — весь отчёт в JSON: реквизиты, финансовая отчётность по годам, арбитраж, ФССП, лицензии, госконтракты, блокировки счетов, банкротные сигналы, связанные лица и компании, риск-балл с разбором и заключение. Оплата по факту с предоплаченного баланса.

1. Быстрый старт

Проверка асинхронная: заказали — получили идентификатор — забрали результат. Полная проверка идёт минуты, синхронного ответа не бывает.

# 1. заказать
curl -X POST https://xn--d1ac0am9c.xn--80asehdb/v1/checks \
  -H "Authorization: Bearer $DOSSIER_KEY" \
  -H "Idempotency-Key: order-4471" \
  -H "Content-Type: application/json" \
  -d '{"inn": "7707083893", "mode": "basic"}'

{"id":"9f1c…","inn":"7707083893","mode":"basic","status":"queued","price_rub":20}

# 2. забрать (поллинг раз в 20 секунд)
curl https://xn--d1ac0am9c.xn--80asehdb/v1/checks/9f1c… \
  -H "Authorization: Bearer $DOSSIER_KEY"

2. Ключ и аутентификация

Ключ выпускается в кабинете и показывается один раз — сохраните его сразу, повторно мы его не покажем (в базе лежит только хеш). Активных ключей может быть до 5: чтобы сменить ключ без простоя, выпустите новый, переключите интеграцию и лишь потом отзовите старый.

Authorization: Bearer dsr_live_…

Принимается и заголовок X-Api-Key. Отзыв ключа действует немедленно, со следующего же запроса.

Не для браузера. CORS выключен намеренно: ключ, положенный в код страницы, достаётся первому же посетителю. API — только сервер‑к‑серверу.

3. Цены и режимы

чторежимцена
Поиск компании по названию1 ₽
Проверка: реестры, финансы, суды, ФССП, лицензии, госзаказы, блокировки, банкротство, связи, риск-балл basic20 ₽
То же плюс медиа-скрининг, разбор сайта компании и заключение словами full99 ₽

Режим по умолчанию — basic. Статус, баланс и /ping бесплатны. Упавшая проверка не тарифицируется: деньги возвращаются на баланс.

Режим влияет на риск-балл, а не только на цену. Медиа-скрининг входит в оценку (суб-индекс деловой репутации — до 20 баллов из 100), поэтому один и тот же ИНН в basic и full может получить разный балл. Сравнивайте между собой только проверки одного режима — режим всегда указан в ответе полем mode.

4. Методы

методчто делаетцена
GET /v1/pingключ жив, остаток на балансе0 ₽
GET /v1/balanceостаток, потрачено, прайс0 ₽
GET /v1/search?q=название → кандидаты с ИНН1 ₽
POST /v1/checksзаказать проверку20 / 99 ₽
GET /v1/checks/{id}статус, по готовности — отчёт0 ₽

POST /v1/checks

Тело: {"inn": "…", "mode": "basic|full"}. Заголовок Idempotency-Key обязателен — он гарантирует, что повтор запроса (ваш таймаут, сбой прокси, перезапуск воркера) не запустит вторую проверку и не спишет деньги дважды. Повтор с тем же ключом вернёт ту же проверку и поле "idempotent_replay": true.

Ответ 202: id, status, mode, price_rub. Статусы: queuedrunningdone либо error.

GET /v1/checks/{id}

Пока проверка не готова, в ответе только статус и retry_after — секунды до следующей попытки. Готовая отдаёт отчёт целиком (см. ниже). Проверка, завершившаяся ошибкой, приходит с блоком error и пометкой refunded.

5. Что в ответе

{
  "id": "9f1c…", "inn": "7707083893", "mode": "basic",
  "status": "done", "price_rub": 20,
  "created_at": "2026-08-23 09:14:02", "finished_at": "2026-08-23 09:15:40",
  "schema_version": "1.0",
  "report": {
    "inn": "…", "name": "…",
    "score":  { "score": 42, "level": "средний", "subindices": [ … ] },
    "flags":  { "red_flags": [ … ], "green_flags": [ … ] },
    "target": {
      "extras":            { "address": "…", "okved": "…", "age_years": 12, … },
      "financial_history": { "series": { "revenue": { "2024": … } }, … },
      "legal_cases":       { "as_defendant": { … }, "dynamics": [ … ] },
      "enforcements":      { … }, "licenses": [ … ], "contracts": { … },
      …
    },
    "affiliates": [ … ], "persons": [ … ], "coverage": { … }
  },
  "blocks": { "licenses": "empty", "legal_cases": "ok", "media_coverage": "off" }
}

Размер готового отчёта — 90–130 КБ (20–30 КБ с gzip).

6. Блоки: есть данные или не собирали

Каждый документированный ключ присутствует в ответе всегда — если данных нет, там пустой список или пустой объект. Что именно означает пустота, говорит объект blocks:

значениечто означает
okсобрано, данные есть
emptyсобрано, данных нет
offне собиралось в этом режиме
not_applicableу этого субъекта не бывает
unavailableисточник не ответил
Это важнее, чем кажется. «Лицензий нет» и «лицензии не проверялись» выглядят в JSON одинаково, если не различать их явно. Ориентируйтесь на blocks, а не на пустоту значения: только empty означает, что мы проверили и не нашли.

7. Справочник полей

Ключи ниже входят в контракт: они не переименовываются и не исчезают без смены schema_version. Новые ключи могут добавляться — это не ломающее изменение. Всё, что придёт в ответе сверх списка, считайте нестабильным.

Верхний уровень

ключтипчто это
innvalueИНН проверенного лица
namevalueнаименование (для ИП — ФИО)
is_entrepreneurvalueсубъект — индивидуальный предприниматель
modevalueрежим проверки, в котором собран отчёт
scoredictриск-балл 0–100, уровень и разбор по факторам
flagsdictкрасные и зелёные флаги словами
exec_summarydictрезюме: проза, топ-риски, рекомендация
coveragedictчто и насколько полно проверено, чего не хватило
sanctionsdictсанкционный и PEP-скрининг субъекта
foreign_agentvalueпризнак иностранного агента
affiliateslistсвязанные компании с их проверками
personslistсвязанные физлица с их проверками
targetdictданные проверенной компании (см. ниже)

report.target — данные проверенной компании

ключтипчто это
innvalueИНН
namevalueнаименование
statusvalueстатус в ЕГРЮЛ/ЕГРИП
extrasdictреквизиты: адрес, ОКВЭД, возраст, штат, руководитель
flagsdictреестровые признаки (недостоверность, массовость и пр.)
licenseslistлицензии
contractsdictгосконтракты: суммы, число, годы
inspectionsdictпроверки контролирующих органов
legal_casesdictарбитраж: дела, суммы, динамика по годам, банкротные
enforcementsdictисполнительные производства ФССП
claims_materialitydictматериальность требований к капиталу и активам не бывает у ИП
prebankruptcylistпредбанкротные сообщения Федресурса
fedresurs_signalsdictзалог, лизинг, факторинг, реорганизация
account_blocksdictрешения ФНС о приостановлении операций по счетам
timelinelistхронология значимых событий
financial_historydictРСБУ по годам: ряды, коэффициенты, ранние сигналы не бывает у ИП
financial_analysisdictдетерминированный разбор финансов не бывает у ИП
peer_relativedictпозиция среди похожих компаний отрасли не бывает у ИП
distress_pddictмодельная вероятность остановки деятельности не бывает у ИП
shell_scoredictиндекс признаков фирмы-однодневки не бывает у ИП
info_completenessdictиндекс информационной полноты
ownershipdictструктура владения и доли не бывает у ИП
public_groupdictпубличная группа: эмитент, отчётность МСФО не бывает у ИП
beneficiary_screeningdictпроверки бенефициаров по личным реестрам нет в basic
sanctionsdictсанкции, PEP, иноагент
rosfinmonitoringdictперечень Росфинмониторинга
riddictтоварные знаки, патенты, программы для ЭВМ
media_coveragedictмедиа-скрининг: события, тональность, индекс нет в basic
adverse_mediadictнегативные новости (отдельный канал) нет в basic
business_profiledictпрофиль деятельности по сайту компании нет в basic
industry_contextdictотраслевой и региональный фон (ЦБ, ФНС)

8. Ошибки

Формат один: {"code": "…", "detail": "…"}. Ориентируйтесь на code — текст может меняться.

кодHTTPкогда
unauthorized401нет ключа, ключ отозван или заблокирован клиент
idempotency_key_required400не прислан Idempotency-Key
bad_inn422ИНН не проходит проверку контрольной суммы
insufficient_funds402не хватает средств; в теле — остаток и цена
rate_limited429превышен потолок запросов на ключ
too_many_inflight429слишком много проверок в работе одновременно
not_found404проверка не найдена (или принадлежит другому клиенту)
body_expired410срок хранения отчёта истёк
source_unavailable502реестр-источник не ответил
deploying503идёт обновление сервиса, повторите через минуту

Повторять запрос имеет смысл на 429, 502 и 503. С тем же Idempotency-Key повтор безопасен всегда.

9. Лимиты и хранение