Selectel API API

Отрасль: Облака и хостинг. Актуально на 2026-10-24.

Набор API облачного провайдера Selectel: аутентификация и IAM, облачные проекты и ресурсы (Resell API), биллинг, DNS-хостинг, выделенные серверы, Managed Kubernetes, облачные базы данных, объектное хранилище, Container Registry, сертификаты, секреты, аудит-логи и др. Сами облачные серверы, диски и сети создаются через OpenStack API. У каждого продукта свой базовый адрес, для части сервисов он зависит от пула (региона).

Сценарии

Получить IAM-токен сервисного пользователя

Первый шаг автоматизации Selectel: токен для API проектов, DNS и облачных ресурсов.

  1. Создай сервисного пользователя в панели управления с нужными ролями — для рабочих интеграций документация рекомендует именно их.
  2. Получи токен: POST /identity/v3/auth/tokens на cloud.api.selcloud.ru с методом password — имя сервисного пользователя, ID аккаунта как domain и пароль. scope = domain даёт токен аккаунта, scope = project — токен проекта.
  3. Токен приходит в заголовке ответа X-Subject-Token с кодом 201 и живёт 24 часа. Передавай его в заголовке X-Auth-Token.
TOKEN=$(curl -si -X POST https://cloud.api.selcloud.ru/identity/v3/auth/tokens \
  -H 'Content-Type: application/json' \
  -d '{"auth": {
        "identity": {"methods": ["password"], "password": {"user": {
          "name": "<сервисный пользователь>", "domain": {"name": "<ID аккаунта>"}, "password": "<пароль>"}}},
        "scope": {"domain": {"name": "<ID аккаунта>"}}}}' \
  | grep -i '^x-subject-token' | cut -d' ' -f2 | tr -d '\r')

Управлять DNS-записями домена

Автоматически добавлять поддомены для клиентов, менять записи при переезде, подтверждать домен TXT-записью.

  1. Получи зоны: GET /domains/v2/zones с токеном проекта — найди id своей зоны. Новую зону создаёт POST /domains/v2/zones (имя с точкой в конце).
  2. Добавь запись: POST /domains/v2/zones/{zone_id}/rrset с name (полное имя с точкой в конце), type, ttl (60–604800) и records — списком content.
  3. Найти существующую запись — GET /domains/v2/zones/{zone_id}/rrset с name или search; изменить — PATCH /domains/v2/zones/{zone_id}/rrset/{rrset_id} с ttl и новым records (ответ 204); удалить — DELETE по тому же адресу.
curl -X POST "https://api.selectel.ru/domains/v2/zones/<zone_id>/rrset" \
  -H "X-Auth-Token: $TOKEN" -H 'Content-Type: application/json' \
  -d '{"name": "shop.example.ru.", "type": "A", "ttl": 300, "records": [{"content": "203.0.113.10"}]}'

Следить за балансом и прогнозом расходов

Не допустить отключения серверов из-за нулевого баланса.

  1. Запроси балансы: GET /v3/balances — в data.billings для каждого вида биллинга итоговая сумма final_sum и долг debt_sum.
  2. Запроси прогноз: GET /v2/billing/prediction — на сколько часов хватит остатка по облаку, хранилищу и другим услугам.
  3. Для этих методов подходит статический токен (заголовок X-Token) или IAM-токен аккаунта. Проверяй по расписанию и шли себе предупреждение, когда прогноз меньше пары суток.
curl https://api.selectel.ru/v3/balances -H "X-Token: $SELECTEL_STATIC_TOKEN"
curl https://api.selectel.ru/v2/billing/prediction -H "X-Token: $SELECTEL_STATIC_TOKEN"

Создать облачный проект и выделить публичные IP

Отдельный проект под клиента или окружение — с квотами и внешними адресами.

  1. Создай проект: POST /vpc/resell/v2/projects с project.name. Список проектов — GET /vpc/resell/v2/projects, проект с квотами — GET /vpc/resell/v2/projects/{project_id}.
  2. Выдели публичные IP: POST /vpc/resell/v2/floatingips/projects/{project_id} с floatingips — количеством (quantity) и регионом (region).
  3. Сами серверы, диски и сети в проекте создаются через OpenStack API с токеном проекта.
PROJECT=$(curl -s -X POST https://api.selectel.ru/vpc/resell/v2/projects \
  -H "X-Auth-Token: $TOKEN" -H 'Content-Type: application/json' \
  -d '{"project": {"name": "client-1042"}}' | jq -r .project.id)

curl -X POST "https://api.selectel.ru/vpc/resell/v2/floatingips/projects/$PROJECT" \
  -H "X-Auth-Token: $TOKEN" -H 'Content-Type: application/json' \
  -d '{"floatingips": [{"quantity": 1, "region": "ru-9"}]}'

Базовые URL

Авторизация

Тип: Другое

Для рабочих интеграций документация рекомендует сервисных пользователей.

Методы

POST /identity/v3/auth/tokens — Получение IAM-токена

