Admin API: настройки
Методы Admin API для настроек трекера: основные параметры и бот-листы с версией, гео-профили, курсы валют и очистка журнала аудита.
16 методов работают с тем же, что и раздел Настройки в панели: основные параметры и бот-листы, гео-профили, курсы валют и очистка журнала аудита. Всем методам нужен токен с доступом Полный доступ (full).
Авторизация описана на странице Admin API: обзор и авторизация, формат запросов, ответов и общие коды ошибок — на странице Формат запросов, ответов и ошибок.
Настройки и версия
Настройки — один JSON-объект с ключами и служебным полем _revision. Версия увеличивается на 1 при каждом сохранении. По ней трекер отклоняет запись поверх чужих изменений.
| Ключ | Тип | Значения | По умолчанию |
|---|---|---|---|
s2s_timeout_sec | целое число | От 1 до 60 | 10 |
report_attribution | строка | click или conversion | click |
allow_php | boolean | true или false | true |
bot_ua | массив строк | До 10000 строк, каждая непустая и до 512 байт | — |
bot_ip | массив строк | До 10000 строк: IP-адрес или подсеть CIDR | — |
currency | строка | Только USD | USD |
Что означает каждый параметр — на страницах Настройки: основные параметры и бот-листы и Определение ботов и свои бот-листы.
Получить настройки
GET /api/v1/settingsВозвращает сохранённые ключи и _revision. Параметров нет. Ключ, который ещё ни разу не сохраняли, в ответе отсутствует — для него действует значение по умолчанию. Пока настройки не меняли, _revision равен 0.
{"s2s_timeout_sec": 10, "report_attribution": "click", "allow_php": true, "bot_ua": ["MyScanner"], "bot_ip": ["203.0.113.0/24"], "_revision": 7}Изменить настройки
PATCH /api/v1/settings
PUT /api/v1/settingsМеняет только переданные ключи, остальные сохраняются. Массивы bot_ua и bot_ip заменяются целиком.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
_revision | целое число, от 0 | PATCH — да, PUT — нет | Версия из последнего ответа GET /api/v1/settings |
| ключи из таблицы выше | — | нет | Новые значения. null и неизвестные ключи не принимаются |
PUT без _revision сохраняет значения без сверки версии. С _revision оба метода работают одинаково.
Ответ — код 200 и все настройки с новым _revision.
curl -X PATCH https://panel.example.com/api/v1/settings \
-H "Api-Key: <токен>" \
-H "Content-Type: application/json" \
-d '{"_revision":7,"s2s_timeout_sec":15,"bot_ip":["203.0.113.10","203.0.113.0/24"]}'| HTTP | code | Когда |
|---|---|---|
400 | bad_request | Тело не JSON-объект: Ожидается JSON объект |
422 | validation | _revision не целое число от 0: Некорректная версия настроек |
409 | settings_conflict | Версия устарела. Прочитайте настройки заново и повторите запрос с новым _revision |
422 | validation | Ошибка в значении, null или неизвестный ключ. Причина — в message, например Таймаут S2S: от 1 до 60 секунд |
428 | revision_required | PATCH без _revision |
503 | settings_sync_pending | Настройки сохранены, но применение на трафике не подтверждено. Прочитайте настройки и повторите сохранение |
Гео-профили
Гео-профиль — именованный набор стран для условия «Гео» в потоке. Работа с профилями в панели — на странице Гео-профили.
| Поле | Тип | Описание |
|---|---|---|
id | строка, UUID | Идентификатор своего профиля. У встроенных профилей — пустая строка |
name | строка | Название |
countries | массив строк | Двухбуквенные ISO-коды стран в верхнем регистре |
Получить список профилей
GET /api/v1/geo-profilesВозвращает массив: сначала 14 встроенных профилей, затем свои по алфавиту. Параметров нет. Встроенные профили изменить и удалить нельзя.
Создать профиль
POST /api/v1/geo-profiles| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
name | строка | да | Название, до 120 байт. Пробелы по краям убираются. Не должно совпадать с названием встроенного профиля (без учёта регистра) или другого своего профиля |
countries | массив строк | да | От 1 до 250 кодов стран. Регистр не важен, повторы убираются |
Ответ — код 200 и объект профиля с id.
curl -X POST https://panel.example.com/api/v1/geo-profiles \
-H "Api-Key: <токен>" \
-H "Content-Type: application/json" \
-d '{"name":"Tier 1","countries":["US","CA","GB","AU"]}'Изменить профиль
PUT /api/v1/geo-profiles/{id}Заменяет название и список стран профиля {id}. Поля тела те же, что при создании, оба обязательны. Ответ — код 200 и объект профиля.
Ошибки создания и изменения:
| HTTP | code | Когда |
|---|---|---|
400 | bad_request | Тело не JSON-объект: Некорректный JSON. Либо {id} не UUID: некорректный идентификатор или значение |
404 | not_found | Профиля с таким id нет |
409 | conflict | Название встроенного профиля зарезервировано или Название уже занято |
422 | validation | Укажите название и от 1 до 250 стран или Страны задаются двухбуквенными ISO-кодами |
Удалить профиль
DELETE /api/v1/geo-profiles/{id}Удаляет свой профиль. Ответ — код 204 без тела. Потоки, в которые уже вставлены страны профиля, не меняются. Если профиля нет — 404 с кодом not_found. Если {id} не UUID — 400 с кодом bad_request.
Курсы валют
Курс — сколько USD стоит одна единица валюты на дату. Как трекер выбирает курс для пересчёта — на странице Валюты и курсы.
Получить историю курсов
GET /api/v1/currency-ratesВозвращает массив ручных и автоматических курсов — до 1000 строк, новые даты первыми. Параметров нет.
| Поле | Тип | Описание |
|---|---|---|
currency | строка | Код валюты из трёх букв |
day | строка | Дата в формате ГГГГ-ММ-ДД, UTC |
usd_rate | число | USD за 1 единицу валюты |
source | строка | manual — ручной курс, Frankfurter — автоматический |
Добавить ручной курс
POST /api/v1/currency-rates| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
currency | строка | да | Три латинские буквы, регистр не важен. USD не принимается |
day | строка | да | Дата начала действия, ГГГГ-ММ-ДД |
usd_rate | число | да | Больше 0 и меньше 1000000000 |
Ответ — код 201 и добавленный курс с source = manual.
{"currency": "EUR", "day": "2026-10-01", "usd_rate": 1.1, "source": "manual"}| HTTP | code | Когда |
|---|---|---|
400 | bad_request | Тело не JSON-объект: invalid json |
409 | currency_rate_exists | Ручной курс этой валюты на эту дату уже есть |
422 | validation | Неверный код валюты, дата или курс: нужны валюта ISO, дата и положительный курс USD за единицу валюты |
Методов изменения и удаления курса нет. Чтобы исправить курс, добавьте новый с другой датой.
Получить состояние автоматических курсов
GET /api/v1/currency-rates/providerПараметров нет. Ответ — код 200 и объект:
| Поле | Тип | Описание |
|---|---|---|
automatic | boolean | Используются ли автоматические курсы. По умолчанию true |
source | строка | Источник курсов: Frankfurter |
last_attempt | дата RFC 3339 или null | Время последней попытки обновления |
last_success | дата RFC 3339 или null | Время последнего успешного обновления |
last_error | строка | Пустая строка или provider_unavailable, если последняя попытка не удалась |
available | число | Сколько валют имеют курс не старше 7 дней |
stale | число | У скольких валют последний курс старше 7 дней |
Включить или выключить автоматические курсы
PUT /api/v1/currency-rates/provider| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
automatic | boolean | да | true — использовать автоматические курсы, false — только ручные |
Ответ — код 200 и объект состояния. Без поля automatic или с телом не в JSON — 422 с кодом validation и сообщением Укажите режим обновления курсов.
Обновить курсы сейчас
POST /api/v1/currency-rates/refreshЗапрашивает курсы у источника вне расписания. Тела нет. Источник опрашивается не чаще раза в минуту: повторный запрос раньше вернёт текущее состояние. Ответ — код 200 и объект состояния.
Если источник не ответил — 502 с кодом currency_provider. Сохранённые курсы продолжают действовать, пока им не больше 7 дней.
Очистка журнала аудита
Очистка удаляет старые записи журнала действий и выгрузки CSV с истёкшим сроком. Перед разовой очисткой и перед включением автоочистки нужна оценка: она возвращает token и границу before, которые передаются в следующий запрос. Правила и сроки — на странице Хранение данных и очистка журнала аудита.
Получить состояние очистки
GET /api/v1/retention/statusПараметров нет. Ответ — код 200 и объект:
| Поле | Тип | Описание |
|---|---|---|
policy.enabled | boolean | Включена ли ежедневная автоочистка |
policy.audit_days | число | За сколько последних дней хранить записи. По умолчанию 90 |
policy.revision | число | Версия правила, сначала 0. Передаётся при сохранении |
policy.next_run | дата RFC 3339 или null | Время следующего запуска |
runs | массив | Последние 20 запусков: id, created_at, source (manual или scheduled), before, audit_rows, expired_exports, state (ok или error) |
audit_rows | число | Записей в журнале аудита |
export_rows | число | Сохранённых выгрузок CSV |
export_bytes | число | Их объём в байтах |
expired_exports | число | Выгрузок с истёкшим сроком |
trash | объект | Объекты в корзине: offers, landers, campaigns |
Оценить очистку
POST /api/v1/retention/previewСчитает, сколько записей попадёт под очистку. Ничего не удаляет.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
days | целое число | да | Сколько последних дней оставить, от 7 до 3650 |
Ответ — код 200:
| Поле | Тип | Описание |
|---|---|---|
preview.before | дата RFC 3339 | Граница: записи старше неё попадут под очистку |
preview.audit_rows | число | Записей аудита старше границы |
preview.expired_exports | число | Выгрузок с истёкшим сроком |
token | строка | Подтверждение оценки. Действует 15 минут и только для того же пользователя, с тем же сроком и границей |
days | число | Срок из запроса |
Выполнить очистку
POST /api/v1/retention/apply| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
days | целое число | да | Тот же срок, что в оценке |
before | дата RFC 3339 | да | preview.before из оценки, без изменений |
token | строка | да | token из оценки |
Ответ — код 200 и объект с полями before, audit_rows, expired_exports — сколько удалено. За один запрос удаляется до 10000 записей аудита и до 100 выгрузок. Если осталось больше, повторите запрос: в течение 15 минут подходят те же before и token, позже нужна новая оценка.
curl -X POST https://panel.example.com/api/v1/retention/apply \
-H "Api-Key: <токен>" \
-H "Content-Type: application/json" \
-d '{"days":90,"before":"2026-07-06T12:00:00Z","token":"<token из оценки>"}'Удалённые записи аудита восстановить нельзя.
Сохранить правило автоочистки
PUT /api/v1/retention/policyВключает, выключает ежедневную автоочистку или меняет её срок.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
enabled | boolean | да | true — включить, false — выключить |
audit_days | целое число | да | Срок хранения, от 7 до 3650. Нужен и при выключении |
revision | целое число, от 0 | да | policy.revision из состояния очистки |
before | дата RFC 3339 | при enabled = true | preview.before из оценки с days, равным audit_days |
token | строка | при enabled = true | token из той же оценки |
Ответ — код 200 и объект enabled, audit_days, revision, next_run. revision в ответе на 1 больше переданного. После включения, выключения или смены срока next_run — через 24 часа.
Ошибки методов очистки:
| HTTP | code | Когда |
|---|---|---|
409 | preview_required | token или before не из оценки, оценка старше 15 минут или сделана с другим сроком. Повторите оценку |
409 | revision_conflict | Правило изменили после чтения. Получите состояние заново и повторите с новым revision |
422 | validation | Тело не JSON-объект, срок вне диапазона 7–3650 дней либо нет enabled или revision |