Разработчикам

API каталога и MCP-сервер

Каталог изданий из ваших скриптов, таблиц и ИИ-ассистентов

Обновлено:

Что доступно

Публичное API отдаёт то же, что видно в каталоге на сайте: карточки изданий с ценой, если редакция её подтвердила, сроком публикации, трафиком, DR/DA, активностью и предложениями по форматам. Только чтение: заказ оформляется на сайте по ссылке из карточки.

  • REST — https://prhits.ru/api/v1: поиск с фильтрами, карточка издания, справочники рубрик, регионов и стран. Описание в формате OpenAPI 3.1: /api/openapi.json.
  • MCP-сервер — https://prhits.ru/api/mcp: тот же каталог как инструменты для Claude, Cursor и других ассистентов по протоколу Model Context Protocol.

Закупочные цены, контакты редакций и служебные поля в API не отдаются никогда. Цена в ответе — размещение без комиссии сервиса, и она есть только при priceVisible = true.

Как получить ключ

  1. Войдите в кабинет или зарегистрируйтесь.
  2. Откройте Настройки → Ключи API и нажмите «Выпустить ключ».
  3. Скопируйте ключ вида prh_…: целиком он показывается один раз, в базе хранится только отпечаток.

На один кабинет — до 5 действующих ключей. Ключ передаётся в заголовке Authorization: Bearer <ключ>. Отозванный ключ перестаёт работать сразу.

Без ключа работает только поиск GET /api/v1/catalog в урезанном виде: до 10 изданий на страницу, без цен и предложений, 60 запросов в час с одного адреса.

REST: поиск по каталогу

curl "https://prhits.ru/api/v1/catalog?country=RU&category=business&maxPrice=50000&limit=5" \
  -H "Authorization: Bearer prh_ВАШ_КЛЮЧ"

Параметры запроса — те же фильтры, что в каталоге на сайте:

ПараметрТипОписаниеПример
qstringПоиск по названию и домену издания.коммерсант
countrystringСтрана издания, ISO-код из GET /api/v1/countries.RU
categorystringРубрика, slug из GET /api/v1/rubrics.business
regionstringСубъект РФ, код из GET /api/v1/regions (только вместе с country=RU или без страны).77
maxPriceintegerБюджет под ключ, ₽: только издания с подтверждённой ценой не выше бюджета.50000
orderablebooleanТолько издания, которые можно заказать сегодня: цена и срок подтверждены редакцией.true
pageintegerСтраница выдачи, с 1.1
limitintegerРазмер страницы: до 50 с ключом, до 10 без ключа.20

Ответ:

{
  "items": [
    {
      "id": "cm2abc…",
      "name": "Деловой портал региона",
      "url": "https://example.ru",
      "country": "RU",
      "category": "Бизнес; Финансы",
      "currency": "RUB",
      "priceVisible": true,
      "price": 38000,
      "priceApproved": true,
      "dr": 41, "da": 38, "monthlyTraffic": 420000,
      "dofollow": true, "indexable": true,
      "turnaroundDays": 3, "turnaroundExact": true,
      "acceptsOrders": true, "verified": true,
      "live": { "items24h": 12, "items7d": 80, "visitorsYesterday": 15300, "truncated": false, "latestAt": "…", "checkedAt": "…" },
      "offers": [{ "format": "article", "price": 38000, "turnaroundDays": 3, "volumeChars": 4000, "linksMax": 2, "dofollow": true, "photosMax": 3 }]
    }
  ],
  "total": 128, "page": 1, "limit": 5, "pages": 26,
  "authenticated": true
}

Остальные маршруты (нужен ключ):

  • GET /api/v1/catalog/{id} — карточка издания; страница на сайте: /catalog/{id}.
  • GET /api/v1/rubrics — рубрики: slug, label, count.
  • GET /api/v1/regions — субъекты РФ с изданиями: code, name, count.
  • GET /api/v1/countries — страны изданий: code, name, count.

Поля карточки издания

