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

Admin API: реестры блокировок

Методы для реестров заблокированных доменов: список, создание, изменение, удаление, проверка, пробная загрузка, журнал замен и откат.

Восемь методов управляют тем же, что вкладка Настройки → Реестр PL: списками заблокированных доменов, их проверкой и журналом автозамен. Всем методам нужен токен с доступом Полный доступ (full).

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

Объект реестра

Методы списка, создания, изменения и проверки возвращают реестр в таком виде:

ПолеТипОписание
idстрока, UUIDИдентификатор реестра
workspace_idстрока, UUIDИдентификатор команды
nameстрокаНазвание. Может быть пустым
urlстрокаАдрес списка
geoстрокаКод страны реестра в верхнем регистре, например PL
enabledлогическоеПроверка по расписанию включена
auto_replaceлогическоеtrue — менять домен в потоках, false — только помечать домены и писать в системный лог
interval_minчислоИнтервал проверки в минутах
reserve_group_idстрока, UUID или nullГруппа доменов, из которой берётся замена
last_fetch_atдатаВремя последней проверки, при которой список получен. Поля нет, пока реестр ни разу не проверен
last_errorстрокаОшибка или предупреждение последней проверки. Пустая строка, если замечаний нет
entry_countчислоСколько записей было в списке при последней успешной проверке. До первой проверки — 0
created_atдатаВремя создания
json
{
  "id": "5b1f0c1e-6f0a-4d0e-9a3b-2c7d8e9f0a11",
  "workspace_id": "0d9c8b7a-1234-4abc-8def-001122334455",
  "name": "Реестр PL",
  "url": "https://registry.example.com/domains.txt",
  "geo": "PL",
  "enabled": true,
  "auto_replace": true,
  "interval_min": 30,
  "reserve_group_id": "7a6b5c4d-3e2f-4a1b-8c9d-0e1f2a3b4c5d",
  "last_fetch_at": "2026-10-04T09:30:00Z",
  "last_error": "",
  "entry_count": 48213,
  "created_at": "2026-10-01T12:00:00Z"
}

Реестры

Список реестров

http
GET /api/v1/blocklist-sources

Возвращает все реестры команды. Параметров нет.

Ответ — код 200 и массив объектов реестра по дате создания, старые первыми. Если реестров нет, приходит пустой массив.

Добавить реестр

http
POST /api/v1/blocklist-sources

Создаёт реестр. Включённый реестр трекер проверит сам по расписанию; чтобы не ждать, вызовите проверку.

ПолеТипОбязательностьОписание
urlстрокадаАдрес списка. Должен начинаться с http:// или https://
nameстроканетНазвание. По умолчанию пустое
geoстроканетКод страны из двух букв, например PL. Приводится к верхнему регистру. По умолчанию PL
enabledлогическоенетПроверять по расписанию. По умолчанию true
auto_replaceлогическоенетМенять домен автоматически. По умолчанию true
interval_minчислонетИнтервал проверки в минутах. По умолчанию 30, минимум 5. Значения от 1 до 4 заменяются на 5, 0 и отрицательные — на 30
reserve_group_idстрока, UUIDнетРезервная группа доменов. Без поля, с null или пустой строкой группа не выбрана, и автозамена не выполняется

Ответ — код 201 и объект реестра.

bash
curl -X POST https://panel.example.com/api/v1/blocklist-sources \
  -H "Api-Key: <токен>" \
  -H "Content-Type: application/json" \
  -d '{"name":"Реестр PL","url":"https://registry.example.com/domains.txt","geo":"PL","interval_min":30,"reserve_group_id":"7a6b5c4d-3e2f-4a1b-8c9d-0e1f2a3b4c5d"}'

Ошибки:

КодcodemessageПричина
400bad_requestinvalid jsonТело не разобрано как JSON-объект
400bad_requestнекорректный идентификатор или значениеreserve_group_id не в формате UUID
422validationнужен http(s)-адрес реестраurl пуст или начинается не с http:// и не с https://
422validationрезервная группа доменов не найденаГруппы из reserve_group_id нет в команде

Изменить реестр

http
PUT /api/v1/blocklist-sources/{id}

Заменяет настройки реестра. {id} — идентификатор реестра.

Тело — те же поля, что при создании, url обязателен. Запись заменяется целиком, поэтому передавайте все поля, а не только изменённые:

  • без name название становится пустым;
  • без enabled и auto_replace оба переключателя включаются;
  • без interval_min интервал становится 30;
  • без reserve_group_id резервная группа сбрасывается;
  • без geo или с пустой строкой код страны остаётся прежним.

Ответ — код 200 и объект реестра. Поля last_fetch_at, last_error и entry_count при изменении сохраняются.

Ошибки — те же, что при создании, 404 not_found, если реестра с таким {id} нет, и 400 bad_request, если {id} не в формате UUID.

Внимание.

Запрос PUT без reserve_group_id сбрасывает резервную группу, и автозамена перестаёт выполняться. Сначала получите реестр из списка и отправьте его поля обратно вместе с правкой.

Удалить реестр

http
DELETE /api/v1/blocklist-sources/{id}

Удаляет реестр. Записи журнала замен остаются.

Ответ — код 204 без тела. Если реестра нет — 404 not_found, если {id} не в формате UUID — 400 bad_request.