Вызывается на https://cloud.api.selcloud.ru.

Параметр Где Тип Обяз. Описание
Content-Type header string да application/json
auth.identity.methods body array да ["password"]
auth.identity.password.user.name body string да Имя сервисного пользователя
auth.identity.password.user.domain.name body string да ID аккаунта
auth.identity.password.user.password body string да Пароль
auth.scope body object да domain (токен аккаунта) или project с именем проекта

GET /v3/balances — Балансы аккаунта

В ответе data.settings (mode, currency), data.billings[] (billing_type, final_sum, debt_sum, balances[]), data.debt_status.

Параметр Где Тип Обяз. Описание
X-Token header string да Статический токен или IAM-токен аккаунта (X-Auth-Token)

GET /v2/billing/prediction — Прогноз баланса

Сколько часов хватит остатка: data.primary, data.storage, data.vmware, data.vpc.

Параметр Где Тип Обяз. Описание
X-Token header string да Статический токен или IAM-токен аккаунта

GET /vpc/resell/v2/projects — Список проектов

Параметр Где Тип Обяз. Описание
X-Auth-Token header string да IAM-токен аккаунта
all query boolean нет Все проекты аккаунта (нужна роль iam.admin)

POST /vpc/resell/v2/projects — Создание проекта

Параметр Где Тип Обяз. Описание
project.name body string да Имя, 1–64 символа
project.description body string нет Описание, до 255 символов
project.skip_quotas_init body boolean нет Не инициализировать квоты

GET /vpc/resell/v2/projects/{project_id} — Проект и его квоты

Параметр Где Тип Обяз. Описание
project_id path string да ID проекта
exclude_quotas query boolean нет Не возвращать квоты (по умолчанию false)

DELETE /vpc/resell/v2/projects/{project_id} — Удаление проекта

Параметр Где Тип Обяз. Описание
project_id path string да ID проекта

GET /vpc/resell/v2/floatingips — Список публичных IP

Параметр Где Тип Обяз. Описание
detailed query boolean нет Расширенная информация

POST /vpc/resell/v2/floatingips/projects/{project_id} — Добавление публичных IP в проект

Параметр Где Тип Обяз. Описание
project_id path string да ID проекта
floatingips[].quantity body integer да Количество
floatingips[].region body string да Регион (пул)
floatingips[].ips body string нет Конкретные адреса

GET /vpc/resell/v2/traffic/report — Отчёт по трафику

Параметр Где Тип Обяз. Описание
start_date query string да Начало периода (дата)
end_date query string да Конец периода (дата)

GET /domains/v2/zones — Список DNS-зон

Параметр Где Тип Обяз. Описание
X-Auth-Token header string да IAM-токен проекта
limit query integer нет Сколько вернуть, по умолчанию 1000
offset query integer нет Смещение, по умолчанию 0
filter query string нет Фильтр по имени
sort_by query array нет Сортировка, по умолчанию name.ascend

POST /domains/v2/zones — Создание DNS-зоны

Параметр Где Тип Обяз. Описание
name body string да Доменное имя зоны (оканчивается точкой)

GET /domains/v2/zones/{zone_id}/rrset — Записи зоны

Параметр Где Тип Обяз. Описание
zone_id path string да UUID зоны
limit query integer нет По умолчанию 1000
offset query integer нет Смещение
rrset_types query array нет Фильтр по типу
name query string нет Фильтр по имени
search query string нет Поиск по имени или содержимому

POST /domains/v2/zones/{zone_id}/rrset — Создание набора записей

Параметр Где Тип Обяз. Описание
zone_id path string да UUID зоны
name body string да Имя (FQDN с точкой в конце)
ttl body integer да 60–604800 секунд
type body string да A, AAAA, ALIAS, CAA, CNAME, DNAME, HTTPS, MX, NS, SOA, SRV, SVCB, SSHFP, TXT
records body array да 1–100 записей: content, disabled
comment body string нет Комментарий

PATCH /domains/v2/zones/{zone_id}/rrset/{rrset_id} — Изменение набора записей

Успех — 204.

Параметр Где Тип Обяз. Описание
zone_id path string да UUID зоны
rrset_id path string да UUID набора записей
ttl body integer да 60–604800 секунд
records body array да Новый список записей
comment body string нет Комментарий

DELETE /domains/v2/zones/{zone_id}/rrset/{rrset_id} — Удаление набора записей

Параметр Где Тип Обяз. Описание
zone_id path string да UUID зоны
rrset_id path string да UUID набора записей

Нюансы

Ошибки

Код Описание
400 Неверный запрос
401 Нет или неверный токен
403 Недостаточно прав
404 Объект не найден
409 Конфликт
422 Ошибка валидации
500 Внутренняя ошибка

Ограничения

Источники


Если этого недостаточно — официальная документация: https://docs.selectel.ru/api/ JSON: https://mcp-everything.ru/api/integrations/selectel. MCP: https://mcp-everything.ru/mcp