CNF API · v1

واجهة واحدة لـc.nf: مناطق DNS وسجلاتها، والملفات الشخصية، والحزم، وبيانات الاعتماد المحفوظة، واستعلامات النطاقات، وبضع خدمات عامة لا تحتاج حسابًا أصلًا. وكل عملية موثَّقة تبقى محصورة بالحساب الذي أجرى الاستدعاء بمفتاحه.

نظرة عامة

يوفر الإصدار 1 عمليات DNS للمناطق التي طالبت بملكيتها عبر إدارة DNS. أنشئ الرموز وألغها من الحساب ← مفاتيح API.

حدود الثقة نفسها المطبقة في وحدة التحكم. تستخدم API فحص وحدة التحكم لملكية منطقة DNS المتحقّق منها. كل منطقة متاحة لحسابك في وحدة التحكم تكون متاحة لمفتاح API، وتعيد أي منطقة أخرى 403 forbidden_zone.
للحصول على فهرس نقاط النهاية بصيغة قابلة للقراءة آليًا، اطلب GET /v1?format=json أو أرسل Accept: application/json إلى /v1.

عنوان URL الأساسي والإصدارات

https://api.c.nf/v1

تقع جميع نقاط النهاية تحت /v1. ستستخدم التغييرات غير المتوافقة مسار إصدار رئيسي جديد. وقد تُضاف إلى v1 حقول ونقاط نهاية متوافقة مع الإصدارات السابقة، وستُسجّل في سجل التغييرات.

المصادقة والنطاقات

يجب أن يتضمن كل طلب يقرأ بيانات الحساب أو يغيّرها رمز Bearer. تبدأ الرموز بـ cnf_ متبوعة بـ 32 محرفًا سداسيًا عشريًا.

curl https://api.c.nf/v1/dns/zones \
  -H "Authorization: Bearer cnf_a1b2c3d4e5f60718293a4b5c6d7e8f90"

تُخزّن الرموز كتجزئات أحادية الاتجاه، ولا تُعرض قيمتها الكاملة إلا عند إنشائها. إذا فُقد رمز، فألغِه وأنشئ رمزًا آخر.

استخدم ترويسة Authorization فقط. لا تُقبل المصادقة الأساسية ولا الرموز في سلسلة الاستعلام. قد يتسرّب الرمز الموجود في عنوان URL عبر السجلات وترويسات المُحيل وسجل المتصفح.

يحمل كل رمز نطاقات صلاحية. يحصل الرمز الذي لا يملك نطاقًا مهيأ على dns:read افتراضيًا. ويسمح نطاق الكتابة بالقراءة أيضًا.

النطاقالصلاحيات
dns:read عرض مناطق DNS وسجلاتها وقراءة السجلات الفردية.
dns:write قراءة سجلات DNS ومطالبات المناطق وإنشاؤها وتحديثها وحذفها.
* جميع النطاقات. لا تستخدم هذا إلا عند الحاجة الفعلية إليه.

يعيد عدم التطابق 403 forbidden_scope ويتضمن كلاً من required_scopes وtoken_scopes للمساعدة في التشخيص.

العزل لكل مستخدم

يرتبط رمز Bearer بقيمة user_id واحدة بالضبط. يتحقق كل معالج لمنطقة DNS من مطالبة ذلك المستخدم المتحقّق منها قبل أي قراءة أو كتابة. لا يوجد تجاوز للمشرف ولا مسار انتحال ولا التفاف بين المستخدمين.

حتى الرمز ذو النطاق * لا يمكنه العمل إلا على المناطق التي تحقّق مستخدمه من ملكيتها. تعيد محاولة استخدام منطقة تابعة لحساب آخر 403 forbidden_zone.

غلاف الاستجابة

استجابة ناجحة

{
  "success": true,
  "data": { "zones": [] },
  "request_id": "req_abc123def456abcd"
}

استجابة خطأ

{
  "success": false,
  "error": "forbidden_zone",
  "message": "zone not verified for this account (or does not exist)",
  "request_id": "req_abc123def456abcd",
  "zone": "example.com"
}

تظهر قيمة request_id في كل استجابة، ويمكن تسجيلها بأمان مع سجلات العميل.

رموز الأخطاء

HTTPرمز الخطأالمعنى
400 bad_request حقل مطلوب مفقود، أو نص الطلب غير صالح البنية، أو إحدى المدخلات غير صالحة.
401 unauthorized رمز Bearer مفقود أو غير صالح أو ملغى.
403 forbidden_scope لا يملك الرمز نطاق الصلاحية المطلوب.
403 forbidden_zone لم يُتحقّق من منطقة DNS لهذا الحساب، أو أنها غير موجودة.
404 not_found تعذّر العثور على منطقة DNS أو السجل أو المستخدم المطلوب.
405 method_not_allowed لا تدعم نقطة النهاية هذه طريقة HTTP المستخدمة.
502 upstream_error أعاد مزود DNS خطأً.