Проверка и пробная загрузка

На оба метода действует ограничение частоты.

Проверить реестр сейчас

http
POST /api/v1/blocklist-sources/{id}/check

Скачивает список, сверяет с ним домены и, если у реестра включена автозамена, меняет домены в потоках. То же делает кнопка Проверить в строке реестра. Метод работает и для реестра с enabled: false. Тело запроса не нужно.

Ответ приходит после окончания проверки — код 200 и объект реестра с обновлёнными last_fetch_at, entry_count и last_error.

Код 200 не означает, что проверка прошла без замечаний. Прочитайте last_error: в нём остаётся предупреждение, например автозамена не выполнена: не выбрана резервная группа доменов — менять не на что. Тексты разобраны в разделе Если не получилось.

Ошибки:

КодcodeПричина
400bad_request{id} не в формате UUID
404not_foundРеестра с таким {id} нет
502fetch_failedСписок не получен или в нём нет доменов. Причина — в message, она же записывается в last_error реестра. last_fetch_at и entry_count не меняются

Примеры message при коде 502:

  • реестр ответил 404 Not Found — сервер списка вернул не код 200;
  • ответ реестра больше 64 МиБ — принимать нельзя, снимок был бы неполным;
  • в ответе реестра не найдено ни одного домена — источник отдал не тот формат или заглушку;
  • Get "https://registry.example.com/domains.txt": … — сетевая ошибка, после двоеточия идёт её текст, например слишком много редиректов.

Пробная загрузка списка

http
POST /api/v1/blocklist-sources/test

Скачивает список по адресу и показывает, что в нём распознано и какие домены команды в нём есть. Ничего не сохраняет и не меняет. В панели это кнопка Проверить рядом с полем Адрес списка.

ПолеТипОбязательностьОписание
urlстрокадаАдрес списка, начинается с http:// или https://

Ответ — код 200:

ПолеТипОписание
totalчислоСколько записей распознано в списке
sampleмассив строк или nullПервые записи списка, не больше 20. null, если записей нет
matchedмассив строкДомены из раздела Домены, найденные в списке, по алфавиту. Пустой массив, если совпадений нет
bash
curl -X POST https://panel.example.com/api/v1/blocklist-sources/test \
  -H "Api-Key: <токен>" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://registry.example.com/domains.txt"}'
json
{
  "total": 48213,
  "sample": ["blocked-one.example", "blocked-two.example"],
  "matched": ["go.example.com"]
}

Если total равен 0, по адресу нет списка доменов в распознаваемом формате.

Ошибки:

КодcodeПричина
422validationТело не разобрано или url начинается не с http:// и не с https://. message — нужен http(s)-адрес реестра
502fetch_failedСписок не получен. Причина — в message

Журнал замен

Список замен

http
GET /api/v1/domain-replacements

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

ПараметрТипОбязательностьОписание
limitчислонетСколько записей вернуть. По умолчанию 100, максимум 500. При значении вне диапазона от 1 до 500 возвращается 100 записей

Ответ — код 200 и массив записей. Если замен не было, приходит пустой массив.

ПолеТипОписание
idстрока, UUIDИдентификатор записи. Нужен для отката
workspace_idстрока, UUIDИдентификатор команды
stream_idстрока, UUID или nullПоток, в котором заменён домен. null, если поток удалён
campaign_idстрока, UUID или nullКампания потока. null, если кампания удалена
stream_nameстрокаНазвание потока на момент замены
old_domainстрокаДомен, который стоял в потоке
new_domainстрокаДомен из резервной группы, поставленный вместо него
geoстрокаКод страны реестра
reasonстрокаПричина, например домен найден в реестре PL (запись «example.com»)
revertedлогическоеtrue, если замена откачена
created_atдатаВремя замены

Откатить замену

http
POST /api/v1/domain-replacements/{id}/revert

Возвращает в поток прежний домен и снимает с него метку «в реестре». {id} — идентификатор записи журнала. Тело запроса не нужно.

В ссылке потока меняется только домен. Запись журнала получает reverted: true. Если домен по-прежнему есть в списке, следующая проверка снова пометит и заменит его.

Ответ — код 204 без тела.

Ошибки:

КодcodemessageПричина
400bad_requestнекорректный идентификатор или значение{id} не в формате UUID
404not_foundresource not foundЗаписи с таким {id} нет
409conflictзамена уже откаченаЗапись уже отменена
409conflictв потоке уже другой домен — откат не нуженСсылку в потоке изменили после замены
410goneпоток удалён — откатывать нечегоПотока больше нет или его кампания в архиве
422validationне удалось разобрать ссылку потокаСсылка в потоке не разбирается как адрес

Ограничение частоты

POST /api/v1/blocklist-sources/{id}/check и POST /api/v1/blocklist-sources/test принимают не больше 10 запросов в минуту с одного IP-адреса. Счётчик общий для обоих методов. В него попадают и нажатия кнопки Проверить в панели с того же IP-адреса, а также запросы активации лицензии и сохранения настроек IP2Proxy. При превышении приходит код 429:

json
{"code": "rate_limited", "message": "слишком много запросов, попробуйте позже"}

Повторите запрос через минуту. На остальные методы группы ограничение не действует.

Обновлено Нужна помощь? ↗