VPS.org API

Документация REST API

API управления DNS

Создание зон DNS и ведение их записей. Зоны обслуживаются ns1.vps.org, ns2.vps.org и ns3.vps.org.

Конечные точки 13
Базовый путь /api/v1/dns-zones, /api/v1/dns-records

Обзор

Зона содержит записи для одного домена. Каждое изменение, сделанное через API, сразу же передаётся на серверы имён VPS.org. Чтобы домен обслуживался этими зонами, укажите у регистратора серверы имён ns1.vps.org, ns2.vps.org и ns3.vps.org.

Изменения сохраняются и публикуются в одном шаге: если имя серверов отказывается от изменения, запрос возвращает 502 и ничего не сохраняется. Зона не может быть создана для домена, который уже управляет другим счетом, родителя или ребенка из зоны другого счета, или VPS.org зарезервированное имя.

Требуемое разрешение: dns:list (GET), dns:create (POST), dns:update (PUT, PATCH, sync), dns:delete (DELETE), dns:*

ПОЛУЧАТЬ /api/v1/dns-zones/

Список всех DNS-зон

Возвращает ваши зоны, первые новые, 25 на страницу. Записи здесь не включены, чтобы получить их.

Параметры запроса

Параметр Тип Необходимый Описание
domain string Нет Возвращать только зону с точно этим доменным именем
page integer Нет Номер страницы, начиная с 1

Пример запроса

cURL
Python
JavaScript
curl -X GET "https://admin.vps.org/api/v1/dns-zones/?domain=example.com" \
  -H "Authorization: Bearer YOUR_API_TOKEN"
import requests

url = "https://admin.vps.org/api/v1/dns-zones/"
headers = {"Authorization": "Bearer YOUR_API_TOKEN"}

response = requests.get(url, headers=headers, params={"domain": "example.com"})
for zone in response.json()["results"]:
    print(zone["uuid"], zone["domain"], zone["record_count"])
const response = await fetch('https://admin.vps.org/api/v1/dns-zones/?domain=example.com', {
  headers: { 'Authorization': 'Bearer YOUR_API_TOKEN' }
});

const data = await response.json();
console.log(data.results);

Пример ответа

{
  "count": 1,
  "next": null,
  "previous": null,
  "results": [
    {
      "uuid": "c7a1e3f0-2b4d-4e6a-9c8b-0d1f2e3a4b5c",
      "domain": "example.com",
      "created_at": "2026-09-06T03:11:48.829693Z",
      "record_count": 5
    }
  ]
}

Поля ответа

Полевая Тип Описание
uuid string Идентификатор зоны
domain string Домен, записано в нижнем ящике
created_at datetime Время создания (ISO 8601, UTC)
record_count integer Количество записей в зоне, включая три национальных архива

Коды состояния ответа

200 Успех
403 Недопущенный или недействительный токен API или же знак не имеет требуемого разрешения
ДОЛЖНОСТНЫЕ ЛИЦА /api/v1/dns-zones/

Создать зону DNS

Создаёт зону и публикует ее. Зона начинается с трех записей NS для ns1, ns2 и ns3.vps.org, которые являются системными записями и не могут быть отредактированы или удалены.

Параметры тела запроса

Параметр Тип Необходимый Описание
domain string Да Домена, например, имя домена.com
curl -X POST "https://admin.vps.org/api/v1/dns-zones/" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domain": "example.com"}'

Пример ответа

{
  "uuid": "c7a1e3f0-2b4d-4e6a-9c8b-0d1f2e3a4b5c",
  "domain": "example.com",
  "created_at": "2026-09-14T21:02:11.402113Z",
  "records": [
    {
      "uuid": "1f2e3d4c-5b6a-4978-8a9b-0c1d2e3f4a5b",
      "record_type": "NS",
      "name": "@",
      "value": "ns1.vps.org",
      "ttl": 86400,
      "priority": null,
      "created_at": "2026-09-14"
    },
    ...
  ],
  "record_count": 3
}

Коды состояния ответа

