API для разработчиков
Подключите расчёт ценовой позиции к своему сайту или CRM: передайте данные клиента — получите конкурентов, коридоры цен и ИЦП.
Как это работает
- Ваш сайт отправляет
POST /api/v1/projectsс данными клиента — в ответ приходитidзамера. - Ядро ищет конкурентов, собирает и сопоставляет цены — обычно 3–10 минут.
- Готовность узнаётся опросом
GET /api/v1/projects/{id}(статусdone) или вебхуком на ваш адрес. - Результат —
GET /api/v1/projects/{id}/result(JSON) или готовый HTML-отчёт.
Авторизация: заголовок X-API-Key: ваш_ключ (или Authorization: Bearer ваш_ключ). Ключ выдаёт администратор.
Вызывайте API с сервера, а не из браузера — иначе ключ увидят посетители.
Базовый адрес: http://201-24-49-32.sslip.io
Методы
{
"company": "Лингва-Центр", // обязательно
"site": "lingva-center.ru", // чтобы не считать клиента своим конкурентом
"sphere": "языковая школа", // обязательно: как клиента ищут в Яндексе
"city": "Люберцы", // обязательно
"metro": "Котельники", // станция метро или район
"address": "Октябрьский пр-т, 10",
"services": [ // обязательно, 1–15 позиций
{"name": "Английский для взрослых, группа", "price": 750, "unit": "за 1 академический час (45 мин)"},
{"name": "Индивидуальное занятие", "price": 1800, "unit": "за 1 занятие", "duration": 60}
],
"auto_confirm": true, // true (по умолчанию) — конкуренты выбираются автоматически, сразу считаем
// false — остановиться на статусе review, вы подтверждаете список сами
"max_competitors": 7, // сколько лучших по поиску брать при auto_confirm (1–15)
"webhook_url": "https://ваш-сайт.ru/radar-hook", // куда сообщить о готовности
"external_id": "deal-1234" // ваш идентификатор — вернётся в ответах и вебхуке
}
Единица unit — свободный текст; типовые: за 1 занятие, за 1 академический час (45 мин), за 1 час, за месяц, за услугу, за курс, за 1 посещение, за 1 м².
Ответ 201: объект замера (как в методе ниже) со статусом preparing или measuring.
Статусы: preparing (ищем конкурентов) → review (ждём подтверждения, только при auto_confirm: false)
→ measuring → done. При сбое — error и поле error.
В статусах review/done есть список competitors.
{"enabled": ["lingva-lub.ru", "smartkids.ru"], // оставить только эти (необязательно)
"add": ["https://new-school.ru/ceny"]} // добавить своих (необязательно)
Тот же список конкурентов, новые цены. В результате появятся events — кто и на сколько изменил цену.
{
"id": "lingva-centr-3f9a1c2b7d10", "status": "done", "measured_at": "2026-10-08_141303",
"icp": 104.2, // индекс ценовой позиции: 100 = в медиане рынка
"icp_positions": 3, // по скольким позициям посчитан
"coverage": {"cells": 18, "matched": 11, "collected_pct": 67},
"positions": [{
"id": "s1", "name": "Английский для взрослых, группа", "unit": "за 1 академический час (45 мин)",
"our_price": 750, "market": {"min": 400, "median": 720, "max": 900, "n": 4},
"ratio_to_median_pct": 104.2, "percentile": 63, "in_index": true,
"competitors": [{"name": "English Center", "domain": "engcenter.ru", "price": 750,
"confidence": "high", "calculation": "750 ₽ за ак. час — указано прямо",
"source_url": "https://engcenter.ru/price"}],
"not_priced": [{"name": "Premium Studio", "status": "hidden", "reason": ""}]
}],
"events": [{"type": "down", "name": "English Center", "position": "...", "old": 900, "new": 800, "delta_pct": -11.1}],
"report_url": "http://201-24-49-32.sslip.io/p/.../report"
}
Вебхук
Если указан webhook_url, ядро отправит туда POST с JSON на каждом этапе:
measure.review (список конкурентов готов), measure.done (в теле — весь result), measure.error.
{"event": "measure.done", "id": "...", "status": "done", "external_id": "deal-1234",
"status_url": "...", "report_url": "...", "result": { ... как в /result ... }}
Чтобы убедиться, что запрос пришёл от ядра, проверяйте заголовок X-Radar-Secret — он равен секрету, который задаёт администратор.
Примеры
curl
curl -X POST http://201-24-49-32.sslip.io/api/v1/projects \
-H "X-API-Key: ВАШ_КЛЮЧ" -H "Content-Type: application/json" \
-d '{"company":"Лингва-Центр","sphere":"языковая школа","city":"Люберцы","metro":"Котельники",
"services":[{"name":"Английский для взрослых, группа","price":750,"unit":"за 1 академический час (45 мин)"}]}'
curl -H "X-API-Key: ВАШ_КЛЮЧ" http://201-24-49-32.sslip.io/api/v1/projects/ID/result
Python
import requests, time
H = {"X-API-Key": "ВАШ_КЛЮЧ"}
p = requests.post("http://201-24-49-32.sslip.io/api/v1/projects", headers=H, json={...}).json()
while p["status"] not in ("done", "error"):
time.sleep(15)
p = requests.get(p["links"]["self"], headers=H).json()
print(requests.get(p["links"]["result"], headers=H).json()["icp"])
PHP (например, сайт на Битрикс или WordPress)
$ch = curl_init("http://201-24-49-32.sslip.io/api/v1/projects");
curl_setopt_array($ch, [CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["X-API-Key: ВАШ_КЛЮЧ", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode($data, JSON_UNESCAPED_UNICODE)]);
$project = json_decode(curl_exec($ch), true); // $project["id"]
Коды ошибок: 401 — нет/неверный ключ; 404 — замер не найден или не ваш; 409 — ещё не готово или уже идёт;
422 — ошибка в данных (список в message); 429 — дневной лимит.