ドメインの DNS を設定する
OpenEmail がドメインのレコードを自分で書き込むかどうか、どの接続済みゾーンを通じて書き込むか、そして各種類のレコードがどういう状態かを示します。
3件の呼び出しをワークスペースに対して実行します。
GET /domains/{id}/dns
OpenEmail がドメインのレコードを自分で書き込むかどうか、どの接続済みゾーンを通じて書き込むか、そして各種類のレコードがどういう状態かを示します。
設定を読み取る
domains:read が必要です。OpenEmail が自分でレコードを書き込んでいる間、managing は true です。zone は、どの接続済みゾーンがそのドメインを担当するかを示します。1 つなら resolved、複数あって選択が必要なら ambiguous、どのゾーンも持っていなければ none、接続に問い合わせられなかった場合は unusable です。プロバイダーに改めて問い合わせるには ?refresh=true を付けてください。
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 } を送ると、複数のゾーンが担当できる場合にドメインを 1 つのゾーンに結び付けます。ゾーンは、そのドメインを含み、有効で、テスト用のレコードを受け付ける必要があります。この時点ではまだ何も書き込まれません。
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": [] }}ドメインを含まないゾーンは zoneId に対する 422 invalid_parameter になります。別のゾーンを通じて設定されたドメインは 409 dns_zone_conflict、有効でないかテスト用のレコードを拒否するゾーンは 409 dns_zone_unusable になります。
OAuth アクセストークンでこの呼び出しを行うには確認コードが必要です。アプリが直近 60 分以内にコードを確認するまで、呼び出しは 403 step_up_required を返し、何も変更しません。API キーが求められることはありません。コードの求め方と確認方法は「認証」ページにあります。
レコードを書き込む
domains:write が必要です。POST /domains/{id}/dns/sync は、アプリの Sync と同じように、ドメインに必要なすべてのレコードを書き込むか修復します。担当できるゾーンが 1 つだけなら、先にそのゾーンを結び付けます。1 種類のレコードだけを書き込むには { "purpose": "dmarc" } を送ってください。
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, "…": "…" }}担当するゾーンが 1 つに決まらない場合は何も書き込まれません。outcome は refused になり、message が理由を示し、zone に選べるゾーンが列挙されます。
ドメインですでに同期が実行中の場合は 409 dns_busy、プロバイダーがリクエストを拒否した場合は 502 dns_provider_error になります。レコードを待っているドメインは、レコードがそろった時点で検証されます。
OAuth アクセストークンでこの呼び出しを行うには確認コードが必要です。アプリが直近 60 分以内にコードを確認するまで、呼び出しは 403 step_up_required を返し、何も変更しません。API キーが求められることはありません。コードの求め方と確認方法は「認証」ページにあります。