التحقّق من منطقة DNS

عندما يطالب POST /v1/dns/zones بملكية منطقة، يختار الخادم أحد المسارات التالية:

  1. تحقّق فوري (method: "auto") — يُستخدم عندما لا يكون أي حساب آخر قد طالب بالمنطقة. تُعتمد المطالبة فورًا. ولا تصبح السجلات موثوقة إلا بعد أن يوجّه المالك تفويض NS لدى مسجّل النطاق إلى خوادم الأسماء المُعادة.
  2. تحقّق TXT — يُستخدم عند وجود مطالبة متنازع عليها. أضف قيمة TXT المُعادة عند _cnfdns-verify.<zone>، ثم استدعِ POST /v1/dns/zones/{zone}/verify.
  3. تحقّق NS قديم — قد تستخدم المطالبات القديمة قيد الانتظار verify_method: "ns". يقارن التحقّق إجابات NS المباشرة للمنطقة بمجموعة خوادم الأسماء المتوقعة.
لماذا التحقّق الفوري آمن؟ تظل السجلات المخزنة لدى c.nf غير فعالة حتى يغيّر مالك النطاق تفويض NS الموثوق لدى مسجّل النطاق. لا تكفي المطالبة الأولى وحدها لتقديم تلك السجلات.
المناطق العكسية ينطبق النموذج نفسه على in-addr.arpa وip6.arpa. طالب بالمنطقة، واحصل على expected_ns، ثم أرسل أهداف التفويض هذه إلى السجل المختص.

عملية التحقّق متكررة بأمان. يؤدي تكرارها لمطالبة متحقّق منها إلى إرجاع verified: true دون تغيير المطالبة.

أنواع السجلات وحدودها

أنواع السجلات المدعومة

A, AAAA, CNAME, MX, TXT, NS, SRV, CAA, PTR, SPF.

تكون priority مطلوبة لسجلات MX وSRV، وتُتجاهل للأنواع الأخرى. يجب أن تكون ttl بين 60 و2,592,000 ثانية.

نقاط النهاية

خدمات عامة

نقاط صغيرة موثوقة لا تحتاج حسابًا: الوقت والعنوان والبلد وأسعار الصرف والبصمات.

الطريقةالمسارالنطاقالغرض
GET /v1/public/time عام الوقت الحالي بتوقيت UTC بصيغ ISO 8601 وRFC 2822 وUnix.
GET /v1/public/timestamp عام الطابع الزمني الحالي بنظام Unix، بالثواني والمللي ثانية.
GET /v1/public/ip عام العنوان الذي جاء منه هذا الطلب.
GET /v1/public/geo عام البلد الذي جاء منه هذا الطلب، كما حددته الحافة.
GET /v1/public/fx عام أسعار الصرف مقابل عملة أساس، تُحدَّث كل ساعة.
GET /v1/public/hash عام احسب بصمة نص باستخدام SHA-256 أو خوارزمية مدعومة أخرى.

الحساب

لمن يعود الرمز، وما الذي يسمح به.

الطريقةالمسارالنطاقالغرض
GET /v1/account/me أي رمز الحساب صاحب الرمز، ونطاقاته، والنقاط التي تفتحها.
GET /v1/account/sessions account:read كل جلسات المتصفح المسجَّلة حاليًا في هذا الحساب.
POST /v1/account/sessions/revoke account:write إنهاء جلسة واحدة.
POST /v1/account/sessions/revoke-all account:write إنهاء كل الجلسات.
POST /v1/account/profile account:write تغيير اسمك المعروض.

DNS

طالِب بنطاق، وأثبت أنك تتحكم فيه، ثم أدر سجلاته.

الطريقةالمسارالنطاقالغرض
GET /v1/dns/zones dns:read كل المناطق التي طالب بها هذا الحساب.
POST /v1/dns/zones dns:write المطالبة بمنطقة. المطالبة غير المتنازع عليها فورية، والمتنازع عليها تحتاج تحقق TXT.
GET /v1/dns/zones/{zone} dns:read منطقة واحدة، مع تعليمات التحقق إن كانت ما زالت معلّقة.
POST /v1/dns/zones/{zone}/verify dns:write تشغيل استعلام التحقق ووسم المنطقة كمتحقَّق منها عند التطابق.
DELETE /v1/dns/zones/{zone} dns:write التخلي عن المطالبة. تبقى السجلات نفسها كما هي.
GET /v1/dns/zones/{zone}/records dns:read كل سجلات منطقة متحقَّق منها.
POST /v1/dns/zones/{zone}/records dns:write إضافة سجل إلى منطقة متحقَّق منها.
GET /v1/dns/zones/{zone}/records/{id} dns:read سجل واحد.
PATCH /v1/dns/zones/{zone}/records/{id} dns:write تغيير جزء من سجل؛ ما تحذفه يحتفظ بقيمته.
DELETE /v1/dns/zones/{zone}/records/{id} dns:write إزالة سجل.

