Перейти к документации
API

Настройка DNS домена

Пишет ли OpenEmail записи домена сам, через какую подключённую зону и в каком состоянии записи каждого вида.

GET/domains/{id}/dns

Выполняет любой из 3 запросов в вашем рабочем пространстве.

GET /domains/{id}/dns

Пишет ли OpenEmail записи домена сам, через какую подключённую зону и в каком состоянии записи каждого вида.

Прочитать настройку

Требуется domains:read. managing равен true, пока OpenEmail сам пишет записи. zone говорит, какая подключённая зона отвечает за домен: resolved, если одна, ambiguous, если их несколько и нужен выбор, none, если ни одна, или unusable, если подключения не удалось опросить. Добавьте ?refresh=true, чтобы снова опросить провайдеров.

curl
curl "$OE/domains/b3e1f0a4-6c2d-4e8a-9f17-2d5c8a0b4e6f/dns" -H "$AUTH"
Ответ
{  "object": "domain_dns",  "domainId": "b3e1f0a4-6c2d-4e8a-9f17-2d5c8a0b4e6f",  "domain": "acme.com",  "managing": true,  "connectionId": "dnsl_3f9a1c2e7b4d4e6f8a0b2c3d",  "connection": {    "id": "dnsl_3f9a1c2e7b4d4e6f8a0b2c3d",    "status": "active",    "subject": "[email protected]",    "accounts": [{ "id": "4f1c2b3a5d6e7f8091a2b3c4d5e6f708", "name": "Acme" }]  },  "zoneId": "023e105f4ecef8ad9ca31a8372d0c353",  "zoneName": "acme.com",  "zoneHolder": "Acme",  "state": "ready",  "steps": [    { "purpose": "mx", "ok": true, "detail": "MX records are in place.", "visibility": "public", "records": [] }  ],  "leftovers": [],  "probe": null,  "error": null,  "syncedAt": "2026-09-30T08:01:12.000Z",  "zone": {    "kind": "resolved",    "checkedAt": "2026-10-01T09:00:00.000Z",    "cached": true,    "candidate": {      "connectionId": "dnsl_3f9a1c2e7b4d4e6f8a0b2c3d",      "subject": "[email protected]",      "status": "active",      "accounts": [{ "id": "4f1c2b3a5d6e7f8091a2b3c4d5e6f708", "name": "Acme" }],      "account": { "id": "4f1c2b3a5d6e7f8091a2b3c4d5e6f708", "name": "Acme" },      "zone": {        "id": "023e105f4ecef8ad9ca31a8372d0c353",        "name": "acme.com",        "accountId": "4f1c2b3a5d6e7f8091a2b3c4d5e6f708",        "active": true,        "status": "active",        "type": "full",        "nameServers": ["ana.ns.cloudflare.com", "bob.ns.cloudflare.com"],        "covers": true      }    },    "candidates": [],    "reason": null,    "connected": null,    "host": null,    "blocked": []  }}

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

Выбрать зону

Требуется domains:write. PUT /domains/{id}/dns с { connectionId, zoneId } привязывает домен к зоне, когда за него могут отвечать несколько. Зона должна охватывать домен, быть активной и принять тестовую запись. Пока ничего не записывается.

