Skip to main content
يتطلّب عضوية سيلفر أو أعلى — للتقديم ولكل استدعاء موثَّق. إن انقضت عضوية مالك المفتاح، يُجمَّد المشروع حتى يُجدِّد اشتراكه.
واجهة REST تتيح لتطبيقك التعامل مع رصيد Vito الخاص بالمستخدم من داخل ديسكورد — قراءته، أو الخصم منه، أو الإضافة إليه، أو تحريكه بين المستخدمين. كل نقاط النهاية تُعيد JSON وتقع تحت الإصدار /v1.
Vito لا ينتقل من أو إلى أموال حقيقية أبداً. هو يتحرّك بين أرصدة فيتوكس فقط.
كل نقاط النهاية تقع تحت https://api.vetox.io/public/vito.المسارات المكتوبة في هذه الصفحة — مثل /v1/deduct و/v1/balance/:discordId — نسبية إلى هذه البادئة، وهي ما تضيفه مكتبة SDK نيابةً عنك. وعند استدعائها بنفسك استخدم الرابط الكامل:
أما https://api.vetox.io/v1/deduct فليس مساراً موجوداً ويعيد 404.
تبني بـ Node.js؟ لا تستدعِ REST يدوياً — استخدم الحزمة الرسمية @vetox-bot/vito. تغطي نقاط النهاية التسع كلها والتحقّق من الـ webhooks، وتتولّى عنك منع التكرار وإعادة المحاولة. انظر قسم SDK الرسمي لـ Node.js أدناه.

الحصول على الوصول

الوصول يُمنَح لكل مشروع على حدة. تحتاج الأربعة جميعاً:
1

عضوية نشطة، سيلفر أو أعلى

تُفحَص عند كل استدعاء، لا عند الموافقة فقط.
2

طلب مطوّر تمت الموافقة عليه

يُقدَّم من صفحة Vito API في لوحة التحكم، ويراجعه فريق فيتوكس يدوياً.
3

الموافقة على شروط مطوّري API

تُقَرّ عند تقديم الطلب.
4

النطاقات التي يحتاجها مشروعك

يمنحها طاقم فيتوكس بناءً على ما وصفته.
كن محدَّداً في وصف ما تبنيه وكيف ستخزّن المفتاح. الطلبات المبهمة هي التي تُرفَض.

النطاقات

المصادقة

أرسل مفتاحك السرّي كرمز Bearer:
طبقتان اختياريتان تزيدان تحصين المشروع:
  • قائمة عناوين IP المسموح بها — حصر الاستدعاءات بعناوين خوادم بعينها
  • حدود المعدّل — سقوف لكل مشروع تتوسّع مع مستوى عضوية المالك

المفاتيح: التدوير والتخزين

يُكشَف المفتاح وسرّ التوقيع مرة واحدة فقط. بعد الموافقة لديك نافذة 7 أيام لكشفهما من تبويب مفاتيح API. لا يحتفظ فيتوكس إلا بتجزئة ولا يمكنه عرضهما مجدداً — إن فاتتك النافذة فعليك التدوير للحصول على مفتاح جديد.
  • احتفظ به على الخادم فقط — من يملكه يستطيع الخصم من مستخدميك
  • دوّره من تبويب مفاتيح API. يظل المفتاح السابق يعمل 24 ساعة كفترة سماح كي تنشر التحديث دون انقطاع
  • سرّ توقيع الـ webhook يُدوَّر بشكل منفصل، وله فترة تداخل 24 ساعة خاصة به
  • إن تسرّب المفتاح، دوّره فوراً

SDK الرسمي لـ Node.js

الحزمة الرسمية @vetox-bot/vito تغلّف نقاط النهاية التسع كلها إضافةً إلى التحقّق من الـ webhooks. تتولّى عنك ترويسة Idempotency-Key، وإعادة المحاولة بتباعد تصاعدي، والمهل الزمنية، وتصنيف الأخطاء إلى أصناف مكتوبة النوع.

التثبيت

يتطلّب Node.js 20 أو أحدث. الحزمة بلا أي اعتماديات وقت تشغيل — تستخدم fetch وnode:crypto المدمجَين — وتُشحَن بصيغتَي ESM وCommonJS معاً مع تعريفات TypeScript كاملة.

التهيئة

إن لم تمرّر apiKey فستقرأه الحزمة من متغيّر البيئة VITO_API_KEY. يُتحقَّق من صيغة المفتاح عند الإنشاء، فالمفتاح المشوَّه يفشل فوراً بدل أن يكلّفك رحلة شبكة و401.
المفتاح يحرّك أموالاً — أبقِه على الخادم دائماً، ولا تضعه في حزمة عميل أو متصفّح. console.log(vito) يطبع [redacted] بدل المفتاح، وترفض الحزمة أي baseUrl بصيغة http:// لمضيف غير محلي حتى لا يمرّ المفتاح بنص صريح.

خيارات العميل

التوابع المتاحة

