Формула ИИ для разработчиков Справочник API Каталог ошибок OpenAPI
Разделы

#Дашборды

Статус: Доступно — GET /dashboards/overview и GET /dashboards/pulse. Планируется — встраивание дашбордов по подписанному токену (этап 4). Внутренние поля блоков «Обзора» могут пополняться, постоянны availability и data_as_of в каждом блоке.

Назначение: получить готовые срезы экранов «Обзор» и «Пульс» одним запросом, чтобы вывести их в своей системе без сборки из отдельных методов. Срезы содержат только агрегаты.

#Содержание

  1. Когда использовать
  2. Доступ
  3. GET /dashboards/overview
  4. GET /dashboards/pulse
  5. Свежесть данных
  6. Встраивание по подписанному токену
  7. Ошибки
  8. Примеры
  9. Открытые вопросы

#Когда использовать

НужноМетод
Вывести «Обзор» в своём приложении или BIGET /dashboards/overview
Получать оповещения о растущих темах спросаGET /dashboards/pulse
Свои графики по конкретным метрикамЧтение аналитики
Показать дашборд на стороннем сайте без бэкендавстраивание (этап 4)

#Доступ

Базовый адресhttps://<домен ячейки>/api/public/v1 (RU https://formula-cream.pro, EN https://wfacademy.org, ID https://wfacademy.id)
АутентификацияAuthorization: Bearer <ключ>
Областьdashboards:read (Аутентификация)
Платнонет
Персональные данныенет
Предел чтения600 запросов в минуту (Соглашения)

#GET /dashboards/overview

Срез экрана «Обзор»: стратегическая сводка, ключевые показатели, воронка и дополнительные блоки. Данные те же, что видит сотрудник кабинета, без элементов управления.

#Параметры запроса

ПараметрТипОбязателенОграниченияПример
fromstringнетдата YYYY-MM-DD; по умолчанию — 28 суток до to2026-10-01
tostringнетдата не раньше from; по умолчанию и при значении позже вчера (UTC) — последние полные сутки; фактическая граница возвращается в to ответа2026-10-28
blocksstringнетсписок блоков через запятую; по умолчанию все одиннадцать; неизвестное имя — 422 (unknown_block), повтор — 422. Блоки в ответе идут в порядке экрана, а не в порядке запросаkpi,funnel

Окна блоков, у которых период зафиксирован (например, clusters — 30 дней, status — стоимость статей за 30 дней), от from и to не зависят. Параметр days — деталь кабинета, в публичном API его нет.

#Блоки

Блок (key)Что содержитПервоисточник в кабинете
strategistполоса стратега: краткий вывод последнего отчётаотчёт ИИ-стратега
kpiпять плиток: показы, клики, сессии, люди из ИИ-ассистентов, выручка. Поисковые системы в режиме «обе» не суммируютсясводные показатели
funnelворонка «показы → клики → сессии → лиды → сделки → выручка» (описание)воронка
attentionчто требует внимания: находки аналитика, выводы отчёта, аномалии воронки, подозрительные ботысписок внимания
adsсводка по рекламе за периодрекламные кабинеты
ai_assistantsзаходы из ИИ-ассистентов и ИИ-краулеров: классы ботов user_fetch, ai_search, training, люди из ассистентов, проверка подмены ботовблок «ИИ-ассистенты»
popular_pagesпопулярные страницы по каналам: из ИИ и из поиска (по 8)популярные страницы
clustersактивные кластеры запросов: не менее 100 показов за 30 дней и не менее 10 ключейкластеры
data_trustиндекс доверия к данным от 0 до 100 (сверка источников); «0» без пар источников означает «не собрано», а не «данные плохи»доверие к данным
sitemap_healthздоровье карты сайтакарта сайта
statusстрока состояния: инфраструктура и прокси, авторитет домена, расширенная разметка, стоимость статей за 30 дней, отзывы, внешние ссылкистрока состояния

Каждый блок несёт собственные availability и data_as_of (объект {источник: дата}), как разделы воронки и видимости (Чтение аналитики). Деньги в блоках — объект {"amount", "currency"}.

#Ответ (сокращённо)

{
  "data": {
    "from": "2026-10-01",
    "to": "2026-10-28",
    "blocks": {
      "kpi": {
        "availability": "ok",
        "data_as_of": { "g:search_console": "2026-10-25", "tracker": "2026-10-28", "crm": "2026-10-28" },
        "tiles": [
          { "key": "impressions", "current": 182400, "prev": 171900, "delta_pct": 6.1 },
          { "key": "clicks", "current": 4210, "prev": 3880, "delta_pct": 8.5 },
          { "key": "sessions", "current": 3920, "prev": 3601, "delta_pct": 8.9 },
          { "key": "ai_people", "current": 212, "prev": 140, "delta_pct": 51.4 },
          { "key": "revenue", "current": { "amount": "5240.00", "currency": "GBP" }, "prev": { "amount": "4100.00", "currency": "GBP" }, "delta_pct": 27.8 }
        ]
      },
      "funnel": { "availability": "ok", "data_as_of": { "g:search_console": "2026-10-25", "crm": "2026-10-28" }, "steps": [ ] },
      "ai_assistants": { "availability": "ok", "data_as_of": { "tracker": "2026-10-28" } }
    }
  }
}

Структура внутри блоков показана сокращённо. Постоянное правило — availability (ok, no_data, no_source, not_connected), необязательный reason и data_as_of в каждом блоке; остальные поля блока могут пополняться, клиент их игнорирует. Плитки kpi несут собственную availability. Сбой чтения любого блока — 503 на весь запрос: блок не подменяется пустым.

