# Справочник API доменов DNSHE
English · 简体中文 · 繁體中文 · 日本語 · Русский · Bahasa Indonesia · Deutsch · Français · 한국어 · العربية
[Вернуться к описанию](../README_RU.md) Регистрируйте домены, управляйте DNS, обновляйте динамические IP и автоматизируйте операции аккаунта. В примерах используются адрес DNSHE и условные данные. Замените имена, ID и ключи своими. ## Содержание - [Начало работы](#начало-работы) - [Аутентификация и запросы](#аутентификация-и-запросы) - [Управление доменами](#управление-доменами) - [Управление DNS-записями](#управление-dns-записями) - [Динамический DNS (DDNS)](#динамический-dns-ddns) - [Управление ключами API](#управление-ключами-api) - [Передача доменов](#передача-доменов) - [Квоты](#квоты) - [WHOIS](#whois) - [Ошибки и ограничения запросов](#ошибки-и-ограничения-запросов) - [Примеры клиентов](#примеры-клиентов) - [Безопасность и частые вопросы](#безопасность-и-частые-вопросы) - [Поддержка](#поддержка) ## Начало работы ```text https://api005.dnshe.com/index.php?m=domain_hub ``` Базовый URL уже содержит `m=domain_hub`; добавляйте параметры через `&`. Запросы и ответы используют JSON, кроме параметров GET. Обычный лимит — 60 запросов в минуту, но оператор может изменить его. Возможности зависят от аккаунта и конфигурации. Примеры команд предназначены для Bash/sh; сначала задайте переменные окружения. ```bash export DNSHE_API_KEY='replace-with-your-api-key' export DNSHE_API_SECRET='replace-with-your-api-secret' export DNSHE_DDNS_TOKEN='replace-with-your-ddns-token' ``` ## Аутентификация и запросы Создайте первый ключ в личном кабинете → [Управление доменами](https://my.dnshe.com/index.php?m=domain_hub) → Управление API. Используйте заголовки `X-API-Key` и `X-API-Secret`; передача ключей через URL или тело отключена. Параметры GET передавайте в строке запроса, запись — JSON с `Content-Type: application/json`. `endpoint` выбирает ресурс, `action` — операцию. Для `quota` и `whois` параметр `action` не нужен. DDNS использует отдельный токен. ## Управление доменами ### 1.1 Список доменов `GET` · `endpoint=subdomains` · `action=list` #### Параметры - `page` — `integer`; необязательный; по умолчанию / диапазон: `1`. - `cursor_id` — `integer`; необязательный. - `per_page` — `integer`; необязательный; по умолчанию / диапазон: `200; 1–500`. - `include_total` — `boolean`; необязательный; по умолчанию / диапазон: `false`. - `search` — `string`; необязательный. - `rootdomain` — `string`; необязательный. - `status` — `string`; необязательный; по умолчанию / диапазон: `active | suspended | expired`. - `created_from / created_to` — `string`; необязательный; по умолчанию / диапазон: `YYYY-MM-DD`. - `sort_by` — `string`; необязательный; по умолчанию / диапазон: `id`. - `sort_dir` — `string`; необязательный; по умолчанию / диапазон: `desc; asc | desc`. - `fields` — `string`; необязательный; по умолчанию / диапазон: `all`. `page` — совместимый номер страницы от 1. Для больших списков начните с `cursor_id=0`, затем передавайте `pagination.next_cursor_id`, пока `pagination.has_more=true`; при false остановитесь. Курсор использует порядок ID без OFFSET. `per_page`: по умолчанию 200, максимум 500, рекомендуемое начало 50–100. `include_total=1` добавляет потенциально дорогой подсчёт. `search` ищет по префиксу или корневому домену; `rootdomain`, `status`, `created_from`, `created_to` фильтруют результаты. Даты: YYYY-MM-DD. `sort_by`: `id`, `created_at`, `updated_at`, `expires_at`, `subdomain`; `sort_dir`: `asc` или `desc`. `fields` — список через запятую или `all`: `id`, `subdomain`, `rootdomain`, `full_domain`, `status`, `created_at`, `updated_at`, `expires_at`, `never_expires`, `cloudflare_zone_id`, `provider_account_id`. При выборке `id` добавляется автоматически. `count` обозначает размер возвращённой коллекции, а не обязательно общее число совпадений. #### Примеры запросов ```bash curl --fail-with-body --silent --show-error --max-time 30 -X GET "https://api005.dnshe.com/index.php?m=domain_hub&endpoint=subdomains&action=list" \ -H "X-API-Key: ${DNSHE_API_KEY}" \ -H "X-API-Secret: ${DNSHE_API_SECRET}" ``` ```bash curl --fail-with-body --silent --show-error --max-time 30 -X GET "https://api005.dnshe.com/index.php?m=domain_hub&endpoint=subdomains&action=list&cursor_id=0&per_page=100&fields=id,subdomain,rootdomain,status" \ -H "X-API-Key: ${DNSHE_API_KEY}" \ -H "X-API-Secret: ${DNSHE_API_SECRET}" ``` ```bash curl --fail-with-body --silent --show-error --max-time 30 -X GET "https://api005.dnshe.com/index.php?m=domain_hub&endpoint=subdomains&action=list&search=test&rootdomain=de5.net&status=active&sort_by=expires_at&sort_dir=asc&per_page=50" \ -H "X-API-Key: ${DNSHE_API_KEY}" \ -H "X-API-Secret: ${DNSHE_API_SECRET}" ``` #### Примеры ответов ```json { "success": true, "count": 2, "subdomains": [ { "id": 1, "subdomain": "test", "rootdomain": "de5.net", "full_domain": "test.de5.net", "status": "active", "created_at": "2025-10-19 10:00:00", "updated_at": "2025-10-19 10:00:00" }, { "id": 2, "subdomain": "api", "rootdomain": "de5.net", "full_domain": "api.de5.net", "status": "active", "created_at": "2025-10-19 11:00:00", "updated_at": "2025-10-19 11:00:00" } ] } ``` ```json { "success": true, "count": 1, "subdomains": [ { "id": 901, "subdomain": "test", "rootdomain": "de5.net", "full_domain": "test.de5.net", "status": "active" } ], "pagination": { "mode": "cursor", "page": 1, "per_page": 100, "has_more": true, "cursor_id": 0, "next_cursor_id": 901 } } ``` ### 1.2 Регистрация домена `POST` · `endpoint=subdomains` · `action=create` #### Параметры - `subdomain` — `string`; обязательный. - `domain` — `string`; обязательный. `subdomain` — префикс, например `myapp`; `domain` — доступный корневой домен, например `de5.net`. Для регистрации используйте `action=create` и поле `domain`. Поле ответа и фильтр `rootdomain` не являются полем регистрации. Действуют квоты и ограничения доступности. #### Примеры запросов ```bash curl --fail-with-body --silent --show-error --max-time 30 -X POST "https://api005.dnshe.com/index.php?m=domain_hub&endpoint=subdomains&action=create" \ -H "X-API-Key: ${DNSHE_API_KEY}" \ -H "X-API-Secret: ${DNSHE_API_SECRET}" \ -H "Content-Type: application/json" \ -d '{ "subdomain": "myapp", "domain": "de5.net" }' ``` #### Примеры ответов ```json { "success": true, "message": "Subdomain registered successfully", "subdomain_id": 3, "full_domain": "myapp.de5.net" } ``` ### 1.3 Сведения о домене `GET` · `endpoint=subdomains` · `action=get` #### Параметры - `subdomain_id` — `integer`; обязательный. Укажите ID домена своего аккаунта. Ответ содержит объект домена, `dns_records` и `dns_count`. #### Примеры запросов ```bash curl --fail-with-body --silent --show-error --max-time 30 -X GET "https://api005.dnshe.com/index.php?m=domain_hub&endpoint=subdomains&action=get&subdomain_id=1" \ -H "X-API-Key: ${DNSHE_API_KEY}" \ -H "X-API-Secret: ${DNSHE_API_SECRET}" ``` #### Примеры ответов ```json { "success": true, "subdomain": { "id": 1, "subdomain": "test", "rootdomain": "de5.net", "full_domain": "test.de5.net", "status": "active", "created_at": "2025-10-19 10:00:00", "updated_at": "2025-10-19 10:00:00" }, "dns_records": [ { "id": 1, "name": "test.de5.net", "type": "A", "content": "203.0.113.10", "ttl": 600, "priority": null, "status": "active", "created_at": "2025-10-19 10:05:00" } ], "dns_count": 1 } ``` ### 1.4 Удаление домена `POST / DELETE` · `endpoint=subdomains` · `action=delete` #### Параметры - `subdomain_id` — `integer`; обязательный. Удаляет принадлежащий аккаунту домен и связанные DNS-записи. Число удалённых записей — `dns_records_deleted`. Перед отправкой проверьте ID. #### Примеры запросов ```bash curl --fail-with-body --silent --show-error --max-time 30 -X POST "https://api005.dnshe.com/index.php?m=domain_hub&endpoint=subdomains&action=delete" \ -H "X-API-Key: ${DNSHE_API_KEY}" \ -H "X-API-Secret: ${DNSHE_API_SECRET}" \ -H "Content-Type: application/json" \ -d '{ "subdomain_id": 1 }' ``` #### Примеры ответов ```json { "success": true, "message": "Subdomain deleted successfully", "subdomain_id": 1, "full_domain": "test.de5.net", "dns_records_deleted": 4 } ``` ### 1.5 Продление домена `POST / PUT` · `endpoint=subdomains` · `action=renew` #### Параметры - `subdomain_id` — `integer`; обязательный. Обычное бесплатное продление DNSHE остаётся бесплатным: в примере `charged_amount=0`. Универсальный плагин допускает платное восстановление, поэтому в период восстановления проверьте состояние и правила панели. Результат определяйте по `previous_expires_at`, `new_expires_at`, `never_expires`, `remaining_days`, `charged_amount`. Ошибки продления: HTTP 403 `renewal disabled`, `redemption period requires administrator`, `renewal window expired`; HTTP 422 `renewal_not_yet_available`; HTTP 402 `insufficient balance for redemption renewal`; HTTP 404 для отсутствующего или чужого домена. Проверьте сроки или обратитесь в поддержку, не повторяйте запрос непрерывно. #### Примеры запросов ```bash curl --fail-with-body --silent --show-error --max-time 30 -X POST "https://api005.dnshe.com/index.php?m=domain_hub&endpoint=subdomains&action=renew" \ -H "X-API-Key: ${DNSHE_API_KEY}" \ -H "X-API-Secret: ${DNSHE_API_SECRET}" \ -H "Content-Type: application/json" \ -d '{ "subdomain_id": 3 }' ``` #### Примеры ответов ```json { "success": true, "message": "Subdomain renewed successfully", "subdomain_id": 3, "subdomain": "myapp", "previous_expires_at": "2027-05-01 00:00:00", "new_expires_at": "2028-05-01 00:00:00", "renewed_at": "2027-04-30 00:00:00", "never_expires": 0, "status": "active", "remaining_days": 367, "charged_amount": 0 } ``` ## Управление DNS-записями ### 2.1 Список DNS-записей `GET` · `endpoint=dns_records` · `action=list` #### Параметры - `subdomain_id` — `integer`; обязательный. Предпочитайте `id` модуля из списка или создания; новые публичные ID состоят из 15 цифр. `record_id` — ID записи у DNS-провайдера. Для изменения/удаления нужен хотя бы один; оба должны указывать на одну запись, иначе `dns_record_identifier_mismatch`. Старые внутренние ID совместимы. Совместимость числового `record_id` указана как минимум до 2027-06-12; новые клиенты передают ID модуля в `id`. #### Примеры запросов ```bash curl --fail-with-body --silent --show-error --max-time 30 -X GET "https://api005.dnshe.com/index.php?m=domain_hub&endpoint=dns_records&action=list&subdomain_id=1" \ -H "X-API-Key: ${DNSHE_API_KEY}" \ -H "X-API-Secret: ${DNSHE_API_SECRET}" ``` #### Примеры ответов ```json { "success": true, "count": 2, "records": [ { "id": 1, "record_id": "5a0ce6c4d1d4c71bc5e60a2a2a0e4997", "name": "test.de5.net", "type": "A", "content": "203.0.113.10", "ttl": 600, "priority": null, "line": null, "proxied": false, "status": "active", "created_at": "2025-10-19 10:05:00", "updated_at": "2025-10-19 10:05:00" }, { "id": 2, "name": "www.test.de5.net", "type": "CNAME", "content": "test.de5.net", "ttl": 600, "priority": null, "proxied": false, "status": "active", "created_at": "2025-10-19 10:10:00" } ] } ``` ### 2.2 Создание DNS-записи `POST` · `endpoint=dns_records` · `action=create` #### Параметры - `subdomain_id` — `integer`; обязательный. - `type` — `string`; обязательный. - `name` — `string`; необязательный; по умолчанию / диапазон: `@`. - `content` — `string`; необязательный. - `ttl` — `integer`; необязательный; по умолчанию / диапазон: `600`. - `priority` — `integer`; необязательный; по умолчанию / диапазон: `MX: 10; SRV: 0`. - `line` — `string`; необязательный. - `record_weight / weight` — `integer`; необязательный. - `record_port / port` — `integer`; необязательный; по умолчанию / диапазон: `1–65535`. - `record_target / target` — `string`; необязательный. - `caa_flag` — `integer`; необязательный; по умолчанию / диапазон: `0; 0–255`. - `caa_tag` — `string`; необязательный; по умолчанию / диапазон: `issue; 1–15 [A-Za-z0-9]`. - `caa_value` — `string`; необязательный. Типы `type`: A, AAAA, CNAME, MX, TXT, NS, SRV, CAA. `name` задаётся относительно зарегистрированного домена; пропуск, пустое значение или `@` означают сам домен. Полное имя не принимается; `*` допустим только в крайней левой метке. `content` обязателен, кроме формирования из структурированных SRV/CAA. `ttl` по умолчанию 600 секунд, `priority` — 10 для MX и 0 для SRV. Для SRV используйте `record_weight`/`weight`, `record_port`/`port` (1–65535), `record_target`/`target`; цель `.` означает недоступную службу. Для CAA: `caa_flag` (0–255, по умолчанию 0), `caa_tag` (1–15 букв/цифр, по умолчанию `issue`), `caa_value`. `line` поддерживается только AliDNS; другие провайдеры отклоняют непустое значение. Запись NS может быть отключена через `disable_ns_management`. После делегирования внешнему DNS создание/изменение не-NS записей отклоняется с `external_dns_delegated`. Удаление старых записей, сверка и очистка просроченных ресурсов не блокируются. #### Примеры запросов ```bash curl --fail-with-body --silent --show-error --max-time 30 -X POST "https://api005.dnshe.com/index.php?m=domain_hub&endpoint=dns_records&action=create" \ -H "X-API-Key: ${DNSHE_API_KEY}" \ -H "X-API-Secret: ${DNSHE_API_SECRET}" \ -H "Content-Type: application/json" \ -d '{ "subdomain_id": 1, "type": "A", "content": "203.0.113.10", "ttl": 600 }' ``` #### Примеры ответов ```json { "success": true, "message": "DNS record created successfully", "id": 738492016583241, "record_id": "5a0ce6c4d1d4c71bc5e60a2a2a0e4997" } ``` ### 2.3 Изменение DNS-записи `POST / PUT / PATCH` · `endpoint=dns_records` · `action=modify` #### Параметры - `id` — `integer`; необязательный. - `record_id` — `string`; необязательный. - `type / name / content` — `string`; необязательный. - `ttl / priority` — `integer`; необязательный. - `line` — `string`; необязательный. - `record_weight / weight` — `integer`; необязательный. - `record_port / port` — `integer`; необязательный. - `record_target / target` — `string`; необязательный. - `caa_flag` — `integer`; необязательный. - `caa_tag / caa_value` — `string`; необязательный. Передайте `id` или `record_id` и изменяемые поля. Правила имён и SRV/CAA такие же, как при создании. Оба идентификатора должны совпадать по записи. Ответ возвращает ID модуля и провайдера. Предпочитайте `id` модуля из списка или создания; новые публичные ID состоят из 15 цифр. `record_id` — ID записи у DNS-провайдера. Для изменения/удаления нужен хотя бы один; оба должны указывать на одну запись, иначе `dns_record_identifier_mismatch`. Старые внутренние ID совместимы. Совместимость числового `record_id` указана как минимум до 2027-06-12; новые клиенты передают ID модуля в `id`. Запись NS может быть отключена через `disable_ns_management`. После делегирования внешнему DNS создание/изменение не-NS записей отклоняется с `external_dns_delegated`. Удаление старых записей, сверка и очистка просроченных ресурсов не блокируются. #### Примеры запросов ```bash curl --fail-with-body --silent --show-error --max-time 30 -X POST "https://api005.dnshe.com/index.php?m=domain_hub&endpoint=dns_records&action=modify" \ -H "X-API-Key: ${DNSHE_API_KEY}" \ -H "X-API-Secret: ${DNSHE_API_SECRET}" \ -H "Content-Type: application/json" \ -d '{ "id": 738492016583241, "type": "A", "content": "203.0.113.20", "ttl": 600 }' ``` #### Примеры ответов ```json { "success": true, "message": "DNS record updated successfully", "id": 738492016583241, "record_id": "5a0ce6c4d1d4c71bc5e60a2a2a0e4997" } ``` ### 2.4 Удаление DNS-записи `POST / DELETE` · `endpoint=dns_records` · `action=delete` #### Параметры - `id` — `integer`; необязательный. - `record_id` — `string`; необязательный. Предпочитайте `id` модуля из списка или создания; новые публичные ID состоят из 15 цифр. `record_id` — ID записи у DNS-провайдера. Для изменения/удаления нужен хотя бы один; оба должны указывать на одну запись, иначе `dns_record_identifier_mismatch`. Старые внутренние ID совместимы. Совместимость числового `record_id` указана как минимум до 2027-06-12; новые клиенты передают ID модуля в `id`. #### Примеры запросов ```bash curl --fail-with-body --silent --show-error --max-time 30 -X POST "https://api005.dnshe.com/index.php?m=domain_hub&endpoint=dns_records&action=delete" \ -H "X-API-Key: ${DNSHE_API_KEY}" \ -H "X-API-Secret: ${DNSHE_API_SECRET}" \ -H "Content-Type: application/json" \ -d '{ "id": 1 }' ``` ```bash curl --fail-with-body --silent --show-error --max-time 30 -X POST "https://api005.dnshe.com/index.php?m=domain_hub&endpoint=dns_records&action=delete" \ -H "X-API-Key: ${DNSHE_API_KEY}" \ -H "X-API-Secret: ${DNSHE_API_SECRET}" \ -H "Content-Type: application/json" \ -d '{ "record_id": "5a0ce6c4d1d4c71bc5e60a2a2a0e4997" }' ``` #### Примеры ответов ```json { "success": true, "message": "DNS record deleted successfully" } ``` ## Динамический DNS (DDNS) `GET / POST / PUT` · `endpoint=ddns` · `action=update` Создайте токен для конкретной A/AAAA-записи в Управление доменами → DDNS. Передавайте `Authorization: Bearer