API

API и ключи доступа

Всё, что клиент делает в кабинете, доступно через API, кроме шести действий, которые всегда требуют человека.

Ключ — это набор политик

Права и ресурсы — разные оси: «редактировать DNS» и «в каких доменах» не склеиваются в одно. Условия (IP, срок действия, лимит трат) действуют на весь ключ.

Ключ
 ├─ среда: live · test
 ├─ политика: право [dns.edit] на ресурсы [домены с меткой «клиент А»]
 ├─ политика: право [domain.renew] на ресурсы [example.com.ua]
 └─ условия: IP 203.0.113.0/24 · до 2026-12-26 · расходы ≤ 2 000 ₴/мес

Четыре класса опасности

Класс определяет срок жизни ключа, обязательность ограничения по IP и то, кто подтверждает операцию.

Классы опасности прав API
КлассНазваниеПримерПодтверждение
0Чтениесписок доменов, записи DNS, статус сертификатовобычный вход
1Обратимое изменениезапись DNS, проверка мониторинга, вебхукобычный вход
2Деньгипродление, регистрация, пополнениевход + уведомление владельцам
3Владение и необратимоеснять замок переноса, сменить NSвторой владелец или 24 часа до активации

Каталог прав (фрагмент)

Полный каталог — в документации; здесь — самые частые права с классом опасности справа.

domain.read
список доменов, сроки, статусы
0
domain.renew
продлить домен — это трата
2
domain.nameservers
сменить серверы имён; на живом домене гасит сайт и почту на время TTL
3
dns.edit
создавать, менять, удалять записи DNS через план с проверкой
1
dns.acme_challenge
только запись TXT в _acme-challenge.<имя> — для certbot и подобных
1
cert.issue
бесплатный сертификат Let’s Encrypt
1
monitor.read
проверки, история, отчёты мониторинга
0
billing.topup
пополнить баланс с сохранённой карты
2

Право dns.acme_challenge намеренно узкое: взломанный веб-сервер с таким ключом может только перевыпустить сертификат своего домена, а не переписать MX и увести почту.

Что ключу не выдаётся никогда

  • Код переноса домена — только человеку в кабинете после повторного входа.
  • Смена владельца (регистранта) домена.
  • Управление людьми и ключами организации.
  • Способ оплаты, отключение двухэтапной проверки, удаление аккаунта.

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

Каждый пишущий вызов требует Idempotency-Key: повтор возвращает тот же результат, а не новую операцию.

GET /v1/domains/kava.com.ua HTTP/1.1
Authorization: Bearer zr_live_…
Idempotency-Key: 8f14e45f-…

200 OK
{ "domain": "kava.com.ua", "status": ["ok"],
  "expires_at": "2027-09-12", "auto_renew": true }

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

{ "error": {
  "code": "domain_taken",
  "message": { "uk": "kava.com.ua зайнятий до 2027-09-12.",
               "en": "kava.com.ua is registered until 2027-09-12." },
  "actions": [ { "type": "check_alternatives", "href": "/v1/search?q=kava" } ] } }

Где выпустить ключ

Ключи выпускаются в кабинете: шаблон прав → домены → условия → итог человеческими словами. Публичный read-only MCP доступен без ключа.

Частые вопросы

Что такое публичный MCP?

Инструмент только для чтения для ассистентов (моделей), без ключа: проверка домена, статус сертификата. Записи в аккаунт через него не идут.

Можно ли протестировать интеграцию без денег?

Да, тестовый ключ zr_test_… работает против песочницы: регистрации и списания выглядят как настоящие, но не являются ими.

Можно ли получить код переноса домена через API?

Нет. Это одно из шести действий, доступных только человеку в кабинете после повторного входа, даже с правом domain.lock в ключе.