API هاستینگهر کاری که پیکربندی‌کننده انجام می‌دهد، از طریق HTTP.

توکن‌های Bearer با دامنه‌هایی که خودتان انتخاب می‌کنید، ایدم‌پوتنسی روی هر عملیات نوشتن، صفحه‌بندی مبتنی بر cursor، و یک نقطه‌ی پایانی وضعیت که هیچ کلیدی نمی‌خواهد — چون همان لحظه‌ای که بیشترین نیاز به بررسی آن دارید، ممکن است دقیقاً همان لحظه‌ای باشد که خود حساب شما دچار مشکل شده است.

نقاط پایانی13

شروع سریع

بدون نیاز به SDK · بدون غافلگیری در نسخه‌بندی · بدون محدودیت نرخی که به آن برخورد کنید

شروع سریع

یک سرور، از صفر، با دو فراخوانی.

کلیدی در بخش کاربری بسازید، دامنه‌های آن را انتخاب کنید و فقط یک‌بار نمایش داده می‌شود. در این حساب هیچ کلید اصلی (master) وجود ندارد و راهی برای گسترش دامنه یک کلید پس از ساخت آن نیست — در عوض یک کلید جدید بسازید.

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 و کسری دقیق، به‌جای ساختن نیمی از یک ماشین — هیچ حالت راه‌اندازی نیمه‌کاره‌ای برای پاک‌سازی وجود ندارد و هیچ فاکتوری بعداً نمی‌رسد.

قراردادها

بخش‌هایی که در هر فراخوانی یکسان هستند، یک‌بار تعیین شده‌اند تا هرگز نیازی به جستجوی دوباره‌ی آن‌ها نباشد.

Base URL
https://api.dediprivacy.com/v1 فقط TLS، HTTP/2، و هیچ پورت رمزنگاری‌نشده‌ای برای هدایت مجدد وجود ندارد. درخواست متن‌ساده به‌جای ارتقا رد می‌شود، زیرا ارتقا به این معناست که درخواست پیشاپیش یک بار از شبکه عبور کرده است.
احراز هویت
توکن حامل، به ازای هر کلید کلیدها در پنل مشتری با دامنه‌های دسترسی‌ای که خودتان انتخاب می‌کنید ساخته می‌شوند، فقط یک‌بار نمایش داده می‌شوند و به‌صورت هش‌شده ذخیره می‌گردند. در این API نه کلید اصلی وجود دارد و نه احراز هویت مبتنی بر رمز عبور.
نوع محتوا
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
  • کلاود اختصاصیکلاود اختصاصی
  • وب-هاستینگوب‌هاستینگ
  • فضای ذخیره‌سازیذخیره‌سازی شیءمحور و بلاکی
  • 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" بازمی‌گردد. منبع را پایش کنید یا از یک وب‌هوک استفاده کنید.

درخواست

{
  "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 را به ابزاری برای شمارش زیرساخت دیگران تبدیل می‌کنند.