ПолеТипОписание
idstringИдентификатор издания; страница на сайте — /catalog/{id}.
namestringНазвание издания.
urlstringСайт издания.
countrystringСтрана, ISO-код.
categorystring | nullСырые тематики источника через «;». Рубрики каталога — по GET /api/v1/rubrics.
currencystringВалюта цены, обычно RUB.
priceVisiblebooleanЦена публична: подтверждена редакцией и ниже порога индивидуального запроса.
pricenumberЦена размещения без комиссии сервиса. Поле есть только при priceVisible = true.
priceApprovedbooleanЦена утверждена.
drinteger | nullDomain Rating.
dainteger | nullDomain Authority.
monthlyTrafficinteger | nullПосещаемость в месяц.
dofollowbooleanСсылки dofollow.
indexablebooleanПубликация открыта для индексации.
turnaroundDaysintegerСрок публикации, дней.
turnaroundExactbooleanСрок назвала редакция (точный, не вилка).
descriptionstring | nullОписание издания.
logoUrlstring | nullЛоготип.
liveobject | nullЖивая активность: публикации за 24 часа и 7 дней, посетители вчера; null, если данных нет.
acceptsOrdersbooleanРедакция принимает онлайн-заказы; false — только запрос условий.
verifiedbooleanРедакция подтвердила владение сайтом.
offersarrayПредложения по форматам (цена, срок, объём); только при priceVisible.

Лимиты и ошибки

  • 600 запросов в час на ключ (REST и MCP считаются вместе), 60 в час без ключа с одного адреса.
  • Размер страницы — до 50 изданий с ключом, до 10 без ключа.
  • Каждый ответ содержит заголовки X-RateLimit-Limit, X-RateLimit-Remaining и X-RateLimit-Reset (секунды до обновления окна).

Ошибки приходят в JSON с кодом и HTTP-статусом:

{ "error": { "code": "rate_limited", "message": "Лимит 600 запросов в час исчерпан, повторите через 1840 с" } }
  • bad_request (400) — неверный параметр; в details.param — какой.
  • unauthorized (401) — ключа нет, он неизвестен или отозван.
  • not_found (404) — издания нет в публичном каталоге.
  • rate_limited (429) — лимит исчерпан, повторите после Retry-After секунд.
  • internal (500) — ошибка на нашей стороне, повторите позже.

MCP-сервер для ИИ-ассистентов

Сервер реализует Model Context Protocol (версия 2025-06-18) по транспорту Streamable HTTP: JSON-RPC 2.0 методом POST на https://prhits.ru/api/mcp, ответы обычные, без потоков. Авторизация — тем же ключом в заголовке Authorization. Инструменты:

  • search_catalog — Поиск изданий (СМИ) в каталоге PRHITS для платных публикаций: по названию или домену, стране, рубрике, региону России, бюджету. Возвращает страницу карточек с ценой (если редакция её подтвердила), сроком, трафиком, DR/DA.
  • get_platform — Карточка одного издания по id из search_catalog: цена (если публична), предложения по форматам, срок, трафик, активность, подтверждение редакции. Ссылка на сайт: https://prhits.ru/catalog/{id}.
  • list_rubrics — Список рубрик каталога (slug, название, число изданий) для параметра category.
  • list_regions — Субъекты РФ, по которым есть издания (код, название, число изданий) для параметра region.

Пример подключения в Claude Desktop (файл claude_desktop_config.json) или в Claude Code (.mcp.json проекта):

{
  "mcpServers": {
    "prhits": {
      "type": "http",
      "url": "https://prhits.ru/api/mcp",
      "headers": { "Authorization": "Bearer prh_ВАШ_КЛЮЧ" }
    }
  }
}

В Claude Code то же одной командой:

claude mcp add --transport http prhits https://prhits.ru/api/mcp --header "Authorization: Bearer prh_ВАШ_КЛЮЧ"

Проверка вручную через curl:

curl https://prhits.ru/api/mcp -H "Authorization: Bearer prh_ВАШ_КЛЮЧ" -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_catalog","arguments":{"country":"RU","category":"tech","limit":3}}}'

Результат инструмента приходит и текстом (JSON в content[0].text), и структурой в structuredContent. Ошибка в параметрах возвращается как результат с isError = true, чтобы ассистент мог поправить вызов.

Условия использования

  • Данные каталога — для подбора изданий и медиапланов ваших клиентов. Перепродажа выгрузки и публикация базы целиком не допускаются.
  • Цена в API может отличаться от итога в заказе: комиссия сервиса и план аккаунта применяются при оформлении на сайте.
  • Ключ привязан к кабинету; действия по ключу считаются действиями владельца кабинета. Храните его как пароль и отзывайте при утечке.
  • Вопросы по интеграции — на странице контактов.