كل تابع يُعيد حقل data بعد فكّ التغليف مباشرةً — لا حاجة للمرور بـ success أو data بنفسك. ويقبل كل تابع خيارات لكل استدعاء: { timeoutMs, maxRetries, signal, headers }، وتقبل توابع الكتابة { idempotencyKey } إضافةً إليها.

أمثلة الاستخدام

فحص المفتاح عند الإقلاع

قراءة رصيد

الخصم من مستخدم (بيع منتج)

سجّل الطلب كـ معلّق هنا فقط. الخصم لم يحدث بعد — أكمِل عند webhook الحدث confirmation.completed لا عند هذا الرد.

إضافة رصيد لمستخدم

تصفّح المعاملات

منع التكرار وإعادة المحاولة

ترسل الحزمة ترويسة Idempotency-Key مع كل عملية كتابة (deduct وcredit وtransfer). وإن لم تمرّر مفتاحاً فهي تولّده مرّة واحدة لكل استدعاء وتعيد إرساله نفسه مع كل إعادة محاولة، فلا يمكن لإعادة محاولة أن تُسوّي العملية مرتين. مرّر مفتاحك الخاص عندما قد تُعاد المحاولة نفسها من عملية جديدة — طابور مهام، أو إعادة تسليم، أو مهمة مجدولة:
auth.rotateKey() مستثنى عمداً — إعادة المحاولة عليه تُصدر مفتاحاً ثانياً وتُبطل المفتاح الذي أعادته المحاولة الأولى.
إن كانت قيمة Retry-After أطول من maxRetryDelayMs (أي أن حصّتك بالساعة استُهلكت فعلاً) فترمي الحزمة VitoRateLimitError فوراً بدل أن تنام خلال مهلة طلبك.

التحقّق من الـ webhooks بالـ SDK

يتحقّق constructEvent من نافذة إعادة التشغيل البالغة 5 دقائق، ثم يقارن بزمن ثابت مع كل توقيع h1 في الترويسة — فيعمل تلقائياً خلال فترة تداخل تدوير السرّ البالغة 24 ساعة — ثم يحلّل الحمولة ويُعيدها مكتوبة النوع. في Next.js (موجّه App Router) استخدم النسخة التي تقرأ الجسم الخام بنفسها:
التوقيع يغطّي البايتات الخام. في Express ركّب express.raw({ type: 'application/json' }) على مسار الـ webhook — لأن express.json() يستهلك الجسم فيفشل كل تحقّق. وفي Next.js لا تستدعِ request.json() قبل constructEventFromRequest.
التسليم مرّة واحدة على الأقل. امنع التكرار باستخدام event.eventId قبل أن تنفّذ أي أثر جانبي.

معالجة الأخطاء

كل ما ترميه الحزمة يرث من VitoError، ويحمل code وstatus وtype وrequestId وretryable.
سجّل requestId دائماً — هو ما يحتاجه الدعم لتتبّع استدعاء بعينه.

إلغاء استدعاء

الإلغاء يوقف أيضاً أي إعادة محاولة منتظرة، ويرمي VitoConnectionError بالرمز VITO_SDK_ABORTED.

الخصم من مستخدم

مفتاحك وحده لا يستطيع تحريك Vito الخاص بمستخدم. كل عملية خصم تتطلّب موافقة المستخدم برمز PIN الخاص بمحفظته، على vetox.io — لا داخل تطبيقك ولا داخل ديسكورد.
1

تطبيقك يستدعي POST /v1/deduct

مع المستخدم، والمبلغ، وguildId الذي انطلقت منه العملية، وتفاصيل المنتج.
2

Vito يُعيد confirmUrl

طلب تأكيد معلّق، صالح 10 دقائق. تُرسَل للمستخدم رسالة خاصة أيضاً.
3

المستخدم يوافق برمز PIN

على vetox.io.
4

Vito يسوّي العملية ويُخطِر

يُخصَم الرصيد، وتُسجَّل المعاملة، ويُرسَل webhook موقَّع إن كنت قد ضبطت واحداً.
5

تطبيقك يتحقّق ويُكمِل

تحقّق من التوقيع، ثم افتح المحتوى أو سلّم المنتج.
أكمِل عمليتك عند confirmation.completed فقط — لا عند رد /deduct. الخصم لا يكون نهائياً عند تلك النقطة.

مُعامِلات الطلب — /v1/deduct

إضافة رصيد لمستخدم

POST /v1/add يضيف Vito لمستخدم من رصيدك أنت — للمكافآت أو الاستردادات. نفس حقول /deduct عدا guildId وproduct.
على عكس الخصم، الإضافة بلا خطوة تأكيد — تُسوّى فوراً. تتطلّب النطاق credit:create ورصيداً كافياً، وإلا أعاد الاستدعاء 402 VITO_INSUFFICIENT_OWNER_FUNDS.

الرسوم

كل عملية خصم تُسوّى لصالحك بعد خصم رسوم المنصّة — بنفس جدول تحويلات Vito داخل التطبيق، وبحسب مستوى عضويتك أنت:
المبالغ 5 Vito أو أقل بلا رسوم، والإضافات عبر /v1/add بلا رسوم دائماً.

Webhooks

