واجهة برمجة تطبيقات الاستضافةكل ما يقوم به أداة التهيئة، عبر HTTP.

رموز Bearer بصلاحيات تختارها بنفسك، وضمان idempotency في كل عملية كتابة، وتقسيم صفحات بالمؤشر (cursor)، ونقطة نهاية للحالة لا تتطلب مفتاحًا على الإطلاق — لأن اللحظة التي تحتاج فيها أكثر ما يكون إلى استعلامها قد تكون اللحظة التي يكون فيها حسابك نفسه هو المعطَّل.

نقاط النهاية13

البدء السريع

لا حاجة إلى SDK · لا مفاجآت في الإصدارات · لا حد لمعدل الطلبات ستصطدم به

البدء السريع

خادم، من العدم، في مكالمتين اثنتين.

أنشئ مفتاحًا في منطقة العميل، وحدّد نطاقاته، ويُعرض مرة واحدة فقط. لا يوجد مفتاح رئيسي في هذا الحساب ولا وسيلة لتوسيع صلاحيات مفتاح بعد إنشائه — أنشئ مفتاحًا جديدًا بدلًا من ذلك.

1 — اطّلع على ما يمكنك شراؤه

curl -s https://api.dediprivacy.com/v1/plans?family=vps \
  -H "Authorization: Bearer $DP_KEY"

2 — انشره

curl -s -X POST https://api.dediprivacy.com/v1/servers \
  -H "Authorization: Bearer $DP_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
        "plan":   "vps-4",
        "region": "ams",
        "image":  "debian-13",
        "cycle":  "12"
      }'

يُخصم التزويد من رصيد الحساب. أي طلب يتجاوز الرصيد المتاح يفشل بالخطأ 402 والعجز الدقيق بدلاً من بناء نصف جهاز — فلا توجد حالة تهيئة جزئية تحتاج إلى تنظيف، ولا فاتورة تصل لاحقاً.

الاصطلاحات

الأجزاء المتطابقة في كل طلب (call)، تُحدَّد مرة واحدة فلا تضطر إلى البحث عنها مجددا.

عنوان URL الأساسي
https://api.dediprivacy.com/v1 TLS فقط، و HTTP/2، ولا يوجد منفذ غير مشفّر يُعاد التوجيه منه. يُرفض الطلب النصي الصريح بدلًا من ترقيته، لأن الترقية تعني أن الطلب قد عبر الشبكة مرة بالفعل.
المصادقة
رمز حامل (Bearer token)، لكل مفتاح تُنشأ المفاتيح في منطقة العميل بالصلاحيات التي تختارها، وتُعرض مرة واحدة، وتُخزَّن مُجزَّأة (hashed). لا يوجد مفتاح رئيسي ولا مصادقة بكلمة مرور في هذه الواجهة البرمجية.
نوع المحتوى
application/json على الطلبات والاستجابات. الأوقات وفق RFC 3339 بتوقيت UTC، والمبالغ المالية عدد صحيح من السنتات، ولا توجد صيغ مرتبطة بإعدادات المنطقة في أي مكان.
التكافؤ التكراري
ترويسة Idempotency-Key في كل طلب POST يعيد المفتاح المكرر الاستجابة الأصلية بدلاً من التزويد مرتين. تُحفظ المفاتيح لمدة 24 ساعة، وهي مدة أطول من أي حلقة إعادة محاولة ينبغي أن تستمر.
حد المعدل
600 طلب في الدقيقة لكل مفتاح، وتُعاد القيمة في X-RateLimit-Remaining. طلبات التزويد (provisioning) محدودة بشكل منفصل بمعدل 60 في الساعة؛ راسلنا إن كان هذا الحد يعيقك فعلًا.
الترقيم الصفحي
مؤشر تصفح، لا رقم صفحة حقل next_cursor في كل استجابة قائمة. فترقيم الصفحات بالإزاحة (offset) يتخطى صفوفاً بصمت عند تغيّر المجموعة الأساسية، ونحن نفضّل ألا نُسلّمك هذا الخلل.

المعرّفات

تُقرأ من الكتالوج نفسه الذي تُبنى منه قوائم الأسعار العامة وأداة التهيئة. فأي منطقة تُضاف إلى المنظومة تظهر هنا دون أن يعدّل أحد هذه الصفحة.