بيانات الاعتماد

مخزن بيانات الاعتماد الخاص وراء أداة بيانات الاعتماد.

الطريقةالمسارالنطاقالغرض
GET /v1/cred cred:read cred:write بيانات الاعتماد المحفوظة، مع تصفية اختيارية حسب المنصة.
POST /v1/cred cred:write حفظ بيانات اعتماد.

الملفات

تخزين شخصي للملفات: عرض ورفع وتحرير ومشاركة وحذف.

الطريقةالمسارالنطاقالغرض
GET /v1/files files:read files:write ملفاتك المحفوظة، الأحدث أولًا.
GET /v1/files/{id} files:read files:write ملف واحد، مع رابط المشاركة إن وُجد.
GET /v1/files/download files:read files:write تنزيل ملف.
POST /v1/files/upload files:write رفع ملف.
POST /v1/files/update files:write تحرير بيانات ملف، بما في ذلك مشاركته.
POST /v1/files/rename files:write تغيير الاسم الذي يُنزَّل به الملف.
POST /v1/files/delete files:write حذف ملف ومحتواه.
POST /v1/files/upload-chunk files:write إرسال جزء من رفع كبير.
POST /v1/files/upload-finalize files:write تجميع الأجزاء في ملف واحد.

CDN

التخزين المؤقت على الحافة وحركة البيانات لملفاتك المشتركة.

الطريقةالمسارالنطاقالغرض
GET /v1/cdn/stats cdn:read إعدادات التخزين المؤقت وعدد الطلبات لملفاتك المشتركة.
POST /v1/cdn/config cdn:write تحديد مدة احتفاظ الحافة بالملف، أو إيقاف تقديمه.
POST /v1/cdn/purge cdn:write إزالة ملف من ذاكرة الحافة الآن.

تحويل الرسائل

الرسائل المُحوَّلة من هاتفك، والمفاتيح التي تسمح بها.

الطريقةالمسارالنطاقالغرض
GET /v1/sms/messages sms:read الرسائل المُحوَّلة إلى حسابك.
GET /v1/sms/keys sms:read sms:write مفاتيح التحويل التي تستخدمها أجهزتك.
POST /v1/sms/keys sms:write إصدار مفتاح تحويل. خمسة كحد أقصى.
DELETE /v1/sms/keys sms:write إبطال مفتاح تحويل.

المواقع الثابتة

ارفع ملف zip واحصل على موقع.

الطريقةالمسارالنطاقالغرض
GET /v1/sites sites:read sites:write مواقعك الثابتة، الأحدث نشرًا أولًا.
POST /v1/sites/deploy sites:write نشر ملف zip كموقع.
POST /v1/sites/delete sites:write حذف موقع وملفاته.

عمليات النشر

نقاط النماذج وWebhook والروابط المختصرة التي نشرتها.

الطريقةالمسارالنطاقالغرض
GET /v1/deployments deploy:read deploy:write عمليات النشر لديك وعدد مرات استخدام كل منها.
POST /v1/deployments/toggle deploy:write تفعيل عملية نشر أو تعطيلها.
POST /v1/deployments/delete deploy:write حذف عملية نشر.

النطاقات

محفظة نطاقاتك وبيانات تسجيلها.

الطريقةالمسارالنطاقالغرض
GET /v1/domains domain:read domain:write نطاقاتك، الأقرب انتهاءً أولًا.
POST /v1/domains/whois-sync domain:write تحديث نطاق واحد من سجل الريجستري.

الحزم

انشر الإصدارات واقرأ نسخها وأعداد تنزيلاتها.

الطريقةالمسارالنطاقالغرض
GET /v1/packages packages:read packages:write حزمك، مع عدد الإصدارات وإجمالي التنزيلات.
GET /v1/packages/{slug} packages:read packages:write حزمة واحدة، مع كل إصدار وكل عنصر.
POST /v1/packages/publish packages:write نشر إصدار، مع إنشاء الحزمة إن كانت جديدة.
POST /v1/packages/update packages:write تحرير بيانات حزمة.
POST /v1/packages/delete packages:write حذف حزمة وكل إصداراتها وكل عناصرها.

WHOIS

