اتصالات DNS
حسابات مزوّدي DNS المرتبطة بمساحة العمل، والتي يكتب OpenEmail عبرها سجلات النطاق بنفسه. ويُربط الحساب في التطبيق، لأن المزوّد يطلب من الشخص تسجيل الدخول.
ينفّذ أيًّا من الاستدعاءات الـ3 على مساحة عملك.
GET /dns-connections
حسابات مزوّدي DNS المرتبطة بمساحة العمل، والتي يكتب OpenEmail عبرها سجلات النطاق بنفسه. ويُربط الحساب في التطبيق، لأن المزوّد يطلب من الشخص تسجيل الدخول.
سرد الاتصالات
يتطلب domains:read. كل اتصال، بما في ذلك الاتصالات المفصولة، مع النطاقات التي يخدمها كل منها. وconfigured يساوي false حين لا يستطيع هذا الخادم ربط أي مزوّد أصلًا.
curl "$OE/dns-connections" -H "$AUTH"{ "object": "list", "configured": true, "data": [ { "object": "dns_connection", "id": "dnsl_3f9a1c2e7b4d4e6f8a0b2c3d", "provider": "cloudflare", "subject": "[email protected]", "accounts": [{ "id": "4f1c2b3a5d6e7f8091a2b3c4d5e6f708", "name": "Acme" }], "status": "active", "lastVerifiedAt": "2026-09-30T08:00:00.000Z", "lastError": null, "createdAt": "2026-09-01T10:12:00.000Z", "domains": [ { "domainId": "b3e1f0a4-6c2d-4e8a-9f17-2d5c8a0b4e6f", "domain": "acme.com", "zoneId": "023e105f4ecef8ad9ca31a8372d0c353", "zoneName": "acme.com", "state": "ready", "records": 7, "keepsMail": true, "busy": false } ], "records": 7, "removable": false } ]}status هو active ما دام OpenEmail مسموحًا له بالكتابة عبر الاتصال، وneeds-reauth حين يريد المزوّد إعادة ربط الحساب في التطبيق، وrevoked بعد فصله، وerror حين يفشل آخر استدعاء.
قراءة اتصال واحد
يتطلب domains:read. ويضيف GET /dns-connections/{id} ما سيخلّفه فصله: يسمّي busy النطاقات التي تجري عليها مزامنة، ويسمّي keepsMail النطاقات الموثّقة التي تتوقف عن استقبال البريد بمجرد إزالة سجلاتها.
curl "$OE/dns-connections/dnsl_3f9a1c2e7b4d4e6f8a0b2c3d" -H "$AUTH"{ "object": "dns_connection", "id": "dnsl_3f9a1c2e7b4d4e6f8a0b2c3d", "provider": "cloudflare", "subject": "[email protected]", "accounts": [{ "id": "4f1c2b3a5d6e7f8091a2b3c4d5e6f708", "name": "Acme" }], "status": "active", "lastVerifiedAt": "2026-09-30T08:00:00.000Z", "lastError": null, "createdAt": "2026-09-01T10:12:00.000Z", "domains": [ { "domainId": "b3e1f0a4-6c2d-4e8a-9f17-2d5c8a0b4e6f", "domain": "acme.com", "zoneId": "023e105f4ecef8ad9ca31a8372d0c353", "zoneName": "acme.com", "state": "ready", "records": 7, "keepsMail": true, "busy": false } ], "records": 7, "removable": false, "busy": [], "keepsMail": ["acme.com"]}فصل اتصال
يتطلب domains:write. يزيل DELETE /dns-connections/{id} السجلات المكتوبة عبر الاتصال، ويفصل كل نطاق يخدمه، ويُبطله لدى المزوّد. والنطاق الموثّق الذي تُزال سجلاته يتوقف عن استقبال البريد، فاقرأ الاتصال أولًا.
curl -X DELETE "$OE/dns-connections/dnsl_3f9a1c2e7b4d4e6f8a0b2c3d" -H "$AUTH"{ "object": "dns_connection", "id": "dnsl_3f9a1c2e7b4d4e6f8a0b2c3d", "provider": "cloudflare", "subject": "[email protected]", "accounts": [{ "id": "4f1c2b3a5d6e7f8091a2b3c4d5e6f708", "name": "Acme" }], "status": "revoked", "lastVerifiedAt": "2026-09-30T08:00:00.000Z", "lastError": null, "createdAt": "2026-09-01T10:12:00.000Z", "removed": false, "confirmed": true, "detached": { "domains": 1, "detached": 1, "removed": 7, "rewritten": 0, "pending": 0, "left": [] }}حذف اتصال مفصول بالفعل يزيله من القائمة، متى لم يبقَ عليه أي نطاق ولا أي سجل، ويكون removed مساويًا لـ true. وإن بقي عليه شيء، فالاستدعاء يعطي 409 dns_connection_in_use.
إن كانت مزامنة تجري على أحد نطاقاته، يُرفَض الطلب بـ 409 dns_busy، ولا يُبطَل شيء.
المفتاح أو التطبيق المحصور بعناوين أو نطاقات معيّنة يُرفَض بـ 422 capability_unsupported، والتطبيق الذي يعمل نيابةً عن عضو يحتاج أيضًا إلى workspace:manage في دور ذلك العضو.
يحتاج رمز وصول OAuth إلى رمز تحقق لهذا الاستدعاء. وإلى أن يتحقق التطبيق من رمز خلال آخر 60 دقيقة، يردّ الاستدعاء بـ 403 step_up_required ولا يغيّر شيئًا. ولا يُطلب ذلك من مفتاح API أبدًا. وتبيّن صفحة المصادقة كيف تطلب رمزًا وتتحقق منه.