curl
curl -X PUT "$OE/domains/b3e1f0a4-6c2d-4e8a-9f17-2d5c8a0b4e6f/dns" -H "$AUTH" \  -H "Content-Type: application/json" \  -d '{ "connectionId": "dnsl_3f9a1c2e7b4d4e6f8a0b2c3d", "zoneId": "023e105f4ecef8ad9ca31a8372d0c353" }'
Ответ
{  "object": "domain_dns",  "domainId": "b3e1f0a4-6c2d-4e8a-9f17-2d5c8a0b4e6f",  "domain": "acme.com",  "managing": true,  "connectionId": "dnsl_3f9a1c2e7b4d4e6f8a0b2c3d",  "connection": {    "id": "dnsl_3f9a1c2e7b4d4e6f8a0b2c3d",    "status": "active",    "subject": "[email protected]",    "accounts": [{ "id": "4f1c2b3a5d6e7f8091a2b3c4d5e6f708", "name": "Acme" }]  },  "zoneId": "023e105f4ecef8ad9ca31a8372d0c353",  "zoneName": "acme.com",  "zoneHolder": "Acme",  "state": "awaiting-sync",  "steps": [    { "purpose": "mx", "ok": true, "detail": "MX records are in place.", "visibility": "public", "records": [] }  ],  "leftovers": [],  "probe": null,  "error": null,  "syncedAt": "2026-09-30T08:01:12.000Z",  "zone": {    "kind": "resolved",    "checkedAt": "2026-10-01T09:00:00.000Z",    "cached": true,    "candidate": {      "connectionId": "dnsl_3f9a1c2e7b4d4e6f8a0b2c3d",      "subject": "[email protected]",      "status": "active",      "accounts": [{ "id": "4f1c2b3a5d6e7f8091a2b3c4d5e6f708", "name": "Acme" }],      "account": { "id": "4f1c2b3a5d6e7f8091a2b3c4d5e6f708", "name": "Acme" },      "zone": {        "id": "023e105f4ecef8ad9ca31a8372d0c353",        "name": "acme.com",        "accountId": "4f1c2b3a5d6e7f8091a2b3c4d5e6f708",        "active": true,        "status": "active",        "type": "full",        "nameServers": ["ana.ns.cloudflare.com", "bob.ns.cloudflare.com"],        "covers": true      }    },    "candidates": [],    "reason": null,    "connected": null,    "host": null,    "blocked": []  }}

Зона, которая не охватывает домен, даёт 422 invalid_parameter на zoneId. Домен, настроенный через другую зону, даёт 409 dns_zone_conflict, а зона, которая не активна или отклоняет тестовую запись, даёт 409 dns_zone_unusable.

Токену доступа OAuth для этого вызова нужен код подтверждения. Пока приложение не подтвердило код за последние 60 минут, вызов отвечает 403 step_up_required и ничего не меняет. У API-ключа его никогда не спрашивают. Страница «Аутентификация» показывает, как запросить код и подтвердить его.

Создать записи

Требуется domains:write. POST /domains/{id}/dns/sync создаёт или исправляет все записи, которые нужны домену, как это делает «Синхронизировать» в приложении, и сначала привязывает зону, если отвечает только одна. Передайте { "purpose": "dmarc" }, чтобы создать только один вид записей.

curl
curl -X POST "$OE/domains/b3e1f0a4-6c2d-4e8a-9f17-2d5c8a0b4e6f/dns/sync" -H "$AUTH"
Ответ
{  "object": "domain_dns_sync",  "outcome": "synced",  "message": null,  "attached": false,  "provision": {    "outcome": "applied",    "state": "ready",    "connectionId": "dnsl_3f9a1c2e7b4d4e6f8a0b2c3d",    "zoneId": "023e105f4ecef8ad9ca31a8372d0c353",    "proven": true,    "ownership": "The ownership record is in place.",    "written": [{ "purpose": "dmarc", "name": "_dmarc.acme.com", "type": "TXT", "mode": "created" }],    "adopted": 6,    "conflicts": [],    "failures": [],    "steps": [],    "retired": [],    "leftovers": [],    "probe": null,    "error": null  },  "dns": { "object": "domain_dns", "domain": "acme.com", "managing": true, "state": "ready", "…": "…" },  "zone": { "kind": "resolved", "cached": false, "…": "…" }}

Если не отвечает ровно одна зона, ничего не записывается: outcome равен refused, message объясняет почему, а zone перечисляет зоны, из которых нужно выбрать.

Синхронизация, которая уже идёт на домене, даёт 409 dns_busy, а провайдер, отклонивший запрос, даёт 502 dns_provider_error. Домен, который ждёт своих записей, подтверждается, как только они на месте.

Токену доступа OAuth для этого вызова нужен код подтверждения. Пока приложение не подтвердило код за последние 60 минут, вызов отвечает 403 step_up_required и ничего не меняет. У API-ключа его никогда не спрашивают. Страница «Аутентификация» показывает, как запросить код и подтвердить его.

Справочник