Selectel API API
Отрасль: Облака и хостинг. Актуально на 2026-10-24.
Набор API облачного провайдера Selectel: аутентификация и IAM, облачные проекты и ресурсы (Resell API), биллинг, DNS-хостинг, выделенные серверы, Managed Kubernetes, облачные базы данных, объектное хранилище, Container Registry, сертификаты, секреты, аудит-логи и др. Сами облачные серверы, диски и сети создаются через OpenStack API. У каждого продукта свой базовый адрес, для части сервисов он зависит от пула (региона).
Сценарии
Получить IAM-токен сервисного пользователя
Первый шаг автоматизации Selectel: токен для API проектов, DNS и облачных ресурсов.
- Создай сервисного пользователя в панели управления с нужными ролями — для рабочих интеграций документация рекомендует именно их.
- Получи токен: POST /identity/v3/auth/tokens на cloud.api.selcloud.ru с методом password — имя сервисного пользователя, ID аккаунта как domain и пароль. scope = domain даёт токен аккаунта, scope = project — токен проекта.
- Токен приходит в заголовке ответа 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-записью.
- Получи зоны: GET /domains/v2/zones с токеном проекта — найди id своей зоны. Новую зону создаёт POST /domains/v2/zones (имя с точкой в конце).
- Добавь запись: POST /domains/v2/zones/{zone_id}/rrset с name (полное имя с точкой в конце), type, ttl (60–604800) и records — списком content.
- Найти существующую запись — 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"}]}'
Следить за балансом и прогнозом расходов
Не допустить отключения серверов из-за нулевого баланса.
- Запроси балансы: GET /v3/balances — в data.billings для каждого вида биллинга итоговая сумма final_sum и долг debt_sum.
- Запроси прогноз: GET /v2/billing/prediction — на сколько часов хватит остатка по облаку, хранилищу и другим услугам.
- Для этих методов подходит статический токен (заголовок 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
Отдельный проект под клиента или окружение — с квотами и внешними адресами.
- Создай проект: POST /vpc/resell/v2/projects с project.name. Список проектов — GET /vpc/resell/v2/projects, проект с квотами — GET /vpc/resell/v2/projects/{project_id}.
- Выдели публичные IP: POST /vpc/resell/v2/floatingips/projects/{project_id} с floatingips — количеством (quantity) и регионом (region).
- Сами серверы, диски и сети в проекте создаются через 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
- Боевой:
https://api.selectel.ru
- Identity (токены):
https://cloud.api.selcloud.ru
- Адреса по сервисам:
https://api.selectel.ru/vpc/resell/v2
Авторизация
Тип: Другое
- IAM-токен аккаунта (
iam_token_account_scoped) или проекта (iam_token_project_scoped) — заголовок X-Auth-Token, живёт 24 часа. Получается запросом POST https://cloud.api.selcloud.ru/identity/v3/auth/tokens (метод password: имя сервисного пользователя, ID аккаунта как домен, пароль; scope — domain или project). Токен возвращается в заголовке ответа X-Subject-Token, код 201.
- Статический токен (
static_token) — заголовок X-Token, без срока действия, только для пользователей панели; не работает с OpenStack API. Нужен для отчётов биллинга, тикетов, учёта IP.
Для рабочих интеграций документация рекомендует сервисных пользователей.
Методы
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 набора записей |
Нюансы
- Облачные серверы, сети и диски создаются через OpenStack API; Resell API управляет проектами, квотами, публичными IP, подсетями и трафиком.
- Методы
/v2/keypairs и лицензий в Resell API устарели и будут удалены — для SSH-ключей используйте Nova API.
- Имена зон и записей DNS — полные, с точкой в конце.
- Для пулов в Центральной Азии и Кении используются хосты
*.servercore.com.
- У каждого API есть OpenAPI-спецификация в JSON на странице документации (например,
https://docs.selectel.ru/api/dns-actual.json).
Ошибки
| Код |
Описание |
400 |
Неверный запрос |
401 |
Нет или неверный токен |
403 |
Недостаточно прав |
404 |
Объект не найден |
409 |
Конфликт |
422 |
Ошибка валидации |
500 |
Внутренняя ошибка |
Ограничения
- IAM-токен живёт 24 часа.
- DNS: TTL 60–604800 секунд, до 100 записей в наборе.
Источники
Если этого недостаточно — официальная документация: https://docs.selectel.ru/api/
JSON: https://mcp-everything.ru/api/integrations/selectel. MCP: https://mcp-everything.ru/mcp