Разделы документации

Admin API: настройки

Методы Admin API для настроек трекера: основные параметры и бот-листы с версией, гео-профили, курсы валют и очистка журнала аудита.

16 методов работают с тем же, что и раздел Настройки в панели: основные параметры и бот-листы, гео-профили, курсы валют и очистка журнала аудита. Всем методам нужен токен с доступом Полный доступ (full).

Авторизация описана на странице Admin API: обзор и авторизация, формат запросов, ответов и общие коды ошибок — на странице Формат запросов, ответов и ошибок.

Настройки и версия

Настройки — один JSON-объект с ключами и служебным полем _revision. Версия увеличивается на 1 при каждом сохранении. По ней трекер отклоняет запись поверх чужих изменений.

КлючТипЗначенияПо умолчанию
s2s_timeout_secцелое числоОт 1 до 6010
report_attributionстрокаclick или conversionclick
allow_phpbooleantrue или falsetrue
bot_uaмассив строкДо 10000 строк, каждая непустая и до 512 байт—
bot_ipмассив строкДо 10000 строк: IP-адрес или подсеть CIDR—
currencyстрокаТолько USDUSD

Что означает каждый параметр — на страницах Настройки: основные параметры и бот-листы и Определение ботов и свои бот-листы.

Получить настройки

http
GET /api/v1/settings

Возвращает сохранённые ключи и _revision. Параметров нет. Ключ, который ещё ни разу не сохраняли, в ответе отсутствует — для него действует значение по умолчанию. Пока настройки не меняли, _revision равен 0.

json
{"s2s_timeout_sec": 10, "report_attribution": "click", "allow_php": true, "bot_ua": ["MyScanner"], "bot_ip": ["203.0.113.0/24"], "_revision": 7}

Изменить настройки

http
PATCH /api/v1/settings
PUT /api/v1/settings

Меняет только переданные ключи, остальные сохраняются. Массивы bot_ua и bot_ip заменяются целиком.

ПолеТипОбязательностьОписание
_revisionцелое число, от 0PATCH — да, PUT — нетВерсия из последнего ответа GET /api/v1/settings
ключи из таблицы выше—нетНовые значения. null и неизвестные ключи не принимаются

PUT без _revision сохраняет значения без сверки версии. С _revision оба метода работают одинаково.

Ответ — код 200 и все настройки с новым _revision.

bash
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"]}'
HTTPcodeКогда
400bad_requestТело не JSON-объект: Ожидается JSON объект
422validation_revision не целое число от 0: Некорректная версия настроек
409settings_conflictВерсия устарела. Прочитайте настройки заново и повторите запрос с новым _revision
422validationОшибка в значении, null или неизвестный ключ. Причина — в message, например Таймаут S2S: от 1 до 60 секунд
428revision_requiredPATCH без _revision
503settings_sync_pendingНастройки сохранены, но применение на трафике не подтверждено. Прочитайте настройки и повторите сохранение

Гео-профили

Гео-профиль — именованный набор стран для условия «Гео» в потоке. Работа с профилями в панели — на странице Гео-профили.

ПолеТипОписание
idстрока, UUIDИдентификатор своего профиля. У встроенных профилей — пустая строка
nameстрокаНазвание
countriesмассив строкДвухбуквенные ISO-коды стран в верхнем регистре

Получить список профилей

http
GET /api/v1/geo-profiles

Возвращает массив: сначала 14 встроенных профилей, затем свои по алфавиту. Параметров нет. Встроенные профили изменить и удалить нельзя.

Создать профиль

http
POST /api/v1/geo-profiles
ПолеТипОбязательностьОписание
nameстрокадаНазвание, до 120 байт. Пробелы по краям убираются. Не должно совпадать с названием встроенного профиля (без учёта регистра) или другого своего профиля
countriesмассив строкдаОт 1 до 250 кодов стран. Регистр не важен, повторы убираются

Ответ — код 200 и объект профиля с id.

bash
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"]}'

Изменить профиль

http
PUT /api/v1/geo-profiles/{id}

Заменяет название и список стран профиля {id}. Поля тела те же, что при создании, оба обязательны. Ответ — код 200 и объект профиля.

Ошибки создания и изменения:

HTTPcodeКогда
400bad_requestТело не JSON-объект: Некорректный JSON. Либо {id} не UUID: некорректный идентификатор или значение
404not_foundПрофиля с таким id нет
409conflictНазвание встроенного профиля зарезервировано или Название уже занято
422validationУкажите название и от 1 до 250 стран или Страны задаются двухбуквенными ISO-кодами

Удалить профиль

http
DELETE /api/v1/geo-profiles/{id}

Удаляет свой профиль. Ответ — код 204 без тела. Потоки, в которые уже вставлены страны профиля, не меняются. Если профиля нет — 404 с кодом not_found. Если {id} не UUID — 400 с кодом bad_request.

Курсы валют

Курс — сколько USD стоит одна единица валюты на дату. Как трекер выбирает курс для пересчёта — на странице Валюты и курсы.

Получить историю курсов

http
GET /api/v1/currency-rates

Возвращает массив ручных и автоматических курсов — до 1000 строк, новые даты первыми. Параметров нет.

ПолеТипОписание
currencyстрокаКод валюты из трёх букв
dayстрокаДата в формате ГГГГ-ММ-ДД, UTC
usd_rateчислоUSD за 1 единицу валюты
sourceстрокаmanual — ручной курс, Frankfurter — автоматический