201 Создана зона
400 Отсутствует или неверное имя домена
ПОЛУЧАТЬ /api/v1/dns-zones/{uuid}/

Получить подробную информацию о зоне DNS

Возвращает одну зону со всеми записями в массиве записей. Ответ имеет ту же форму, что и ответ на создание выше.

curl -X GET "https://admin.vps.org/api/v1/dns-zones/c7a1e3f0-2b4d-4e6a-9c8b-0d1f2e3a4b5c/" \
  -H "Authorization: Bearer YOUR_API_TOKEN"

Коды состояния ответа

200 Успех
404 Не найдена, или принадлежит другому счету.
УДАЛИТЬ /api/v1/dns-zones/{uuid}/

Удалить зону DNS

Удаляет зону из всех трех серверов, проверяет, что никто из них до сих пор не обслуживает ее, а затем удаляет зону и ее записи. Если сервер имени все еще отвечает за зону, запрос не выполняется и зона сохраняется, чтобы вы могли перепроверить.

curl -X DELETE "https://admin.vps.org/api/v1/dns-zones/c7a1e3f0-2b4d-4e6a-9c8b-0d1f2e3a4b5c/" \
  -H "Authorization: Bearer YOUR_API_TOKEN"

Коды состояния ответа

204 Ответ не имеет тела.
400 Зона не была удалена, в поле для деталей указаны ошибки.
404 Не найдена, или принадлежит другому счету.
ПОЛУЧАТЬ ДОЛЖНОСТНЫЕ ЛИЦА /api/v1/dns-zones/{uuid}/records/

Список или добавления записей в зоне

GET возвращает все записи в зоне как массив (не забабинированный), сортированный по типу и имени. POST добавляет запись в зону и публикует ее.

Параметры тела запроса (POST)

Параметр Тип Необходимый Описание
record_type string Да A, AAAA, CNAME, MX, NS, TXT, SRV, PTR, SOA, CAA
name string Да @ для самого домена или такой этикетки, как www. Имена хранятся в нижнем ящике.
value string Да Данные записи, например IP-адрес или имя хоста. В хостинге нет необходимости в дорожке, а значения TXT не нуждаются в цитатах; оба они добавляются при публикации записи.
ttl integer Да Время жить в секундах
priority integer Только MX и SPV Требуется для записи MX и SPV и игнорируется для всех других типов.

Пример запроса

cURL
Python
curl -X POST "https://admin.vps.org/api/v1/dns-zones/c7a1e3f0-2b4d-4e6a-9c8b-0d1f2e3a4b5c/records/" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"record_type": "MX", "name": "@", "value": "mail.example.com", "ttl": 3600, "priority": 10}'
import requests

zone_uuid = "c7a1e3f0-2b4d-4e6a-9c8b-0d1f2e3a4b5c"
url = f"https://admin.vps.org/api/v1/dns-zones/{zone_uuid}/records/"
headers = {"Authorization": "Bearer YOUR_API_TOKEN"}
data = {"record_type": "A", "name": "www", "value": "203.0.113.10", "ttl": 3600}

response = requests.post(url, headers=headers, json=data)
print(response.status_code, response.json())

Пример ответа

{
  "uuid": "9d430082-5562-42b4-a0b2-12a6f6c862f9",
  "record_type": "MX",
  "name": "@",
  "value": "mail.example.com",
  "ttl": 3600,
  "priority": 10,
  "created_at": "2026-09-14"
}

Поля ответа

Полевая Тип Описание
uuid string Идентификатор записи, используется эндпоинтами /api/v1/dns-records/
priority integer | null Приоритет для записей MX и SPV, в противном случае не имеет значения
created_at date Только дата создания (Г-ММ-ДД) без времени

Коды состояния ответа

200 ГЕТ: записи о зоне
201 ПСВ: создание архива
400 Ошибка проверки, например, неустановленный тип записи, отсутствующий tl или MX или SSV без приоритета
404 Не найдена, или принадлежит другому счету.
ДОЛЖНОСТНЫЕ ЛИЦА /api/v1/dns-zones/{uuid}/sync/