بيانات تسجيل النطاق، مخزّنة مؤقتًا ومشتركة مع أدوات النطاقات.

الطريقةالمسارالنطاقالغرض
GET /v1/whois whois:read بيانات تسجيل نطاق.

لوكلاء الذكاء الاصطناعي

وجِّه الوكيل إلى /v1/ai للحصول على ملخص مكتوب ليُلصق مباشرة في المُوجّه، أو إلى /v1/ai?format=json للحصول على النقاط نفسها كتعريفات أدوات. و/v1/openapi.json هو عقد OpenAPI 3.1 الكامل، و/llms.txt خريطة للزواحف. الأربعة تُولَّد من جدول المسارات نفسه الذي تستخدمه هذه الصفحة، فلا يمكن لأي منها أن يصف نقطة غير موجودة.

curl https://api.c.nf/v1/ai
curl https://api.c.nf/v1/ai?format=json
curl https://api.c.nf/v1/openapi.json

حقول الطلب

إنشاء مطالبة بمنطقة DNS

الحقلالنوعالمتطلبملاحظات
zone string مطلوب منطقة الجذر؛ يحولها الخادم إلى أحرف صغيرة. تُقبل المناطق العكسية.

إنشاء سجل DNS

الحقلالنوعالمتطلبملاحظات
type string مطلوب أحد الأنواع A أو AAAA أو CNAME أو MX أو TXT أو NS أو SRV أو CAA أو PTR أو SPF.
host string اختياري النطاق الفرعي فقط. استخدم سلسلة فارغة أو @ للجذر.
value string مطلوب محتوى السجل، مثل عنوان IP أو اسم الهدف أو قيمة نصية.
ttl integer اختياري بين 60 و2,592,000 ثانية. القيمة الافتراضية 3,600.
priority integer اختياري مطلوبة لسجلات MX وSRV، وتُتجاهل للأنواع الأخرى.

تحديث سجل DNS

الحقلالنوعالمتطلبملاحظات
host string اختياري النطاق الفرعي البديل.
value string اختياري لا يمكن أن تكون فارغة بعد دمجها مع السجل الحالي.
ttl integer اختياري بين 60 و2,592,000 ثانية.
priority integer اختياري تُستخدم فقط لسجلات MX وSRV.
لا يمكن تغيير نوع السجل باستخدام PATCH. احذف السجل وأنشئ سجلًا آخر لتغيير نوعه.

أمثلة

عرض المناطق

curl -H "Authorization: Bearer $CNF_TOKEN" \
  https://api.c.nf/v1/dns/zones

المطالبة بمنطقة

curl -X POST https://api.c.nf/v1/dns/zones \
  -H "Authorization: Bearer $CNF_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"zone":"example.com"}'

التحقّق من منطقة

curl -X POST https://api.c.nf/v1/dns/zones/example.com/verify \
  -H "Authorization: Bearer $CNF_TOKEN"

إنشاء سجل

curl -X POST https://api.c.nf/v1/dns/zones/example.com/records \
  -H "Authorization: Bearer $CNF_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"type":"A","host":"api","value":"192.0.2.10"}'

بدء سريع

  1. أنشئ مفتاح API بنطاق dns:write من الحساب ← مفاتيح API، وانسخه عند عرضه.
  2. خزّن الرمز في متغير بيئة محمي على جهازك.
  3. استدعِ GET /v1/account/me للتأكد من الرمز ونطاقاته.
  4. طالب بمنطقة DNS. توضح الاستجابة ما إذا كان التحقّق فوريًا أو باستخدام TXT أو باستخدام NS القديم.
  5. أكمل إثبات DNS المُعاد عند طلبه، ثم استدعِ نقطة نهاية التحقّق.
  6. لا تنشئ السجلات أو تقرأها أو تحدّثها أو تحذفها إلا بعد التحقّق من المطالبة.

سجل التغييرات

v1.1.0 — إدارة مناطق DNS

  • إضافة مطالبات مناطق DNS عبر API، بما فيها مسارا التحقّق الفوري وTXT.
  • إضافة نقطتي نهاية لحالة المنطقة الواحدة وللتحقّق المتكرر بأمان.
  • إضافة إلغاء المطالبة دون حذف ضمني للسجلات.
  • إضافة عوامل تصفية المتحقّق منها وقيد الانتظار والكل إلى قائمة المناطق.

v1.0.0 — الإصدار الأول

  • إضافة مصادقة رمز Bearer وعزل مناطق DNS لكل مستخدم.
  • إضافة نطاقي القراءة والكتابة.
  • إضافة نقاط نهاية الحساب وقائمة المناطق وإدارة السجلات.
  • إضافة غلاف استجابة موحّد يتضمن معرّف طلب.