Admin API: proxy-серверы и Cloudflare
Семь методов Admin API: список, добавление, проверка и удаление proxy-серверов и аккаунтов Cloudflare, через которые трекер меняет A-записи доменов.
Через API доступны те же действия, что и в разделе панели Proxy-серверы: добавить ноду, проверить её, удалить, подключить и отключить аккаунт Cloudflare. Все методы требуют токен с доступом Полный доступ (full). Авторизация описана на странице Admin API: обзор и авторизация, формат запросов и ошибок — на странице Формат запросов, ответов и ошибок.
Общие правила
- Записи принадлежат команде: токен видит и меняет только ноды и аккаунты своей команды.
- Метода изменения нет ни у ноды, ни у аккаунта Cloudflare. Чтобы поменять параметры, удалите запись и создайте новую.
- Постраничности и фильтров в списках нет.
- Пароль SSH и токен Cloudflare принимаются только при создании. Ни один метод их не возвращает.
- Если в адресе вместо
{id}передано значение, которое не является UUID, ответ —400с кодомbad_requestи сообщениемнекорректный идентификатор или значение. - При неактивной лицензии методы отвечают
402— см. Истёкшая лицензия.
Направление доменов на ноду — отдельные методы POST /api/v1/domains/{id}/route и POST /api/v1/domains/route-bulk, они описаны на странице Admin API: домены.
Proxy-серверы
Объект ноды
| Поле | Тип | Описание |
|---|---|---|
id | строка, UUID | ID ноды |
workspace_id | строка, UUID | ID команды |
label | строка | Название ноды |
ip | строка | IPv4-адрес ноды |
ssh_port | число | Порт SSH |
ssh_user | строка | Пользователь SSH |
status | строка | Состояние: new, provisioning, ready или error |
last_error | строка | Текст последней ошибки. Поля нет, если ошибок не было или после неё прошла успешная проверка |
last_seen | строка, дата RFC 3339 | Время последней успешной настройки или проверки. Поля нет, пока настройка не завершилась |
created_at | строка, дата RFC 3339 | Время добавления |
host_key_fingerprint | строка | Отпечаток SSH-ключа ноды вида SHA256:…. Есть только в списке и только после успешной настройки |
Значения status:
| Значение | В панели | Что означает |
|---|---|---|
new | «новая» | Нода создана, настройка не началась |
provisioning | «настройка…» | Трекер настраивает ноду по SSH |
ready | «готова» | На ноду можно направлять домены |
error | «ошибка» | Настройка не удалась или нода перестала отвечать. Причина — в last_error |
Список нод
GET /api/v1/proxy-nodesВозвращает все ноды команды.
Права токена: full. Параметров нет.
Ответ — код 200 и массив объектов ноды. Новые ноды идут первыми. Если нод нет, приходит пустой массив [].
[
{
"id": "5d2f8c14-9a3b-4e7d-b1c6-0f8e7d6c5b4a",
"workspace_id": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"label": "DE-1",
"ip": "203.0.113.10",
"ssh_port": 22,
"ssh_user": "root",
"status": "ready",
"last_seen": "2026-10-04T09:15:42.118204Z",
"created_at": "2026-10-04T09:14:10.552871Z",
"host_key_fingerprint": "SHA256:Zk3v0q1mYb7Qe2xL9aHn4TtR8sWc5uJd6oPfGiK1lMw"
}
]Добавить ноду
POST /api/v1/proxy-nodesСоздаёт ноду и запускает её настройку по SSH. Требования к серверу — на странице Proxy-серверы.
Права токена: full. Тело — JSON-объект:
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
ip | строка | да | IPv4-адрес сервера, например 203.0.113.10. Адреса IPv6 и имена хостов не принимаются |
ssh_password | строка | да | Пароль пользователя SSH. Используется один раз при настройке и не сохраняется |
label | строка | нет | Название ноды. Пробелы по краям убираются. Без него названием станет IP |
ssh_port | целое число | нет | Порт SSH. По умолчанию 22, значение 0 тоже означает 22 |
ssh_user | строка | нет | Пользователь SSH. По умолчанию root |
expected_host_key | строка | нет | Отпечаток SSH-ключа сервера в формате SHA256, с префиксом SHA256: или без него. Если отпечаток сервера другой, пароль не отправляется и настройка завершается ошибкой |
Ответ — код 201:
| Поле | Тип | Описание |
|---|---|---|
item | объект | Созданная нода, status равен provisioning |
origin_hint | строка | Текст подсказки на русском, который панель показывает после добавления |
Настройка идёт в фоне, на неё отводится до 3 минут. Ответ приходит сразу и результата настройки не содержит. Запрашивайте список нод и ждите, пока status сменится на ready или error. После ready подождите около минуты: сервер трекера сам начнёт принимать запросы с этой ноды.
Ошибки:
| Код | code | message | Когда |
|---|---|---|---|
400 | bad_request | invalid json | Тело не является JSON-объектом |
422 | validation | ip и ssh_password обязательны | Не передано одно из обязательных полей |
422 | validation | ip должен быть IPv4-адресом ноды | В ip не IPv4-адрес |
422 | validation | expected_host_key: ожидается SHA256-отпечаток host-key ноды… | Значение expected_host_key не похоже на отпечаток SHA256 |
503 | disabled | зависит от причины | Proxy-серверы на установке не настроены — см. Когда функция выключена |
Ошибки самой настройки — неверный пароль, недоступный сервер, несовпадение отпечатка — в ответ не попадают. Они записываются в last_error ноды со статусом error. Тексты разобраны на странице Proxy-серверы.
Пример запроса:
curl -X POST https://panel.example.com/api/v1/proxy-nodes \
-H "Api-Key: <токен>" \
-H "Content-Type: application/json" \
-d '{"label":"DE-1","ip":"203.0.113.10","ssh_port":22,"ssh_user":"root","ssh_password":"<пароль SSH>"}'Проверить ноду
POST /api/v1/proxy-nodes/{id}/healthПодключается к ноде по SSH с сохранённым ключом и проверяет, что веб-сервер на ней запущен. Проверка длится до 25 секунд.
Права токена: full. Тела запроса нет. В адресе {id} — ID ноды из списка.
Ответ — код 200 в обоих случаях, результат в поле status:
| Поле | Тип | Описание |
|---|---|---|
status | строка | ready — нода ответила, error — проверка не прошла |
error | строка | Текст ошибки. Есть только при status = error |
{"status": "ready"}При успехе обновляется last_seen ноды, её status становится ready, а last_error очищается. При неудаче текст ошибки с пометкой ручная проверка: записывается в last_error, а status самой ноды не меняется. Автоматический контроль нод и перенос доменов описаны на странице Proxy-серверы.
Ошибки:
| Код | code | message | Когда |
|---|---|---|---|
400 | bad_request | некорректный идентификатор или значение | {id} не UUID |
404 | not_found | resource not found | Ноды с таким ID нет |
422 | not_provisioned | нода ещё не провижена | Настройка ноды ещё не завершилась или не удалась |
503 | disabled | NODE_ENC_KEY не задан | Proxy-серверы на установке не настроены |
Пример запроса:
curl -X POST https://panel.example.com/api/v1/proxy-nodes/5d2f8c14-9a3b-4e7d-b1c6-0f8e7d6c5b4a/health \
-H "Api-Key: <токен>"Удалить ноду
DELETE /api/v1/proxy-nodes/{id}Удаляет ноду из трекера и снимает привязку её доменов.
Права токена: full. Тела запроса нет. В адресе {id} — ID ноды из списка.
Ответ — код 204 без тела.
Если ноды с таким ID нет или она уже удалена, ответ — 404 с кодом not_found.
DNS-записи в Cloudflare при удалении не меняются. Домены, которые указывают на IP удалённой ноды, перестанут открываться. Сначала направьте их на другую ноду.
Аккаунты Cloudflare
Аккаунт — сохранённый API-токен Cloudflare. Через него трекер ставит A-запись домена на IP ноды. Какие права нужны токену и что трекер делает в DNS — на странице Работа с Cloudflare.
Объект аккаунта
| Поле | Тип | Описание |
|---|---|---|
id | строка, UUID | ID аккаунта |
label | строка | Название |
created_at | строка, дата RFC 3339 | Время добавления |
Список аккаунтов
GET /api/v1/cf-accountsВозвращает подключённые аккаунты Cloudflare команды без токенов.
Права токена: full. Параметров нет.
Ответ — код 200 и массив объектов аккаунта в порядке добавления. Если аккаунтов нет, приходит пустой массив [].
Подключить аккаунт
POST /api/v1/cf-accountsПроверяет токен Cloudflare запросом списка зон и сохраняет его.
Права токена: full. Тело — JSON-объект:
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
token | строка | да | API-токен Cloudflare |
label | строка | нет | Название. Без него названием станет Cloudflare (N зон), где N — число зон, доступных токену |
Ответ — код 201:
| Поле | Тип | Описание |
|---|---|---|
item | объект | Созданный аккаунт |
zones | число | Сколько зон доступно токену |
Ошибки:
| Код | code | message | Когда |
|---|---|---|---|
422 | validation | token обязателен | Поле token пустое, состоит из пробелов или тело не является JSON-объектом |
422 | cf_error | токен не прошёл проверку: … | Cloudflare не отдал список зон по этому токену. После двоеточия — причина |
503 | disabled | шифрование не настроено: задайте NODE_ENC_KEY | Proxy-серверы на установке не настроены |
Пример запроса:
curl -X POST https://panel.example.com/api/v1/cf-accounts \
-H "Api-Key: <токен>" \
-H "Content-Type: application/json" \
-d '{"label":"Основной аккаунт","token":"<API-токен Cloudflare>"}'Отключить аккаунт
DELETE /api/v1/cf-accounts/{id}Удаляет сохранённый токен Cloudflare.
Права токена: full. Тела запроса нет. В адресе {id} — ID аккаунта из списка.
Ответ — код 204 без тела. DNS-записи в Cloudflare не меняются. Домены этого аккаунта трекер больше не сможет направлять на ноды.
Если аккаунта с таким ID нет или он уже удалён, ответ — 404 с кодом not_found.
Когда функция выключена
Код 503 с code = disabled означает, что на сервере трекера не заданы параметры proxy-серверов: NODE_ENC_KEY или NODE_ORIGIN_HOST. Установщик записывает оба параметра сам, поэтому на установке, развёрнутой по странице Установка, этот ответ не появляется.
При добавлении ноды текст в message зависит от того, какого параметра нет:
фича прокси-нод выключена: задайте NODE_ENC_KEY (openssl rand -hex 32);NODE_ORIGIN_HOST не задан (адрес origin для нод).
Списки и удаление работают и без этих параметров: GET и DELETE ответ disabled не возвращают.