مرجع واجهة API
كل مسار تخدمه واجهة API، ومن يستطيع استدعاءه، وكيف تعمل المصادقة والصلاحيات والأخطاء والقوائم والحجوزات والحدود.
لحزمة الحزمة الكاملة
العنوان الأساسي وصيغة الاستجابة
كل مسار يُخدم تحت البادئة /api. محليًا يكون العنوان الأساسي http://localhost:8000/api. وعلى الخادم هو عنوان واجهة API متبوعًا بـ /api، وهي القيمة نفسها التي تقرؤها الواجهتان الأماميتان من NEXT_PUBLIC_API_BASE_URL (متغيرات البيئة). وتُخدم الصور خارج البادئة، على /media/….
مسارات الموقع عامة؛ أما مسارات لوحة التحكم فتحتاج إلى رمز Bearer لمسؤول، ومعظمها يحتاج أيضًا إلى صلاحية. أجسام الطلبات JSON، عدا رفع الملفات. تأتي كل إجابة في الغلاف نفسه:
{
"success": true,
"data": { },
"message": ""
}يحمل data النتيجة. وmessage جملة قصيرة تملؤها بعض عمليات الكتابة، بلغة الطلب، وتكون فارغة غير ذلك. الأسعار بالدولار الأمريكي الكامل، والتواريخ أيام تقويمية للشركة تُكتب YYYY-MM-DD.
فحص السلامة لا يحتاج إلى رمز:
curl http://localhost:8000/api/health{"success":true,"data":{"status":"ok","database":"up"},"message":""}عندما يتعذر قراءة قاعدة البيانات يجيب أيضًا بـ 200، مع "status":"degraded" و"database":"down". يقرأ فحص السلامة في صورة Docker هذا الحقل.
الأخطاء
يحتفظ الفشل بالغلاف، مع success: false وحالة HTTP. وmessage جملة بلغة الطلب، وcode المفتاح غير المترجم خلفها، والرفض الذي يسمّي شيئًا يضيف القيم خلف جملته في details:
{
"success": false,
"data": null,
"message": "Booking B0021 already holds some of these nights.",
"code": "dates_taken",
"details": { "held_by": "booking", "reference": "B0021" }
}الجسم الذي يرفضه مسار التحقق يحمل code: "validation_failed" وerrors، مفهرسة باسم كل حقل الكامل:
{
"success": false,
"data": null,
"message": "guest_email must be an email",
"errors": { "guest_email": ["guest_email must be an email"] },
"code": "validation_failed"
}- اعتمد على
codeلا على الجملة، التي تتغير مع اللغة. وترفض الحجوزات والتوفر بأكواد مثلdates_takenوmin_nightsوcapacityوcancellation_window_passedوawaiting_paymentوpayment_method_unavailable، وللحدrate_limited. - يظهر
errorsعند فشل التحقق، مع المشكلات تحت اسم الحقل كما كتبه الطلب (check_inوguest_email). ويُرفض الحقل المجهول في الجسم. - المسار المحمي من دون رمز، أو برمز منتهي، يجيب بـ
401؛ والرمز الذي ينقصه الصلاحية يجيب بـ403. - الليالي المحتجزة بالفعل تُجاب بـ
409، وخطوة حجز من حالة خاطئة بـ422، والطلب الذي يتجاوز حدًا بـ429.
القوائم والتقسيم إلى صفحات
{ "data": [ ], "page": 1, "page_size": 6, "total": 12, "total_pages": 2 }- تتصفح الإقامات والحجوزات والاستفسارات والتقييمات بـ
pageوpage_size: 6 إقامات في الصفحة في الموقع (24 على الأكثر)، و20 في لوحة التحكم (50 على الأكثر)، و10 حجوزات و20 استفسارًا (50 على الأكثر لكل منهما)، و8 تقييمات. وتعيد قوائم لوحة التحكم أيضًاcountsلكل حالة. - يتصفح المسؤولون والأدوار والإعدادات بـ
pageوpage_count(وتقبل الإعداداتpage_sizeأيضًا)، 10 افتراضيًا و100 على الأكثر، وتجيب بـ{ data, page, limit, total, totalPages }. - يُتحقق من مرشحات إقامات الموقع: القيمة المجهولة تُرفض بـ
400بدل تجاهلها، بينما يُتجاهل المفتاح الذي لا تقرؤه واجهة API، فيعمل الرابط المشارَك ذو المعاملات الزائدة.
اللغة
أرسل Accept-Language: ar لتصلك الرسائل بالعربية؛ وأي قيمة أخرى تُجاب بالإنجليزية. وتحمل الإقامات والوجهات وأسئلة الصفحة الرئيسية اللغتين على شكل { "en": "…", "ar": "…" } أيًا كانت الترويسة، ويختار العميل واحدة.
تسجيل الدخول
تسجيل دخول مسؤول
الطرفيةcurl -X POST http://localhost:8000/api/auth/login \ -H "Content-Type: application/json" \ -d '{"email":"admin@hollina.example","password":"Admin@123"}'data.access_tokenهو الرمز، معtoken_typeبالقيمةBearerوالمسؤول بأدواره وصلاحياته. يدوم الرمزJWT_EXPIRATION، وهو7dافتراضيًا، ويبلّغexpires_inعن تلك القيمة كما كُتبت. ويعيدGET /api/auth/meالمسؤول المسجّل بأدواره وصلاحياته.استدعِ مسارًا محميًا
الطرفيةcurl http://localhost:8000/api/bookings/manage -H "Authorization: Bearer YOUR_TOKEN"
- البريد غير المعروف وكلمة المرور الخاطئة يجيبان كلاهما بـ
401مع الرسالة نفسها. - عشر محاولات دخول فاشلة من عنوان واحد خلال 15 دقيقة تُجاب بـ
429حتى يمضي 15 دقيقة على أقدم محاولة فاشلة (RATE_LIMIT_LOGIN). ولا تُحتسب عمليات الدخول الناجحة. - لا يوجد مسار تسجيل ولا مسار تسجيل خروج: الحسابات تأتي من البيانات الأولية أو من إدارة المسؤولين، ويسجّل العميل الخروج بنسيان رمزه.
- ليس للضيوف حسابات. تأخذ مسارات حجز الضيف
access_tokenالخاص بالحجز كـ?token=، أو البريد الذي أُجري به كـ?email=؛ والزوج الخاطئ يُجاب بـ404.
| الطريقة | المسار | من يحق له استدعاؤه | وظيفته |
|---|---|---|---|
POST | /api/auth/login | أي شخص | تسجيل دخول المسؤول: email وpassword |
GET | /api/auth/me | أي مسؤول مسجّل دخوله | المسؤول المسجّل وأدواره وصلاحياته |
الصلاحيات
تفحص مسارات لوحة التحكم صلاحية اسمها <area>.<action>. ويملك المسؤول كل صلاحية من كل دور لديه، والمسار الذي يسمّي عدة صلاحيات يقبل أيًا منها. والصلاحيات الـ 32 والدوران المضافان مسرودة في المسؤولون والأدوار والصلاحيات.
الإقامات في الموقع
| الطريقة | المسار | من يحق له استدعاؤه | وظيفته |
|---|---|---|---|
GET | /api/stays | أي شخص | الإقامات المنشورة. destination (المعرّف النصي) وcheckIn وcheckOut (YYYY-MM-DD، كلاهما أو لا شيء: الإقامات الخالية في كل ليلة فقط) وguests (أقل عدد يجب أن تتسع له) وtype (villa وapartment وcabin وchalet وloft وcottage) وsort (recommended وprice_asc وprice_desc وrating) وpage وpage_size |
GET | /api/stays/featured | أي شخص | الإقامات المختارة في الصفحة الرئيسية: المراجع في إعداد home_featured_references، بالترتيب، المنشورة فقط |
GET | /api/stays/hero | أي شخص | الإقامة التي يسميها home_hero_stay_reference، أو null |
GET | /api/stays/facets | أي شخص | الإقامات المنشورة معدودة بالنوع وبالوجهة، للمرشحات والصفحة الرئيسية |
GET | /api/stays/lookup | أي شخص | الإقامات المنشورة بالمعرّف، للإقامات المحفوظة: ?ids=1,2,3، 12 على الأكثر |
GET | /api/stays/:slug | أي شخص | إقامة منشورة واحدة كاملة، مع صورها ومرافقها وقواعد المنزل ووجهتها |
GET | /api/stays/:slug/similar | أي شخص | حتى ثلاث إقامات منشورة مشابهة |
GET | /api/stays/:slug/availability | أي شخص | الليالي المحتجزة بالفعل بين from وto، 92 يومًا على الأكثر |
GET | /api/stays/:slug/quote | أي شخص | checkIn وcheckOut وguests (من 1 إلى 50): الليالي وسعر الليلة والمجموع الفرعي ورسوم التنظيف والإجمالي وavailable وسبب الرفض reason (past وmin_nights وcapacity وtaken) |
GET | /api/stays/:slug/reviews | أي شخص | التقييمات المنشورة للإقامة، الأحدث أولًا، مع متوسطها |
الوجهات والأسئلة وإعدادات الشركة
| الطريقة | المسار | من يحق له استدعاؤه | وظيفته |
|---|---|---|---|
GET | /api/destinations | أي شخص | الوجهات المعلَّمة ظاهرة، بترتيب فرزها |
GET | /api/destinations/:slug | أي شخص | وجهة واحدة |
GET | /api/faq | أي شخص | أسئلة الصفحة الرئيسية وأجوبتها، بالترتيب |
GET | /api/settings/public | أي شخص | الإعدادات التي يعرضها الموقع: company_name، والشعار والوصف باللغتين، وcontact_email وcontact_phone وcontact_address_hint وcurrency وtimezone، وأوقات الوصول والمغادرة الافتراضية، وallow_pay_on_arrival وcancellation_policy وhome_featured_references وhome_hero_stay_reference وservice_email_signature |
GET | /api/payments/methods | أي شخص | ما قد يعرضه إتمام الطلب، بترتيب الأولوية: { methods: [{ method, hosted }], allowPayOnArrival, simulated }. تُسرد طرق المعالجات المضبوطة فقط، وon_arrival ما دام إعدادها مفعّلًا، وsimulated هو true ما دام المحاكي يقبل البطاقة وPayPal لأن لا معالج مضبوط |
الحجوزات
| الطريقة | المسار | من يحق له استدعاؤه | وظيفته |
|---|---|---|---|
POST | /api/bookings | أي شخص | إتمام الطلب: stay_slug وcheck_in وcheck_out وguests وguest_first_name وguest_last_name وguest_email وpayment_method (card وpaypal وon_arrival) وclient_token (من 8 إلى 64 حرفًا)، واختياريًا guest_phone وspecial_requests وlocale (en وar)، وللمحاكي فقط card_number وcard_name وcard_expiry (MM/YY) وcard_cvc. ويجيب بـ 201 مع { reference, access_token, status, payment_status, payment_method, total, currency, redirect_url, failure_reason } |
GET | /api/bookings/:reference | أي شخص معه رمز الحجز أو بريده | حجز الضيف، مع can_cancel وcan_review |
POST | /api/bookings/:reference/settle | أي شخص معه رمز الحجز أو بريده | تستدعيه صفحة العودة: يلتقط طلب PayPal الموافق عليه، ويجيب بالحالة الحالية للحجز في حالة Stripe. آمن للاستدعاء مرارًا |
POST | /api/bookings/:reference/cancel | أي شخص معه رمز الحجز أو بريده | يلغي الضيف، ما دام الحجز قيد الانتظار أو مؤكدًا وقبل سبعة أيام على الأقل من الوصول المحلي؛ وبعد ذلك يجيب بـ 422 مع cancellation_window_passed |
POST | /api/bookings/:reference/review | أي شخص معه رمز الحجز أو بريده | تقييم حجز مكتمل، مرة واحدة: rating (من 1 إلى 5، ويُسمح بالأنصاف)، comment (من 10 إلى 2000 حرف) |
POST | /api/webhooks/payments/:provider | المزود، بتوقيعه | stripe أو paypal. كل حدث متحقق منه يُجاب بـ 200؛ والتوقيع الخاطئ بـ 401، والمزود المجهول بـ 404 |
client_tokenالمكرر يعيد إيصال الحجز الأول بدل إنشاء ثانٍ، والحقلcompanyالمملوء يُعامل كروبوت: يبدو الجواب نفسه ولا يُخزَّن شيء.payment_methodلا يسردهGET /api/payments/methods(PayPal مع Stripe وحده مضبوطًا، أو البطاقة مع PayPal وحده، أو الدفع عند الوصول وإعداده متوقف) يُجاب بـ422معpayment_method_unavailable، قبل كتابة أي شيء.- تُفحص الليالي حين يُكتب الحجز: الليالي المحتجزة تُجاب بـ
409معdates_taken، وحد الإقامة الأدنى أو سعتها أو وصول في الماضي بـ422مع السبب. - الطريقة المستضافة تُجاب بـ
pendingمعredirect_urlإلى Stripe أو PayPal؛ ولا يؤكد الحجز إلا webhook المعالج أو التقاط PayPal.
أسئلة إلى المضيف
| الطريقة | المسار | من يحق له استدعاؤه | وظيفته |
|---|---|---|---|
POST | /api/inquiries | أي شخص | نموذج التواصل ونافذة السؤال في صفحة الإقامة: name وemail وmessage (من 10 إلى 4000 حرف) وclient_token، واختياريًا phone وstay_slug (إقامة منشورة) وcheck_in وcheck_out وguests |
client_tokenالمكرر يعيد الإرسال الأول بدل تخزين ثانٍ، والحقلcompanyالمملوء يُعامل كروبوت.- يمكن لكل عنوان إرسال خمسة حجوزات وخمسة أسئلة وخمسة تقييمات في عشر دقائق؛ والتالي يُجاب بـ
429.
إدارة الإقامات
| الطريقة | المسار | من يحق له استدعاؤه | وظيفته |
|---|---|---|---|
GET | /api/stays/manage | المسؤولون الذين لديهم stays.view | كل إقامة، ومنها المسودات. status وtype وdestination وguests وbedrooms وnights (أطول حد أدنى) وprice (أعلى سعر ليلة) وsort (updated وrate_asc وrate_desc) وq وpage وpage_size |
GET | /api/stays/manage/:id | المسؤولون الذين لديهم stays.view | إقامة واحدة كاملة |
POST | /api/stays/manage | المسؤولون الذين لديهم stays.create | أنشئ مسودة. المطلوب: title وshort_description وdescription وlocation_hint (en وar)، وtype وdestination_id وbedrooms وbeds وbathrooms وmax_guests وnightly_rate وcleaning_fee وmin_nights |
PUT | /api/stays/manage/:id | المسؤولون الذين لديهم stays.edit | غيّر أي حقل، ومنه المعرض (media، حتى 30 عنصرًا) |
PATCH | /api/stays/manage/:id/status | المسؤولون الذين لديهم stays.publish | اضبط status: draft أو published. النشر يحتاج إلى ثلاث صور واللغتين |
PUT | /api/stays/manage/:id/media | المسؤولون الذين لديهم stays.edit | استبدل المعرض، بالترتيب؛ والموضع الأول هو الغلاف |
DELETE | /api/stays/manage/:id | المسؤولون الذين لديهم stays.delete | احذف الإقامة؛ يُرفض بـ 409 ما دام يوجد حجز غير ملغى |
التقويم والتواريخ المحظورة
| الطريقة | المسار | من يحق له استدعاؤه | وظيفته |
|---|---|---|---|
GET | /api/calendar | المسؤولون الذين لديهم calendar.view | عرض الشهر: month (YYYY-MM) واختياريًا stay |
GET | /api/availability/blocks | المسؤولون الذين لديهم calendar.view | كل حظر، الأقرب أولًا |
POST | /api/availability/blocks | المسؤولون الذين لديهم calendar.block | احظر ليالي: stay_id وfrom وto (حصري، مثل المغادرة)، واختياريًا reason (maintenance وowner_use وother) وnote. ويجيب التعارض بـ 409 مع code يساوي dates_taken وdetails: { held_by, reference }، مسمّيًا الحجز أو الحظر الذي يعترض الطريق |
PUT | /api/availability/blocks/:id | المسؤولون الذين لديهم calendar.block | غيّر حظرًا |
DELETE | /api/availability/blocks/:id | المسؤولون الذين لديهم calendar.block | أزل حظرًا |
الحجوزات والاستفسارات والتقييمات
| الطريقة | المسار | من يحق له استدعاؤه | وظيفته |
|---|---|---|---|
GET | /api/bookings/manage | المسؤولون الذين لديهم bookings.view | الحجوزات. status وfrom وto (نطاق الوصول) وq وstay وpayment وmethod وguests وsort (newest وcheck_in وtotal) وpage وpage_size؛ مع أعداد لكل حالة |
GET | /api/bookings/manage/:reference | المسؤولون الذين لديهم bookings.view | حجز واحد مع جدوله الزمني والإجراءات المسموحة الآن، لكل منها سببه حين لا يكون مسموحًا |
PATCH | /api/bookings/manage/:reference | المسؤولون الذين لديهم bookings.edit | action (confirm وcheck_in وcomplete وcancel) وadmin_notes. الخطوة من حالة خاطئة تُجاب بـ 422 مع سببها |
GET | /api/inquiries | المسؤولون الذين لديهم inquiries.view | الاستفسارات. status وq وfrom وto وstay وpage وpage_size؛ مع أعداد لكل حالة |
GET | /api/inquiries/:id | المسؤولون الذين لديهم inquiries.view | استفسار واحد مع إقامته |
PATCH | /api/inquiries/:id | المسؤولون الذين لديهم inquiries.edit | اضبط status (new وreplied وclosed) وadmin_notes |
GET | /api/reviews/manage | المسؤولون الذين لديهم reviews.view | التقييمات. status وstay (المعرّف أو المعرّف النصي) وrating (حد أدنى) وq وsince (7 و30 و90 و365 يومًا) وpage؛ مع الأعداد |
PATCH | /api/reviews/manage/:id | المسؤولون الذين لديهم reviews.moderate | اضبط status: published أو hidden |
GET | /api/overview | المسؤولون الذين لديهم overview.view | النظرة العامة: بطاقات هذا الشهر، ووصول اليوم ومغادرته، والحجوزات قيد الانتظار والأحدث، وأفضل الإقامات، وبلدان الضيوف، والحجوزات حسب الحالة، وأحدث التقييمات، والاستفسارات المفتوحة |
GET | /api/overview/series | المسؤولون الذين لديهم overview.view | الحجوزات والإيرادات والإشغال لكل شهر من آخر اثني عشر شهرًا |
الوجهات والأسئلة والإعدادات
| الطريقة | المسار | من يحق له استدعاؤه | وظيفته |
|---|---|---|---|
GET | /api/destinations/manage | المسؤولون الذين لديهم destinations.view | كل وجهة، ومنها المخفية |
POST | /api/destinations/manage | المسؤولون الذين لديهم destinations.create | أضف واحدة: name وtagline وdescription (en وar)، واختياريًا slug وcover_url وcover_alt وsort_order وis_active |
PUT | /api/destinations/manage/:id | المسؤولون الذين لديهم destinations.edit | غيّر واحدًا |
DELETE | /api/destinations/manage/:id | المسؤولون الذين لديهم destinations.delete | احذف واحدة؛ يُرفض ما دامت تتبعها إقامات |
GET | /api/faq/manage | المشرفون الذين لديهم settings.view | كل سؤال في الصفحة الرئيسية، ومنها المخفية |
POST | /api/faq/manage | المشرفون الذين لديهم settings.edit | أضف واحدًا: question وanswer (en وar)، واختياريًا sort_order وis_active |
PUT | /api/faq/manage/:id | المشرفون الذين لديهم settings.edit | غيّر واحدًا |
DELETE | /api/faq/manage/:id | المشرفون الذين لديهم settings.edit | احذف واحدًا |
GET | /api/settings | المشرفون الذين لديهم settings.view | كل إعداد. search وcategory وpage وpage_size أو page_count |
GET | /api/settings/payments-status | المشرفون الذين لديهم settings.view | { stripe: { configured, testMode }, paypal: { configured, sandbox }, simulator }: هل كل معالج مضبوط وهل هو تجريبي أم حقيقي، وهل المحاكي قيد الاستخدام، وهو كذلك فقط ما دام لا معالج مضبوط. ولا مفتاح أبدًا |
GET | /api/settings/:key | المشرفون الذين لديهم settings.view | إعداد واحد بالمفتاح |
PATCH | /api/settings/:key | المشرفون الذين لديهم settings.edit | غيّر value لإعداد واحد |
DELETE | /api/settings/:key | المشرفون الذين لديهم settings.edit | احذف إعدادًا واحدًا |
المسؤولون والأدوار
| الطريقة | المسار | من يحق له استدعاؤه | وظيفته |
|---|---|---|---|
GET | /api/admins | المشرفون الذين لديهم admins.view | المسؤولون. email وname وphone وpage وpage_count |
GET | /api/admins/statistics | المشرفون الذين لديهم admins.view | أعداد لقائمة المسؤولين |
GET | /api/admins/:id | المشرفون الذين لديهم admins.view | مسؤول واحد، بالمعرّف أو اسم المستخدم |
POST | /api/admins | المشرفون الذين لديهم admins.create | أضف مسؤولًا: first_name وlast_name وemail وpassword وpassword_confirmation (6 خانات أو أكثر)، واختياريًا phone |
PATCH | /api/admins/:id | المشرفون الذين لديهم admins.edit | غيّر مسؤولًا |
PATCH | /api/admins/:id/roles | المشرفون الذين لديهم admins.assign_roles | اضبط أدوار مسؤول: role_ids |
DELETE | /api/admins/:id | المشرفون الذين لديهم admins.delete | احذف مسؤولًا |
PATCH | /api/admins/profile | أي مسؤول مسجّل دخوله | غيّر first_name وlast_name وemail وphone وprofile_picture للمسؤول المسجّل نفسه. لكلمة المرور مسارها الخاص |
PATCH | /api/admins/profile/password | أي مسؤول مسجّل دخوله | غيّر بيانات دخول المسؤول المسجّل نفسه: current_password وpassword وpassword_confirmation |
GET | /api/roles | المشرفون الذين لديهم roles.view | الأدوار. name وguard_name وcreated_from وcreated_to وpage وpage_count |
GET | /api/roles/statistics | المشرفون الذين لديهم roles.view | أعداد لقائمة الأدوار |
GET | /api/roles/select | المشرفون الذين لديهم roles.view | معرّف كل دور واسمه، لقائمة الاختيار |
GET | /api/roles/permissions | المشرفون الذين لديهم roles.view | كل صلاحية، مجمعة حسب المنطقة |
GET | /api/roles/:id | المشرفون الذين لديهم roles.view | دور واحد بصلاحياته |
POST | /api/roles | المشرفون الذين لديهم roles.create | أضف دورًا |
PUT | /api/roles/:id | المشرفون الذين لديهم roles.edit | أعد تسمية دور أو صفه |
POST | /api/roles/:id/permissions | المشرفون الذين لديهم roles.assign_permissions | تعيين صلاحيات دور |
DELETE | /api/roles/:id | المشرفون الذين لديهم roles.delete | حذف دور |
الإشعارات والملفات المرفوعة
| الطريقة | المسار | من يحق له استدعاؤه | وظيفته |
|---|---|---|---|
GET | /api/notifications | أي مسؤول مسجّل دخوله | أحدث 30 إشعارًا للمسؤول المسجّل |
PATCH | /api/notifications/read-all | أي مسؤول مسجّل دخوله | حدّدها كلها كمقروءة |
PATCH | /api/notifications/:id/read | أي مسؤول مسجّل دخوله | تعليم إشعار واحد كمقروء |
DELETE | /api/notifications/:id | أي مسؤول مسجّل دخوله | حذف إشعار واحد |
POST | /api/helpers/upload | أي مسؤول مسجّل دخوله | خزّن ملفًا (multipart file، مع path للمجلد، وfor لإعداد الحجم المسبق مثل stay أو cover أو profile، وtype). تُعاد ترميز الصور بصيغة JPEG، بعرض أقصاه 1920 بكسل؛ وتُقبل الفيديوهات بصيغة MP4 أو WebM أو MOV أو M4V؛ حتى 150 ميغابايت. ويجيب بعناوين الملف المخزن |
ليس للملف المرفوع صلاحية خاصة به: يفحص المسار الذي يحفظه ما يصير إليه الملف. تُحفظ الإشعارات 30 يومًا.
الحدود لكل عنوان
| المسار | الحد | المتغير |
|---|---|---|
POST /api/auth/login | 10 محاولات دخول فاشلة كل 15 دقيقة | RATE_LIMIT_LOGIN |
POST /api/bookings | 5 كل 10 دقائق | لا شيء |
POST /api/inquiries | 5 كل 10 دقائق | لا شيء |
POST /api/bookings/:reference/review | 5 كل 10 دقائق | لا شيء |
الطلب الذي يتجاوز حدًّا يُجاب بـ 429. العدّادات محفوظة في ذاكرة واجهة API، لذلك يمسحها إعادة التشغيل. خلف وكيل عكسي، اضبط TRUST_PROXY ليُحسب كل زائر على عنوانه.
المساعد الذكي ومحادثاته
مُضمَّن مع مشترياتك. سجّل الدخول لقراءته، أو افتحه في ملف التنزيل.
مسار بث المساعد، وقائمة نماذجه، والمحادثات المحفوظة.
خادم MCP
مُضمَّن مع مشترياتك. سجّل الدخول لقراءته، أو افتحه في ملف التنزيل.
نقطة نهاية MCP لوكلاء البرمجة وكيفية التصريح لها.
التحديثات المباشرة عبر WebSocket
مُضمَّن مع مشترياتك. سجّل الدخول لقراءته، أو افتحه في ملف التنزيل.
مساحات أسماء Socket.IO التي تستمع إليها لوحة التحكم، وأحداثها، وكيفية التصريح للاتصال.
مسارات وضع العرض التجريبي
مُضمَّن مع مشترياتك. سجّل الدخول لقراءته، أو افتحه في ملف التنزيل.
المسارات الموجودة فقط لبناء العرض التجريبي العام.