Admin API: домены
Одиннадцать методов Admin API для доменов: список, добавление, настройки, проверка, группы и доступ к ним, направление на proxy-сервер.
Через API доступны те же действия, что и в разделе панели Домены: добавить домен, поменять его настройки, запустить проверку, собрать домены в группы и направить их на ноду. Все методы требуют токен с доступом Полный доступ (full). Авторизация описана на странице Admin API: обзор и авторизация, формат ответов и ошибок — на странице Формат запросов, ответов и ошибок.
Объект домена
| Поле | Тип | Описание |
|---|---|---|
id | строка, UUID | ID домена |
name | строка | Имя домена в нижнем регистре |
cloudflare | логическое | Домен добавлен как домен за Cloudflare |
dns_status | строка | Состояние DNS на момент добавления: proxied — домен за Cloudflare указывал на сеть Cloudflare, pending — в остальных случаях. Текущее состояние смотрите в health |
ssl_status | строка | Служебное поле. Состояние сертификата смотрите в health.tls |
group_id | строка, UUID или null | Группа домена |
group_name | строка или null | Название группы |
no_index | логическое | Запрет индексации домена поисковиками |
index_campaign_id | строка, UUID или null | Кампания, которая открывается на корне домена |
index_campaign | строка или null | Название этой кампании |
campaign_count | число | Сколько кампаний используют домен |
proxy_node_id | строка, UUID или null | Нода, на которую направлен домен |
blocked | логическое | Домен найден в реестре блокировок |
blocked_at | строка, дата RFC 3339 | Когда домен найден в реестре. Поля нет, если домен не в реестре |
blocked_source | строка | Название или адрес реестра. Поля нет, если домен не в реестре |
health | объект | Результат последней проверки. Поля нет, пока домен не проверялся |
Блок health
| Поле | Тип | Описание |
|---|---|---|
ready | логическое | true, когда все четыре этапа успешны, а у домена за Cloudflare ещё и proxy равен proxied |
dns, http, https, tls | объект | Этап проверки: state — ok, warning, error или pending; message — текст результата; status — код ответа HTTP, если ответ получен |
addresses | массив строк | Адреса, которые вернул DNS. Поля нет, если адреса не получены |
proxy | строка | proxied — все адреса принадлежат сети Cloudflare, direct — не все. Поля нет, если адреса не получены |
certificate_expires | строка, дата RFC 3339 | Срок действия сертификата. Поля нет, если сертификат не получен |
checked_at | строка, дата RFC 3339 | Время проверки |
next_check_at | строка, дата RFC 3339 | Время следующей автоматической проверки |
attempts | число | Число неудачных проверок подряд |
Что означает каждое сообщение этапа — на странице Проверка домена.
Домены
Список доменов
GET /api/v1/domainsВозвращает все домены команды. Параметров и постраничности нет.
Ответ — код 200 и массив объектов домена. Недавно добавленные идут первыми. Если доменов нет, приходит пустой массив [].
Добавить домены
POST /api/v1/domainsДобавляет один или несколько доменов с одинаковыми настройками.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
name | строка | да | Имя домена. Несколько имён разделяйте запятой, пробелом или переводом строки |
cloudflare | логическое | нет | Домен за Cloudflare. По умолчанию false |
group_id | строка, UUID | нет | Группа, в которую попадут домены |
new_group | строка | нет | Название новой группы. Группа создаётся, и домены попадают в неё. Не учитывается, если передан group_id |
no_index | логическое | нет | Запрет индексации. По умолчанию true |
index_campaign_id | строка, UUID | нет | Кампания на корне домена |
Ответ — код 201 и объект с массивом items: добавленные домены. Поля group_name, index_campaign, campaign_count и health в этом ответе не заполнены — читайте их запросом списка.
Имена приводятся к нижнему регистру. Домен, который уже есть в трекере, пропускается без ошибки и в items не попадает.
При cloudflare: true трекер проверяет, куда указывает DNS домена. Если домен указывает не на сеть Cloudflare, он не добавляется. Если DNS ещё не отвечает, домен добавляется со статусом pending. Подробнее — на странице Работа с Cloudflare.
Ошибки:
| Код | code | Когда |
|---|---|---|
422 | validation | Поле name пустое или тело не разобрано. Сообщение — name is required |
422 | cloudflare_not_proxied | Часть доменов за Cloudflare не проксирована. Их имена перечислены в сообщении |
400 | bad_request | group_id или index_campaign_id — не UUID. Сообщение — некорректный идентификатор или значение |
При ответе 422 с кодом cloudflare_not_proxied остальные домены из запроса уже добавлены. Перед повтором запросите список и отправьте только недостающие имена.
Пример запроса:
curl -X POST https://panel.example.com/api/v1/domains \
-H "Api-Key: <токен>" \
-H "Content-Type: application/json" \
-d '{"name":"track.example.com","new_group":"Nutra PL","no_index":true}'Пример ответа:
{
"items": [
{
"id": "3f2a9c1e-5b7d-4e8f-a1b2-c3d4e5f6a7b8",
"name": "track.example.com",
"ssl_status": "pending",
"dns_status": "pending",
"cloudflare": false,
"group_id": "9d8c7b6a-1f2e-4d3c-b5a4-0e9f8d7c6b5a",
"group_name": null,
"no_index": true,
"index_campaign_id": null,
"index_campaign": null,
"campaign_count": 0,
"proxy_node_id": null,
"blocked": false
}
]
}Изменить домен
PUT /api/v1/domains/{id}Меняет настройки домена с ID из пути. Меняются только переданные поля. Имя домена изменить нельзя.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
cloudflare | логическое | нет | Признак домена за Cloudflare |
group_id | строка, UUID | нет | Перенести домен в эту группу |
clear_group | логическое | нет | true — убрать домен из группы. Важнее, чем group_id |
no_index | логическое | нет | Запрет индексации |
index_campaign_id | строка, UUID | нет | Кампания на корне домена |
clear_index | логическое | нет | true — убрать кампанию с корня домена. Важнее, чем index_campaign_id |
Значения null и пустая строка в group_id и index_campaign_id ничего не меняют. Чтобы снять значение, передайте clear_group или clear_index.
Ответ — код 200 и объект домена после изменения.
Если домен после изменения считается доменом за Cloudflare, трекер снова проверяет его DNS. Когда домен указывает не на сеть Cloudflare, запрос отклоняется целиком и ни одно поле не меняется.
Ошибки:
| Код | code | Когда |
|---|---|---|
400 | bad_request | Тело не разобрано или ID — не UUID |
404 | not_found | Домена с таким ID нет |
422 | cloudflare_not_proxied | Домен за Cloudflare не проксирован |
Проверить домен
POST /api/v1/domains/{id}/verifyЗапускает проверку DNS, HTTP, HTTPS и сертификата и ждёт её окончания. Тело не нужно.
Ответ — код 200 и объект с двумя полями: dns_status и health. Формат health — в разделе Блок health. dns_status здесь — pending, если этап dns не в состоянии ok, иначе значение health.proxy: proxied или direct.
Ошибки:
| Код | code | Когда |
|---|---|---|
400 | bad_request | ID — не UUID |
404 | not_found | Домена с таким ID нет |
409 | check_running | Домен уже проверяется. Запросите список через несколько секунд |
429 | rate_limit | Больше 20 проверок в минуту на всю команду. Повторите через минуту |
Удалить домен
DELETE /api/v1/domains/{id}Удаляет домен. В корзину домен не попадает. Кампании, которые его использовали, остаются без домена.
Ответ — код 204 без тела. Если домена с таким ID нет — 404 с кодом not_found, если ID — не UUID — 400 с кодом bad_request.
Группы доменов
Группы определяют, какие домены видят баеры и верстальщики. Подробнее — на странице Группы доменов и доступ баеров.
Список групп
GET /api/v1/domain-groupsОтвет — код 200 и массив групп, отсортированный по названию.
| Поле | Тип | Описание |
|---|---|---|
id | строка, UUID | ID группы |
name | строка | Название |
domain_count | число | Число доменов в группе |
shared_to | массив строк | ID пользователей, которым открыта группа |
Создать группу
POST /api/v1/domain-groups| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
name | строка | да | Название группы. Пробелы по краям убираются |
Ответ — код 201 и объект группы с пустым shared_to и domain_count, равным 0. Если name пустое или тело не разобрано — 422 с кодом validation и сообщением name is required.
Удалить группу
DELETE /api/v1/domain-groups/{id}Удаляет группу. Домены остаются в трекере без группы, доступ пользователей к ним через эту группу пропадает.
Ответ — код 204 без тела. Если группы нет — 404 с кодом not_found, если ID — не UUID — 400 с кодом bad_request.
Открыть группу пользователям
POST /api/v1/domain-groups/{id}/shareЗадаёт список пользователей, которым видна группа и её домены. Список заменяется целиком.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
user_ids | массив строк, UUID | нет | ID пользователей. Пустой массив или запрос без поля закрывает группу для всех |
ID, которых нет в команде, пропускаются без ошибки. ID пользователей отдаёт метод списка на странице Admin API: пользователи.
Ответ — код 204 без тела.
Ошибки: 400 с кодом bad_request — тело не разобрано или ID — не UUID; 404 с кодом not_found — группы нет.
Пример запроса:
curl -X POST https://panel.example.com/api/v1/domain-groups/9d8c7b6a-1f2e-4d3c-b5a4-0e9f8d7c6b5a/share \
-H "Api-Key: <токен>" \
-H "Content-Type: application/json" \
-d '{"user_ids":["1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d"]}'Направление на proxy-сервер
Оба метода выставляют проксированную A-запись домена на адрес ноды через аккаунт Cloudflare, добавленный в трекер, и запоминают привязку. Нода должна быть в статусе ready. Подготовка описана на страницах Proxy-серверы и Работа с Cloudflare, методы нод и аккаунтов — на странице Admin API: proxy-серверы и Cloudflare.
Направить домен на ноду
POST /api/v1/domains/{id}/routeНаправляет домен с ID из пути на ноду.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
node_id | строка, UUID | да | ID ноды |
Ответ — код 200 и объект: ok — true, node_ip — адрес ноды.
Ошибки:
| Код | code | Когда |
|---|---|---|
400 | bad_request | ID домена или node_id — не UUID |
404 | not_found | Домена или ноды с таким ID нет |
422 | validation | Не передан node_id или тело не разобрано |
422 | not_ready | Нода не готова. Её статус указан в сообщении |
422 | cf_error | A-запись выставить не удалось. Причина — в сообщении. Текст not found означает, что зона домена не найдена ни в одном добавленном аккаунте Cloudflare |
503 | disabled | Proxy-серверы на этой установке выключены |
Направить несколько доменов
POST /api/v1/domains/route-bulkНаправляет на одну ноду до 500 доменов за запрос.
| Поле | Тип | Обязательность | Описание |
|---|---|---|---|
node_id | строка, UUID | да | ID ноды |
domain_ids | массив строк, UUID | да | ID доменов, от 1 до 500 |
Ответ — код 200, даже если часть доменов направить не удалось. Проверяйте массив failed.
| Поле | Тип | Описание |
|---|---|---|
routed | число | Сколько доменов направлено |
failed | массив объектов | Домены, которые направить не удалось. У ненайденного домена — id и error с текстом домен не найден, у остальных — domain с именем и error с причиной. Пустой массив, если направлены все |
node_ip | строка | Адрес ноды |
Ошибки те же, что у предыдущего метода, кроме cf_error: причины по каждому домену приходят в failed. Коды 400 и 404 относятся только к ноде: домен с неверным или незнакомым ID попадает в failed. Код validation возвращается также при пустом domain_ids и при списке длиннее 500 ID.