#Дашборды
Статус: Доступно —
GET /dashboards/overviewиGET /dashboards/pulse. Планируется — встраивание дашбордов по подписанному токену (этап 4). Внутренние поля блоков «Обзора» могут пополняться, постоянныavailabilityиdata_as_ofв каждом блоке.
Назначение: получить готовые срезы экранов «Обзор» и «Пульс» одним запросом, чтобы вывести их в своей системе без сборки из отдельных методов. Срезы содержат только агрегаты.
#Содержание
- Когда использовать
- Доступ
- GET /dashboards/overview
- GET /dashboards/pulse
- Свежесть данных
- Встраивание по подписанному токену
- Ошибки
- Примеры
- Открытые вопросы
#Когда использовать
| Нужно | Метод |
|---|---|
| Вывести «Обзор» в своём приложении или BI | GET /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
Срез экрана «Обзор»: стратегическая сводка, ключевые показатели, воронка и дополнительные блоки. Данные те же, что видит сотрудник кабинета, без элементов управления.
#Параметры запроса
| Параметр | Тип | Обязателен | Ограничения | Пример |
|---|---|---|---|---|
from | string | нет | дата YYYY-MM-DD; по умолчанию — 28 суток до to | 2026-10-01 |
to | string | нет | дата не раньше from; по умолчанию и при значении позже вчера (UTC) — последние полные сутки; фактическая граница возвращается в to ответа | 2026-10-28 |
blocks | string | нет | список блоков через запятую; по умолчанию все одиннадцать; неизвестное имя — 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 означает всплеск) и база для сравнения.
#Параметры запроса
| Параметр | Тип | Обязателен | Ограничения | Пример |
|---|---|---|---|---|
from | string | нет | дата YYYY-MM-DD; по умолчанию — 28 суток до to | 2026-09-13 |
to | string | нет | дата не раньше from; по умолчанию и при значении позже вчера (UTC) — последние полные сутки; фактическая граница возвращается в period.to | 2026-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" }
}
}
| Поле | Тип | Описание |
|---|---|---|
period | object | границы периода: from, to |
new_7d | integer | сколько находок появилось за последние 7 дней |
truncated | boolean | список обрезан по размеру; уточняйте период |
alerts[].id, topic_id | string | идентификаторы находки и темы |
alerts[].topic_name, keyword | string | тема и запрос |
alerts[].horizon | string | горизонт находки |
alerts[].status | string | состояние находки |
alerts[].episode_start, last_seen | string | начало эпизода и последнее подтверждение |
alerts[].score, volume | number | оценка и объём спроса |
alerts[].growth | number | null | рост: максимум отношения «значение / база» среди источников с исходом spike; null, если база нулевая |
alerts[].sources | array | источники сигнала: code, outcome, value, base |
alerts[].strategist_topic | object | null | связанная тема очереди стратега (id, status) или null |
data_as_of | object | до какой даты полны данные источников «Пульса» |
Текст доказательств (evidence.text) наружу не отдаётся. Принять тему к работе через этот метод нельзя: чтение отделено от действия; темы очереди стратега утверждаются и отклоняются отдельными методами ресурса /strategist/topics (Стратег). Экран ceo/pulse в публичный API не входит.
Значения полей horizon, status и code источников в примере — иллюстративные; перечень значений уточнится.
#Свежесть данных
Каждый блок сообщает data_as_of — объект {источник: дата}: дату, по которую полны данные каждого источника. Поисковые консоли отстают на 2–3 дня; не воспринимайте недостающие дни за падение. Подробнее — Чтение аналитики.
#Встраивание по подписанному токену
Статус: Планируется. Встраивание относится к этапу 4 вместе с песочницей.
Замысел: вместо передачи ключа API на сторонний сайт ваш сервер получает короткоживущий подписанный токен дашборда и выводит <iframe> с готовым срезом. Токен ограничен одним арендатором, одним срезом и сроком действия; ключ API не покидает ваш сервер.
Что известно на этом этапе:
- токен выпускается вашим сервером по ключу API (параметры, срок и формат определяются на этапе 4);
- встроенный дашборд показывает только агрегаты;
- для встраивания требуется отдельная политика
frame-ancestors/CORS, заданная в настройках арендатора.
Пока встраивание недоступно. Для интеграций сейчас используйте серверное чтение с ключом.
#Ошибки
Формат — application/problem+json; общий каталог — в Соглашениях.
| HTTP | Код | Когда |
|---|---|---|
| 422 | validation_failed | to раньше from; неизвестный блок в blocks |
| 401 | invalid_api_key | ключ неверен, отозван или истёк |
| 403 | scope_missing | нет области dashboards:read |
| 403 | ip_not_allowed | запрос с адреса вне списка IP интеграции |
| 429 | rate_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"]))
#Открытые вопросы
- Техническое. Формат токена встраивания, срок его жизни, набор допускаемых срезов и политика
frame-ancestorsопределяются на этапе 4. - Техническое. Набор блоков и параметр
blocks. Проект называет «готовые срезы» целиком; состав блоков взят из кабинета, а выбор блоков параметром — предложение. - К владельцу. Блоки инфраструктуры (прокси, авторитет домена, стоимость статей): уместно ли отдавать их во внешний API, не решено.
- Техническое. Единые периоды. Часть блоков кабинета считается по фиксированному окну (30 дней); как показывать это при заданных
fromиto, уточнится в OpenAPI.