Добавить ручной курс

http
POST /api/v1/currency-rates
ПолеТипОбязательностьОписание
currencyстрокадаТри латинские буквы, регистр не важен. USD не принимается
dayстрокадаДата начала действия, ГГГГ-ММ-ДД
usd_rateчислодаБольше 0 и меньше 1000000000

Ответ — код 201 и добавленный курс с source = manual.

json
{"currency": "EUR", "day": "2026-10-01", "usd_rate": 1.1, "source": "manual"}
HTTPcodeКогда
400bad_requestТело не JSON-объект: invalid json
409currency_rate_existsРучной курс этой валюты на эту дату уже есть
422validationНеверный код валюты, дата или курс: нужны валюта ISO, дата и положительный курс USD за единицу валюты
Внимание.

Методов изменения и удаления курса нет. Чтобы исправить курс, добавьте новый с другой датой.

Получить состояние автоматических курсов

http
GET /api/v1/currency-rates/provider

Параметров нет. Ответ — код 200 и объект:

ПолеТипОписание
automaticbooleanИспользуются ли автоматические курсы. По умолчанию true
sourceстрокаИсточник курсов: Frankfurter
last_attemptдата RFC 3339 или nullВремя последней попытки обновления
last_successдата RFC 3339 или nullВремя последнего успешного обновления
last_errorстрокаПустая строка или provider_unavailable, если последняя попытка не удалась
availableчислоСколько валют имеют курс не старше 7 дней
staleчислоУ скольких валют последний курс старше 7 дней

Включить или выключить автоматические курсы

http
PUT /api/v1/currency-rates/provider
ПолеТипОбязательностьОписание
automaticbooleanдаtrue — использовать автоматические курсы, false — только ручные

Ответ — код 200 и объект состояния. Без поля automatic или с телом не в JSON — 422 с кодом validation и сообщением Укажите режим обновления курсов.

Обновить курсы сейчас

http
POST /api/v1/currency-rates/refresh

Запрашивает курсы у источника вне расписания. Тела нет. Источник опрашивается не чаще раза в минуту: повторный запрос раньше вернёт текущее состояние. Ответ — код 200 и объект состояния.

Если источник не ответил — 502 с кодом currency_provider. Сохранённые курсы продолжают действовать, пока им не больше 7 дней.

Очистка журнала аудита

Очистка удаляет старые записи журнала действий и выгрузки CSV с истёкшим сроком. Перед разовой очисткой и перед включением автоочистки нужна оценка: она возвращает token и границу before, которые передаются в следующий запрос. Правила и сроки — на странице Хранение данных и очистка журнала аудита.

Получить состояние очистки

http
GET /api/v1/retention/status

Параметров нет. Ответ — код 200 и объект:

ПолеТипОписание
policy.enabledbooleanВключена ли ежедневная автоочистка
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

Оценить очистку

http
POST /api/v1/retention/preview

Считает, сколько записей попадёт под очистку. Ничего не удаляет.

ПолеТипОбязательностьОписание
daysцелое числодаСколько последних дней оставить, от 7 до 3650

Ответ — код 200:

ПолеТипОписание
preview.beforeдата RFC 3339Граница: записи старше неё попадут под очистку
preview.audit_rowsчислоЗаписей аудита старше границы
preview.expired_exportsчислоВыгрузок с истёкшим сроком
tokenстрокаПодтверждение оценки. Действует 15 минут и только для того же пользователя, с тем же сроком и границей
daysчислоСрок из запроса

Выполнить очистку

http
POST /api/v1/retention/apply
ПолеТипОбязательностьОписание
daysцелое числодаТот же срок, что в оценке
beforeдата RFC 3339даpreview.before из оценки, без изменений
tokenстрокадаtoken из оценки

Ответ — код 200 и объект с полями before, audit_rows, expired_exports — сколько удалено. За один запрос удаляется до 10000 записей аудита и до 100 выгрузок. Если осталось больше, повторите запрос: в течение 15 минут подходят те же before и token, позже нужна новая оценка.

bash
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 из оценки>"}'
Внимание.

Удалённые записи аудита восстановить нельзя.

Сохранить правило автоочистки

http
PUT /api/v1/retention/policy

Включает, выключает ежедневную автоочистку или меняет её срок.

ПолеТипОбязательностьОписание
enabledbooleanдаtrue — включить, false — выключить
audit_daysцелое числодаСрок хранения, от 7 до 3650. Нужен и при выключении
revisionцелое число, от 0даpolicy.revision из состояния очистки
beforeдата RFC 3339при enabled = truepreview.before из оценки с days, равным audit_days
tokenстрокапри enabled = truetoken из той же оценки

Ответ — код 200 и объект enabled, audit_days, revision, next_run. revision в ответе на 1 больше переданного. После включения, выключения или смены срока next_run — через 24 часа.

Ошибки методов очистки:

HTTPcodeКогда
409preview_requiredtoken или before не из оценки, оценка старше 15 минут или сделана с другим сроком. Повторите оценку
409revision_conflictПравило изменили после чтения. Получите состояние заново и повторите с новым revision
422validationТело не JSON-объект, срок вне диапазона 7–3650 дней либо нет enabled или revision
Обновлено Нужна помощь? ↗