Данные о сайтах и организациях из открытых источников. Всё через GET.
Каждая операция доступна двумя способами. Это одна и та же работа — разница только в том, сколько ждать.
GET https://search.the-project.it/search/<op>?… ждём результат, но не дольше 25 с
GET https://search.the-project.it/search/async/<op>?… сразу номер работы
GET https://search.the-project.it/search/result/<id> результат по номеру
Синхронный вызов не быстрее — он ждёт. Если работа не уложилась в 25 секунд, он вернёт тот же номер и адрес результата, а работа продолжится: ни отмены, ни повторного запуска не происходит. Поэтому долгие операции удобнее звать сразу асинхронно.
API открытое. Ни ключа, ни регистрации, ни заголовков — просто откройте адрес.
Единственный предел: не больше 300 запросов в час с одного адреса и 2 одновременно идущих работ. Это не про доступ и не про наши расходы — государственные реестры отвечают капчей на серию частых запросов, и предел бережёт работоспособность для всех сразу.
Форма одна у всех операций и у всех трёх способов вызова — разбирать ответ должен один и тот же код, какую бы ручку ни дёрнули.
{
"id": "9f1c…", номер работы
"op": "company",
"status": "done", running | done | error — что с работой
"found": true, нашли ли то, что искали
"reason": null, почему не нашли; заполнен при found = false
"sources": { кто из источников ответил, а кто нет
"egrul": { "ok": true },
"courts": { "ok": false, "reason": "картотека закрыта для автозапросов" }
},
"warnings": [], оговорки, не отменяющие ответ
"data": { … }, данные; своя форма у каждой операции
"cost": {
"rub": 0.0312, сколько запрос стоил нам в деньгах
"calls": [ … ], платные вызовы: модель, поисковый API
"free": { "egrul": 1 } бесплатные обращения — их считаем, но не в рублях
},
"started_at": "…", "finished_at": "…"
}
status: "done" значит, что работа прошла без сбоя. Нашли ли при этом что-нибудь — говорит found. Успешный запрос, не нашедший компанию, это done и found: false.data и по-разному здесь. Прежде чем считать, что чего-то нет, посмотрите, отвечал ли источник.| код | когда |
|---|---|
400 | негодные параметры: разбираются до начала работы, деньги не тратятся |
404 | нет такой операции или такой работы |
429 | слишком часто с одного адреса либо уже идёт предельное число работ |
Тело отказа: {"error":{"code":"inn_invalid","message":"…"}}. Разбирать нужно code — он не меняется, в отличие от текста.
Находит страницы сайта: по robots.txt, карте сайта и ссылкам.
| параметр | что это |
|---|---|
siteобязателен | домен или адрес example.ru |
limit | сколько страниц вернуть, 1–300 100 |
В data: site, total, pages[] — адрес, заголовок, тип, число слов
curl "https://search.the-project.it/search/crawl?site=example.ru&limit=100"
Отвечает на произвольный вопрос по содержимому сайта: «занимается ли компания изготовлением печенья».
| параметр | что это |
|---|---|
siteобязателен | домен example.ru |
qобязателен | вопрос, до 300 знаков делает ли компания печенье |
pages | сколько страниц читать, 1–20 8 |
В data: answer (да | нет | не нашли), summary, quotes[] — цитата и адрес страницы, looked[] — что читали
curl "https://search.the-project.it/search/ask?site=example.ru&q=%D0%B4%D0%B5%D0%BB%D0%B0%D0%B5%D1%82%20%D0%BB%D0%B8%20%D0%BA%D0%BE%D0%BC%D0%BF%D0%B0%D0%BD%D0%B8%D1%8F%20%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D1%8C%D0%B5&pages=8"
Реквизиты и контакты со страниц плюс whois: на кого оформлен домен.
| параметр | что это |
|---|---|
siteобязателен | домен example.ru |
В data: requisites — inn[], ogrn[], emails[], phones[], names[]; whois; blocked
curl "https://search.the-project.it/search/site-info?site=example.ru"
Ищет компании по признакам реестра МСП и отчётности из ГИР БО, считает оценку надёжности.
| параметр | что это |
|---|---|
okved | код отрасли, можно началом 86.23 |
region | код региона 77 |
npType | UL (юрлица) или IP (предприниматели) UL |
regTo | работает не позже, чем с года 2020 |
minRevenue | выручка от, в рублях 50000000 |
minEmployees | работников не меньше 10 |
minScore | оценка не ниже, 0–100 70 |
profitable | только прибыльные: true true |
growing | только с растущей выручкой: true |
noRedFlags | без критических признаков: true |
hasFinance | только с опубликованной отчётностью: true |
limit | сколько компаний вернуть 20 |
В data: rows[] — компания, оценка, коэффициенты, признаки; total, coverageNote
curl "https://search.the-project.it/search/companies?okved=86.23®ion=77&npType=UL"
Собирает карточку по государственным реестрам: ЕГРЮЛ, выписка, МСП, ГИР БО, «Прозрачный бизнес», Федресурс. Считает надёжность и вилку штрафов.
| параметр | что это |
|---|---|
innобязателен | ИНН: 10 цифр у юрлица, 12 у ИП 7731016390 |
В data: identity, card, finance, tax, fedresurs, trust, fines, courts
curl "https://search.the-project.it/search/company?inn=7731016390"
Находит реквизиты на страницах сайта и сверяет их с реестром.
| параметр | что это |
|---|---|
siteобязателен | домен example.ru |
В data: найденная организация и чем подтверждена связка
curl "https://search.the-project.it/search/identify?site=example.ru"
Ищет сайт компании по ИНН через официальный поисковый API.
| параметр | что это |
|---|---|
innобязателен | ИНН 7731016390 |
name | название, если известно — иначе возьмём из ЕГРЮЛ |
region | регион для уточнения запроса |
В data: host, url, proof — чем подтверждён адрес (ИНН, ОГРН или название)
curl "https://search.the-project.it/search/website?inn=7731016390"
Не обходит капчу и антибот-стены. Если сайт закрыт защитой от автоматических обращений, операция вернёт found: false и назовёт защиту в sources.site.reason — Cloudflare, DDoS-Guard, Qrator, Imperva, reCAPTCHA. Это ответ, с которым можно работать; «страниц нет» в таком случае было бы выводом о сайте, которого мы не делали.
Не проверяет суды и исполнительные производства: картотека арбитражных дел и банк данных ФССП закрыты для автоматических запросов. Об этом приходит warning, и «дел нет» из молчания не следует.