أضف رابط استدعاء واحداً أو أكثر بصيغة https من تبويب الإعدادات. يرسل Vito طلب POST موقَّعاً كلما وصل طلب تأكيد إلى حالة نهائية.
لا تُرسَل الـ webhooks إلا إذا كان لمشروعك رابط استدعاء وسرّ توقيع معاً. اكشف السرّ (whsec_…) مرة واحدة من تبويب مفاتيح API.

التحقّق من التوقيع

كل عملية تسليم تحمل ترويسة X-Vito-Signature:
وترافقها ترويستان إضافيتان — استخدم X-Vito-Event-Id مفتاحاً لمنع التكرار، فإعادة المحاولة تُرسل المعرّف نفسه:
أثناء تدوير سرّ التوقيع تحمل الترويسة أكثر من توقيع واحد، الأحدث أولاً:
اقبل التسليم إذا طابق أي h1. المُتحقِّق الذي يقرأ الأول فقط سيرفض كل webhook إلى أن ينشر السرّ الجديد — وهو ما يُبطل الغرض من فترة التداخل البالغة 24 ساعة.
مستخدمو Node.js: التابع Webhooks.constructEvent في حزمة @vetox-bot/vito ينفّذ كل ما يلي نيابةً عنك — نافذة إعادة التشغيل، ومطابقة كل توقيع h1، والمقارنة بزمن ثابت — ويُعيد الحدث مكتوب النوع. الشيفرة أدناه للتنفيذ اليدوي أو للغات الأخرى.
أعِد حساب HMAC على <ts>:<rawBody> بسرّ التوقيع الخاص بك، وقارِن بزمن ثابت.
تحقّق من الجسم الخام للطلب، قبل أي تحليل JSON أو وسيط يعيد صياغته.

الأحداث

خمسة أنواع من الأحداث، تشترك كلها في شكل حمولة واحد. الحقل data.status يحمل النتيجة.
تُعاد محاولة الـ webhooks 5 مرات مع تباعد تصاعدي. ردّ بـ 2xx بسرعة ونفّذ التسليم لديك بشكل غير متزامن.

رموز الأخطاء

كل رد مُغلَّف. النجاح يحمل data، والفشل يحمل error، ولا يجتمعان أبداً:
كل رمز مسبوق بـ VITO_. اعتمد على النص الكامل في شروطك — لن يظهر RATE_LIMITED أو FORBIDDEN مجرّداً في أي رد.

حدود المعدّل

يوجد أيضاً حد لكل عنوان IP يساوي نصف حصّتك في الدقيقة، بحد أدنى 30.
تحت الحمل الكثيف تفشل نقاط نهاية الكتابة بشكل مغلق — يُرفَض الخصم بدل المخاطرة بإنفاق مزدوج، بينما تفشل نقاط نهاية القراءة بشكل مفتوح. عامِل الكتابة المرفوضة على أنها “لم تحدث” وأعد المحاولة.
أرسل ترويسة Idempotency-Key لمنع تكرار إعادات المحاولة بأمان.

نقاط النهاية

الحدود

  • تنتهي صلاحية طلبات التأكيد بعد 10 دقائق — عامِل غير المؤكَّد منها كأنه مهجور
  • amount يجب أن يكون عدداً صحيحاً موجباً
  • metadata محدودة بـ 10 مفاتيح
  • سقوف المعاملة الواحدة والحجم اليومي يضبطها طاقم فيتوكس، وتظهر للقراءة فقط في تبويب الإعدادات

قائمة الأمان

مفتاح API وسرّ التوقيع لا مكان لهما في كود العميل إطلاقاً. دوّر أيّاً منهما فوراً إن تسرّب.
افحص التوقيع مقابل الجسم الخام، وارفض ما مضى عليه أكثر من ~5 دقائق.
لا تسلّم أبداً بناءً على رد /deduct — الخصم ليس نهائياً حتى confirmation.completed.
اطلب النطاقات التي تستخدمها فعلاً فقط، وفعّل قائمة عناوين IP المسموح بها.

استكشاف الأخطاء

انقضت عضوية مالك المفتاح. تُفحَص عند كل استدعاء، لا عند الإصدار فقط.
لا يمكن استعادته — لا يُخزَّن إلا تجزئته. دوّره للحصول على واحد جديد.
اقبل السرَّين خلال فترة التداخل البالغة 24 ساعة.
المستخدم لم يوافق عليه. تنتهي طلبات التأكيد بعد 10 دقائق.
المشروع يحتاج رابط استدعاء وسرّ توقيع معاً. بواحد منهما فقط لا يُسلَّم شيء.
هذه رسوم التسوية. استخدم مبالغ 5 Vito أو أقل لتجنّبها، أو احسبها ضمن تسعيرك.
/v1/add يُموَّل من رصيدك أنت، ولا يُنشأ من العدم. اشحن رصيدك.

Vito

الأرصدة، ورمز PIN، والرسوم.

طلبات الدفع

ما يراه المستخدم عندما تخصم منه.

@vetox-bot/vito على npm

حزمة Node.js الرسمية — تثبيت واحد وتكامل كامل.