المنطقة

  • kefريكيافيك
  • otpبوخارست
  • sofصوفيا
  • kivكيشيناو
  • zrhزيورخ
  • amsأمستردام
  • ptyمدينة بنما
  • sinسنغافورة

العائلة

  • vpsVPS سحابي
  • rdpWindows RDP
  • مخصصالخوادم المخصصة
  • gpuحوسبة GPU
  • سحابة خاصةسحابة خاصة
  • web-hostingاستضافة المواقع
  • التخزينالتخزين الكائني والكتلي
  • colocationColocation
  • مخصصتصميم مخصص

الدورة

  • 11 شهر
  • 33 شهرs, −5 %
  • 1212 شهرs, −20 %
  • 2424 شهرs, −35 %

نقاط النهاية

الكتالوج

كل ما يمكن طلبه، مع تسعير مباشر. لا حاجة لأي مصادقة — فهذه هي الأرقام ذاتها التي تُبنى منها قوائم الأسعار العامة.

GET /regions عرض المناطق

كل منطقة مع معرّفها ومدينتها وبلدها وحالتها التشغيلية الحالية.

الاستجابة

{
  "data": [
    { "id": "ams", "city": "Amsterdam", "country": "Netherlands",
      "status": "operational", "uplink_gbit": 600 }
  ]
}
GET /plans عرض الخطط

صفِّ حسب الفئة باستخدام ?family=vps. الأسعار شهرية بالسنت، قبل أي خصم على الدورة.

الاستجابة

{
  "data": [
    { "id": "vps-4", "family": "vps", "cores": 4, "ram_gb": 8,
      "disk_gb": 160, "price_cents": 1100, "regions": ["ams","kef"] }
  ],
  "next_cursor": null
}
GET /images عرض الصور

صور أنظمة تشغيل متاحة لعائلة كاملة، مع وضع الترخيص لكل منها.

الاستجابة

{
  "data": [
    { "id": "debian-13", "name": "Debian 13", "licence": "included" },
    { "id": "win-2025", "name": "Windows Server 2025", "licence": "included" }
  ]
}

نقاط النهاية

الخوادم

أنشئ الأجهزة وافحصها وتحكم بها. يسحب التزويد من رصيد الحساب؛ وأي طلب من شأنه أن يتجاوز الرصيد يفشل برمز 402 مع بيان النقص بالضبط، بدلًا من بناء شيء ناقص.

POST /servers نشر خادم

يعود فورًا بالحالة "provisioning". استعلم عن المورد دوريًا أو استخدم webhook.

الطلب

{
  "plan": "vps-4",
  "region": "ams",
  "image": "debian-13",
  "cycle": "12",
  "label": "edge-01",
  "ssh_keys": ["ssh-ed25519 AAAA..."]
}

الاستجابة

{
  "id": "srv_8Kq2",
  "status": "provisioning",
  "region": "ams",
  "ipv4": null,
  "charged_cents": 10560,
  "renews_at": "2027-07-28T00:00:00Z"
}
GET /servers عرض الخوادم

كل شيء في الحساب، الأحدث أولًا.

الاستجابة

{
  "data": [
    { "id": "srv_8Kq2", "label": "edge-01", "status": "active",
      "region": "ams", "ipv4": "203.0.113.10",
      "ipv6": "2001:db8:1234:5678::2" }
  ],
  "next_cursor": null
}
GET /servers/{id} استرجاع خادم

تفاصيل كاملة تشمل المواصفات والعناوين وموعد التجديد القادم.

الاستجابة

{
  "id": "srv_8Kq2",
  "status": "active",
  "plan": "vps-4",
  "image": "debian-13",
  "cycle": "12",
  "renews_at": "2027-07-28T00:00:00Z"
}
POST /servers/{id}/actions تنفيذ إجراء على خادم

نقطة نهاية واحدة، وحقل إجراء: reboot، shutdown، start، rebuild، resize، rdns.

الطلب

{
  "action": "rebuild",
  "image": "ubuntu-26-04"
}

الاستجابة

{
  "id": "act_3Xf9",
  "action": "rebuild",
  "status": "running"
}
DELETE /servers/{id} إلغاء خادم

تستمر الخدمة حتى نهاية المدة المدفوعة مسبقًا. مرّر ?immediate=true لحذفها الآن ووقف الدفع من اليوم.

الاستجابة

{
  "id": "srv_8Kq2",
  "status": "cancelled",
  "ends_at": "2027-07-28T00:00:00Z"
}

