Admin API: логи и диагностика
Десять методов Admin API: поиск кликов и карточка клика, журнал действий, потоковые журналы, состояние очередей, сервисов и применения настроек.
Через API доступны те же данные, что в разделе панели Логи и на странице Состояние системы. Все десять методов требуют токен с доступом Полный доступ (full): с другим доступом приходит 403 token_scope. При неактивной лицензии методы отвечают 402 — см. Истёкшая лицензия. Авторизация описана на странице Admin API: обзор и авторизация, формат ответов и общие коды ошибок — на странице Формат запросов, ответов и ошибок.
Клики
Найти клики
GET /api/v1/logs/clicksВозвращает клики за период. Можно отобрать клики по точному IP, subid или external_id. Правила поиска те же, что на вкладке Клики и лиды.
| Параметр | Тип | Обязательность | Описание |
|---|---|---|---|
from | строка, дата RFC 3339 | нет | Начало периода по времени клика. По умолчанию — 24 часа назад |
to | строка, дата RFC 3339 | нет | Конец периода. По умолчанию — текущее время. Период — не больше 93 дней |
field | строка | нет | Признак поиска: ip, subid или external_id |
value | строка | нет | Точное значение признака, до 512 символов. Без field не принимается. Для subid — до 64 символов: латинские буквы, цифры, _ и - |
limit | целое | нет | Размер страницы от 1 до 200. По умолчанию 100 |
cursor | строка | нет | Значение next_cursor из предыдущего ответа |
Ответ — код 200:
| Поле | Тип | Описание |
|---|---|---|
items | массив | Клики, новые первыми. Если ничего не найдено — пустой массив |
next_cursor | строка | Курсор следующей страницы. Пустая строка — страниц больше нет |
names | объект | Названия кампаний из items: ключ — ID, значение — название |
Поля клика в items
subid— идентификатор клика;ts— время клика;ip— IP посетителя.campaign_id,stream_id,source_id,lander_id,offer_id— ID кампании, потока, источника, лендинга и оффера. Пустая строка, если объекта в пути клика не было.country,region,city,isp,connection_type— данные по IP.device_type,os,os_version,browser,browser_version,user_agent,lang,referrer— устройство и браузер.is_bot,is_unique— признаки бота и уникального клика.cost— расход клика в USD.sub_ids,tokens— параметры клика. Вtokens.external_idлежит external_id. Значения параметров с токенами доступа заменены на***.
Пример запроса:
curl "https://panel.example.com/api/v1/logs/clicks?from=2026-10-01T00:00:00Z&to=2026-10-04T00:00:00Z&field=ip&value=203.0.113.10&limit=50" \
-H "Api-Key: <токен>"Пример ответа, часть полей клика опущена:
{
"items": [
{
"subid": "k3x9m2q7c1ab",
"ts": "2026-10-03T14:22:05.418Z",
"ip": "203.0.113.10",
"campaign_id": "c41a9e07-52bd-4f13-8a60-9d7e6f5a4b3c",
"stream_id": "5e2d7a10-8c4b-4f6e-b1a9-0d3c2b1a4f5e",
"country": "PL",
"is_bot": false,
"is_unique": true,
"tokens": {"external_id": "ext-448812"}
}
],
"next_cursor": "",
"names": {"c41a9e07-52bd-4f13-8a60-9d7e6f5a4b3c": "FB PL Nutra"}
}Ошибки:
| Код | code | message | Когда |
|---|---|---|---|
400 | validation | Некорректное начало периода, Некорректный конец периода | from или to не в формате RFC 3339 |
400 | validation | Выберите период до 93 дней | Период длиннее 93 дней или to раньше from |
400 | validation | Размер страницы: от 1 до 200 | limit вне диапазона |
400 | validation | Некорректная страница | cursor не из ответа этого метода |
400 | validation | Проверьте поле и значение поиска | Неизвестный field, value без field, значение не IP или не subid |
503 | no_analytics | Аналитика недоступна | Статистика не подключена |
Карточка клика
GET /api/v1/logs/clicks/{id}Возвращает клик, его переходы с лендинга и конверсии — данные карточки клика. Клик ищется по всей сохранённой истории, период не нужен.
| Параметр | Где | Тип | Обязательность | Описание |
|---|---|---|---|---|
id | путь | строка | да | subid клика |
Ответ — код 200:
| Поле | Тип | Описание |
|---|---|---|
click | объект | Клик с теми же полями, что в items поиска |
history.transitions | массив | Переходы с лендинга, от ранних к поздним: ts, lander_id, offer_id. До 200 записей |
history.transitions_more | логическое | true, если переходов больше 200 |
history.conversions | массив | Конверсии клика, новые первыми, по одной записи на txid с последним статусом: subid, ts, status, payout, revenue, offer_id, txid. До 200 записей |
history.conversions_more | логическое | true, если конверсий больше 200 |
history.lead_updated_at | строка или null | Время последних данных лида по клику. null — данных лида нет |
names | объект | Названия кампании, потока, источника, лендингов и офферов по их ID. Удалённого объекта в names нет |
Истории доставки событий в ответе нет: её отдаёт GET /api/v1/deliveries/search с параметром click_id — см. Admin API: конверсии и постбек. Данные лида отдаёт GET /api/v1/reports/click-lead — см. Admin API: отчёты.
Ошибки:
| Код | code | message | Когда |
|---|---|---|---|
400 | validation | Некорректный subid | В id недопустимые символы или больше 64 символов |
404 | not_found | Клик не найден | Клика с таким subid нет |
503 | no_analytics | Аналитика недоступна | Статистика не подключена |
Журнал действий
GET /api/v1/logs/auditВозвращает записи журнала действий пользователей, новые первыми.
| Параметр | Тип | Обязательность | Описание |
|---|---|---|---|
page | целое | нет | Номер страницы с 1. По умолчанию 1 |
limit | целое | нет | Записей на странице, по умолчанию 100, максимум 500. Значение больше 500 заменяется на 100 |
q | строка | нет | Поиск подстроки без учёта регистра в действии, ресурсе, ID ресурса и пользователе |
resource | строка | нет | Точное значение ресурса, например campaigns — см. значения «Ресурс» |
action | строка | нет | Точное значение действия, например update — см. значения «Действие» |
user_id | строка, UUID | нет | ID пользователя, который выполнил действие |
outcome | строка | нет | success — статус ответа от 200 до 399, error — от 400 |
from | строка, дата RFC 3339 | нет | Начало периода, включительно |
to | строка, дата RFC 3339 | нет | Конец периода, не включается. Должен быть позже from |
Ответ — код 200: объект с полями items, total — число записей по фильтру, page и limit.
| Поле записи | Тип | Описание |
|---|---|---|
id | целое | Номер записи |
created_at | строка, дата RFC 3339 | Время действия |
context | строка | UI — действие в панели, API — запрос с токеном |
action, resource, resource_id | строка | Действие, ресурс и ID объекта |
user_id, user_email | строка | Исполнитель. У запроса с токеном в user_email после логина стоит начало токена в квадратных скобках |
ip, user_agent | строка | Адрес и клиент, с которых пришёл запрос |
status | целое | Код HTTP ответа на действие |
Пример запроса — неудачные изменения кампаний за сутки:
curl "https://panel.example.com/api/v1/logs/audit?resource=campaigns&outcome=error&from=2026-10-03T00:00:00Z&to=2026-10-04T00:00:00Z&limit=50" \
-H "Api-Key: <токен>"Ошибки — код 422, code validation:
message | Когда |
|---|---|
Неизвестный исход | outcome не success и не error |
Дата должна быть в RFC3339 | from или to в другом формате |
Конец периода должен быть позже начала | to не позже from |
Слишком большой номер страницы | page больше 1 000 000 |
Потоковые журналы
Четыре журнала: system — системный лог, postback — входящие постбеки, s2s — исходящие S2S, traffic — журнал трафика. Что в них пишется — на странице Системный лог, постбэки и журнал трафика. В каждом журнале хранятся 2000 последних записей, журналы общие для всей установки.
Прочитать журнал
GET /api/v1/logs/{stream}Возвращает записи журнала, новые первыми.
| Параметр | Где | Тип | Обязательность | Описание |
|---|---|---|---|---|
stream | путь | строка | да | system, postback, s2s или traffic |
q | запрос | строка | нет | Оставляет записи, в тексте которых есть эта строка. Регистр не важен |
limit | запрос | целое | нет | Число записей, по умолчанию 500, максимум 2000. Значение больше 2000 заменяется на 500 |
Ответ — код 200 и массив записей. Если записей нет, приходит [].
| Поле | Тип | Описание |
|---|---|---|
ts | целое | Время записи в миллисекундах Unix |
text | строка | Текст записи |
level | строка | Уровень. Есть только в журнале system |
ctx | строка | Служба, которая сделала запись. Есть только в журнале system |
Ошибка: 404, code not_found, message неизвестный поток логов — в stream значение не из списка.
Очистить журнал
DELETE /api/v1/logs/{stream}Удаляет все записи журнала для всей установки. Параметр пути stream — тот же, что при чтении.
Ответ — код 204 без тела.
Восстановить удалённые записи нельзя. Очистка записывается в журнал действий: действие delete, ресурс logs.
Узнать, включён ли журнал трафика
GET /api/v1/logs/traffic-enabledПараметров нет. Ответ — код 200:
{"enabled": false}Включить или выключить журнал трафика
PUT /api/v1/logs/traffic-enabledПереключает запись журнала traffic — то же, что тумблер Логировать на вкладке Трафик.
| Поле тела | Тип | Обязательность | Описание |
|---|---|---|---|
enabled | логическое | да | true — записывать, false — не записывать. Запрос без этого поля выключает журнал |
Ответ — код 200 и объект {"enabled": true} с новым значением.
Ошибка: 400, code bad_request, message invalid json — тело не разобрано.
Диагностика
Состояние очередей
GET /api/v1/queue-healthВозвращает очередь приёма кликов и незавершённые задачи доставки — данные вкладки Состояние очередей.
Параметров нет. Ответ — код 200:
| Поле | Тип | Описание |
|---|---|---|
deliveries | массив | Незавершённые задачи рабочего пространства по типам. Пустой массив — незавершённых нет |
deliveries[].kind | строка | conversion, s2s или capi |
deliveries[].pending, running, failed | целое | Задачи, которые ждут, отправляются и остановились с ошибкой |
deliveries[].expired | целое | Задачи, обработка которых не завершилась вовремя |
deliveries[].unknown | целое | Задачи без подтверждения получателя |
deliveries[].oldest_seconds | число | Сколько секунд ждёт самая старая незавершённая задача |
ingest | объект или null | Очередь приёма кликов всего сервера. null — сведений от обработчика нет |
ingest_stale | логическое | true, если сведений нет или они старше 30 секунд |
checked_at | строка, дата RFC 3339 | Время проверки |
Поля объекта ingest
updated_at— время последних сведений от обработчика кликов.clicksиlp— очереди кликов и переходов с лендинга. В каждой:pending_batches— пакетов ждёт записи,oldest_seconds— сколько ждёт самый старый,bytesиmax_bytes— объём на диске и предел,disk_availableиdisk_known— свободное место и удалось ли его определить,scan_ok— очередь прочитана,delivery_failing— запись в статистику сейчас не удаётся,failures— число неудачных записей с запуска,last_success— время последней удачной записи в миллисекундах Unix,waiting_requests— запросы, которые ждут сохранения.geo— геобазы обработчика:provider,state,bytes,modified_at,last_error. Статусы разобраны на странице Геобазы трекера.
Ошибка: 503, code unavailable — очередь доставки не прочитана. В ответе есть заголовок Retry-After: 5: повторите запрос через 5 секунд.
Состояние системы
GET /api/v1/system-healthВозвращает данные страницы Состояние системы: сборку, сервисы, фоновые задачи и выгрузки.
Параметров нет. Метод отвечает кодом 200 и при недоступном сервисе: смотрите поле state.
| Поле | Тип | Описание |
|---|---|---|
revision | строка | Идентификатор сборки. unknown — не определён |
uptime_seconds | целое | Сколько секунд работает служба панели |
process_memory_bytes | целое | Память службы панели в байтах |
go_version | строка | Версия среды выполнения |
services | объект | Ключи postgres, clickhouse, redis. У каждого state — ok или unavailable, bytes — объём данных, version, у первых двух migrations — список применённых миграций |
workers | массив | Фоновые задачи: name, state, checked_at, stale. Задача без единого отклика приходит с state missing |
workers_available | логическое | false — отметки задач не прочитаны |
exports | объект | Число действующих выгрузок CSV по состояниям pending, running, ready, failed. Состояния без выгрузок в объекте нет |
exports_available | логическое | false — счётчик выгрузок не прочитан |
ingest, ingest_stale | — | То же, что в GET /api/v1/queue-health |
integrations.proxy_nodes | логическое | Настроено ли управление proxy-серверами |
checked_at | строка, дата RFC 3339 | Время проверки |
Имена задач в workers: report_exports, deliveries, target-monitor, retention, domain-checks. stale равно true, если последний отклик старше 3 минут.
Применение настроек трафика
GET /api/v1/runtime-configПоказывает, дошли ли изменения кампаний, потоков и доменов до серверов обработки трафика. Как читать статусы — на странице Серверы обработки трафика.
Параметров нет. Ответ — код 200:
| Поле | Тип | Описание |
|---|---|---|
applied | логическое | true — текущая версия настроек опубликована и подтверждена всеми ожидаемыми серверами |
config.revision, config.published_revision | целое | Текущая и опубликованная версии настроек |
config.pending_changes | логическое | true — есть изменения, которые ещё не вошли в опубликованную версию |
config.published_at | строка, дата RFC 3339 | Время последней публикации. Поля нет, пока публикации не было |
config.last_error | строка | Ошибка последней публикации. Поля нет, если ошибки не было |
publication_available | логическое | true — опубликованные настройки прочитаны, их версия равна config.published_revision |
nodes_available | логическое | false — подтверждения серверов не прочитаны |
expected_nodes | целое | Число ожидаемых серверов |
nodes | массив | Серверы: сначала ожидаемые, затем обнаруженные |
Поля сервера в nodes: node — имя, revision — подтверждённая версия, checked_at — последний отклик, поля нет у сервера без единого отклика, expected — входит ли в список ожидаемых, stale — нет свежего отклика, instances — сколько работающих серверов назвались этим именем, state — состояние:
state | Состояние в панели |
|---|---|
applied | Настройки применены |
pending | Ожидает обновления |
missing | Нет отклика |
stale | Связь потеряна |
conflict | Повторяется имя сервера |
unexpected | Вне списка ожидаемых |
unavailable | Проверка недоступна |
Ошибка: 503, code config_unavailable, message Состояние конфигурации недоступно.