Возрождение зоны

Опять же, поверните Зона и все ее записи в имена серверов. Изменения в записи публикуются автоматически, но публикация - это лучшее усилие, и провал не провалит первоначальный запрос, поэтому используйте это, когда изменение не появляется в поисках DNS. Не требуется органа запроса.

curl -X POST "https://admin.vps.org/api/v1/dns-zones/c7a1e3f0-2b4d-4e6a-9c8b-0d1f2e3a4b5c/sync/" \
  -H "Authorization: Bearer YOUR_API_TOKEN"
{
  "detail": "Zone example.com synced to PowerDNS"
}
ПОЛУЧАТЬ ДОЛЖНОСТНЫЕ ЛИЦА /api/v1/dns-records/

Список или создание записей через зоны

GET возвращает записи всех ваших зон, 25 на страницу, заказано по домену, типу и имени. POST создает запись, как конечная точка зоны, но принимает зону в теле как зону_uuid.

Параметры запроса

Параметр Тип Необходимый Описание
zone string Нет Только записи о зоне с этим уродом
record_type string Нет Только записи такого типа, например MX (нечувствительный случай)
page integer Нет Номер страницы, начиная с 1
curl -X GET "https://admin.vps.org/api/v1/dns-records/?zone=c7a1e3f0-2b4d-4e6a-9c8b-0d1f2e3a4b5c&record_type=A" \
  -H "Authorization: Bearer YOUR_API_TOKEN"

curl -X POST "https://admin.vps.org/api/v1/dns-records/" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"zone_uuid": "c7a1e3f0-2b4d-4e6a-9c8b-0d1f2e3a4b5c", "record_type": "TXT", "name": "@", "value": "v=spf1 mx -all", "ttl": 3600}'
{
  "count": 1,
  "next": null,
  "previous": null,
  "results": [
    {
      "uuid": "4b8e2c10-7d3f-4a5b-9e6c-1a2b3c4d5e6f",
      "record_type": "A",
      "name": "www",
      "value": "203.0.113.10",
      "ttl": 3600,
      "priority": null,
      "created_at": "2026-09-14"
    }
  ]
}

Коды состояния ответа

200 НОУ: успех
201 ПСВ: создание архива
400 Ошибка проверки, или зона_uuid отсутствует или не одна из ваших зон
ПОЛУЧАТЬ PUT PATCH УДАЛИТЬ /api/v1/dns-records/{uuid}/

Получите, обновите или удалите запись

GET возвращает одну запись. PUT заменяет ее и требует записи_типа, имени, значения и ttl. PATCH меняет только поля, которые вы посылаете. DELETE удаляет запись и возвращает ее 204 без тела. Изменения публикуются сразу же. NS-записи, созданные с зоной, являются системными записями: обновление или удаление их возвращает 403.

Когда вы paTCH приоритет MX или SRV, отправьте запись_тип в том же запросе. Тело PATCH с приоритетом, но без записи_типа, очищает приоритет.
curl -X PATCH "https://admin.vps.org/api/v1/dns-records/4b8e2c10-7d3f-4a5b-9e6c-1a2b3c4d5e6f/" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"ttl": 300}'

Коды состояния ответа

200 GET, PUT или PATch: запись
204 Ответ не имеет тела.
400 Ошибка подтверждения
403 Эта запись является системной записью, или же токен не имеет требуемого разрешения
404 Не найдена, или принадлежит другому счету.

Обработка ошибок

Ошибка подтверждения данных возвращает 400 с проблемой, описанной по имени поля:

{
  "priority": ["MX records require a priority value"]
}

Проверка изменений DNS

Запросить имя серверов VPS.org непосредственно для подтверждения изменения в прямом эфире до того, как ваша делегация регистратора или тайники-решитель наверстывают:

dig @ns1.vps.org example.com A
dig @ns2.vps.org example.com MX
dig @ns3.vps.org www.example.com