نقاط النهاية

الفوترة

رصيد واحد يموّل كل شيء. لا يوجد كائن فاتورة لأنه لا شيء يستوجب المتابعة — تُخصم الخدمة من الرصيد في تاريخ تجديدها.

GET /balance استرجع الرصيد

الرصيد الحالي، وما هو مخصص للتجديدات، والمدة التي يكفي لها ذلك بمعدل الاستهلاك الحالي.

الاستجابة

{
  "balance_cents": 48250,
  "committed_cents": 12400,
  "runway_days": 117
}
POST /topups فتح عملية شحن رصيد

يُعيد عنوان دفع للأصل المختار. تُطبَّق أي مكافأة في اللحظة التي يُؤكَّد فيها الدفع.

الطلب

{
  "amount_cents": 100000,
  "asset": "XMR"
}

الاستجابة

{
  "id": "top_5Wc1",
  "asset": "XMR",
  "address": "4A...",
  "amount": "3.417",
  "bonus_cents": 30000,
  "expires_at": "2026-07-28T18:00:00Z"
}
GET /ledger اعرض قيود السجل

كل عملية إيداع وخصم، مع الخدمة التي تتعلق بها. هذا هو كل ما نحتفظ به بشأن مدفوعاتك.

الاستجابة

{
  "data": [
    { "at": "2026-07-28T16:04:00Z", "cents": -1100,
      "kind": "renewal", "ref": "srv_8Kq2" }
  ]
}

نقاط النهاية

الحالة

علنية وغير مطلوب فيها مصادقة، بحيث يمكن استعلامها من جهة لا تملك مفتاحك، وبحيث تظل تستجيب حتى لو كانت المشكلة في حسابك نفسه.

GET /status الحالة الحالية

الأرقام نفسها الموجودة في صفحة الحالة، محسوبة من سجل الحوادث نفسه.

الاستجابة

{
  "state": "operational",
  "open_incidents": 0,
  "uptime_90d": 99.9971,
  "regions": { "ams": "operational", "kef": "operational" }
}
GET /incidents قائمة الحوادث

السجل نفسه، قابل للتصفية حسب المنطقة والتاريخ.

الاستجابة

{
  "data": [
    { "id": "inc_71", "region": "otp", "severity": "partial",
      "started_at": "2026-06-07T02:14:00Z",
      "unreachable_seconds": 1080 }
  ]
}

الأخطاء

كل عطل يحمل معرّفًا ثابتًا الرمز ورسالة مكتوبة لشخص. طابِق الرمز؛ أما الرسالة فيجوز تحسينها.

400 invalid_request تعذّر تحليل نص الطلب، أو أن أحد الحقول من نوع خاطئ. تُسمي الرسالة الحقل المعني.
401 غير مصادَق لا مفتاح، أو مفتاح مشوَّه، أو مفتاح تم إبطاله.
403 scope_missing المفتاح صالح لكنه لم يُنشأ بالصلاحية التي يحتاجها هذا الطلب. تُحدَّد الصلاحيات لكل مفتاح ولا يمكن توسيعها لاحقاً.
402 insufficient_funds الرصيد لن يكفي لتغطيتها. تتضمن الاستجابة الحقلين required_cents وbalance_cents لتتمكن من التصرف دون استدعاء ثانٍ.
404 not_found لا يوجد مورد كهذا في هذا الحساب. هذه الاستجابة مطابقة عمدًا للاستجابة الخاصة بمورد في حساب شخص آخر.
409 تعارض المورد مشغول — عادةً بسبب إجراء قيد التنفيذ بالفعل على ذلك الخادم.
422 غير متاح طلب صحيح لكنه غير ممكن حاليًا: الباقة غير متوفرة في تلك المنطقة، أو الصورة غير متاحة لتلك الفئة.
429 rate_limited يُضبط الترويسة Retry-After، وهي قيمة دقيقة لا ثابتة.
5xx server_error من جانبنا. يمكن إعادة المحاولة بأمان بنفس Idempotency-Key — وهذا بالضبط ما وُجد من أجله.

A 404 استجابة الطلب عن مورد في حساب شخص آخر مطابقة بايتًا بايت لاستجابة طلب عن مورد لم يوجد أصلًا. وهذا مقصود: إن الاستجابات القابلة للتمييز تحوّل الـ API إلى وسيلة لسبر البنية التحتية لأشخاص آخرين.