مرجع API لـ Vitamin
بِع حسابات VPN والخوادم الافتراضية وأدِرها من موقعك أو بوتك أو سكربتك.
عنوان URL الأساسيhttps://apiservice.vitamindata.net/api/v1
تُصدَر المفاتيح من لوحتك. وإن لم تجد هذا القسم، فاطلب من الدعم تفعيل الوصول إلى API لحسابك.
1أنشئ مفتاح API من لوحتك وأرسله كرمز حامل (bearer) في كل نداء.
2نادِ Ping للتحقق من المفتاح، ثم اسحب أسعارك عبر ListPlans وGetVPSStorefront.
3بِع باستخدام FUNDING_AUTO: رصيدك يدفع حين يكفي، وعميلك يحصل على رابط دفع حين لا يكفي.
المصادقة
كل طلب يحمل مفتاحك كرمز حامل (bearer token). لا توجد كوكيز على هذا المضيف ولا رمز CSRF يُجلب — فالمفتاح وحده هو بيانات الاعتماد كاملةً.
Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
تُنشأ المفاتيح من لوحتك تحت قسم API. ويُعرض السر مرة واحدة فقط عند الإنشاء: نحن لا نخزّن سوى بصمته، فإن ضاع فالحل هو تدوير المفتاح — وهو ما يُصدر سرًّا جديدًا ويُبقي القديم عاملًا ليوم واحد، فتستطيع النشر دون انقطاع.
يمكن حصر المفتاح بقائمة عناوين مصدر، ومنحه حدّ معدل خاصًا به لكل دقيقة، وحجب عمليات بعينها عنه. هذه الإعدادات يضبطها مشغّلونا — راجع الدعم إن احتجت مثلًا إلى مفتاح يستطيع الشراء ولا يستطيع حذف أي خدمة أبدًا.
مفاتيح الاختبار
المفتاح الذي يبدأ بـ sk_test_ يقرأ بيانات حقيقية لكنه يرفض أي شيء ينفق مالًا أو يمسّ جهازًا حقيقيًا، فتستطيع توصيل تكاملك والتحقق منه قبل أن يكلّفك شيئًا.
كيف يبدو الفشل
المفتاح المجهول والمفتاح الذي لا يملك حسابه وصولًا إلى API يجيبان بالرد 401 نفسه حرفيًا: فالجواب لا يؤكد أبدًا ما إذا كان المفتاح موجودًا. والاستثناء هو مفتاح لك تجاوز فترة تداخل التدوير — إذ يقول api key expired، لأنك تعلم أصلًا أن ذلك المفتاح كان حقيقيًا وتحتاج إلى معرفة سبب توقفه. أما الإخفاقات المتكررة من عنوان واحد فتُكبح — انظر حدود المعدل.
الدفع مقابل الأشياء
كل ما تشتريه — حساب VPN، أو تمديد، أو خادم، أو تجديد، أو ترقية — يمرّ عبر عقد واحد. وأنت من يختار كيف يُموَّل:
funding | ماذا يحدث |
|---|
FUNDING_AUTO | موصى به. يخصم من رصيدك إن كان الرصيد يغطي المبلغ؛ وإلا فالنداء ينجح أيضًا ويسلّمك رابط دفع. نداء واحد، ولا خطأ يحتاج إلى تفسير. |
FUNDING_BALANCE | الرصيد فقط. فإن كان الرصيد غير كافٍ يفشل النداء بـ insufficient_balance (ويظل الخطأ حاملًا رابطًا قابلًا للدفع). |
FUNDING_INVOICE | يعيد رابط دفع دائمًا، حتى لو كان رصيدك كافيًا. |
مع FUNDING_AUTO تفرّع على حقل واحد:
{"order": {...}, "paid": true, "status": "completed"}
{"order": {...}, "status": "payment_required",
"invoice": {"invoice_id": "inv_9m2r4t",
"pay_url": "https://pay.example.com/i/inv_9m2r4t",
"price_usd": "11.90", "expires_at": "1785499200"}}
completed تعني أن المال قُبض وأن التسليم بدأ — استعلم عبر GetOrder حتى تصبح حالته delivered. وpayment_required تعني أن ترسل عميلك إلى pay_url؛ ويبدأ التسليم من تلقاء نفسه عند دفع الفاتورة.
الأسعار أسعارنا دائمًا. ويمكنك إرسال expected_total_usd كضمانة: فإن اختلفت تسعيرتنا الحديثة، تُرفض البيعة بـ price_changed ومعها الإجمالي الجديد، بدل تحصيل مبلغ لم يره عميلك قط.
إعادة المحاولة بأمان
أرسل ترويسة Idempotency-Key في كل نداء ينفق مالًا. فإن لم تصلك الاستجابة أبدًا — مهلة منتهية، أو اتصال منقطع، أو عامل أُعيد نشره — فأعد إرسال الطلب نفسه بالمفتاح نفسه، وستستعيد النتيجة الأصلية بدل خصم ثانٍ.
Idempotency-Key: 8f14e45f-ea6d-4b3a-9c1b-2f0d5a7e91c3
استخدم مفتاحًا جديدًا لكل إجراء يقوم به العميل (وUUID مثالي لذلك). أما إعادة استخدام مفتاح مع جسم مختلف فتُرفض بـ idempotency_conflict — فهذا الاقتران يعني وجود خلل، وتخمين الطلب الذي قصدته سيكون أسوأ من إخبارك به.
حدود المعدل
كل استجابة مُصادَق عليها تخبرك بموقع مفتاحك:
RateLimit-Limit: 6000
RateLimit-Remaining: 5987
RateLimit-Policy: 6000;w=60
الحدّ لكل مفتاح ولكل دقيقة، ويُضبط لحسابك — والافتراضي يناسب متجرًا؛ أما البوت المزدحم فينبغي أن يطلب زيادة بدل أن يبطّئ نفسه عند الافتراضي. وتجاوزه يجيب بـ 429 مع Retry-After.
يظهر 429 أيضًا إذا أخفق عدد كبير من الطلبات القادمة من عنوان واحد في المصادقة. تلك حماية من التخمين العنيف، وليست حصتك أنت: فهي تزول من تلقاء نفسها (والترويسة تقول متى)، ولا يستدعيها مفتاح سليم أبدًا.
سترى كذلك عائلة X-Ratelimit-* في كل استجابة، حتى تلك التي بلا مفتاح. ذلك كابح خشن لكل عنوان أمام API بأكمله، وليس ميزانية مفتاحك — فاضبط إيقاعك على RateLimit-Remaining، وعامل ترويسات X- على أنها شأن غيرك.
الأخطاء
تعود حالات الفشل على هيئة حالة HTTP وجسم JSON. فحقل code في المستوى الأعلى هو فئة النقل؛ وحقل message في المستوى الأعلى يحمل الرمز الآلي الثابت. أما التفصيل الكامل — الرمز الآلي نفسه، وجملة آمنة، وأي إضافات قابلة للتنفيذ — فيأتي داخل details تحت debug:
{"code": "failed_precondition",
"message": "insufficient_balance",
"details": [{"type": "neopay.seller.publicapi.v1.ErrorInfo",
"value": "CgptZXNzYWdl…",
"debug": {"code": "insufficient_balance",
"message": "insufficient balance",
"payUrl": "https://pay.example.com/i/inv_9m2r4t",
"orderId": "ord_8c3d1e",
"totalUsd": "11.90"}}]}
في قناة الأخطاء خصوصيتان تستحقان البرمجة لهما: value هو بروتوبَف بترميز base64 (تجاهله — واقرأ debug)، وداخل debug تأتي الحقول الإضافية بصيغة lowerCamelCase — payUrl وorderId وtotalUsd وretryAfterSeconds — وهو عُرف Connect، على خلاف snake_case في كل مكان آخر. فرّع على message في المستوى الأعلى أو على debug.code؛ ولا تفرّع على الجملة أبدًا.
الرفض قبل تفويض طلبك
الطلب الذي لا يصل إلى معالِج أصلًا — بلا مفتاح أو بمفتاح خاطئ (401)، أو من عنوان مصدر لا يسمح به المفتاح (403)، أو عند تجاوز حدّ المعدل (429)، أو أثناء عطل في المصادقة (503) — يُرفض عند الباب الأمامي، والباب الأمامي يجيب بجسم أقصر: رمز نقل في code وجملة عادية، دون details ودون رمز آلي.
{"code": "unauthenticated", "message": "invalid api key"}
لذلك فرّع على حالة HTTP في هذه الحالات (واحترم Retry-After عند 429)؛ أما الرموز الآلية أدناه فتخصّ النداءات التي وصلت إلى معالِج. والكابح الخشن لكل عنوان أقدم من ذلك ويجيب بـ {"error":"rate_limited"} — بمفتاح error لا code.
| الرمز | المعنى | ما العمل |
|---|
forbidden_scope | المفتاح يفتقر إلى النطاق اللازم لهذا النداء، أو أن هذه العملية محجوبة عنه. | اطلب من الدعم توسيع صلاحيات المفتاح. |
not_found | لا يوجد كائن كهذا لهذا الحساب. | تحقّق من المعرّف. والمعرّف العائد لحساب آخر يجيب بالشيء نفسه — عن قصد. |
invalid_request | أحد الحقول مشوّه. | صحّحه وأعد الإرسال؛ فإعادة المحاولة دون تغيير لن تُجدي. |
insufficient_balance | التمويل من الرصيد وحده لم يكفِ لتغطيته. | استخدم payUrl الموجود في التفاصيل، أو انتقل إلى FUNDING_AUTO. |
price_changed | لم تعد قيمة expected_total_usd مطابقة. | أعد التسعير وأكّد الإجمالي الجديد مع عميلك. |
idempotency_conflict | استُخدم ذلك المفتاح مع جسم مختلف. | استخدم مفتاحًا جديدًا لكل إجراء. |
sandbox_unavailable | حاول مفتاح sk_test_ إنفاق مال أو مسّ جهاز حقيقي. | متوقّع — استخدم مفتاحًا حيًّا لذلك النداء. مفاتيح الاختبار تقرأ ولا تشتري أبدًا. |
unpriceable | التكوين الذي طلبته غير قابل للبيع — خطة أو عقدة بلا سعر، أو سلة لا يغطيها أي نموذج. | أعد قراءة الواجهة واطلب تسعيرة قبل الشراء؛ فالتسعيرة ترفض السلة نفسها. |
upstream_unavailable | أحد المستويات التي نعتمد عليها متوقف. | أعد المحاولة مع تراجع تدريجي؛ وقد تكون القراءات قديمة قليلًا. |
order_failed | فشل التسليم بعد الدفع. | لا تعد الشراء. استعلم عبر GetOrder؛ فنحن نعالج هذه الحالات تلقائيًا والدعم يراها. |
internal | شيء تعطّل لدينا ولم نصنّفه. | أعد المحاولة مرة واحدة مع تراجع تدريجي؛ فإن تكرر الأمر فاذكر X-Request-Id للدعم. |
الأعراف
- النقل. كل نداء هو
POST {base}/{Method} مع جسم JSON — POST /api/v1/CreateVPNOrder. ولا شيء غير ذلك: أي أسلوب HTTP آخر يجيب بـ 405، ولا يوجد ربط بأفعال REST ولا معاملات في المسار. - المال سلسلة نصية.
"19.99"، وليس 19.99: فرقم JSON يصبح عددًا عشريًا عائمًا في معظم اللغات ولا يستطيع حفظ السنت بدقة. - الأعداد الصحيحة ذات 64 بت تصل كسلاسل نصية. كل عدّاد بايتات وكل طابع زمني يونكس هو 64 بت، والسلك يضعه بين علامتي اقتباس —
"remaining_bytes": "96636764160". حلّلها كأعداد صحيحة؛ أما في الطلبات فيجوز لك إرسال أي من الشكلين. - الصفر يُحذف. الحقل الذي قيمته
0 أو false أو فارغة لا يظهر في الاستجابة إطلاقًا. عامل الغياب على أنه صفر — وتذكّر أن حدًّا يوميًا قيمته 0 يعني بلا حدّ، لا "0 غيغابايت". - الأوقات بثواني يونكس، باستثناء نافذة المعاملات التي تأخذ وتُعيد صيغة RFC3339 أو
YYYY-MM-DD. - البيانات تُقاس بالبايت، لا بالغيغابايت، في كل رقم.
- المعرّفات مبهمة.
acc_… وord_… وvpn_…. لا تحلّل معرّفًا ولا تولّده أبدًا، ولا تفترض أنها متسلسلة. - التصفّح يتم بمؤشر مبهم: أعد إرسال
next_cursor من الاستجابة السابقة. وإذا جاء next_cursor فارغًا فقد حصلت على كل شيء. - تستخدم جداول الحقول رموز أنواع مختصرة.
money — سلسلة عشرية دقيقة؛ unix — ثواني يونكس (64 بت، فهي سلسلة)؛ bytes — عدّاد بايتات (64 بت، فهو سلسلة)؛ int64 — أي عدد 64 بت آخر (سلسلة)؛ int — 32 بت، رقم عادي؛ cursor — مقبض تصفّح مبهم؛ enum — قيمة واحدة بالضبط من القيم المذكورة. - تظهر حقول جديدة دون سابق إنذار ولا تتغيّر دلالة الحقول القائمة. تجاهل ما لا تعرفه.
البداية
النداء الأول الذي ينبغي إجراؤه: يثبت أن المفتاح يعمل ويخبرك بالحساب الذي يتبعه.
https://apiservice.vitamindata.net/api/v1/Pingيجيب بمعرّف حسابك، وما إذا كان المفتاح حيًّا أم اختباريًا، وبساعتنا.
الطلب
لا معاملات — أرسل كائنًا فارغًا، {}.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/Ping \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{}'
الاستجابة200 · application/json
account_idstring
حساب المفتاح — دليل على أن المفتاح تحلّل بنجاح.
modeenum
أي نوع من المفاتيح أرسلت.
إحدى القيم التالية:livetest
server_timeunix
ساعتنا — مفيدة لرصد الانحراف قبل أن يكسر التواقيع أو النوافذ.
نموذج استجابة{
"account_id": "acc_9f3k2m7q",
"mode": "live",
"server_time": "1785412800"
}
الحساب والرصيد
https://apiservice.vitamindata.net/api/v1/GetAccountبريد حسابك وحالته ولغته وما إذا كان العنوان موثّقًا.
الطلب
لا معاملات — أرسل كائنًا فارغًا، {}.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/GetAccount \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{}'
الاستجابة200 · application/json
account.account_idstring
المعرّف العام (acc_…).
account.emailstring
عنوان تسجيل الدخول.
account.statusstring
active ما لم يكن الحساب مقيّدًا.
account.localestring
لغة الحساب — تتوطّن بها أسماء البطاقات والإشعارات.
account.email_verifiedbool
تم تأكيد العنوان.
account.created_atunix
متى أُنشئ الحساب.
نموذج استجابة{
"account": {
"account_id": "acc_9f3k2m7q",
"email": "dev@example.com",
"status": "active",
"locale": "en",
"email_verified": true,
"created_at": "1769000000"
}
}
https://apiservice.vitamindata.net/api/v1/GetBalanceرصيدك الدفتري وما يمكن للشراء السحب منه فعليًا.
available_usd هو الرقم الذي يجب فحصه قبل الشراء — فهو يستثني كل ما حجزه طلب قيد التنفيذ.
الطلب
لا معاملات — أرسل كائنًا فارغًا، {}.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/GetBalance \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{}'
الاستجابة200 · application/json
balance_usdmoney
الرصيد الدفتري الكامل.
available_usdmoney
الرصيد ناقص الحجوزات — أي ما يمكن للشراء إنفاقه الآن.
as_ofstring
الطابع الزمني الدفتري للأرقام، بصيغة RFC3339.
نموذج استجابة{
"balance_usd": "72.60",
"available_usd": "60.70",
"as_of": "2026-07-29T12:00:00Z"
}
https://apiservice.vitamindata.net/api/v1/ListTransactionsسجلك المالي، الأحدث أولًا.
الافتراضي هو آخر ثلاثة أشهر. وأي نافذة أوسع من 92 يومًا تُضيَّق، وتخبرك الاستجابة بالنافذة التي طُبّقت فعلًا — فلا تكون الإجابة القصيرة ملتبسة أبدًا.
الطلب
limitintاختياري
حجم الصفحة. الافتراضي 25، والحد الأقصى 100.
cursorcursorاختياري
قيمة next_cursor من الاستجابة السابقة. احذفه للصفحة الأولى.
kindstringاختياري
مرشّح اختياري مفصول بفواصل على قيم kind المذكورة أدناه.
fromstringاختياري
بداية النافذة، بصيغة RFC3339 أو YYYY-MM-DD.
tostringاختياري
نهاية النافذة. وقيمة to بتاريخ فقط تشمل ذلك اليوم كاملًا.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/ListTransactions \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"limit":25,"cursor":"","kind":"topup_credit,invoice_debit_reserved","from":"2026-05-01","to":"2026-07-30"}'
الاستجابة200 · application/json
transactionsarray
أسطر السجل.
transactions[].idstring
معرّف سطر السجل.
transactions[].tsstring
متى، بصيغة RFC3339.
transactions[].kindenum
ما الذي حرّك المال. topup_credit شحن رصيد مدفوع؛ ونوعا invoice_debit_* عمليتا شراء. أما الحجز الداخلي لطلب قيد التنفيذ وتحريره فليسا جزءًا من هذا التدفق.
إحدى القيم التالية:topup_creditexternal_creditinvoice_debit_reservedinvoice_debit_externaloverpay_creditmanual_creditmanual_debitspend_debitspend_refundautomated_correction
transactions[].amount_usdmoney
بإشارة — سالب في عمليات الخصم.
transactions[].balance_after_usdmoney
الرصيد الجاري بعد هذا السطر.
transactions[].ref_invoice_idstring
الفاتورة خلف الحركة — مرّرها إلى GetInvoice للقصة كاملة.
transactions[].descriptionstring
وصف بشري قصير. للعرض فقط؛ ولا تفرّع عليه أبدًا.
next_cursorcursor
أعد إرساله كـ cursor للصفحة التالية. والغياب أو الفراغ = حصلت على كل شيء.
has_morebool
توجد أسطر أخرى بعد هذه الصفحة.
fromstring
النافذة المطبَّقة فعلًا (RFC3339). وإن كانت أضيق مما طلبت ⇐ فقد بلغت سقف 92 يومًا.
tostring
نهاية النافذة المطبَّقة.
نموذج استجابة{
"transactions": [
{"id": "tx_01j9zq", "ts": "2026-07-28T09:14:03Z", "kind": "invoice_debit_reserved",
"amount_usd": "-11.90", "balance_after_usd": "72.60",
"ref_invoice_id": "inv_5k8p2q", "description": "order ord_7b2c9d"},
{"id": "tx_01j8xw", "ts": "2026-07-25T18:40:11Z", "kind": "topup_credit",
"amount_usd": "50.00", "balance_after_usd": "84.50", "ref_invoice_id": "inv_3d1x8n"}
],
"from": "2026-04-30T00:00:00Z",
"to": "2026-07-29T23:59:59Z"
}
POST
CreateTopup
buyIdempotency-Key
https://apiservice.vitamindata.net/api/v1/CreateTopupيُنشئ فاتورة قابلة للدفع تضيف أموالًا إلى رصيدك.
وجّه عميلك (أو نفسك) إلى invoice.pay_url. ويتحرّك الرصيد عند دفعها.
الطلب
amount_usdmoneyمطلوب
كم يُضاف، كسلسلة عشرية.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/CreateTopup \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"amount_usd":"50.00"}'
الاستجابة200 · application/json
invoiceobject
الفاتورة القابلة للدفع.
invoice.invoice_idstring
معرّف الفاتورة لدى البوابة (inv_…).
invoice.statusenum
pending قابلة للدفع. وكل ما بين confirmed وdelivered_redirected يعني أن المال دخل بلا رجعة — فعامِلها كلها على أنها مدفوعة. أما expired فتعني أن الرابط انتهى دون دفع.
إحدى القيم التالية:pendingconfirmedsweepingsweptdeliveringdelivereddelivered_redirectedexpired
invoice.pay_urlstring
صفحة الدفع المستضافة. أرسل عميلك إليها؛ فكل وسيلة دفع (عملات، شبكات، رصيد) تعيش خلفها.
invoice.pay_telegram_urlstring
الفاتورة نفسها، قابلة للدفع داخل Telegram: تفتح بوت مزوّد الدفع نفسه، الذي يعرض المبلغ ويستقبل الدفع هناك. اعرضها إلى جانب pay_url للعملاء الذين يفضّلون عدم مغادرة التطبيق. قد تغيب — فلا يملكها إلا مزوّد دفع لديه بوت مُعدّ، ولذلك لا تجعلها زر الدفع الوحيد لديك.
invoice.price_usdmoney
ما تحصّله الفاتورة.
invoice.expires_atunix
متى تُغلق نافذة الدفع.
نموذج استجابة{
"invoice": {
"invoice_id": "inv_3d1x8n",
"status": "pending",
"pay_url": "https://pay.example.com/i/inv_3d1x8n",
"pay_telegram_url": "https://t.me/VitaminPayBot?start=3d1x8n",
"price_usd": "50.00",
"expires_at": "1785499200"
}
}
https://apiservice.vitamindata.net/api/v1/GetInvoiceدفعة واحدة بكامل تفاصيلها، بما في ذلك ما تُظهره الشبكة.
الحقل ref_invoice_id في سطر السجل هو مفتاح الربط. ولا يمكن قراءة سوى الفواتير التي أنشأها حسابك.
الطلب
invoice_idstringمطلوب
من ref_invoice_id في سطر سجل، أو من طلب، أو من عملية شحن رصيد.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/GetInvoice \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"invoice_id":"inv_5k8p2q"}'
الاستجابة200 · application/json
invoiceobject
الفاتورة نفسها.
invoice.invoice_idstring
معرّف الفاتورة لدى البوابة (inv_…).
invoice.statusenum
pending قابلة للدفع. وكل ما بين confirmed وdelivered_redirected يعني أن المال دخل بلا رجعة — فعامِلها كلها على أنها مدفوعة. أما expired فتعني أن الرابط انتهى دون دفع.
إحدى القيم التالية:pendingconfirmedsweepingsweptdeliveringdelivereddelivered_redirectedexpired
invoice.pay_urlstring
صفحة الدفع المستضافة. أرسل عميلك إليها؛ فكل وسيلة دفع (عملات، شبكات، رصيد) تعيش خلفها.
invoice.pay_telegram_urlstring
الفاتورة نفسها، قابلة للدفع داخل Telegram: تفتح بوت مزوّد الدفع نفسه، الذي يعرض المبلغ ويستقبل الدفع هناك. اعرضها إلى جانب pay_url للعملاء الذين يفضّلون عدم مغادرة التطبيق. قد تغيب — فلا يملكها إلا مزوّد دفع لديه بوت مُعدّ، ولذلك لا تجعلها زر الدفع الوحيد لديك.
invoice.price_usdmoney
ما تحصّله الفاتورة.
invoice.expires_atunix
متى تُغلق نافذة الدفع.
paymentsarray
ما تُظهره الشبكة. تكون فارغة للفاتورة المموّلة من الرصيد (فلا شبكة تدخّلت) وللفاتورة التي لم يدفعها أحد بعد — والقائمة الفارغة ليست خطأ.
payments[].chainstring
الشبكة التي وصلت عبرها الدفعة (tron، bsc، …).
payments[].assetstring
ما الذي دُفع (USDT، …).
payments[].amountmoney
مقدار الأصل، بدقة.
payments[].tx_hashstring
المعاملة على الشبكة — وهي إثبات الدفع لدى عميلك.
payments[].confirmedbool
أنهت الشبكة تأكيدها.
payments[].seen_atunix
متى رصدناها أول مرة.
order_idstring
ما اشترته الفاتورة. يغيب في شحن الرصيد، إذ لا يشتري شيئًا.
نموذج استجابة{
"invoice": {
"invoice_id": "inv_5k8p2q",
"status": "confirmed",
"pay_url": "https://pay.example.com/i/inv_5k8p2q",
"price_usd": "11.90",
"expires_at": "1785499200"
},
"payments": [
{"chain": "tron", "asset": "USDT", "amount": "11.90",
"tx_hash": "c4a1f09e2b7d", "confirmed": true, "seen_at": "1785412920"}
],
"order_id": "ord_7b2c9d"
}
الأسعار
لا شيء هنا يُنشئ شيئًا — اطلب تسعيرة كما تشاء قبل أن يلتزم عميلك.
https://apiservice.vitamindata.net/api/v1/ListPlansما يجوز لك بيعه: حدود المؤشرات، وبطاقات السعر الثابت إن كانت واجهتك تستخدمها.
اعرض ما جاء ممتلئًا منهما. تُشترى البطاقة بوضع bundle_id الخاص بها في السلة؛ أما سلة المؤشرات فتستخدم gb/months/users.
الطلب
لا معاملات — أرسل كائنًا فارغًا، {}.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/ListPlans \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{}'
الاستجابة200 · application/json
model_namestring
نموذج التسعير الخاص بواجهتك.
model_typestring
إصدار محرّكه.
boundsobject
قواعد المُهيِّئ — وكل تسعيرة وكل طلب يعيد التحقق منها على الخادم.
bounds.gb_minint
أصغر حجم بيانات يجوز للسلة طلبه.
bounds.gb_stepint
خطوة المؤشر.
bounds.users_minint
أقل عدد أجهزة متزامنة.
bounds.users_maxint
الأكثر.
bounds.months_minint
أقصر مدة.
bounds.months_maxint
الأطول.
bounds.new_accounts_maxint
أكبر عدد حسابات يمكن لطلب واحد إنشاؤها.
bounds.extend_maxint
أكبر عدد حسابات يمكن لطلب واحد تمديدها.
bounds.default_gbint
قيمة افتراضية معقولة للمؤشر.
bounds.default_usersint
عدد الأجهزة الافتراضي.
bounds.default_monthsint
المدة الافتراضية.
bundlesarray
بطاقات السعر الثابت، حين تكون واجهتك فهرس بطاقات.
bundles[].bundle_idstring
المقبض الذي يوضع في cart.bundle_id.
bundles[].namestring
اسم البطاقة، موطَّنًا سلفًا بلغة الحساب.
bundles[].gbint
البيانات المشمولة.
bundles[].monthsint
مدة الصلاحية.
bundles[].online_usersint
الأجهزة المتزامنة.
bundles[].price_usdmoney
السعر. وهو السعر فعلًا — لا حاجة إلى تسعيرة للبطاقة.
bundles[].highlightbool
البطاقة المميّزة في الواجهة.
bundles[].daily_cap_gbint
الحدّ اليومي بالغيغابايت. الغياب = بلا حدّ.
نموذج استجابة{
"model_name": "vpn_dynamic",
"model_type": "dynamic_v2",
"bounds": {
"gb_min": 10, "gb_max": 500, "gb_step": 10,
"users_min": 1, "users_max": 10,
"months_min": 1, "months_max": 12,
"new_accounts_max": 5, "extend_max": 10,
"default_gb": 100, "default_users": 3, "default_months": 1
},
"bundles": [
{"bundle_id": "card_100_1m", "name": "100 GB · 1 month", "gb": 100, "months": 1,
"online_users": 3, "price_usd": "11.90", "highlight": true}
]
}
https://apiservice.vitamindata.net/api/v1/Quoteالسعر النهائي لسلة VPN، مفصّلًا بالبنود. والخصومات مطبّقة سلفًا.
الطلب
cartobjectمطلوب
السلة المراد تسعيرها.
cart.kindenumمطلوب
شراء حسابات جديدة، أو إضافة بيانات ومدة إلى حسابات قائمة.
إحدى القيم التالية:newextend
cart.gbintاختياري
البيانات لكل حساب، بالغيغابايت، ضمن الحدود المأخوذة من ListPlans.
cart.monthsintاختياري
مدة الصلاحية لكل حساب، بالأشهر.
cart.usersintاختياري
الأجهزة المتزامنة لكل حساب.
cart.new_accountsintاختياري
مع kind:"new" فقط: كم حسابًا يُنشأ. وأسماء المستخدمين يولّدها الخادم.
cart.extend_vpn_idsarrayاختياري
مع kind:"extend" فقط: الحسابات المراد تمديدها، بمعرّفاتها العامة.
cart.bundle_idstringاختياري
يشتري بطاقة بسعر ثابت من ListPlans.bundles بدل سلة مُهيَّأة. وعند ضبطه تُتجاهل قيم gb/months/users — وتُطبَّق قيم البطاقة وسعرها.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/Quote \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"cart":{"kind":"new","gb":100,"months":1,"users":3,"new_accounts":2}}'
أشكال أخرى لهذا الطلبتمديد حسابات تملكها بالفعل{"cart":{"kind":"extend","gb":50,"months":1,"users":3,"extend_vpn_ids":["vpn_6t2k9p","vpn_1a4b7c"]}}
شراء بطاقة بسعر ثابت بدل سلة مُهيَّأة{"cart":{"kind":"new","bundle_id":"card_100_1m","new_accounts":1}}
الاستجابة200 · application/json
quoteobject
السعر مفصّلًا بالبنود. لا شيء يُنشأ ولا شيء يُحصَّل.
quote.model_namestring
أي نموذج تسعير أجاب.
quote.model_typestring
إصدار محرّك النموذج.
quote.base_usdmoney
السعر قبل الخصومات والرسوم الإضافية.
quote.total_usdmoney
السعر النهائي — أي ما تحصّله بيعة بهذه السلة.
quote.linesarray
التفصيل بالبنود، بإشارات موجبة وسالبة، ومجموعه يساوي الإجمالي تمامًا.
quote.lines[].codestring
ما هذا السطر (base، أو رمز خصم، أو رسم إضافي…).
quote.lines[].kindstring
فئة السطر، للتجميع في واجهتك.
quote.lines[].amount_usdmoney
بإشارة. الخصومات سالبة، ومجموع الأسطر يساوي total_usd تمامًا.
quote.lines[].pctstring
النسبة المئوية خلف السطر، حين توجد.
quote.cappedbool
بلغ الإجمالي سقف النموذج.
quote.floor_appliedbool
رُفع الإجمالي إلى أرضية النموذج.
quote.clampedenum
يُضبط عندما تُقصر قيمة في السلة إلى داخل الحدود قبل التسعير.
إحدى القيم التالية:minmax
quote.invalidstring
إذا لم يكن فارغًا فالسلة غير قابلة للتسعير — اعرضه ولا تحصّل أبدًا تسعيرة كهذه.
quote.metamap
إضافات النموذج، نص→نص (مثل remaining_days في الترقية).
نموذج استجابة{
"quote": {
"model_name": "vpn_dynamic",
"model_type": "dynamic_v2",
"base_usd": "14.00",
"total_usd": "11.90",
"lines": [
{"code": "base", "kind": "base", "amount_usd": "14.00"},
{"code": "loyalty", "kind": "discount", "amount_usd": "-2.10", "pct": "15"}
]
}
}
بيع VPN
POST
CreateVPNOrder
buyIdempotency-Key
https://apiservice.vitamindata.net/api/v1/CreateVPNOrderيشتري حسابات VPN جديدة، أو يمدّد حسابات قائمة ("kind":"extend" مع extend_vpn_ids).
انظر الدفع مقابل الأشياء للشكلين اللذين قد تتخذهما الاستجابة.
الطلب
cartobjectمطلوب
ما الذي يُشترى — بالشكل نفسه الذي يسعّره Quote.
cart.kindenumمطلوب
شراء حسابات جديدة، أو إضافة بيانات ومدة إلى حسابات قائمة.
إحدى القيم التالية:newextend
cart.gbintاختياري
البيانات لكل حساب، بالغيغابايت، ضمن الحدود المأخوذة من ListPlans.
cart.monthsintاختياري
مدة الصلاحية لكل حساب، بالأشهر.
cart.usersintاختياري
الأجهزة المتزامنة لكل حساب.
cart.new_accountsintاختياري
مع kind:"new" فقط: كم حسابًا يُنشأ. وأسماء المستخدمين يولّدها الخادم.
cart.extend_vpn_idsarrayاختياري
مع kind:"extend" فقط: الحسابات المراد تمديدها، بمعرّفاتها العامة.
cart.bundle_idstringاختياري
يشتري بطاقة بسعر ثابت من ListPlans.bundles بدل سلة مُهيَّأة. وعند ضبطه تُتجاهل قيم gb/months/users — وتُطبَّق قيم البطاقة وسعرها.
fundingenumمطلوب
كيف يُدفع — انظر الدفع مقابل الأشياء. ولا قيمة افتراضية له: فحذفه يُرفض.
إحدى القيم التالية:FUNDING_AUTOFUNDING_BALANCEFUNDING_INVOICE
expected_total_usdmoneyاختياري
ضمانة تأكيد. إذا ضُبط واختلفت تسعيرتنا الحديثة، تُرفض البيعة بـ price_changed بدل تحصيل مبلغ لم يره عميلك قط.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/CreateVPNOrder \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"cart":{"kind":"new","gb":100,"months":1,"users":3,"new_accounts":1},"funding":"FUNDING_AUTO","expected_total_usd":"11.90"}'
أشكال أخرى لهذا الطلبتمديد حسابات تملكها سلفًا{"cart":{"kind":"extend","gb":50,"months":1,"users":3,"extend_vpn_ids":["vpn_6t2k9p"]},"funding":"FUNDING_AUTO"}
شراء بطاقة بسعر ثابت، مدفوعة من الرصيد{"cart":{"kind":"new","bundle_id":"card_100_1m","new_accounts":1},"funding":"FUNDING_BALANCE"}
الاستجابة200 · application/json
orderobject
الطلب — استعلم عبر GetOrder حتى تصبح حالته delivered.
order.order_idstring
المعرّف العام للطلب (ord_…).
order.productenum
ما الذي اشتُري.
إحدى القيم التالية:vpnvps
order.kindstring
شكل الشراء: new أو extend أو upgrade…
order.statusenum
دورة الحياة. delivered هي الغاية؛ وneeds_operator تعني أن المال دخل وأن إنسانًا يكمل التسليم — فلا تعد الشراء؛ وexpired تعني أن الفاتورة انتهت دون دفع.
إحدى القيم التالية:createdinvoicedpaiddeliveringdeliveredneeds_operatorfailedrefund_pendingrefundedexpired
order.fundingenum
الوسيلة التي موّلته فعليًا. وFUNDING_AUTO يُحسم إلى إحداها.
إحدى القيم التالية:invoicebalance
order.total_usdmoney
ما يحصّله الطلب.
order.invoice_idstring
الفاتورة التي خلفه — لكل طلب فاتورة، أيًّا كانت وسيلة تمويله.
order.itemsint
كم استحقاقًا يُنشئه الطلب أو يمدّده.
order.created_atunix
متى قُدّم الطلب.
order.delivered_atunix
متى انتهى التسليم. يغيب قبل ذلك.
order.breakdownobject
التسعيرة التي وافق عليها العميل، حرفيًا — بالشكل نفسه الذي يعيده Quote.
invoiceobject
الفاتورة خلف الطلب: قابلة للدفع عند payment_required، ومسدّدة سلفًا عند completed.
invoice.invoice_idstring
معرّف الفاتورة لدى البوابة (inv_…).
invoice.statusenum
pending قابلة للدفع. وكل ما بين confirmed وdelivered_redirected يعني أن المال دخل بلا رجعة — فعامِلها كلها على أنها مدفوعة. أما expired فتعني أن الرابط انتهى دون دفع.
إحدى القيم التالية:pendingconfirmedsweepingsweptdeliveringdelivereddelivered_redirectedexpired
invoice.pay_urlstring
صفحة الدفع المستضافة. أرسل عميلك إليها؛ فكل وسيلة دفع (عملات، شبكات، رصيد) تعيش خلفها.
invoice.pay_telegram_urlstring
الفاتورة نفسها، قابلة للدفع داخل Telegram: تفتح بوت مزوّد الدفع نفسه، الذي يعرض المبلغ ويستقبل الدفع هناك. اعرضها إلى جانب pay_url للعملاء الذين يفضّلون عدم مغادرة التطبيق. قد تغيب — فلا يملكها إلا مزوّد دفع لديه بوت مُعدّ، ولذلك لا تجعلها زر الدفع الوحيد لديك.
invoice.price_usdmoney
ما تحصّله الفاتورة.
invoice.expires_atunix
متى تُغلق نافذة الدفع.
paidbool
المال محصّل. يغيب (= false) مع payment_required.
statusenum
الحقل الذي تفرّع عليه — انظر الدفع مقابل الأشياء.
إحدى القيم التالية:completedpayment_required
نموذج استجابة{
"order": {
"order_id": "ord_8c3d1e", "product": "vpn", "kind": "new",
"status": "invoiced", "funding": "invoice", "total_usd": "11.90",
"invoice_id": "inv_9m2r4t", "items": 1, "created_at": "1785412800"
},
"invoice": {
"invoice_id": "inv_9m2r4t", "status": "pending",
"pay_url": "https://pay.example.com/i/inv_9m2r4t",
"pay_telegram_url": "https://t.me/VitaminPayBot?start=9m2r4t",
"price_usd": "11.90", "expires_at": "1785499200"
},
"status": "payment_required"
}
https://apiservice.vitamindata.net/api/v1/GetOrderاستعلم عبره بعد الشراء: created ← invoiced ← paid ← delivering ← delivered.
الطلب
order_idstringمطلوب
من الطلب الذي قدّمته.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/GetOrder \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"order_id":"ord_7b2c9d"}'
الاستجابة200 · application/json
orderobject
الطلب، مع تفصيله الكامل.
order.order_idstring
المعرّف العام للطلب (ord_…).
order.productenum
ما الذي اشتُري.
إحدى القيم التالية:vpnvps
order.kindstring
شكل الشراء: new أو extend أو upgrade…
order.statusenum
دورة الحياة. delivered هي الغاية؛ وneeds_operator تعني أن المال دخل وأن إنسانًا يكمل التسليم — فلا تعد الشراء؛ وexpired تعني أن الفاتورة انتهت دون دفع.
إحدى القيم التالية:createdinvoicedpaiddeliveringdeliveredneeds_operatorfailedrefund_pendingrefundedexpired
order.fundingenum
الوسيلة التي موّلته فعليًا. وFUNDING_AUTO يُحسم إلى إحداها.
إحدى القيم التالية:invoicebalance
order.total_usdmoney
ما يحصّله الطلب.
order.invoice_idstring
الفاتورة التي خلفه — لكل طلب فاتورة، أيًّا كانت وسيلة تمويله.
order.itemsint
كم استحقاقًا يُنشئه الطلب أو يمدّده.
order.created_atunix
متى قُدّم الطلب.
order.delivered_atunix
متى انتهى التسليم. يغيب قبل ذلك.
order.breakdownobject
التسعيرة التي وافق عليها العميل، حرفيًا — بالشكل نفسه الذي يعيده Quote.
invoiceobject
يُملأ فقط ما دام الطلب ينتظر الدفع — وبالشكل نفسه المستخدم في كل مكان.
نموذج استجابة{
"order": {
"order_id": "ord_7b2c9d", "product": "vpn", "kind": "new",
"status": "delivered", "funding": "balance", "total_usd": "11.90",
"invoice_id": "inv_5k8p2q", "items": 1,
"created_at": "1785230043", "delivered_at": "1785230103",
"breakdown": {
"model_name": "vpn_dynamic",
"model_type": "dynamic_v2",
"base_usd": "14.00",
"total_usd": "11.90",
"lines": [
{"code": "base", "kind": "base", "amount_usd": "14.00"},
{"code": "loyalty", "kind": "discount", "amount_usd": "-2.10", "pct": "15"}
]
}
}
}
https://apiservice.vitamindata.net/api/v1/ListOrdersسجل طلباتك، الأحدث أولًا.
الطلب
limitintاختياري
حجم الصفحة. الافتراضي 25، والحد الأقصى 100.
cursorcursorاختياري
قيمة next_cursor من الاستجابة السابقة. احذفه للصفحة الأولى.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/ListOrders \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"limit":25,"cursor":""}'
الاستجابة200 · application/json
orders[].order_idstring
المعرّف العام للطلب (ord_…).
orders[].productenum
ما الذي اشتُري.
إحدى القيم التالية:vpnvps
orders[].kindstring
شكل الشراء: new أو extend أو upgrade…
orders[].statusenum
دورة الحياة. delivered هي الغاية؛ وneeds_operator تعني أن المال دخل وأن إنسانًا يكمل التسليم — فلا تعد الشراء؛ وexpired تعني أن الفاتورة انتهت دون دفع.
إحدى القيم التالية:createdinvoicedpaiddeliveringdeliveredneeds_operatorfailedrefund_pendingrefundedexpired
orders[].fundingenum
الوسيلة التي موّلته فعليًا. وFUNDING_AUTO يُحسم إلى إحداها.
إحدى القيم التالية:invoicebalance
orders[].total_usdmoney
ما يحصّله الطلب.
orders[].invoice_idstring
الفاتورة التي خلفه — لكل طلب فاتورة، أيًّا كانت وسيلة تمويله.
orders[].itemsint
كم استحقاقًا يُنشئه الطلب أو يمدّده.
orders[].created_atunix
متى قُدّم الطلب.
orders[].delivered_atunix
متى انتهى التسليم. يغيب قبل ذلك.
orders[].breakdownobject
التسعيرة التي وافق عليها العميل، حرفيًا — بالشكل نفسه الذي يعيده Quote.
next_cursorcursor
أعد إرساله كـ cursor للصفحة التالية. والغياب أو الفراغ = حصلت على كل شيء.
نموذج استجابة{
"orders": [
{"order_id": "ord_7b2c9d", "product": "vpn", "kind": "new", "status": "delivered",
"funding": "balance", "total_usd": "11.90", "invoice_id": "inv_5k8p2q",
"items": 1, "created_at": "1785230043", "delivered_at": "1785230103"}
]
}
إدارة VPN
https://apiservice.vitamindata.net/api/v1/ListVPNكل حساب VPN تملكه، مع البيانات المتبقية وتاريخ الانتهاء.
الطلب
limitintاختياري
حجم الصفحة. الافتراضي 50، والحد الأقصى 200.
cursorcursorاختياري
قيمة next_cursor من الاستجابة السابقة. احذفه للصفحة الأولى.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/ListVPN \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"limit":25,"cursor":""}'
الاستجابة200 · application/json
vpns[].vpn_idstring
المعرّف العام الذي يأخذه كل فعل VPN آخر.
vpns[].usernamestring
اسم بيانات الاعتماد الظاهر في التطبيقات.
vpns[].statusstring
حالة الحساب كما تعرضها اللوحة — active ما لم يكن موقوفًا أو منتهيًا.
vpns[].remaining_bytesbytes
البيانات المتبقية في كل حزمه مجتمعةً.
vpns[].total_downloadbytes
إجمالي التنزيل مدى الحياة، كما يبلّغ به مستوى VPN لحظيًا. في ListVPN تكون قيمته دائمًا 0 — لأن القائمة تُخدَم من نموذج القراءة المخزَّن الذي لا يحمل أرقامًا لكل اتجاه. استخدم used_bytes في القائمة، أو GetVPN/GetVPNUsage للتفصيل بين الاتجاهين.
vpns[].total_uploadbytes
إجمالي الرفع مدى الحياة. وينطبق عليه تحفّظ total_download نفسه: 0 في ListVPN.
vpns[].used_bytesbytes
البيانات المستهلكة فعليًا مدى الحياة (تنزيل + رفع). وهذا هو الرقم الذي تحفظه المنظومة لكل VPN، فهو صحيح في كل نقطة نهاية بما فيها ListVPN.
vpns[].expires_atunix
متى ينتهي الحساب.
vpns[].max_onlineint
عدد الأجهزة المتزامنة المسموح بها.
vpns[].daily_limit_bytesbytes
حدّ اليوم. الغياب أو 0 = بلا حدّ يومي.
vpns[].daily_used_bytesbytes
المستهلك من حدّ اليوم.
vpns[].daily_reset_unixunix
متى يُصفَّر العدّاد اليومي.
vpns[].allowed_protocolsint
قناع بتات بروتوكولي تستخدمه تطبيقاتنا. عامله على أنه مبهم.
vpns[].cache_atunix
مدى حداثة الأرقام: فهي قديمة بقدر هذا الطابع الزمني ما لم يكن live مضبوطًا.
vpns[].created_atunix
متى أُنشئ الحساب.
vpns[].livebool
جاءت الأرقام من الشبكة للتو لا من المخزون المؤقت.
next_cursorcursor
أعد إرساله كـ cursor للصفحة التالية. والغياب أو الفراغ = حصلت على كل شيء.
نموذج استجابة{
"vpns": [{
"vpn_id": "vpn_6t2k9p",
"username": "u482913",
"status": "active",
"remaining_bytes": "96636764160",
"total_download": "10737418240",
"used_bytes": "11811160064",
"total_upload": "1073741824",
"expires_at": "1793188800",
"max_online": 3,
"cache_at": "1785412700",
"created_at": "1785000000"
}],
"next_cursor": "vpn_6t2k9p"
}
https://apiservice.vitamindata.net/api/v1/GetVPNحساب واحد بالتفصيل. live:true تعني أن الأرقام جاءت من الشبكة للتو.
الطلب
vpn_idstringمطلوب
المعرّف العام للحساب (vpn_…)، من ListVPN أو من تسليم طلب.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/GetVPN \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"vpn_id":"vpn_6t2k9p"}'
الاستجابة200 · application/json
vpn.vpn_idstring
المعرّف العام الذي يأخذه كل فعل VPN آخر.
vpn.usernamestring
اسم بيانات الاعتماد الظاهر في التطبيقات.
vpn.statusstring
حالة الحساب كما تعرضها اللوحة — active ما لم يكن موقوفًا أو منتهيًا.
vpn.remaining_bytesbytes
البيانات المتبقية في كل حزمه مجتمعةً.
vpn.total_downloadbytes
إجمالي التنزيل مدى الحياة، كما يبلّغ به مستوى VPN لحظيًا. في ListVPN تكون قيمته دائمًا 0 — لأن القائمة تُخدَم من نموذج القراءة المخزَّن الذي لا يحمل أرقامًا لكل اتجاه. استخدم used_bytes في القائمة، أو GetVPN/GetVPNUsage للتفصيل بين الاتجاهين.
vpn.total_uploadbytes
إجمالي الرفع مدى الحياة. وينطبق عليه تحفّظ total_download نفسه: 0 في ListVPN.
vpn.used_bytesbytes
البيانات المستهلكة فعليًا مدى الحياة (تنزيل + رفع). وهذا هو الرقم الذي تحفظه المنظومة لكل VPN، فهو صحيح في كل نقطة نهاية بما فيها ListVPN.
vpn.expires_atunix
متى ينتهي الحساب.
vpn.max_onlineint
عدد الأجهزة المتزامنة المسموح بها.
vpn.daily_limit_bytesbytes
حدّ اليوم. الغياب أو 0 = بلا حدّ يومي.
vpn.daily_used_bytesbytes
المستهلك من حدّ اليوم.
vpn.daily_reset_unixunix
متى يُصفَّر العدّاد اليومي.
vpn.allowed_protocolsint
قناع بتات بروتوكولي تستخدمه تطبيقاتنا. عامله على أنه مبهم.
vpn.cache_atunix
مدى حداثة الأرقام: فهي قديمة بقدر هذا الطابع الزمني ما لم يكن live مضبوطًا.
vpn.created_atunix
متى أُنشئ الحساب.
vpn.livebool
جاءت الأرقام من الشبكة للتو لا من المخزون المؤقت.
livebool
طازج من الشبكة. والغياب = خُدم من نموذج القراءة، وهو قديم بقدر cache_at.
نموذج استجابة{
"vpn": {
"vpn_id": "vpn_6t2k9p",
"username": "u482913",
"status": "active",
"remaining_bytes": "96636764160",
"total_download": "10737418240",
"used_bytes": "11811160064",
"total_upload": "1073741824",
"expires_at": "1793188800",
"max_online": 3,
"cache_at": "1785412700",
"created_at": "1785000000"
},
"live": true
}
https://apiservice.vitamindata.net/api/v1/GetVPNUsageالبيانات المستهلكة والمتبقية، مع حدّ اليوم إن وُجد.
الطلب
vpn_idstringمطلوب
المعرّف العام للحساب (vpn_…)، من ListVPN أو من تسليم طلب.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/GetVPNUsage \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"vpn_id":"vpn_6t2k9p"}'
الاستجابة200 · application/json
vpn_idstring
يُعاد كما أُرسل.
remaining_bytesbytes
البيانات المتبقية.
total_downloadbytes
إجمالي التنزيل مدى الحياة.
total_uploadbytes
إجمالي الرفع مدى الحياة.
expires_atunix
متى ينتهي الحساب.
daily_limit_bytesbytes
حدّ اليوم. الغياب = بلا حدّ.
daily_used_bytesbytes
المستهلك من حدّ اليوم.
daily_reset_unixunix
متى يُصفَّر العدّاد اليومي.
cache_atunix
مدى حداثة الأرقام حين لا تكون لحظية.
livebool
طازج من الشبكة للتو.
seriesarray
محجوز لسلسلة الاستهلاك التاريخية — وهو فارغ اليوم.
series[].tunix
بداية الفترة.
series[].rxbytes
المُنزَّل في هذه الفترة.
series[].txbytes
المرفوع في هذه الفترة.
نموذج استجابة{
"vpn_id": "vpn_6t2k9p",
"remaining_bytes": "96636764160",
"total_download": "10737418240",
"total_upload": "1073741824",
"expires_at": "1793188800",
"daily_limit_bytes": "53687091200",
"daily_used_bytes": "1273741824",
"daily_reset_unix": "1785456000",
"cache_at": "1785412700",
"live": true
}
https://apiservice.vitamindata.net/api/v1/ListVPNBundlesمحافظ البيانات خلف حساب واحد، بترتيب استهلاكها.
هكذا تجيب عن سؤال «لماذا نقصت بيانات عميلي المدفوعة وما زالت لديه بيانات مجانية؟» — فـ queue_position 1 هي التي تُستهلك تاليًا. وlive:false تعني أننا لم نتمكن من قراءتها، وهو أمر مختلف عن ألا تكون هناك أي حزمة.
الطلب
vpn_idstringمطلوب
المعرّف العام للحساب (vpn_…)، من ListVPN أو من تسليم طلب.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/ListVPNBundles \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"vpn_id":"vpn_6t2k9p"}'
الاستجابة200 · application/json
bundlesarray
المحافظ، بترتيب الاستهلاك.
bundles[].bundle_idstring
معرّف المحفظة.
bundles[].freebool
مُنحت من الباقة المجانية لا بالشراء.
bundles[].sourceenum
من أين أتت المحفظة.
إحدى القيم التالية:buyextendmigratedfree_tier
bundles[].granted_bytesbytes
حجمها الكامل عند المنح.
bundles[].remaining_bytesbytes
ما تبقّى فيها.
bundles[].granted_atunix
متى مُنحت.
bundles[].expires_atunix
متى تنتهي سواء استُهلكت أم لا.
bundles[].daily_limit_bytesbytes
حدّها اليومي الخاص. الغياب = بلا حدّ.
bundles[].statusenum
مكتوبة بالحروف لا بالأرقام، فلا تضطر أبدًا إلى حفظ أن 2 تعني مستهلكة.
إحدى القيم التالية:activedisabledexhausted
bundles[].queue_positionint
ترتيب يبدأ من 1 بين المحافظ القابلة للاستخدام، حسب ترتيب الاستهلاك — 1 هي التي تُستهلك تاليًا. و0 أو الغياب يعني أنها خارج الطابور (مستهلكة أو منتهية أو معطّلة).
bundles[].plan_gbint
الحجم الذي بيعت به، بالغيغابايت.
bundles[].plan_daysint
مدة الصلاحية التي بيعت بها، بالأيام.
bundles[].invoice_idstring
عملية الشراء التي أتت منها. تغيب في المنحة المجانية.
livebool
الغياب أو false = تعذّر الوصول إلى مستوى الاستحقاقات، فجاءت القائمة فارغة بدل أن تكون خاطئة. فـ«لم نتمكن من قراءتها» و«لا توجد أي منها» جملتان مختلفتان.
نموذج استجابة{
"bundles": [
{"bundle_id": "bnd_2m8x", "source": "buy",
"granted_bytes": "107374182400", "remaining_bytes": "96636764160",
"granted_at": "1785000000", "expires_at": "1793188800",
"status": "active", "queue_position": 1, "plan_gb": 100, "plan_days": 30,
"invoice_id": "inv_5k8p2q"},
{"bundle_id": "bnd_9k1f", "free": true, "source": "free_tier",
"granted_bytes": "5368709120", "remaining_bytes": "5368709120",
"granted_at": "1784000000", "expires_at": "1793188800",
"status": "active", "queue_position": 2, "plan_gb": 5, "plan_days": 30}
],
"live": true
}
POST
GetSubscriptionLink
read
https://apiservice.vitamindata.net/api/v1/GetSubscriptionLinkرابط الاشتراك الذي يستورده تطبيق العميل. وهو المُنتَج المُسلَّم في بيعة VPN.
الطلب
vpn_idstringمطلوب
المعرّف العام للحساب (vpn_…)، من ListVPN أو من تسليم طلب.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/GetSubscriptionLink \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"vpn_id":"vpn_6t2k9p"}'
الاستجابة200 · application/json
subscription_urlstring
سلّم هذا لتطبيق عميلك — فهو التسليم كله.
tokenstring
الرمز المجرّد، لبناء رمز QR خاص بك أو روابط استيراد للتطبيقات.
نموذج استجابة{
"subscription_url": "https://sub.example.com/s/9f3kq8x2",
"token": "9f3kq8x2"
}
POST
SetVPNPassword
credentials
https://apiservice.vitamindata.net/api/v1/SetVPNPasswordيغيّر كلمة مرور حساب.
يتطلب نطاق credentials المنفصل — ولا يتضمّنه نطاق manage أبدًا.
الطلب
vpn_idstringمطلوب
المعرّف العام للحساب (vpn_…)، من ListVPN أو من تسليم طلب.
new_passwordstringمطلوب
كلمة المرور المراد ضبطها.
credentialstringاختياري
أي بيانات اعتماد، في الحسابات متعددة الاعتمادات. الفراغ = الاعتماد الأساسي.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/SetVPNPassword \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"vpn_id":"vpn_6t2k9p","new_password":"s3cr3t-Enough","credential":""}'
الاستجابة200 · application/json
usernamestring
بيانات الاعتماد التي طُبّق عليها التغيير.
نموذج استجابة{"username": "u482913"}
https://apiservice.vitamindata.net/api/v1/SetVPNStateيوقف حسابًا أو يستأنفه.
الطلب
vpn_idstringمطلوب
المعرّف العام للحساب (vpn_…)، من ListVPN أو من تسليم طلب.
stateenumمطلوب
ما المطلوب فعله.
إحدى القيم التالية:suspendresume
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/SetVPNState \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"vpn_id":"vpn_6t2k9p","state":"suspend"}'
الاستجابة200 · application/json
statusenum
الحالة التي استقر عليها الحساب.
إحدى القيم التالية:suspendedactive
نموذج استجابة{"status": "suspended"}
https://apiservice.vitamindata.net/api/v1/DeleteVPNيحذف حسابًا. لا تراجع ولا استرداد.
الطلب
vpn_idstringمطلوب
المعرّف العام للحساب (vpn_…)، من ListVPN أو من تسليم طلب.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/DeleteVPN \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"vpn_id":"vpn_6t2k9p"}'
الاستجابة200 · application/json
statusenum
دائمًا deleted عند النجاح.
إحدى القيم التالية:deleted
نموذج استجابة{"status": "deleted"}
بيع الخوادم
بيع خادم VPS يخضع لعقد التمويل نفسه الذي يخضع له بيع VPN — والفرق في السلة وحدها.
https://apiservice.vitamindata.net/api/v1/GetVPSStorefrontالمواقع، والخطط المسعّرة في كل موقع، وصور الإقلاع.
العقدة التي تحمل available:false نفدت طاقتها — اعرضها ولا تتِح شراءها.
الطلب
لا معاملات — أرسل كائنًا فارغًا، {}.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/GetVPSStorefront \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{}'
الاستجابة200 · application/json
nodesarray
المواقع، ولكل منها خططه المسعّرة.
nodes[].node_idstring
ما يأخذه node_id في السلة.
nodes[].labelstring
الاسم المعروض (Frankfurt).
nodes[].regionstring
رمز إقليمي عام للتجميع.
nodes[].countrystring
رمز الدولة بمعيار ISO، للأعلام.
nodes[].availablebool
الغياب أو false = نفدت الطاقة: اعرضها ولا تتِح شراءها.
nodes[].plansarray
ما يمكن بيعه هنا، مسعّرًا.
nodes[].plans[].plan_codestring
ما يأخذه plan_code في السلة.
nodes[].plans[].namestring
الاسم المعروض.
nodes[].plans[].vcpuint
الأنوية.
nodes[].plans[].ram_mbint
الذاكرة بالميغابايت.
nodes[].plans[].disk_gbint
القرص بالغيغابايت.
nodes[].plans[].traffic_bytesbytes
البيانات الشهرية المشمولة.
nodes[].plans[].price_usd_monthmoney
السعر الشهري في هذه العقدة — فالخطة نفسها قد تكلّف غير ذلك في مكان آخر.
imagesarray
كل ما يمكن الإقلاع منه أو تثبيته.
images[].shastring
المعرّف الوحيد للصورة — تأخذه السلال وعمليات إعادة التثبيت وإرفاق ISO جميعًا.
images[].namestring
الاسم البشري (Debian 13).
images[].kindenum
صورة disk تُجهّز مباشرةً؛ أما iso فهي مثبّت تُقلع منه.
إحدى القيم التالية:diskiso
images[].os_familyenum
لتجميع واجهتك ولأيقوناتها.
إحدى القيم التالية:linuxwindowsmikrotik
images[].min_disk_gbint
إعادة التثبيت على قرص أصغر مرفوضة — وسّع القرص أولًا.
months_minint
أقصر مدة يجوز شراء جهاز جديد بها.
نموذج استجابة{
"nodes": [
{"node_id": "de1", "label": "Frankfurt", "region": "eu", "country": "DE", "available": true,
"plans": [
{"plan_code": "s2", "name": "S2", "vcpu": 2, "ram_mb": 4096, "disk_gb": 40,
"traffic_bytes": "2199023255552", "price_usd_month": "8.00"}
]}
],
"images": [
{"sha": "9a1b8c2d7e6f", "name": "Debian 13", "kind": "disk", "os_family": "linux", "min_disk_gb": 10}
],
"months_min": 1,
"months_max": 12
}
https://apiservice.vitamindata.net/api/v1/ListVPSImagesكل صورة يجوز لك إقلاعها أو تثبيتها، حسب sha.
قيمة sha هي ما تأخذه السلة وإعادة التثبيت وإرفاق ISO جميعًا. ولا شيء غيرها يعرّف صورة.
الطلب
لا معاملات — أرسل كائنًا فارغًا، {}.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/ListVPSImages \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{}'
الاستجابة200 · application/json
images[].shastring
المعرّف الوحيد للصورة — تأخذه السلال وعمليات إعادة التثبيت وإرفاق ISO جميعًا.
images[].namestring
الاسم البشري (Debian 13).
images[].kindenum
صورة disk تُجهّز مباشرةً؛ أما iso فهي مثبّت تُقلع منه.
إحدى القيم التالية:diskiso
images[].os_familyenum
لتجميع واجهتك ولأيقوناتها.
إحدى القيم التالية:linuxwindowsmikrotik
images[].min_disk_gbint
إعادة التثبيت على قرص أصغر مرفوضة — وسّع القرص أولًا.
نموذج استجابة{
"images": [
{"sha": "9a1b8c2d7e6f", "name": "Debian 13", "kind": "disk", "os_family": "linux", "min_disk_gb": 10},
{"sha": "3f4e5d6c7b8a", "name": "Windows Server 2025 installer", "kind": "iso",
"os_family": "windows", "min_disk_gb": 40}
]
}
https://apiservice.vitamindata.net/api/v1/QuoteVPSسعر خادم جديد، مفصّلًا بالبنود.
الطلب
cartobjectمطلوب
الخادم المراد تسعيره.
cart.node_idstringمطلوب
أين يُنشأ الجهاز، من عقد الواجهة.
cart.placementstringمحجوز — لا ترسله
محجوز. في هذا API يقرّر node_id دائمًا مكان إنشاء الخادم — فأرسله، واختر العقدة بنفسك من الواجهة.
إحدى القيم التالية:auto
cart.plan_codestringمطلوب
الخطة، من قائمة أسعار العقدة المختارة — فالخطط والأسعار تختلف من عقدة إلى أخرى.
cart.image_shastringمطلوب
ما الذي يُقلع منه أو يُثبَّت، حسب sha. صور القرص تُجهَّز مباشرةً؛ أما مثبّت ISO فيأتي مرفقًا مع ضبط الجهاز على الإقلاع منه.
cart.namestringمطلوب
اسم مضيف الجهاز / تسميته.
cart.monthsintمطلوب
المدة الابتدائية، ضمن حدود الأشهر في الواجهة.
cart.extra_disk_gbintاختياري
قرص إضافي فوق قرص الخطة، بالغيغابايت.
cart.extra_ipsintاختياري
عناوين IPv4 عامة إضافية.
cart.extra_traffic_tbmoneyاختياري
بيانات شهرية إضافية بالتيرابايت، كسلسلة عشرية ("0.5").
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/QuoteVPS \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"cart":{"node_id":"de1","plan_code":"s2","image_sha":"9a1b8c2d7e6f","months":2,"name":"web-1","extra_disk_gb":20,"extra_ips":1,"extra_traffic_tb":"0.5"}}'
الاستجابة200 · application/json
quoteobject
السعر مفصّلًا بالبنود. لا شيء يُنشأ ولا شيء يُحصَّل.
quote.model_namestring
أي نموذج تسعير أجاب.
quote.model_typestring
إصدار محرّك النموذج.
quote.base_usdmoney
السعر قبل الخصومات والرسوم الإضافية.
quote.total_usdmoney
السعر النهائي — أي ما تحصّله بيعة بهذه السلة.
quote.linesarray
التفصيل بالبنود، بإشارات موجبة وسالبة، ومجموعه يساوي الإجمالي تمامًا.
quote.lines[].codestring
ما هذا السطر (base، أو رمز خصم، أو رسم إضافي…).
quote.lines[].kindstring
فئة السطر، للتجميع في واجهتك.
quote.lines[].amount_usdmoney
بإشارة. الخصومات سالبة، ومجموع الأسطر يساوي total_usd تمامًا.
quote.lines[].pctstring
النسبة المئوية خلف السطر، حين توجد.
quote.cappedbool
بلغ الإجمالي سقف النموذج.
quote.floor_appliedbool
رُفع الإجمالي إلى أرضية النموذج.
quote.clampedenum
يُضبط عندما تُقصر قيمة في السلة إلى داخل الحدود قبل التسعير.
إحدى القيم التالية:minmax
quote.invalidstring
إذا لم يكن فارغًا فالسلة غير قابلة للتسعير — اعرضه ولا تحصّل أبدًا تسعيرة كهذه.
quote.metamap
إضافات النموذج، نص→نص (مثل remaining_days في الترقية).
نموذج استجابة{
"quote": {
"model_name": "vps_plan",
"model_type": "vps_plan_v1",
"base_usd": "16.00",
"total_usd": "16.00",
"lines": [
{"code": "plan_s2", "kind": "base", "amount_usd": "16.00"}
],
"meta": {"months": "2"}
}
}
POST
CreateVPSOrder
buyIdempotency-Key
https://apiservice.vitamindata.net/api/v1/CreateVPSOrderيشتري خادمًا ويجهّزه.
استعلم عبر GetOrder عن التسليم، ثم عبر GetVPS عن الجهاز.
الطلب
cartobjectمطلوب
ما الذي يُنشأ — بالشكل نفسه الذي يسعّره QuoteVPS.
cart.node_idstringمطلوب
أين يُنشأ الجهاز، من عقد الواجهة.
cart.placementstringمحجوز — لا ترسله
محجوز. في هذا API يقرّر node_id دائمًا مكان إنشاء الخادم — فأرسله، واختر العقدة بنفسك من الواجهة.
إحدى القيم التالية:auto
cart.plan_codestringمطلوب
الخطة، من قائمة أسعار العقدة المختارة — فالخطط والأسعار تختلف من عقدة إلى أخرى.
cart.image_shastringمطلوب
ما الذي يُقلع منه أو يُثبَّت، حسب sha. صور القرص تُجهَّز مباشرةً؛ أما مثبّت ISO فيأتي مرفقًا مع ضبط الجهاز على الإقلاع منه.
cart.namestringمطلوب
اسم مضيف الجهاز / تسميته.
cart.monthsintمطلوب
المدة الابتدائية، ضمن حدود الأشهر في الواجهة.
cart.extra_disk_gbintاختياري
قرص إضافي فوق قرص الخطة، بالغيغابايت.
cart.extra_ipsintاختياري
عناوين IPv4 عامة إضافية.
cart.extra_traffic_tbmoneyاختياري
بيانات شهرية إضافية بالتيرابايت، كسلسلة عشرية ("0.5").
fundingenumمطلوب
كيف يُدفع — انظر الدفع مقابل الأشياء. ولا قيمة افتراضية له: فحذفه يُرفض.
إحدى القيم التالية:FUNDING_AUTOFUNDING_BALANCEFUNDING_INVOICE
expected_total_usdmoneyاختياري
ضمانة تأكيد. إذا ضُبط واختلفت تسعيرتنا الحديثة، تُرفض البيعة بـ price_changed بدل تحصيل مبلغ لم يره عميلك قط.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/CreateVPSOrder \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"cart":{"node_id":"de1","plan_code":"s2","image_sha":"9a1b8c2d7e6f","months":2,"name":"web-1","extra_disk_gb":20,"extra_ips":1,"extra_traffic_tb":"0.5"},"funding":"FUNDING_AUTO","expected_total_usd":"36.00"}'
الاستجابة200 · application/json
orderobject
الطلب — استعلم عبر GetOrder حتى تصبح حالته delivered.
order.order_idstring
المعرّف العام للطلب (ord_…).
order.productenum
ما الذي اشتُري.
إحدى القيم التالية:vpnvps
order.kindstring
شكل الشراء: new أو extend أو upgrade…
order.statusenum
دورة الحياة. delivered هي الغاية؛ وneeds_operator تعني أن المال دخل وأن إنسانًا يكمل التسليم — فلا تعد الشراء؛ وexpired تعني أن الفاتورة انتهت دون دفع.
إحدى القيم التالية:createdinvoicedpaiddeliveringdeliveredneeds_operatorfailedrefund_pendingrefundedexpired
order.fundingenum
الوسيلة التي موّلته فعليًا. وFUNDING_AUTO يُحسم إلى إحداها.
إحدى القيم التالية:invoicebalance
order.total_usdmoney
ما يحصّله الطلب.
order.invoice_idstring
الفاتورة التي خلفه — لكل طلب فاتورة، أيًّا كانت وسيلة تمويله.
order.itemsint
كم استحقاقًا يُنشئه الطلب أو يمدّده.
order.created_atunix
متى قُدّم الطلب.
order.delivered_atunix
متى انتهى التسليم. يغيب قبل ذلك.
order.breakdownobject
التسعيرة التي وافق عليها العميل، حرفيًا — بالشكل نفسه الذي يعيده Quote.
invoiceobject
الفاتورة خلف الطلب: قابلة للدفع عند payment_required، ومسدّدة سلفًا عند completed.
invoice.invoice_idstring
معرّف الفاتورة لدى البوابة (inv_…).
invoice.statusenum
pending قابلة للدفع. وكل ما بين confirmed وdelivered_redirected يعني أن المال دخل بلا رجعة — فعامِلها كلها على أنها مدفوعة. أما expired فتعني أن الرابط انتهى دون دفع.
إحدى القيم التالية:pendingconfirmedsweepingsweptdeliveringdelivereddelivered_redirectedexpired
invoice.pay_urlstring
صفحة الدفع المستضافة. أرسل عميلك إليها؛ فكل وسيلة دفع (عملات، شبكات، رصيد) تعيش خلفها.
invoice.pay_telegram_urlstring
الفاتورة نفسها، قابلة للدفع داخل Telegram: تفتح بوت مزوّد الدفع نفسه، الذي يعرض المبلغ ويستقبل الدفع هناك. اعرضها إلى جانب pay_url للعملاء الذين يفضّلون عدم مغادرة التطبيق. قد تغيب — فلا يملكها إلا مزوّد دفع لديه بوت مُعدّ، ولذلك لا تجعلها زر الدفع الوحيد لديك.
invoice.price_usdmoney
ما تحصّله الفاتورة.
invoice.expires_atunix
متى تُغلق نافذة الدفع.
paidbool
المال محصّل. يغيب (= false) مع payment_required.
statusenum
الحقل الذي تفرّع عليه — انظر الدفع مقابل الأشياء.
إحدى القيم التالية:completedpayment_required
نموذج استجابة{
"order": {
"order_id": "ord_2f8k3j", "product": "vps", "kind": "new",
"status": "invoiced", "funding": "invoice", "total_usd": "16.00",
"invoice_id": "inv_7h4w9s", "items": 1, "created_at": "1785412800"
},
"invoice": {
"invoice_id": "inv_7h4w9s", "status": "pending",
"pay_url": "https://pay.example.com/i/inv_7h4w9s",
"price_usd": "16.00", "expires_at": "1785499200"
},
"status": "payment_required"
}
https://apiservice.vitamindata.net/api/v1/QuoteVPSExtendكم يكلّف تجديد خادم.
الطلب
vps_idstringمطلوب
معرّف الخادم، من ListVPS.
monthsintمطلوب
كم شهرًا يُضاف. ونطاق months_min…months_max في الواجهة هو ما ينبغي أن تعرضه واجهتك، لكن التجديد لا يُقصَر إليه — فأرسل رقمًا معقولًا، لأن ما ترسله هو ما يُسعَّر ويُحصَّل.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/QuoteVPSExtend \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"vps_id":"vm_7q3k1n","months":1}'
الاستجابة200 · application/json
quoteobject
السعر مفصّلًا بالبنود. لا شيء يُنشأ ولا شيء يُحصَّل.
quote.model_namestring
أي نموذج تسعير أجاب.
quote.model_typestring
إصدار محرّك النموذج.
quote.base_usdmoney
السعر قبل الخصومات والرسوم الإضافية.
quote.total_usdmoney
السعر النهائي — أي ما تحصّله بيعة بهذه السلة.
quote.linesarray
التفصيل بالبنود، بإشارات موجبة وسالبة، ومجموعه يساوي الإجمالي تمامًا.
quote.lines[].codestring
ما هذا السطر (base، أو رمز خصم، أو رسم إضافي…).
quote.lines[].kindstring
فئة السطر، للتجميع في واجهتك.
quote.lines[].amount_usdmoney
بإشارة. الخصومات سالبة، ومجموع الأسطر يساوي total_usd تمامًا.
quote.lines[].pctstring
النسبة المئوية خلف السطر، حين توجد.
quote.cappedbool
بلغ الإجمالي سقف النموذج.
quote.floor_appliedbool
رُفع الإجمالي إلى أرضية النموذج.
quote.clampedenum
يُضبط عندما تُقصر قيمة في السلة إلى داخل الحدود قبل التسعير.
إحدى القيم التالية:minmax
quote.invalidstring
إذا لم يكن فارغًا فالسلة غير قابلة للتسعير — اعرضه ولا تحصّل أبدًا تسعيرة كهذه.
quote.metamap
إضافات النموذج، نص→نص (مثل remaining_days في الترقية).
نموذج استجابة{
"quote": {
"model_name": "vps_plan",
"model_type": "vps_plan_v1",
"base_usd": "16.00",
"total_usd": "16.00",
"lines": [
{"code": "plan_s2", "kind": "base", "amount_usd": "16.00"}
],
"meta": {"months": "2"}
}
}
POST
ExtendVPS
buyIdempotency-Key
https://apiservice.vitamindata.net/api/v1/ExtendVPSيجدّد خادمًا.
التجديد المبكر لا يكلّف شيئًا إضافيًا: فتاريخ الانتهاء الجديد يُحسب من التاريخ الحالي، لا من اليوم.
الطلب
vps_idstringمطلوب
معرّف الخادم، من ListVPS.
monthsintمطلوب
كم شهرًا يُضاف. ونطاق months_min…months_max في الواجهة هو ما ينبغي أن تعرضه واجهتك، لكن التجديد لا يُقصَر إليه — فأرسل رقمًا معقولًا، لأن ما ترسله هو ما يُسعَّر ويُحصَّل.
fundingenumمطلوب
كيف يُدفع — انظر الدفع مقابل الأشياء. ولا قيمة افتراضية له: فحذفه يُرفض.
إحدى القيم التالية:FUNDING_AUTOFUNDING_BALANCEFUNDING_INVOICE
expected_total_usdmoneyاختياري
ضمانة تأكيد. إذا ضُبط واختلفت تسعيرتنا الحديثة، تُرفض البيعة بـ price_changed بدل تحصيل مبلغ لم يره عميلك قط.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/ExtendVPS \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"vps_id":"vm_7q3k1n","months":1,"funding":"FUNDING_AUTO","expected_total_usd":"8.00"}'
الاستجابة200 · application/json
orderobject
الطلب — استعلم عبر GetOrder حتى تصبح حالته delivered.
order.order_idstring
المعرّف العام للطلب (ord_…).
order.productenum
ما الذي اشتُري.
إحدى القيم التالية:vpnvps
order.kindstring
شكل الشراء: new أو extend أو upgrade…
order.statusenum
دورة الحياة. delivered هي الغاية؛ وneeds_operator تعني أن المال دخل وأن إنسانًا يكمل التسليم — فلا تعد الشراء؛ وexpired تعني أن الفاتورة انتهت دون دفع.
إحدى القيم التالية:createdinvoicedpaiddeliveringdeliveredneeds_operatorfailedrefund_pendingrefundedexpired
order.fundingenum
الوسيلة التي موّلته فعليًا. وFUNDING_AUTO يُحسم إلى إحداها.
إحدى القيم التالية:invoicebalance
order.total_usdmoney
ما يحصّله الطلب.
order.invoice_idstring
الفاتورة التي خلفه — لكل طلب فاتورة، أيًّا كانت وسيلة تمويله.
order.itemsint
كم استحقاقًا يُنشئه الطلب أو يمدّده.
order.created_atunix
متى قُدّم الطلب.
order.delivered_atunix
متى انتهى التسليم. يغيب قبل ذلك.
order.breakdownobject
التسعيرة التي وافق عليها العميل، حرفيًا — بالشكل نفسه الذي يعيده Quote.
invoiceobject
الفاتورة خلف الطلب: قابلة للدفع عند payment_required، ومسدّدة سلفًا عند completed.
invoice.invoice_idstring
معرّف الفاتورة لدى البوابة (inv_…).
invoice.statusenum
pending قابلة للدفع. وكل ما بين confirmed وdelivered_redirected يعني أن المال دخل بلا رجعة — فعامِلها كلها على أنها مدفوعة. أما expired فتعني أن الرابط انتهى دون دفع.
إحدى القيم التالية:pendingconfirmedsweepingsweptdeliveringdelivereddelivered_redirectedexpired
invoice.pay_urlstring
صفحة الدفع المستضافة. أرسل عميلك إليها؛ فكل وسيلة دفع (عملات، شبكات، رصيد) تعيش خلفها.
invoice.pay_telegram_urlstring
الفاتورة نفسها، قابلة للدفع داخل Telegram: تفتح بوت مزوّد الدفع نفسه، الذي يعرض المبلغ ويستقبل الدفع هناك. اعرضها إلى جانب pay_url للعملاء الذين يفضّلون عدم مغادرة التطبيق. قد تغيب — فلا يملكها إلا مزوّد دفع لديه بوت مُعدّ، ولذلك لا تجعلها زر الدفع الوحيد لديك.
invoice.price_usdmoney
ما تحصّله الفاتورة.
invoice.expires_atunix
متى تُغلق نافذة الدفع.
paidbool
المال محصّل. يغيب (= false) مع payment_required.
statusenum
الحقل الذي تفرّع عليه — انظر الدفع مقابل الأشياء.
إحدى القيم التالية:completedpayment_required
نموذج استجابة{
"order": {
"order_id": "ord_5d1p8m", "product": "vps", "kind": "extend",
"status": "paid", "funding": "balance", "total_usd": "8.00",
"invoice_id": "inv_1c6v3z", "items": 1, "created_at": "1785412800"
},
"invoice": {
"invoice_id": "inv_1c6v3z", "status": "confirmed", "price_usd": "8.00"
},
"paid": true,
"status": "completed"
}
https://apiservice.vitamindata.net/api/v1/QuoteVPSUpgradeكم يكلّف شكل أكبر، محسوبًا بالتناسب على المدة المدفوعة سلفًا.
الطلب
vps_idstringمطلوب
معرّف الخادم، من ListVPS.
specobjectمطلوب
الشكل المستهدف. والحقول المحذوفة أو الصفرية تُبقي قيمها الحالية.
spec.vcpuintاختياري
الأنوية المستهدفة. و0 يُبقي القيمة الحالية.
spec.ram_mbintاختياري
الذاكرة المستهدفة بالميغابايت. و0 يُبقي القيمة الحالية.
spec.disk_gbintاختياري
القرص المستهدف بالغيغابايت. والقرص لا يكبر إلا كِبَرًا — فأي قيمة أصغر تُرفض، لأن تقليص نظام ملفات تحت نظام تشغيل يعني فقدان بيانات.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/QuoteVPSUpgrade \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"vps_id":"vm_7q3k1n","spec":{"vcpu":4,"ram_mb":8192,"disk_gb":80}}'
الاستجابة200 · application/json
quoteobject
السعر مفصّلًا بالبنود. لا شيء يُنشأ ولا شيء يُحصَّل.
quote.model_namestring
أي نموذج تسعير أجاب.
quote.model_typestring
إصدار محرّك النموذج.
quote.base_usdmoney
السعر قبل الخصومات والرسوم الإضافية.
quote.total_usdmoney
السعر النهائي — أي ما تحصّله بيعة بهذه السلة.
quote.linesarray
التفصيل بالبنود، بإشارات موجبة وسالبة، ومجموعه يساوي الإجمالي تمامًا.
quote.lines[].codestring
ما هذا السطر (base، أو رمز خصم، أو رسم إضافي…).
quote.lines[].kindstring
فئة السطر، للتجميع في واجهتك.
quote.lines[].amount_usdmoney
بإشارة. الخصومات سالبة، ومجموع الأسطر يساوي total_usd تمامًا.
quote.lines[].pctstring
النسبة المئوية خلف السطر، حين توجد.
quote.cappedbool
بلغ الإجمالي سقف النموذج.
quote.floor_appliedbool
رُفع الإجمالي إلى أرضية النموذج.
quote.clampedenum
يُضبط عندما تُقصر قيمة في السلة إلى داخل الحدود قبل التسعير.
إحدى القيم التالية:minmax
quote.invalidstring
إذا لم يكن فارغًا فالسلة غير قابلة للتسعير — اعرضه ولا تحصّل أبدًا تسعيرة كهذه.
quote.metamap
إضافات النموذج، نص→نص (مثل remaining_days في الترقية).
restart_requiredbool
تطبيق هذا الشكل يحتاج إلى دورة طاقة — وينبغي أن يعرف العميل ذلك قبل الدفع.
monthly_before_usdmoney
السعر المتكرر اليوم.
monthly_after_usdmoney
السعر المتكرر بعد الترقية — أي ما ستكلّفه التجديدات من الآن فصاعدًا.
نموذج استجابة{
"quote": {
"model_name": "vps_upgrade",
"model_type": "vps_plan_v1",
"base_usd": "4.20",
"total_usd": "4.20",
"lines": [
{"code": "prorate_vcpu", "kind": "vps_upgrade", "amount_usd": "2.40"},
{"code": "prorate_ram", "kind": "vps_upgrade", "amount_usd": "1.80"}
],
"meta": {"remaining_days": "21", "monthly_delta_usd": "6.00", "quote_expires_at": "1785416400"}
},
"restart_required": true,
"monthly_before_usd": "8.00",
"monthly_after_usd": "14.00"
}
POST
UpgradeVPS
buyIdempotency-Key
https://apiservice.vitamindata.net/api/v1/UpgradeVPSيدفع ثمن شكل أكبر ويطبّقه. والقرص لا يمكن إلا أن يكبر.
الطلب
vps_idstringمطلوب
معرّف الخادم، من ListVPS.
specobjectمطلوب
الشكل المستهدف — سعّره أولًا؛ فالتسعيرة تخبرك أيضًا بشأن إعادة التشغيل.
spec.vcpuintاختياري
الأنوية المستهدفة. و0 يُبقي القيمة الحالية.
spec.ram_mbintاختياري
الذاكرة المستهدفة بالميغابايت. و0 يُبقي القيمة الحالية.
spec.disk_gbintاختياري
القرص المستهدف بالغيغابايت. والقرص لا يكبر إلا كِبَرًا — فأي قيمة أصغر تُرفض، لأن تقليص نظام ملفات تحت نظام تشغيل يعني فقدان بيانات.
fundingenumمطلوب
كيف يُدفع — انظر الدفع مقابل الأشياء. ولا قيمة افتراضية له: فحذفه يُرفض.
إحدى القيم التالية:FUNDING_AUTOFUNDING_BALANCEFUNDING_INVOICE
expected_total_usdmoneyاختياري
ضمانة تأكيد. إذا ضُبط واختلفت تسعيرتنا الحديثة، تُرفض البيعة بـ price_changed بدل تحصيل مبلغ لم يره عميلك قط.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/UpgradeVPS \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"vps_id":"vm_7q3k1n","spec":{"vcpu":4,"ram_mb":8192,"disk_gb":80},"funding":"FUNDING_AUTO","expected_total_usd":"4.20"}'
الاستجابة200 · application/json
orderobject
الطلب — استعلم عبر GetOrder حتى تصبح حالته delivered.
order.order_idstring
المعرّف العام للطلب (ord_…).
order.productenum
ما الذي اشتُري.
إحدى القيم التالية:vpnvps
order.kindstring
شكل الشراء: new أو extend أو upgrade…
order.statusenum
دورة الحياة. delivered هي الغاية؛ وneeds_operator تعني أن المال دخل وأن إنسانًا يكمل التسليم — فلا تعد الشراء؛ وexpired تعني أن الفاتورة انتهت دون دفع.
إحدى القيم التالية:createdinvoicedpaiddeliveringdeliveredneeds_operatorfailedrefund_pendingrefundedexpired
order.fundingenum
الوسيلة التي موّلته فعليًا. وFUNDING_AUTO يُحسم إلى إحداها.
إحدى القيم التالية:invoicebalance
order.total_usdmoney
ما يحصّله الطلب.
order.invoice_idstring
الفاتورة التي خلفه — لكل طلب فاتورة، أيًّا كانت وسيلة تمويله.
order.itemsint
كم استحقاقًا يُنشئه الطلب أو يمدّده.
order.created_atunix
متى قُدّم الطلب.
order.delivered_atunix
متى انتهى التسليم. يغيب قبل ذلك.
order.breakdownobject
التسعيرة التي وافق عليها العميل، حرفيًا — بالشكل نفسه الذي يعيده Quote.
invoiceobject
الفاتورة خلف الطلب: قابلة للدفع عند payment_required، ومسدّدة سلفًا عند completed.
invoice.invoice_idstring
معرّف الفاتورة لدى البوابة (inv_…).
invoice.statusenum
pending قابلة للدفع. وكل ما بين confirmed وdelivered_redirected يعني أن المال دخل بلا رجعة — فعامِلها كلها على أنها مدفوعة. أما expired فتعني أن الرابط انتهى دون دفع.
إحدى القيم التالية:pendingconfirmedsweepingsweptdeliveringdelivereddelivered_redirectedexpired
invoice.pay_urlstring
صفحة الدفع المستضافة. أرسل عميلك إليها؛ فكل وسيلة دفع (عملات، شبكات، رصيد) تعيش خلفها.
invoice.pay_telegram_urlstring
الفاتورة نفسها، قابلة للدفع داخل Telegram: تفتح بوت مزوّد الدفع نفسه، الذي يعرض المبلغ ويستقبل الدفع هناك. اعرضها إلى جانب pay_url للعملاء الذين يفضّلون عدم مغادرة التطبيق. قد تغيب — فلا يملكها إلا مزوّد دفع لديه بوت مُعدّ، ولذلك لا تجعلها زر الدفع الوحيد لديك.
invoice.price_usdmoney
ما تحصّله الفاتورة.
invoice.expires_atunix
متى تُغلق نافذة الدفع.
paidbool
المال محصّل. يغيب (= false) مع payment_required.
statusenum
الحقل الذي تفرّع عليه — انظر الدفع مقابل الأشياء.
إحدى القيم التالية:completedpayment_required
نموذج استجابة{
"order": {
"order_id": "ord_5d1p8m", "product": "vps", "kind": "extend",
"status": "paid", "funding": "balance", "total_usd": "8.00",
"invoice_id": "inv_1c6v3z", "items": 1, "created_at": "1785412800"
},
"invoice": {
"invoice_id": "inv_1c6v3z", "status": "confirmed", "price_usd": "8.00"
},
"paid": true,
"status": "completed"
}
إدارة الخوادم
كل فعل هنا يأخذ الخادم عبر id — فاسم الحقل في هذه النداءات هو id حرفيًا، بخلاف أفعال المال التي تستخدم vps_id.
https://apiservice.vitamindata.net/api/v1/ListVPSأجهزتك، مع حالة الطاقة والعناوين.
الطلب
limitintاختياري
حجم الصفحة. الافتراضي 50.
cursorcursorاختياري
قيمة next_cursor من الاستجابة السابقة. احذفه للصفحة الأولى.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/ListVPS \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"limit":50,"cursor":""}'
الاستجابة200 · application/json
vps[].idstring
معرّف الخادم — وهو ما يأخذه حقل id في كل فعل إداري وحقل vps_id في كل فعل مالي.
vps[].namestring
اسم مضيفه / تسميته.
vps[].node_idstring
أين يعمل.
vps[].lifecycleenum
0 قيد التجهيز · 1 نشط · 2 موقوف · 3 قيد الحذف · 4 محذوف.
إحدى القيم التالية:01234
vps[].provisionedbool
الجهاز موجود على مضيفه.
vps[].power_desiredenum
ما ينبغي أن تكون عليه الطاقة: 1 يعمل، و0 أو الغياب متوقف. أما الحالة اللحظية ففي GetVPSStats.running.
إحدى القيم التالية:01
vps[].mem_mbint
الذاكرة بالميغابايت.
vps[].disk_gbint
القرص بالغيغابايت.
vps[].image_shastring
ما الذي أقلع منه أو ثُبّت منه.
vps[].expires_atunix
متى ينتهي الخادم — جدّده عبر ExtendVPS قبل ذلك.
vps[].created_atunix
متى أُنشئ.
vps[].ipsarray
عناوينه العامة.
vps[].private_ipstring
عنوانه الخاص، إن كانت الخطة تتضمّن واحدًا.
next_cursorcursor
أعد إرساله كـ cursor للصفحة التالية. والغياب أو الفراغ = حصلت على كل شيء.
نموذج استجابة{
"vps": [{
"id": "vm_7q3k1n",
"name": "web-1",
"node_id": "de1",
"lifecycle": 1,
"provisioned": true,
"power_desired": 1,
"vcpu": 2,
"mem_mb": 4096,
"disk_gb": 40,
"image_sha": "9a1b8c2d7e6f",
"expires_at": "1793188800",
"created_at": "1785000000",
"ips": ["203.0.113.10"],
"private_ip": "10.77.0.10"
}]
}
https://apiservice.vitamindata.net/api/v1/GetVPSجهاز واحد بالتفصيل.
الطلب
idstringمطلوب
معرّف الخادم، من ListVPS. لاحظ أن اسم الحقل هو id في الأفعال الإدارية — وأفعال المال وحدها تسمّيه vps_id.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/GetVPS \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"id":"vm_7q3k1n"}'
الاستجابة200 · application/json
vps.idstring
معرّف الخادم — وهو ما يأخذه حقل id في كل فعل إداري وحقل vps_id في كل فعل مالي.
vps.namestring
اسم مضيفه / تسميته.
vps.node_idstring
أين يعمل.
vps.lifecycleenum
0 قيد التجهيز · 1 نشط · 2 موقوف · 3 قيد الحذف · 4 محذوف.
إحدى القيم التالية:01234
vps.provisionedbool
الجهاز موجود على مضيفه.
vps.power_desiredenum
ما ينبغي أن تكون عليه الطاقة: 1 يعمل، و0 أو الغياب متوقف. أما الحالة اللحظية ففي GetVPSStats.running.
إحدى القيم التالية:01
vps.mem_mbint
الذاكرة بالميغابايت.
vps.disk_gbint
القرص بالغيغابايت.
vps.image_shastring
ما الذي أقلع منه أو ثُبّت منه.
vps.expires_atunix
متى ينتهي الخادم — جدّده عبر ExtendVPS قبل ذلك.
vps.created_atunix
متى أُنشئ.
vps.ipsarray
عناوينه العامة.
vps.private_ipstring
عنوانه الخاص، إن كانت الخطة تتضمّن واحدًا.
livebool
قُرئ من المستوى للتو.
نموذج استجابة{
"vps": {
"id": "vm_7q3k1n",
"name": "web-1",
"node_id": "de1",
"lifecycle": 1,
"provisioned": true,
"power_desired": 1,
"vcpu": 2,
"mem_mb": 4096,
"disk_gb": 40,
"image_sha": "9a1b8c2d7e6f",
"expires_at": "1793188800",
"created_at": "1785000000",
"ips": ["203.0.113.10"],
"private_ip": "10.77.0.10"
},
"live": true
}
https://apiservice.vitamindata.net/api/v1/GetVPSStatsالمعالج والذاكرة والقرص والشبكة لحظيًا.
الطلب
idstringمطلوب
معرّف الخادم، من ListVPS. لاحظ أن اسم الحقل هو id في الأفعال الإدارية — وأفعال المال وحدها تسمّيه vps_id.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/GetVPSStats \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"id":"vm_7q3k1n"}'
الاستجابة200 · application/json
cpu_pctint
حِمل المعالج، بالنسبة المئوية.
mem_used_mbint
الذاكرة المستخدمة، بالميغابايت.
disk_used_mbint
القرص المستخدم، بالميغابايت.
rx_bpsint64
الوارد، بالبت في الثانية.
tx_bpsint64
الصادر، بالبت في الثانية.
runningbool
الجهاز يعمل الآن.
updated_atunix
متى أُخذت عيّنة هذه الأرقام.
نموذج استجابة{
"cpu_pct": 12,
"mem_used_mb": 1536,
"disk_used_mb": 9216,
"rx_bps": "1048576",
"tx_bps": "524288",
"running": true,
"updated_at": "1785412790"
}
https://apiservice.vitamindata.net/api/v1/GetVPSUsageالبيانات المستهلكة من حصة الجهاز، لكل حزمة.
الطلب
idstringمطلوب
معرّف الخادم، من ListVPS. لاحظ أن اسم الحقل هو id في الأفعال الإدارية — وأفعال المال وحدها تسمّيه vps_id.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/GetVPSUsage \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"id":"vm_7q3k1n"}'
الاستجابة200 · application/json
total_downbytes
إجمالي التنزيل مدى الحياة.
total_upbytes
إجمالي الرفع مدى الحياة.
bundlesarray
حزم البيانات، مع current التي تشير إلى الحزمة التي تُستهلك الآن.
bundles[].idint64
معرّف حزمة البيانات على مستوى الحوسبة.
bundles[].modeint
رمز وضع المحاسبة لدى المستوى. عامله على أنه مبهم.
bundles[].bytes_totalbytes
الحصة الكاملة للحزمة.
bundles[].used_dlbytes
المُنزَّل منها.
bundles[].used_upbytes
المرفوع منها.
bundles[].stateint
رمز الحالة لدى المستوى. عامله على أنه مبهم.
bundles[].currentbool
هذه هي الحزمة التي تُستهلك الآن.
bundles[].expires_atunix
متى تنتهي الحزمة.
نموذج استجابة{
"total_down": "53687091200",
"total_up": "10737418240",
"bundles": [
{"id": "41", "mode": 1, "bytes_total": "2199023255552",
"used_dl": "53687091200", "used_up": "10737418240",
"state": 1, "current": true, "expires_at": "1793188800"}
]
}
https://apiservice.vitamindata.net/api/v1/VPSPowerالتحكم بالطاقة.
shutdown يطلب من نظام التشغيل؛ أما force_stop فينزع القابس. والأول أفضل.
الطلب
idstringمطلوب
معرّف الخادم، من ListVPS. لاحظ أن اسم الحقل هو id في الأفعال الإدارية — وأفعال المال وحدها تسمّيه vps_id.
actionenumمطلوب
shutdown وreboot لطيفان؛ أما reset وforce_stop فهما زر الطاقة.
إحدى القيم التالية:startshutdownrebootresetforce_stop
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/VPSPower \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"id":"vm_7q3k1n","action":"reboot"}'
الاستجابة200 · application/json
okbool
قبِل المستوى الإجراء. راقب GetVPSStats لمعرفة حالة الجهاز الفعلية.
نموذج استجابة{"ok": true}
https://apiservice.vitamindata.net/api/v1/ReinstallVPSيمسح القرص ويثبّت صورة جديدة.
مدمّر وغير آمن لإعادة المحاولة — نداء واحد، وإعادة تثبيت واحدة. ويجب أن تناسب الصورة القرص الحالي؛ وسّعه أولًا إن لم تناسبه.
الطلب
idstringمطلوب
معرّف الخادم، من ListVPS. لاحظ أن اسم الحقل هو id في الأفعال الإدارية — وأفعال المال وحدها تسمّيه vps_id.
image_shastringمطلوب
الصورة، حسب sha المأخوذ من ListVPSImages. ولا شيء غير ذلك يسمّي صورة، وأي sha غير معروض يُرفض.
reset_rootboolاختياري
توليد كلمة مرور جذر جديدة أيضًا.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/ReinstallVPS \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"id":"vm_7q3k1n","image_sha":"9a1b8c2d7e6f","reset_root":true}'
الاستجابة200 · application/json
okbool
قبِل المستوى الإجراء. راقب GetVPSStats لمعرفة حالة الجهاز الفعلية.
نموذج استجابة{"ok": true}
https://apiservice.vitamindata.net/api/v1/AttachVPSISOيُرفق صورة ISO للمثبّت. اقرنها بترتيب إقلاع 1 للإقلاع منها.
الطلب
idstringمطلوب
معرّف الخادم، من ListVPS. لاحظ أن اسم الحقل هو id في الأفعال الإدارية — وأفعال المال وحدها تسمّيه vps_id.
image_shastringمطلوب
الصورة، حسب sha المأخوذ من ListVPSImages. ولا شيء غير ذلك يسمّي صورة، وأي sha غير معروض يُرفض.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/AttachVPSISO \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"id":"vm_7q3k1n","image_sha":"3f4e5d6c7b8a"}'
الاستجابة200 · application/json
okbool
قبِل المستوى الإجراء. راقب GetVPSStats لمعرفة حالة الجهاز الفعلية.
نموذج استجابة{"ok": true}
https://apiservice.vitamindata.net/api/v1/DetachVPSISOيزيل صورة ISO ويعود إلى الإقلاع من القرص.
الطلب
idstringمطلوب
معرّف الخادم، من ListVPS. لاحظ أن اسم الحقل هو id في الأفعال الإدارية — وأفعال المال وحدها تسمّيه vps_id.
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/DetachVPSISO \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"id":"vm_7q3k1n"}'
الاستجابة200 · application/json
okbool
قبِل المستوى الإجراء. راقب GetVPSStats لمعرفة حالة الجهاز الفعلية.
نموذج استجابة{"ok": true}
POST
SetVPSBootOrder
manage
https://apiservice.vitamindata.net/api/v1/SetVPSBootOrderأي جهاز يُقلع أولًا.
الطلب
idstringمطلوب
معرّف الخادم، من ListVPS. لاحظ أن اسم الحقل هو id في الأفعال الإدارية — وأفعال المال وحدها تسمّيه vps_id.
orderenumمطلوب
0 القرص أولًا، 1 محرك الأقراص أولًا.
إحدى القيم التالية:01
مثال على الطلبcurl https://apiservice.vitamindata.net/api/v1/SetVPSBootOrder \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"id":"vm_7q3k1n","order":1}'
الاستجابة200 · application/json
okbool
قبِل المستوى الإجراء. راقب GetVPSStats لمعرفة حالة الجهاز الفعلية.
نموذج استجابة{"ok": true}