#GET /dashboards/pulse

Срез экрана «Продвижение → Пульс» (promo/insights/pulse, в кабинете также «Находки и Пульс»): темы спроса, которые начали расти. Другие экраны с похожим названием в публичный API не входят. Каждая находка опирается на несколько источников сигнала, у каждого свой исход (spike означает всплеск) и база для сравнения.

#Параметры запроса

ПараметрТипОбязателенОграниченияПример
fromstringнетдата YYYY-MM-DD; по умолчанию — 28 суток до to2026-09-13
tostringнетдата не раньше from; по умолчанию и при значении позже вчера (UTC) — последние полные сутки; фактическая граница возвращается в period.to2026-10-10

#Ответ

{
  "data": {
    "period": { "from": "2026-09-13", "to": "2026-10-10" },
    "new_7d": 3,
    "truncated": false,
    "alerts": [
      {
        "id": "alert_EXAMPLE_01",
        "topic_id": "topic_EXAMPLE_01",
        "topic_name": "Ниацинамид и пористость",
        "keyword": "ниацинамид для пор",
        "horizon": "short",
        "status": "open",
        "episode_start": "2026-10-04",
        "last_seen": "2026-10-10",
        "score": 0.82,
        "volume": 3400,
        "growth": 2.4,
        "sources": [
          { "code": "serp_suggest", "outcome": "spike", "value": 120, "base": 50 }
        ],
        "strategist_topic": { "id": "tpc_EXAMPLE_01", "status": "proposed" }
      }
    ],
    "data_as_of": { "pulse": "2026-10-10" }
  }
}
ПолеТипОписание
periodobjectграницы периода: from, to
new_7dintegerсколько находок появилось за последние 7 дней
truncatedbooleanсписок обрезан по размеру; уточняйте период
alerts[].id, topic_idstringидентификаторы находки и темы
alerts[].topic_name, keywordstringтема и запрос
alerts[].horizonstringгоризонт находки
alerts[].statusstringсостояние находки
alerts[].episode_start, last_seenstringначало эпизода и последнее подтверждение
alerts[].score, volumenumberоценка и объём спроса
alerts[].growthnumber | nullрост: максимум отношения «значение / база» среди источников с исходом spike; null, если база нулевая
alerts[].sourcesarrayисточники сигнала: code, outcome, value, base
alerts[].strategist_topicobject | nullсвязанная тема очереди стратега (id, status) или null
data_as_ofobjectдо какой даты полны данные источников «Пульса»

Текст доказательств (evidence.text) наружу не отдаётся. Принять тему к работе через этот метод нельзя: чтение отделено от действия; темы очереди стратега утверждаются и отклоняются отдельными методами ресурса /strategist/topics (Стратег). Экран ceo/pulse в публичный API не входит.

Значения полей horizon, status и code источников в примере — иллюстративные; перечень значений уточнится.

#Свежесть данных

Каждый блок сообщает data_as_of — объект {источник: дата}: дату, по которую полны данные каждого источника. Поисковые консоли отстают на 2–3 дня; не воспринимайте недостающие дни за падение. Подробнее — Чтение аналитики.

#Встраивание по подписанному токену

Статус: Планируется. Встраивание относится к этапу 4 вместе с песочницей.

Замысел: вместо передачи ключа API на сторонний сайт ваш сервер получает короткоживущий подписанный токен дашборда и выводит <iframe> с готовым срезом. Токен ограничен одним арендатором, одним срезом и сроком действия; ключ API не покидает ваш сервер.

Что известно на этом этапе:

Пока встраивание недоступно. Для интеграций сейчас используйте серверное чтение с ключом.

#Ошибки

Формат — application/problem+json; общий каталог — в Соглашениях.

HTTPКодКогда
422validation_failedto раньше from; неизвестный блок в blocks
401invalid_api_keyключ неверен, отозван или истёк
403scope_missingнет области dashboards:read
403ip_not_allowedзапрос с адреса вне списка IP интеграции
429rate_limitedпревышен предел
5xx—ошибка чтения; блок не подменяется пустым значением

#Примеры

curl -sS 'https://formula-cream.pro/api/public/v1/dashboards/overview?from=2026-10-01&to=2026-10-28' \
  -H 'Authorization: Bearer sap_ru_live_EXAMPLE0KEYI_EXAMPLEEXAMPLEEXAMPLEEXAMPLEEXAMPLE'
const response = await fetch('https://wfacademy.org/api/public/v1/dashboards/pulse?from=2026-09-13&to=2026-10-10', {
  headers: { Authorization: `Bearer ${process.env.API_KEY}` },
});
const { data } = await response.json();
for (const alert of data.alerts) console.log(alert.topic_name, alert.growth);
import os, requests

r = requests.get(
    "https://wfacademy.id/api/public/v1/dashboards/overview",
    headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
    params={"from": "2026-10-01", "to": "2026-10-28"},
    timeout=10,
)
r.raise_for_status()
print(list(r.json()["data"]["blocks"]))

#Открытые вопросы

  1. Техническое. Формат токена встраивания, срок его жизни, набор допускаемых срезов и политика frame-ancestors определяются на этапе 4.
  2. Техническое. Набор блоков и параметр blocks. Проект называет «готовые срезы» целиком; состав блоков взят из кабинета, а выбор блоков параметром — предложение.
  3. К владельцу. Блоки инфраструктуры (прокси, авторитет домена, стоимость статей): уместно ли отдавать их во внешний API, не решено.
  4. Техническое. Единые периоды. Часть блоков кабинета считается по фиксированному окну (30 дней); как показывать это при заданных from и to, уточнится в OpenAPI.