مقدمة
مرحبًا بك في Performance Hub API. تدير هذه API بيانات النادي والأنظمة الرئيسية التي تتكامل مع ناديك وأنظمته الخارجية، وهي ليست API متاحة للاستخدام العام. لمزيد من المعلومات حول استخدام أنظمة Performance Hub المختلفة التي تدعمها هذه API، يُرجى الرجوع إلى الصفحة الخاصة بالنظام الذي تحتاجه في [وثائق Performance Hub](https://docs.performancehub.co).
عنوان URL الأساسي
https://portal.hub.gymsystems.co
المصادقة
ستُقدَّم تفاصيل المصادقة عند الموافقة على عملية التكامل الخاصة بك.
حدث "اكتمال دور الوكيل" المُبلَّغ عنه من الجهاز (مُشغِّل إشعارات الويب)
تستدعيها الخدمة المرافقة (sidecar) لجهاز وكيل الذكاء الاصطناعي المقترن (وليس المتصفحات أبدًا) عند انتهاء تشغيل وكيل بدأ من واجهة الويب واستغرق وقتًا أطول من حد الإشعار في الجهاز. تتم المصادقة باستخدام JWT من نوع HS256 قصير الأجل خاص بكل جهاز (aud 'events'). تُزال التكرارات لكل جهاز+جلسة+بدء ويُحدَّد المعدل لكل جهاز، ثم يُسلَّم الإشعار إلى اشتراكات HTML5 push الخاصة بالمستخدم الذي بدأ التشغيل مع رابط مباشر إلى المحادثة.
نص الطلب
نقطة النهاية
POST /ai/events/agent-turn-complete
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/ai/events/agent-turn-complete \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
إشعار فوري يبدأه الوكيل (مهارة ph-notify)
تستدعيها الخدمة المرافقة (sidecar) لجهاز وكيل الذكاء الاصطناعي المقترن نيابةً عن الوكيل الموجود على الجهاز (مهارة ph-notify) لإرسال إشعار عشوائي إلى متصفح المستخدم وأجهزته المحمولة. تتم المصادقة باستخدام JWT من نوع HS256 قصير الأجل خاص بكل جهاز (aud 'events'). يجب أن يمتلك المستخدم المستهدف حق الوصول إلى الجهاز (سياسة الوصول لكل وكيل)؛ وعند حذفه، يُرسَل الإشعار إلى مالك الجهاز. يُحدَّد المعدل لكل جهاز، بشكل منفصل عن أحداث اكتمال الدور.
نص الطلب
نقطة النهاية
POST /ai/events/agent-notify
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/ai/events/agent-notify \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
رفع صورة إشعار (مهارة ph-notify)
تقبل نص صورة خامًا من جهاز مقترن (JWT بقيمة aud 'events') وتخزنه في الحاوية العامة notify-media تحت مفتاح UUID يتعذر تخمينه. تُحذف الكائنات تلقائيًا بعد 7 أيام (دورة حياة S3). تُرجع عنوان https URL العام لاستخدامه كقيمة `imageUrl` في /ai/events/agent-notify. الحد الأقصى 5 MB؛ وتُقبل صيغ png/jpeg/gif/webp فقط.
نص الطلب
نقطة النهاية
POST /ai/media/notify-image
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/ai/media/notify-image \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
مرحّل MCP للأجهزة لـ Connected Apps (أدوات SaaS خارجية)
نقطة نهاية MCP بنقل Streamable-HTTP لأجهزة وكيل الذكاء الاصطناعي المقترنة (خادم MCP "connected_apps" على المستمع :8790 في الحاوية المساعدة للجهاز). تتم المصادقة باستخدام JWT بخوارزمية HS256 قصير الأجل لكل جهاز (aud 'mcp'، وهي بيانات الاعتماد نفسها المستخدمة في /mcp)، ويُقيَّد بعلامة تفعيل Connected Apps الخاصة بالوكيل (الاتصالات لكل جهاز وكيل، وليس لكل منشأة). تُبثّ الطلبات إلى خادم MCP لجلسة منصة الأدوات المصدرية الخاصة بالوكيل مع إدراج ترويسات الجلسة على الخادم؛ ولا تصل بيانات الاعتماد المصدرية إلى الجهاز أبدًا. تُستبدل أسماء الأدوات والعلامات التجارية للمورّدين بعلامة مخصصة في الاتجاهين أثناء النقل. يؤدي الخطأ 401/410 من المصدر (انتهاء الجلسة) إلى إعادة إنشاء الجلسة مرة واحدة وإعادة المحاولة.
نقطة النهاية
POST /mcp/apps
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/mcp/apps \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
البحث في سجلات تدقيق API (الوصول إلى وحدة IAM & Admin)
ابحث في سجلات الوصول إلى API وصفِّها باستخدام إمكانات تصفية متقدمة. لا يمكن للمستخدمين رؤية إلا سجلات المنظمات التي لديهم حق الوصول إليها.
المعلمات
organisationId `string` (اختياري) معرّف المنظمة للتحقق من ACL (مطلوب)نص الطلب
نقطة النهاية
POST /api/admin/audit-logs/search
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/admin/audit-logs/search \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
الحصول على إحصاءات سجلات التدقيق المخزنة مؤقتًا من Redis (الوصول إلى وحدة IAM & Admin)
استرداد الإحصاءات المجمّعة من ذاكرة Redis المؤقتة لتحميل لوحة القيادة فورًا
المعلمات
timeWindow `string` (اختياري) النافذة الزمنية للإحصاءات (القيمة الافتراضية 12h)نقطة النهاية
GET /api/admin/audit-logs/statistics-cached
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/admin/audit-logs/statistics-cached \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على إحصاءات سجلات التدقيق (الوصول إلى وحدة IAM & Admin)
استرداد الإحصاءات المجمّعة للوحة القيادة. تقتصر على منظمات المستخدم.
المعلمات
startTime `number` (اختياري) وقت البدء (طابع زمني Unix)، القيمة الافتراضية قبل 24 ساعة endTime `number` (اختياري) وقت الانتهاء (طابع زمني Unix)، القيمة الافتراضية الآننقطة النهاية
GET /api/admin/audit-logs/statistics
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/admin/audit-logs/statistics \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على بيانات السلاسل الزمنية لسجلات التدقيق (الوصول إلى وحدة IAM & Admin)
استرداد بيانات السلاسل الزمنية المقسّمة إلى فترات لعرض المخطط الزمني للطلبات
المعلمات
timeWindow `string` (اختياري) النافذة الزمنية لبيانات السلاسل الزمنية: - 1h: آخر ساعة (فترات من 10 دقائق) - 12h: آخر 12 ساعة (فترات من 10 دقائق) - 24h: آخر 24 ساعة (فترات من 10 دقائق) - 7d: آخر 7 أيام (فترات من ساعة واحدة) - 14d: آخر 14 يومًا (فترات من ساعة واحدة)نقطة النهاية
GET /api/admin/audit-logs/timeseries
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/admin/audit-logs/timeseries \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على المنظمات التي يمكن للمستخدم الوصول إلى سجلات تدقيقها (الوصول إلى وحدة IAM & Admin)
تُرجع قائمة المنظمات التي يمكن للمستخدم الحالي عرض سجلات تدقيقها
نقطة النهاية
GET /api/admin/audit-logs/user-organisations
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/admin/audit-logs/user-organisations \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الاستدعاء الأولي لإنشاء نادٍ جديد... لاحظ أنه يُنشأ كائن النادي 'template' فقط، ثم يلزم طلب API ثانٍ لتحديث النادي ببياناته مثل ساعات العمل والموقع وعناوين URL لوسائل التواصل الاجتماعي وغيرها.
المعلمات
body `string` (مطلوب) كائن JSON للنادي الجديد المراد إضافته إلى النظام.نقطة النهاية
POST /api/admin/clubs/addclub
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/admin/clubs/addclub \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تضيف مستخدمًا جديدًا إلى النظام
المعلمات
body `string` (مطلوب) كائن JSON لبيانات المستخدم التي تريد إضافتها أو تحديثها.نقطة النهاية
POST /api/users
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/users \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تسرد جميع المستخدمين (حسابات Google Apps) الذين لديهم حق الوصول إلى نظام المكتب الخلفي وواجهة API
نقطة النهاية
GET /api/admin/users/listusers
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/admin/users/listusers \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد مفاتيح MCP لمستخدم (منقّحة). يمكن للمستخدمين سرد مفاتيحهم الخاصة.
المعلمات
userId `string` (مطلوب)نقطة النهاية
GET /api/users/{userId}/mcp-keys
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/users/{userId}/mcp-keys \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إنشاء مفتاح MCP API جديد لمستخدم. يمكن للمستخدمين إنشاء مفاتيحهم الخاصة.
المعلمات
userId `string` (مطلوب) body `object` (اختياري)نقطة النهاية
POST /api/users/{userId}/mcp-keys
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/users/{userId}/mcp-keys \
-H "x-api-key: YOUR_API_KEY"
إبطال مفتاح MCP API أو إزالته. يمكن للمستخدمين حذف مفاتيحهم الخاصة.
المعلمات
userId `string` (مطلوب) keyId `string` (مطلوب)نقطة النهاية
DELETE /api/users/{userId}/mcp-keys/{keyId}
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/users/{userId}/mcp-keys/{keyId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إزالة دور من مستخدم
المعلمات
userId `string` (اختياري) البريد الإلكتروني للمستخدم الذي تريد إزالة الدور منه. roleId `string` (اختياري) معرّف الدور الذي تريد إزالته من المستخدم.نقطة النهاية
DELETE /api/users/{userId}/roles/{roleId}
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/users/{userId}/roles/{roleId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحدّث تفاصيل الملف الشخصي لمستخدم حالي (firstName وlastName وphoneNumber)
المعلمات
userId `string` (مطلوب) عنوان البريد الإلكتروني للمستخدم body `object` (مطلوب) بيانات الملف الشخصي للمستخدم المراد تحديثهانقطة النهاية
PATCH /api/users/{userId}
مثال على الطلب
curl -X PATCH https://portal.hub.gymsystems.co/api/users/{userId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إدراج دور مستخدم أو تحديثه
المعلمات
body `object` (اختياري)نقطة النهاية
PUT /api/users/{userId}/roles
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/users/{userId}/roles \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الخدمات المباشرة (Live Services) العاملة على وكيل الذكاء الاصطناعي في المنشأة (أداة اختيار النشر)
تجلب الخدمات المباشرة (Live Services) التي اكتشفها جسر الجهاز عبر النفق لأداة الاختيار "Publish to Performance Hub" في التطبيق المصغّر. تتطلب الوحدة ph-ai-agent وصلاحية الوصول 'open' لكل جهاز (المستوى نفسه المطلوب للنشر ذاته). تُوسَم كل خدمة بقيمة publishedAppId عندما يكون هناك Custom App موجود بالفعل لمنفذها.
المعلمات
club `string` (مطلوب) device `string` (مطلوب)نقطة النهاية
GET /api/agent-apps/services/{club}/{device}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/agent-apps/services/{club}/{device} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
فهرس أسماء أيقونات MDI المضمَّن في وكيل الذكاء الاصطناعي في المنشأة (أداة اختيار الأيقونات)
تمرّر فهرس أيقونات MDI المضمَّن في جسر الجهاز (GET /__services/icons/mdi/index.json) عبر النفق. تستخدم أداة اختيار النشر والتحرير الكتالوج المرفق مع التطبيق المصغّر (الإصدار المثبّت نفسه 7.4.47)؛ وتُحلّ ملفات SVG للتطبيقات المنشورة من الحزمة المحلية @mdi/js في portal-server. مستوى الوصول نفسه المطلوب لأداة اختيار الخدمات (الوحدة ph-ai-agent + صلاحية الوصول 'open' لكل جهاز).
المعلمات
club `string` (مطلوب) device `string` (مطلوب)نقطة النهاية
GET /api/agent-apps/mdi-index/{club}/{device}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/agent-apps/mdi-index/{club}/{device} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
جلب دفعة من ملفات SVG لأيقونات MDI من وكيل الذكاء الاصطناعي في المنشأة (معاينات أداة الاختيار)
تحلّ ما يصل إلى 60 رمزًا مسمّى من MDI من مجموعة الأيقونات المضمَّنة في الجهاز في استدعاء واحد، مع تعقيمها من جانب الخادم بقائمة السماح نفسها المطبقة على أيقونات التطبيقات المحفوظة. تستخدمها أداة اختيار الأيقونات لعرض نتائج البحث؛ وتُرجَع الأسماء غير المعروفة بقيمة null.
المعلمات
club `string` (مطلوب) device `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/agent-apps/mdi-icons/{club}/{device}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/agent-apps/mdi-icons/{club}/{device} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
نطاقات الجمهور التي يمكن لمقدم الطلب النشر إليها من هذه المنشأة
نطاق الجمهور الذي يمكن للناشر منحه في أداة اختيار النشر والتحرير: المنشآت التي تصل إليها أدواره في ph-ai-agent (نطاق متعدد المنشآت)، بالإضافة إلى ما إذا كان يتمتع بالصلاحية على مستوى المنظمة المطلوبة لجماهير العلامة التجارية بأكملها أو المنظمة بأكملها في العلامة التجارية أو المنظمة التابعة لهذه المنشأة. تُطبَّق القواعد نفسها مجددًا من جانب الخادم عند النشر أو التحديث (validatePublishAudience)، ونقطة النهاية هذه تشكّل واجهة المستخدم فقط.
المعلمات
club `string` (مطلوب)نقطة النهاية
GET /api/agent-apps/audience-options/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/agent-apps/audience-options/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الإكمال التلقائي للنظراء لجمهور تطبيق من مستخدمين محددين بالاسم
تبحث فقط في المستخدمين الذين يمكن لمقدم الطلب رؤيتهم بالفعل، أي الأشخاص الذين تتداخل أدوارهم مع منشأة أو منطقة أو منظمة واحدة على الأقل ضمن صلاحية الوصول الخاصة بمقدم الطلب في ph-ai-agent. يجعل الحد الأدنى للاستعلام البالغ حرفين والحد الأقصى البالغ 10 نتائج نقطة النهاية عديمة الفائدة لجمع البيانات آليًا؛ وتُطبَّق مجموعة إمكانية الوصول نفسها مجددًا من جانب الخادم عند حفظ الجمهور.
المعلمات
club `string` (مطلوب) q `string` (مطلوب)نقطة النهاية
GET /api/agent-apps/user-search/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/agent-apps/user-search/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
نشر خدمة مباشرة (Live Service) من وكيل الذكاء الاصطناعي بوصفها Custom App في Performance Hub
تسجّل تطبيق ويب يستضيفه وكيل الذكاء الاصطناعي في المنشأة (خدمة مباشرة اكتشفها الجسر) كعنصر في القائمة الجانبية "Custom Apps" للجمهور المختار. تتطلب الوحدة ph-ai-agent في هذه المنشأة وصلاحية الوصول 'open' لكل جهاز؛ ويقتصر الجمهور على نطاقات أدوار الناشر نفسه (لا يمكنك أبدًا النشر على نطاق أوسع مما يمكنك الوصول إليه). تُحلّ هوية الخدمة مباشرةً من قائمة /__services في الجهاز؛ ولا يُحفظ مخطط http/https أبدًا.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/agent-apps/publish/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/agent-apps/publish/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
تطبيقات Custom Apps المنشورة المرئية في هذه المنشأة
تُرجع التطبيقات المنشورة النشطة التي يشمل جمهورها هذه المنشأة، بالشكل الذي تعرضه القائمة الجانبية (appId وname وicon وdescription). يُعاد تحديد الجمهور مباشرةً في كل استدعاء، لذا تسري تغييرات الوصول فورًا.
المعلمات
club `string` (مطلوب)نقطة النهاية
GET /api/agent-apps/menu/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/agent-apps/menu/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
التطبيقات المنشورة المُدارة من هذه المنشأة (عرض الناشر)
صفوف التطبيقات الكاملة للتطبيقات التي تكون منشأتها الرئيسية هي هذا النادي، لقائمة الإدارة "Published Apps" في التطبيق المصغّر. يُوسَم كل صف بقيمة canManage للمستخدم مقدم الطلب (الناشر).
المعلمات
club `string` (مطلوب)نقطة النهاية
GET /api/agent-apps/manage/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/agent-apps/manage/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إصدار رمز مميز للمشاهد مقيّد بالخدمة لتطبيق Custom App منشور
تُرجع عنوان URL موقّعًا قصير الأجل + رمزًا مميزًا يستخدمه المتصفح لفتح تطبيق منشور واحد فقط مباشرةً على بوابة الترحيل الإقليمية للجهاز. يحمل الرمز المميز مطالبة svc تحدد منفذ الخدمة، لذا تقيّد البوابة الجلسة بالمسار /__services/proxy/
المعلمات
club `string` (مطلوب) appId `string` (مطلوب)نقطة النهاية
POST /api/agent-apps/access/{club}/{appId}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/agent-apps/access/{club}/{appId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
جهة دعم تطبيق Custom App منشور (جهة اتصال المالك)
الجهة التي تدعم هذا التطبيق الذي نشره مستخدم: البريد الإلكتروني للناشر (مع الرجوع إلى مالك الوكيل المستضيف عند عدم توفره). تُعرض في لوحات عدم الاتصال والخطأ لدى المشاهد كي تُوجَّه طلبات الدعم إلى مالك التطبيق بدلًا من Performance Hub، إذ إن التطبيقات المنشورة ليست جزءًا من الدعم الأساسي لـ PH. يُعاد التحقق من جمهور التطبيق أولًا؛ ولا يعرف المشاهدون الذين لم يُشارَك التطبيق معهم أي شيء. تظل التطبيقات المتوقفة مؤقتًا قابلة للتحديد (إذ يتلقى المالكون أيضًا أسئلة "لماذا توقف هذا مؤقتًا؟").
المعلمات
club `string` (مطلوب) appId `string` (مطلوب)نقطة النهاية
GET /api/agent-apps/support-info/{club}/{appId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/agent-apps/support-info/{club}/{appId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إرسال طلب دعم بالبريد الإلكتروني إلى مالك تطبيق Custom App منشور
ترسل رسالة المشاهد إلى جهة دعم التطبيق (الناشر، مع الرجوع إلى مالك الوكيل عند عدم توفره) كرسالة بريد إلكتروني تحمل العلامة التجارية: To إلى المالك، وCC إلى المشاهد (سجله للطلب)، وReply-To إلى المشاهد كي يرد المالك عليه مباشرةً. يتولى المستخدمون صيانة التطبيقات المنشورة، لذا يُبقي ذلك دعمها خارج قائمة انتظار Performance Hub. يُعاد التحقق من الجمهور؛ ويُسمح بطلب واحد لكل مشاهد لكل تطبيق كل 15 دقيقة (فترة تهدئة في Redis، مع السماح عند الفشل).
المعلمات
club `string` (مطلوب) appId `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/agent-apps/support-request/{club}/{appId}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/agent-apps/support-request/{club}/{appId} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
تحديث تطبيق Custom App منشور (الاسم والأيقونة والوصف والحالة والجمهور)
للناشر فقط. يُعاد التحقق من تغييرات الجمهور مقابل نطاقات أدوار المحرّر بقواعد التقييد نفسها المطبقة على النشر. تتبدّل الحالة بين active وpaused (تختفي التطبيقات المتوقفة مؤقتًا من القوائم وترفض إصدار الرموز المميزة).
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/agent-apps/update/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/agent-apps/update/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
إلغاء نشر تطبيق Custom App (حذف مبدئي)
للناشر فقط. تحذف صف السجل حذفًا مبدئيًا، فيختفي التطبيق من القوائم فورًا ويُرفض إصدار رموز المشاهدين؛ وتنتهي جلسات البوابة الصادرة بالفعل عند انتهاء صلاحية الرمز المميز.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/agent-apps/unpublish/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/agent-apps/unpublish/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
نقل ملكية تطبيق Custom App منشور
تحاكي مسار إعادة تعيين المالك في وكيل الذكاء الاصطناعي: يمكن للناشر الحالي أو مالك الحساب (وحدة الفوترة) تسليم التطبيق إلى مستخدم آخر يتولى إدارته بعد ذلك. يجب أن يمتلك المالك الجديد حق الوصول إلى المنشأة في النادي الرئيسي للتطبيق.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/agent-apps/transfer-owner/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/agent-apps/transfer-owner/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
تقرير الفحص الكامل (+ مراجعة LLM) لإصدار مهارة واحد
قائمة النتائج الكاملة لإصدار ما، للناشر ومسؤولي المنظمة (مراجعات الموافقة) فقط؛ أما من يثبّتون المهارة فيرون الأعداد الملخّصة في تفاصيل المهارة بدلًا من ذلك.
المعلمات
club `string` (مطلوب) skillId `string` (مطلوب) version `string` (مطلوب)نقطة النهاية
GET /api/agent-skills/scan-report/{club}/{skillId}/{version}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/agent-skills/scan-report/{club}/{skillId}/{version} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إرسال إصدار مسودة لمهارة (نشره أو وضعه في قائمة انتظار الموافقة)
تنقل إصدار المسودة إلى المرحلة التالية وفقًا لحوكمة المنظمة. عندما تختار المنظمة مراجعة LLM، تُشغَّل مراجعة التعليمات أولًا (بأفضل جهد؛ يؤدي الحكم 'fail' إلى الرفض، ويفرض الحكم 'flag' المرور عبر قائمة انتظار الموافقة). تُنشر المشاركات على مستوى المنشأة فورًا ما لم تتطلب الحوكمة الموافقة؛ أما مشاركات مكتبة المنظمة (جمهور العلامة التجارية أو المنظمة) فتتطلب الموافقة افتراضيًا. يضبط النشر قيمة latestVersion للمهارة، وتلتقطها عمليات التثبيت ذات السياسة 'auto' في دورة المزامنة التالية.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/agent-skills/submit/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/agent-skills/submit/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
مكتبة المهارات المرئية في هذه المنشأة (مصفّاة حسب الجمهور)
المهارات النشطة التي لها إصدار منشور واحد على الأقل يشمل جمهوره هذه المنشأة (أو يسمّي المشاهد)، موسومة بملخص أحدث إصدار منشور ومدى اعتمادها في المنظمة (عدد المنشآت المختلفة، وليس أعداد التثبيت الأولية أبدًا). يُعاد تحديد الجمهور مباشرةً في كل استدعاء.
المعلمات
club `string` (مطلوب)نقطة النهاية
GET /api/agent-skills/library/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/agent-skills/library/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تفاصيل المهارة (الإصدارات والمتطلبات وملخص الفحص والاعتماد)
التفاصيل الكاملة لمهارة واحدة من المكتبة: سجل الإصدارات مع سجلات التغييرات وملخصات الفحص (تغذّي قوائم نقاط النهاية لكل إصدار مقارنة الفحص عند التحديث)، والمتطلبات المعلنة في ملف البيان، ومصدر الناشر، ومؤشر الاعتماد حسب عدد المنشآت. يُعاد التحقق من الجمهور، ولا يعرف المشاهدون الذين لم تُشارَك المهارة معهم أي شيء (يراها الناشر ومسؤولو المنظمة دائمًا).
المعلمات
club `string` (مطلوب) skillId `string` (مطلوب)نقطة النهاية
GET /api/agent-skills/skill/{club}/{skillId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/agent-skills/skill/{club}/{skillId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
المهارات المنشورة من هذه المنشأة (قائمة إدارة الناشر)
صفوف المهارات الكاملة التي تكون منشأتها الرئيسية هي هذا النادي، وكل منها موسوم بقيمة canManage للمستخدم مقدم الطلب وبملخص أحدث إصدار لها (بما في ذلك المسودات والموافقات المعلّقة، فهذا هو عرض العمل الخاص بالناشر).
المعلمات
club `string` (مطلوب)نقطة النهاية
GET /api/agent-skills/manage/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/agent-skills/manage/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تثبيت مهارة من المكتبة على وكيل الذكاء الاصطناعي في المنشأة
خاضعة للحوكمة: يجب أن تسمح بها قيمة installSources للمنظمة، ويجب أن يشمل جمهور المهارة هذه المنشأة (أو يسمّي مقدم الطلب)، ويجب أن يكون الإصدار منشورًا، ويجب أن يستوفي مقدم الطلب مستوى whoCanInstall للجهاز المستهدف (المالك / مستخدم مسموح له / مسؤول المنشأة / مسؤول المنظمة، راجع الحوكمة). تكتب صف دورة حياة التثبيت (مصدر الحقيقة) وتنفّذ دفعًا فوريًا بأفضل جهد؛ وتضمن مهمة المزامنة المجدولة (cron) التسليم بمجرد أن يصبح الجهاز قابلًا للوصول.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/agent-skills/install/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/agent-skills/install/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
الموافقة على تحديث مهارة معلّق لعملية تثبيت واحدة
تنقل قيمة desiredVersion لعملية التثبيت إلى أحدث إصدار منشور (الخطوة اليدوية في السياستين 'notify' و'pinned'، والمسار المتبع عندما تضبط الحوكمة updatePosture على 'approvalRequired'). تحتفظ بالإصدار الحالي هدفًا للتراجع بخطوة واحدة وتمسح أي تثبيت للتحديث بعد التراجع (skipVersion). مستوى أذونات whoCanInstall نفسه المطلوب للتثبيت.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/agent-skills/update-approve/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/agent-skills/update-approve/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
إرجاع مهارة مثبّتة إلى إصدارها السابق
تضبط desiredVersion على قيمة previousVersion في صف التثبيت (المحفوظة عند كل تغيير للإصدار) وتترك مسار التسليم العادي يعيد تثبيته. بخطوة واحدة: يتبادل الإصداران موضعيهما، لذا يعيدك التراجع مرتين إلى حيث بدأت. كما تثبّت التحديثات (skipVersion = الإصدار الذي تم التراجع عنه) كي تُبقي السياستان auto/notify التراجع قائمًا، ويُمسح التثبيت عند نشر إصدار أحدث فعليًا، أو عند update-approve، أو عند set-policy.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/agent-skills/rollback/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/agent-skills/rollback/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
إلغاء تثبيت مهارة من وكيل الذكاء الاصطناعي في المنشأة
تضع على صف التثبيت علامة pending-uninstall وتدفع الحالة المطلوبة؛ ويُحذف الصف بمجرد أن يؤكد الجهاز الإزالة (قراءة التحقق في المزامنة). مستوى أذونات whoCanInstall نفسه المطلوب للتثبيت.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/agent-skills/uninstall/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/agent-skills/uninstall/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
ضبط سياسة التحديث لكل عملية تثبيت لمهارة على جهاز واحد
auto (تطبّق المزامنة الإصدارات المنشورة الجديدة تلقائيًا، ما لم تتطلب قيمة updatePosture للمنظمة الموافقة)، أو notify (يُبلَّغ المالك مرة واحدة لكل إصدار جديد ويطبّقه يدويًا)، أو pinned (لا يتغير أبدًا دون update-approve صريح). يمسح تغيير السياسة أي تثبيت للتحديث بعد التراجع (skipVersion). مستوى أذونات whoCanInstall نفسه المطلوب للتثبيت.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/agent-skills/set-policy/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/agent-skills/set-policy/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
عمليات تثبيت المهارات على وكيل الذكاء الاصطناعي في المنشأة (علامة التبويب Skills)
صفوف دورة حياة التثبيت لجهاز واحد، وكل منها موسوم بحقول إدراج المهارة وبما إذا كان هناك إصدار منشور أحدث. تتطلب صلاحية الوصول 'open' لكل جهاز (توجد علامة التبويب Skills داخل درج الوكيل).
المعلمات
club `string` (مطلوب) device `string` (مطلوب)نقطة النهاية
GET /api/agent-skills/installs/{club}/{device}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/agent-skills/installs/{club}/{device} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إصدارات المهارات التي تنتظر الموافقة في منظمة هذه المنشأة
قائمة انتظار الموافقة لدى مسؤول المنظمة: كل إصدار ينتظر الموافقة عبر مهارات المنظمة، مع إدراج المهارة وملخصات الفحص وLLM. لمسؤولي المنظمة فقط.
المعلمات
club `string` (مطلوب)نقطة النهاية
GET /api/agent-skills/approvals/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/agent-skills/approvals/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الموافقة على إصدار مهارة معلّق (ينشره)
لمسؤولي المنظمة فقط. يصبح الإصدار منشورًا، وتتغير قيمة latestVersion للمهارة، ويُبلَّغ الناشر. تلتقط عمليات التثبيت ذات السياسة 'auto' الإصدار في دورة المزامنة التالية.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/agent-skills/approve/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/agent-skills/approve/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
رفض إصدار مهارة معلّق
لمسؤولي المنظمة فقط. يصبح الإصدار مرفوضًا مع سبب المراجع ويُبلَّغ الناشر، ويمكنه إصلاح النتائج وإرسال إصدار جديد (الإصدارات غير قابلة للتغيير).
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/agent-skills/reject/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/agent-skills/reject/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
حوكمة مهارات الوكيل السارية لمنظمة هذه المنشأة
السياسة المحفوظة لكل منظمة مدمجة فوق الإعدادات الافتراضية للمنصة (ترى المنظمة التي ليس لها صف محفوظ الإعدادات الافتراضية فقط). لمسؤولي المنظمة فقط.
المعلمات
club `string` (مطلوب)نقطة النهاية
GET /api/agent-skills/governance/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/agent-skills/governance/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحديث حوكمة مهارات الوكيل لمنظمة هذه المنشأة
تحديث جزئي: تتغير الحقول المقدَّمة فقط، ويحتفظ كل ما عداها بقيمته المحفوظة أو الافتراضية. لمسؤولي المنظمة فقط. توجد التجاوزات الخاصة بكل جهاز في صف التسجيل عبر مسارات تهيئة الجهاز الحالية.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/agent-skills/governance/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/agent-skills/governance/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
الحصول على البيانات البيئية لمنشأة
تُرجع أحوال الطقس الحالية بما في ذلك أوقات الشروق والغروب (عبر Open-Meteo) ودرجة الحرارة الداخلية للمنشأة (من مستشعرات Duress) للنادي المحدد. تُخزَّن مؤقتًا في Redis لمدة 30 دقيقة.
المعلمات
clubId `string` (مطلوب) المعرّف الداخلي للنادي أو المنشأةنقطة النهاية
GET /api/clubs/{clubId}/environment
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubId}/environment \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تضيف جهاز IoT عامًا إلى نادٍ أو تربطه به.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد إضافة الجهاز تحته. body `string` (مطلوب) كائن JSON للشاشة الجديدة المراد ربطها.نقطة النهاية
POST /api/devices/addGenericDevice/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/addGenericDevice/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إزالة شاشة عرض وإعادة ضبطها على إعدادات المصنع
تزيل ارتباط الشاشة النشط بالمنشأة وتجهّز إعادة ضبط دائمة على إعدادات المصنع. تطبّق الشاشة المطفأة إعادة الضبط بعد تشغيلها التالي وإعادة اتصالها، ثم تعود إلى صفحة الاقتران عبر HDMI. يُحتفظ بسجلات الفوترة السابقة.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/devices/display-screens/reset/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/display-screens/reset/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
تربط وحدة تحكم بباب بمنشأة.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/devices/door-controllers/associate/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/door-controllers/associate/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
تحدّث إعدادات وحدة التحكم بالباب لمنشأة.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/devices/door-controllers/update/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/door-controllers/update/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
تُخرج وحدة تحكم بباب من الخدمة في منشأة.
المعلمات
club `string` (مطلوب)نقطة النهاية
POST /api/devices/door-controllers/decommission/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/door-controllers/decommission/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع تهيئة المرحّل لوحدة تحكم بباب.
المعلمات
uuid `string` (مطلوب)نقطة النهاية
GET /api/devices/door-controllers/config/{uuid}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/door-controllers/config/{uuid} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع البيانات الوصفية للجهاز
المعلمات
uuid `string` (مطلوب) المعرّف الفريد للجهازنقطة النهاية
GET /api/devices/metadata/{uuid}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/metadata/{uuid} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع البيانات الوصفية للجهاز. الاستجابة هي صف البيانات الوصفية في المستوى الأعلى (الشكل القديم) بالإضافة إلى `detectedType` (camera | ai-edge-processor | door-controller | ph-ai-agent | null) و`online` (true عند التحديث خلال 5 دقائق).
المعلمات
deviceSerialNumber `string` (مطلوب) الرقم التسلسلي للجهازنقطة النهاية
GET /api/devices/metadata/serial/{serialNo}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/metadata/serial/{serialNo} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع بيانات النادي الذكي للنادي.
المعلمات
club_id `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد إضافة الجهاز تحته.نقطة النهاية
GET /api/clubs/{club_id}/smart-club-data
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club_id}/smart-club-data \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع جميع الأجهزة المرتبطة بنادٍ واحد.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد سرد أجهزته.نقطة النهاية
GET /api/devices/list/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/list/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع جميع إصدارات التطبيقات لأجهزة balena الخاصة بنا..
نقطة النهاية
GET /api/devices/listReleases
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/listReleases \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تنقل جهازًا إلى منشأة جديدة (نادٍ) وتحدّث الأنظمة ذات الصلة.
المعلمات
club `string` (مطلوب) معرّف المنشأة المصدر (النادي الحالي الذي يوجد فيه الجهاز) body `object` (مطلوب) معلمات النقلنقطة النهاية
POST /api/devices/move/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/move/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحاول إنشاء اتصال بموجّه المنشأة عبر اختيار أفضل جهاز داخل النادي وإرسال أمر MQTT لإنشاء نفق.
المعلمات
facilityID `string` (مطلوب) المعرّف الداخلي للمنشأة التي تجري محاولة الاتصال بموجّهها.نقطة النهاية
GET /api/devices/openRouterWebpage/{facilityID}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/openRouterWebpage/{facilityID} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
كتالوج Cloud Agent (المناطق والأحجام وأسعار البيع الحالية)
المعلمات
club `string` (مطلوب)نقطة النهاية
GET /api/devices/ph-ai-agent/cloud/catalog/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/cloud/catalog/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
عرض سعر لـ Cloud Agent (البرمجيات + الاستضافة)
نقطة النهاية
POST /api/devices/ph-ai-agent/cloud/quote/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/cloud/quote/{club} \
-H "x-api-key: YOUR_API_KEY"
تشغيل Cloud Agent (وضع التوفير في قائمة الانتظار + الربط التلقائي)
نقطة النهاية
POST /api/devices/ph-ai-agent/cloud/launch/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/cloud/launch/{club} \
-H "x-api-key: YOUR_API_KEY"
حالة مهمة Cloud Agent
نقطة النهاية
GET /api/devices/ph-ai-agent/cloud/jobs/{club}/{jobId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/cloud/jobs/{club}/{jobId} \
-H "x-api-key: YOUR_API_KEY"
حذف Cloud Agent نهائيًا (الجهاز الافتراضي + balena + التسجيل)
نقطة النهاية
POST /api/devices/ph-ai-agent/cloud/delete/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/cloud/delete/{club} \
-H "x-api-key: YOUR_API_KEY"
معالجة إزالة Cloud Agent معلّقة (إعادة محاولة النسخ الاحتياطي، أو الحذف دون نسخ احتياطي، أو الإلغاء)
نقطة النهاية
POST /api/devices/ph-ai-agent/cloud/delete-decision/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/cloud/delete-decision/{club} \
-H "x-api-key: YOUR_API_KEY"
سرد Connected Apps لوكيل (الحزم + التطبيقات ذات الحسابات المتصلة)
تُرجع حالة Connected Apps للوكيل: علامة التمكين، والملخصات لكل حزمة (Google Workspace وMicrosoft 365)، وكتالوج التطبيقات المنتقاة مع الحسابات المتصلة لكل تطبيق (حسابات متعددة: يمكن للوكيل امتلاك عدة حسابات لكل تطبيق، لكل منها اسم مستعار اختياري) والمستخرجة من الجلسة الأولية للوكيل.
المعلمات
facilityId `string` (مطلوب) deviceId `string` (مطلوب) قيمة balena UUID لجهاز الوكيل.نقطة النهاية
GET /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
كتالوج سوق Connected Apps الكامل لوكيل
تُرجع كل تطبيق قابل للاتصال (كتالوج مجموعات الأدوات الكامل ذات المصادقة المُدارة، المخزّن مؤقتًا من جانب الخادم لمدة ~12h) مع مستويات التطبيقات المميزة والحزم والحسابات المتصلة للوكيل لكل تطبيق، بالإضافة إلى الملخصات لكل حزمة وطلبات الاتصال المعلّقة للوكيل، في حمولة واحدة لسوق التطبيقات القابل للبحث من جانب العميل.
المعلمات
facilityId `string` (مطلوب) deviceId `string` (مطلوب) قيمة balena UUID لجهاز الوكيل.نقطة النهاية
GET /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/catalog
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/catalog \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تجاهل طلب اتصال معلّق من وكيل
تضع على طلب الاتصال المعلّق للوكيل لمجموعة أدوات علامة "متجاهَل" (فيختفي من قسم "Requested by your agent" في السوق). متساوية القوة (idempotent): تجاهل طلب غير معلّق لا يُحدث أي أثر.
المعلمات
facilityId `string` (مطلوب) deviceId `string` (مطلوب) قيمة balena UUID لجهاز الوكيل.نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/requests/dismiss
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/requests/dismiss \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
تمكين Connected Apps لوكيل أو تعطيلها
تحفظ مفتاح Connected Apps للوكيل وتدفع متغير جهاز Balena المسمى PH_APPS_MCP_ENABLED إلى ذلك الجهاز وحده (بأفضل جهد، إذ إن العلامة من جانب PH هي البوابة الحاسمة على مرحّل MCP).
المعلمات
facilityId `string` (مطلوب) deviceId `string` (مطلوب) قيمة balena UUID لجهاز الوكيل.نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/enable
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/enable \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
بدء ربط تطبيق واحد بوكيل (مسار Connect Link عبر OAuth)
تبدأ مسار Connect Link مستضافًا لمجموعة أدوات واحدة وتُرجع عنوان URL الذي يجب توجيه المستخدم إليه. يسمّي اسم مستعار اختياري الحساب الجديد (حسابات متعددة: ربط تطبيق متصل بالفعل يضيف حسابًا آخر، بحد أقصى 10 لكل تطبيق). يمر عبر استدعاء التسلسل نفسه المستخدم في ربط الحزم (حزمة من مجموعة أدوات واحدة)، لذا يعود الإكمال إلى صفحة التطبيق المصغّر ph-ai-agent.
المعلمات
facilityId `string` (مطلوب) deviceId `string` (مطلوب) قيمة balena UUID لجهاز الوكيل.نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/connect
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/connect \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
حمولة التحضير للاتصال لتطبيق واحد (الوضع وحقول بيانات الاعتماد ودليل الإعداد)
كل ما يحتاجه مربع حوار الاتصال قبل بدء الاتصال: طريقة اتصال التطبيق (oauth = مسار موافقة مستضاف، وcredentials = نموذج داخل المنتج)، وحقول بيانات الاعتماد المراد جمعها في وضع credentials، ودليل الإعداد داخل المنتج (مكتوب للتطبيقات ذات الأولوية، وإلا فيُنشأ من البيانات الوصفية لحقول التطبيق، ولا يكون أبدًا رابطًا إلى وثائق خارجية). تحمل تطبيقات OAuth التي يوفرها العميل أيضًا ما إذا كان تطبيق OAuth الخاص بالعميل مسجّلًا لهذا الوكيل بالتحديد (byoConfigured) وعنوان URL لإعادة التوجيه المراد تسجيله لدى المزوّد.
المعلمات
facilityId `string` (مطلوب) deviceId `string` (مطلوب) قيمة balena UUID لجهاز الوكيل. toolkit `string` (مطلوب)نقطة النهاية
GET /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/connect-info/{toolkit}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/connect-info/{toolkit} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
ربط تطبيق ببيانات اعتماد يقدّمها المستخدم (مفتاح API وغيره، دون OAuth)
تنشئ حسابًا متصلًا لتطبيق في وضع credentials مباشرةً من النموذج داخل المنتج، دون مسار موافقة مستضاف. تأتي حقول بيانات الاعتماد من حمولة connect-info للتطبيق؛ ويجب تقديم كل حقل مطلوب. يُتحقق من بيانات الاعتماد لدى المزوّد حيثما كان ذلك مدعومًا (بأفضل جهد، إذ لا ترفض بعض التطبيقات المفتاح الخاطئ إلا عند أول استدعاء أداة من الوكيل). يسمّي اسم مستعار اختياري الحساب الجديد (حسابات متعددة: ربط تطبيق متصل بالفعل يضيف حسابًا آخر).
المعلمات
facilityId `string` (مطلوب) deviceId `string` (مطلوب) قيمة balena UUID لجهاز الوكيل.نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/connect-credentials
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/connect-credentials \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
تسجيل تطبيق OAuth الخاص بالعميل لتطبيق BYO وبدء مسار الاتصال الخاص به
لتطبيقات OAuth التي يوفرها العميل (Xero وShopify و...): تأخذ معرّف العميل وسر العميل لتطبيق OAuth الذي أنشأه العميل لدى المزوّد (باتباع دليل إعداد التطبيق)، وتسجّله لهذا الوكيل بالتحديد (يُخزَّن السر لدى منصة التكامل الأولية فقط، ولا يُخزَّن أبدًا في Performance Hub)، وتبدأ فورًا مسار تسجيل الدخول المستضاف من خلاله. تُرجع عنوان URL للموافقة الذي يجب توجيه المستخدم إليه، بالعقد نفسه المتبع في نقطة نهاية الاتصال. تؤدي إعادة الإرسال إلى استبدال التطبيق المسجّل للوكيل (مثلًا بعد تدوير السر)، وتستمر الحسابات المتصلة الحالية في العمل.
المعلمات
facilityId `string` (مطلوب) deviceId `string` (مطلوب) قيمة balena UUID لجهاز الوكيل.نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/connect-oauth-app
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/connect-oauth-app \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
بدء ربط حزمة بنقرة واحدة لوكيل (مسارات Connect Link متسلسلة)
تبدأ مسار الاتصال المتسلسل لحزمة كاملة (مثل google-workspace). يفتح عنوان URL المُرجَع شاشة الموافقة لأول مجموعة أدوات؛ ويُعيد كل إكمال التوجيه (302) مباشرةً إلى مسار مجموعة الأدوات التالية، لينتهي في صفحة التطبيق المصغّر ph-ai-agent. يُتخطى الأعضاء الذين لديهم حساب متصل بالفعل، لذا تستأنف إعادة المحاولة بعد فشل في منتصف السلسلة بالتطبيقات الناقصة بدلًا من إنشاء حسابات مكررة. عندما يكون كل الأعضاء متصلين بالفعل، تُشغَّل السلسلة الكاملة مجددًا، وهذا هو مسار "إضافة حساب آخر" الصريح.
المعلمات
facilityId `string` (مطلوب) deviceId `string` (مطلوب) قيمة balena UUID لجهاز الوكيل.نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/connect-suite
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/connect-suite \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
قطع اتصال حساب متصل واحد عن وكيل
تحذف حسابًا متصلًا واحدًا (حسابات متعددة: تظل الحسابات الأخرى للتطبيق نفسه متصلة). يُتحقق من أن الحساب تابع لهذا الوكيل قبل الحذف؛ وعندما يكون آخر حساب للتطبيق، تُزال مجموعة الأدوات من المجموعة المتصلة للوكيل (تُعاد إنشاء الجلسة عند الحاجة كي تتحدث قائمة أدوات الوكيل).
المعلمات
facilityId `string` (مطلوب) deviceId `string` (مطلوب) قيمة balena UUID لجهاز الوكيل.نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/disconnect
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/disconnect \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
إعادة تسمية (تغيير الاسم المستعار) أحد الحسابات المتصلة لوكيل
تضبط الاسم المستعار المعروض لحساب متصل واحد. تُضبط الأسماء المستعارة عادةً تلقائيًا بعد OAuth (من الهوية التي سُجّل الدخول بها)؛ وتدعم نقطة النهاية هذه إعادة التسمية اليدوية في مربع حوار تفاصيل التطبيق. يمسح الاسم المستعار الفارغ التسمية. يُتحقق من أن الحساب تابع لهذا الوكيل قبل التحديث الأولي.
المعلمات
facilityId `string` (مطلوب) deviceId `string` (مطلوب) قيمة balena UUID لجهاز الوكيل.نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/rename-account
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/rename-account \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
تبديل خدمة Performance Hub مدمجة لوكيل
تشغّل خدمة مدمجة دائمة التشغيل واحدة (Smart Search وWeather و...) أو توقفها لهذا الوكيل. لا تحتاج الخدمات المدمجة إلى اتصال أو OAuth، فهي مضمّنة مع كل وكيل ومشغّلة افتراضيًا؛ ويحفظ هذا المفتاح التجاوز الخاص بالوكيل ويعيد إنشاء الجلسة الأولية للوكيل فورًا كي تتحدث مجموعة الأدوات. لاحظ أن المفتاح المنفصل "External apps" (المسار /enable) هو مفتاح إيقاف حاسم لخادم MCP للتطبيقات بأكمله، وعندما يكون متوقفًا تكون الخدمات المدمجة غير متاحة أيضًا بغض النظر عن مفاتيحها الفردية.
المعلمات
facilityId `string` (مطلوب) deviceId `string` (مطلوب) قيمة balena UUID لجهاز الوكيل. slug `string` (مطلوب) المعرّف النصي للخدمة المدمجة.نص الطلب
نقطة النهاية
PATCH /api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/built-in/{slug}
مثال على الطلب
curl -X PATCH https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/connected-apps/{facilityId}/{deviceId}/built-in/{slug} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
ربط جهاز وكيل الذكاء الاصطناعي بمنشأة
ربط يعتمد على البيانات الوصفية أولًا. تبحث عن الجهاز حسب الرقم التسلسلي في البيانات الوصفية المباشرة للأجهزة، وتشترط أن يكون متصلًا، ثم تنشئ صف التسجيل عند الحاجة، وتعيّن منطقة مرحّل Chisel + منفذ النفق + السر، وتسجّل تلك الخانة على المرحّل، وتدفع تهيئة المنشأة + النفق إلى الجهاز عبر Balena. تُزوَّد الأجهزة الجديدة أيضًا بحساب خدمة MCP افتراضي (ممكّن، ومقيّد بهذه المنشأة، وبجميع الإمكانات)؛ وتحتفظ إعادة الاقتران بأي منح MCP موجود. تتجاوز الإعدادات المتقدمة الاختيارية القيم الافتراضية المطبّقة عند الاقتران (تهيئة النسخ الاحتياطي، وتشغيل MCP أو إيقافه، وتقييد الوصول)، وتزوّد `restoreFrom` الجهاز الجديد من النسخة الاحتياطية السحابية لجهاز آخر في المنشأة (مصدر نشط أو خارج الخدمة؛ وتضع في قائمة الانتظار عملية استعادة بين المستودعات، تُرجَع كقيمة `restoreRequest` لاستطلاع التقدم).
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/associate/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/associate/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
سرد أجهزة وكيل الذكاء الاصطناعي لمنشأة
تُرجع أجهزة وكيل الذكاء الاصطناعي في المنشأة مع حالة الاتصال + النفق المباشرة (تستخدمها أداة تبديل الأجهزة في التطبيق المصغّر).
المعلمات
club `string` (مطلوب)نقطة النهاية
GET /api/devices/ph-ai-agent/list/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/list/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحديث وكيل الذكاء الاصطناعي + حالة الاتصال
تُرجع ما إذا كان الجهاز متصلًا، وما إذا كان هناك تحديث متاح أو معلّق، والإصدار المعروض (الإصدار المثبّت للأسطول عندما يكون الأسطول مثبّتًا؛ وأعلى إصدار ناجح عندما يتتبع الأسطول أحدث إصدار).
المعلمات
club `string` (مطلوب) uuid `string` (مطلوب)نقطة النهاية
GET /api/devices/ph-ai-agent/update-status/{club}/{uuid}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/update-status/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
حالة جهاز وكيل الذكاء الاصطناعي المباشرة + المقاييس
تُرجع لقطة منتقاة لشريط المقاييس ودرج الإدارة في التطبيق المصغّر: حقول الهوية + التسجيل، والنشاط + الاتصال، وإصدارات البرمجيات، وأحدث مقاييس نبضات الاتصال (CPU ودرجة الحرارة والذاكرة والتخزين لكل نقطة تحميل ومدة التشغيل والشبكة). تسطّح إشارة البيانات الوصفية للجهاز + حالة تحديث Balena؛ وقد يغيب أي من النصفين عند حدوث انقطاع مؤقت.
المعلمات
club `string` (مطلوب) uuid `string` (مطلوب)نقطة النهاية
GET /api/devices/ph-ai-agent/device-status/{club}/{uuid}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/device-status/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد بالذكاء الاصطناعي لتقرير سلامة الجهاز
تُرجع شرحًا قصيرًا موجّهًا للمشغّل لمشكلات السلامة المستنتجة الحالية. توجد الحقائق وخطوات دليل التشغيل دائمًا في device-status؛ وهذه الفقرة الإضافية بأفضل جهد وقد تكون null.
المعلمات
club `string` (مطلوب) uuid `string` (مطلوب)نقطة النهاية
POST /api/devices/ph-ai-agent/health/{club}/{uuid}/explain
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/health/{club}/{uuid}/explain \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إصدار رمز وصول مباشر إلى المرحّل لوكيل الذكاء الاصطناعي
تُرجع عنوان URL موقّعًا قصير الأجل يستخدمه المتصفح للاتصال مباشرةً ببوابة الترحيل الإقليمية للجهاز (متجاوزًا المرور عبر PH/سيدني العالمي)، بالإضافة إلى الرمز المميز HS256. يظل PH هو الجهة المرجعية (Google SSO + عمليات التحقق من الوحدة والمنشأة هنا)؛ وتتحقق بوابة الترحيل من الرمز المميز. يظل الوكيل /ai-agent-ui هو البديل الاحتياطي.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/access/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/access/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
إرسال رسالة محادثة إلى جلسة وكيل الذكاء الاصطناعي (رد مضمّن في الإشعار)
مرحّل من جانب الخادم يستخدمه إجراء الرد المضمّن في إشعار الويب، إذ يرسل عامل الخدمة (service worker) طلب POST إلى هنا (من الأصل نفسه، مع ملفات تعريف ارتباط SSO) كي يعمل الرد دون فتح علامة تبويب Performance Hub. يحدد PH هدف المرحّل للجهاز (البحث نفسه المستخدم في الوكيل /ai-agent-ui)، ويضيف x-ph-user لنسب الدور (يعود إشعار الإكمال الناتج إلى هذا المستخدم)، ويعيد التوجيه إلى /api/chat/start في الجهاز مع معرّف الجلسة.
نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/reply
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/reply \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
قراءة إعدادات التحكم في الوصول لوكيل الذكاء الاصطناعي (المالك)
تُرجع كتلة الوصول للجهاز (الوضع وقائمة السماح ومستوى الظهور ومفتاح PH Support) بالإضافة إلى أي طلبات وصول معلّقة. يمكن لمالك الجهاز قراءتها؛ ويتلقى المستخدمون الآخرون 403.
المعلمات
club `string` (مطلوب) uuid `string` (مطلوب)نقطة النهاية
GET /api/devices/ph-ai-agent/access-settings/{club}/{uuid}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/access-settings/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحديث إعدادات التحكم في الوصول لوكيل الذكاء الاصطناعي (المالك)
كتابة الوضع (org/restricted)، وقائمة السماح المقيّدة، ومستوى ظهور القائمة (all/admins)، ومفتاح "Permit access from Performance Hub Support". مسموح لمالك الجهاز. لا يمكن تغيير المالك نفسه إلا عبر reallocate-owner. طلبات الوصول المعتمدة دائمة: يُعاد ضم مقدمي الطلبات الذين لا تزال طلباتهم معتمدة إلى قائمة السماح المحفوظة؛ وتؤدي إزالة أحدهم من القائمة المرسلة إلى إلغاء موافقته (يتحول الطلب إلى denied؛ ويمكنه الطلب مجددًا).
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/access-settings/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/access-settings/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
إعادة تعيين مالك وكيل الذكاء الاصطناعي
تعيد تعيين ملكية الجهاز إلى مستخدم آخر في Performance Hub. تقتصر على مالكي الحسابات (الوصول إلى وحدة فوترة SaaS)، وهي المخرج عند مغادرة مالك وكيل مقيّد. يُبلَّغ كل من المالك السابق والجديد (داخل التطبيق + إشعار فوري + بريد إلكتروني).
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/reallocate-owner/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/reallocate-owner/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
قائمة مستخدمي المنشأة لأدوات اختيار قائمة السماح والمالك في وكيل الذكاء الاصطناعي
تُرجع البريد الإلكتروني + الاسم (+ علامات isOrgAdmin) لكل مستخدم يمنحه دوره حق الوصول إلى هذه المنشأة بالتحديد. تقتصر على مالك الجهاز ومن يحق لهم إعادة التعيين (مالك الحساب) كي لا يتمكن المستخدمون العاديون من حصر قاعدة المستخدمين.
المعلمات
club `string` (مطلوب) uuid `string` (مطلوب)نقطة النهاية
GET /api/devices/ph-ai-agent/org-users/{club}/{uuid}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/org-users/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
طلب الوصول إلى وكيل الذكاء الاصطناعي مقيّد
تنشئ طلب الوصول لمقدم الطلب لجهاز مقيّد (أو تعيد فتحه)، وهي متساوية القوة (idempotent) لكل مستخدم+جهاز. يُبلَّغ المالك داخل التطبيق وعبر إشعار الويب والبريد الإلكتروني مع رابط مباشر إلى وحدة الوكيل.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/access-request/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/access-request/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
الموافقة على طلب وصول إلى وكيل الذكاء الاصطناعي أو رفضه (المالك)
معالجة طلب معلّق من قِبل مالك الجهاز. تؤدي الموافقة إلى إضافة مقدم الطلب إلى قائمة السماح للجهاز؛ وفي كلتا الحالتين يُبلَّغ مقدم الطلب (داخل التطبيق + إشعار فوري + بريد إلكتروني).
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/access-request-resolve/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/access-request-resolve/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
السماح بتحديث وكيل الذكاء الاصطناعي + تطبيقه
تثبّت الجهاز على الإصدار المعروض (الإصدار المثبّت للأسطول، أو أعلى إصدار ناجح عندما يتتبع الأسطول أحدث إصدار) وتحرّر قفل التحديث كي يطبّقه مشرف balena. تبقى الحالة المخزنة على وحدة تخزين بيانات الجهاز بعد التحديث.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/update/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/update/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
جدولة تحديث وكيل الذكاء الاصطناعي لوقت لاحق
تخزّن وقت تثبيت مجدولًا في تسجيل الجهاز. تطبّق مهمة متكررة في الواجهة الخلفية (كل 5 دقائق) التحديث (التثبيت + فتح القفل) بمجرد مرور الوقت المجدول. تحل الجدولة محل أي جدول موجود للجهاز.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/update-schedule/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/update-schedule/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
إلغاء تحديث مجدول لوكيل الذكاء الاصطناعي
تمسح التثبيت المجدول المعلّق للجهاز (لا أثر لها عند عدم وجود أي جدولة).
المعلمات
club `string` (مطلوب) uuid `string` (مطلوب)نقطة النهاية
DELETE /api/devices/ph-ai-agent/update-schedule/{club}/{uuid}
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/update-schedule/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تشغيل أمر عن بُعد على جهاز وكيل الذكاء الاصطناعي
تنشر أمر MQTT مدرجًا في قائمة السماح (إعادة التشغيل، أو إعادة تشغيل حاوية، أو قفل التحديثات أو فتحها، أو إدارة Wi-Fi) إلى device-controller العامل على وكيل الذكاء الاصطناعي. يجب أن يكون الجهاز مرتبطًا بالمنشأة.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/command/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/command/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
تحديث تهيئة وكيل الذكاء الاصطناعي الخاصة بالمنشأة
يحفظ الإعدادات القابلة للتعديل من قِبل المشغّل لوكيل الذكاء الاصطناعي المرتبط: اسم الجهاز، والموقع الفعلي للجهاز، ووتيرة إعادة التشغيل المجدولة. يُرسَل جدول إعادة التشغيل أيضًا إلى الجهاز كمتغير بيئة Balena باسم REBOOT_DEVICE (الساعة 2 صباحًا بالتوقيت المحلي)، بما يطابق سلوك Display Screens.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/config/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/config/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
المنشآت التي يمكن نقل وكيل الذكاء الاصطناعي في هذه المنشأة إليها
يعرض المنشآت التابعة للمنظمة نفسها التي يمكن للمستخدم الذي سجّل الدخول الوصول إليها (باستثناء المنشأة الحالية)، لأداة الاختيار "Move to another facility". تتم عملية النقل نفسها عبر POST /api/devices/move/:club، الذي يفرض على الخادم قواعد المنظمة نفسها والوصول إلى المنشأة الهدف.
المعلمات
club `string` (مطلوب)نقطة النهاية
GET /api/devices/ph-ai-agent/move-targets/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/move-targets/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
نطاق وصول MCP الذي يمكن لمقدّم الطلب منحه لوكلاء الذكاء الاصطناعي في منشأة
يعرض ما يُسمح للمستخدم الذي سجّل الدخول بمنحه لحساب خدمة MCP لوكيل الذكاء الاصطناعي في منظمة هذه المنشأة: المنشآت والمناطق ضمن نطاق وصوله، وما إذا كان يمكنه منح نطاق على مستوى المنظمة، والوحدات النمطية التي يملكها، والكتالوج الكامل لأدوات MCP (لقناع الأدوات المتقدم لكل أداة). تستخدم الواجهة ذلك حتى لا يرى المستخدمون إلا الخيارات الواقعة ضمن نطاق أذوناتهم؛ وتفرض نقطة النهاية mcp-access POST التقييد نفسه على الخادم.
المعلمات
club `string` (مطلوب)نقطة النهاية
GET /api/devices/ph-ai-agent/mcp-grantable/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/mcp-grantable/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على إعدادات حساب خدمة MCP لوكيل الذكاء الاصطناعي
يعرض إعدادات وصول MCP للجهاز (النطاق، والوحدات النمطية، وقناع الأدوات، وحقول التدقيق).
المعلمات
club `string` (مطلوب) uuid `string` (مطلوب)نقطة النهاية
GET /api/devices/ph-ai-agent/mcp-access/{club}/{uuid}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/mcp-access/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تهيئة حساب خدمة MCP لوكيل الذكاء الاصطناعي
يحفظ إعدادات وصول MCP للجهاز مع تقييد الصلاحيات عند المنح. لا يمكن لمقدّمي الطلبات منح إلا المنشآت والمناطق الواقعة ضمن نطاق وصولهم، ونطاق المنظمة فقط عندما يملكون دورًا على مستوى المنظمة، والوحدات النمطية التي يملكونها هم أنفسهم في منظمة المنشأة. تُرسَل علامة التفعيل أيضًا إلى الجهاز كمتغير بيئة Balena باسم PH_MCP_ENABLED.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/mcp-access/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/mcp-access/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
الحصول على إعدادات VPN لوكيل الذكاء الاصطناعي (منقّحة)
يعرض علامة دعم VPN في الجهاز وقائمة الاتصالات. لا تُعرض أبدًا محتويات ملفات التعريف أو قيم بيانات الاعتماد، بل فقط البيانات الوصفية وقت الاستيراد (الخوادم البعيدة، والمسارات، وDNS) وعلامات وجود بيانات الاعتماد. تأتي الحالة المباشرة لكل اتصال من نقطة النهاية device-status (beacon metadata.vpn).
المعلمات
club `string` (مطلوب) uuid `string` (مطلوب)نقطة النهاية
GET /api/devices/ph-ai-agent/vpn-config/{club}/{uuid}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/vpn-config/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تبديل دعم VPN لوكيل الذكاء الاصطناعي
يشغّل ميزة VPN في الجهاز أو يوقفها. يرسل متغير جهاز balena باسم PH_VPN_ENABLED وينبّه الجهاز (MQTT vpnConfigChanged)؛ وتُحتفظ بالاتصالات عند الإيقاف (تتوقف الأنفاق وتبقى الإعدادات لإعادة التفعيل).
المعلمات
club `string` (مطلوب) uuid `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/vpn-config/{club}/{uuid}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/vpn-config/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
استيراد ملف (ملفات) تعريف OpenVPN إلى وكيل الذكاء الاصطناعي
يقبل ملفات مرفوعة بترميز base64: ملف .ovpn/.conf مفرد، وحزم ملفات مقسّمة (الإعدادات + الشهادات/المفاتيح)، وأرشيفات (.zip، وصادرات Pritunl بصيغة .tar/.tgz، و.tblk من Tunnelblick، و.visc/.visz من Viscosity). تُوحَّد ملفات التعريف إلى صيغة مضمّنة قياسية؛ ويصبح كل ملف تعريف اتصالًا واحدًا (يُستورد غير متصل: أدخل بيانات الاعتماد ثم اتصل). يعرض أخطاء 400 قابلة للمعالجة عند رفع ملفات غير صالحة للاستخدام.
المعلمات
club `string` (مطلوب) uuid `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/vpn-import/{club}/{uuid}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/vpn-import/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
تحديث اتصال VPN لوكيل الذكاء الاصطناعي (الاسم / بيانات الاعتماد / split-DNS)
يحدّث الاتصال المخزَّن. حقول بيانات الاعتماد للكتابة فقط (الحذف = الاحتفاظ بالقيمة المخزنة؛ السلسلة الفارغة = المسح). تؤدي تغييرات بيانات الاعتماد أو split-DNS إلى رفع مراجعة الاتصال، فيُعاد تشغيل النفق النشط بالقيم الجديدة.
المعلمات
club `string` (مطلوب) uuid `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/vpn-connection/{club}/{uuid}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/vpn-connection/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
حذف اتصال VPN لوكيل الذكاء الاصطناعي
يزيل الاتصال من التسجيل وينبّه الجهاز، الذي يُنهي النفق ويحذف ملف التعريف وبيانات الاعتماد المخزنة مؤقتًا.
المعلمات
club `string` (مطلوب) uuid `string` (مطلوب) connectionId `string` (مطلوب)نقطة النهاية
DELETE /api/devices/ph-ai-agent/vpn-connection/{club}/{uuid}/{connectionId}
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/vpn-connection/{club}/{uuid}/{connectionId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
توصيل / فصل اتصال VPN لوكيل الذكاء الاصطناعي
نموذج الحالة المرغوبة: يضبط علامة التفعيل للاتصال في التسجيل وينبّه الجهاز (MQTT vpnConfigChanged بلا حمولة)؛ ويسحب الجهاز الحالة المعتمدة عبر استدعاء universal-api المصادَق عليه بـ JWT ويوفّق أنفاقه وفقًا لها. إذا فات التنبيه، تتوافق الحالة عند المزامنة الدورية.
المعلمات
club `string` (مطلوب) uuid `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/vpn-command/{club}/{uuid}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/vpn-command/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
الحصول على إعدادات النسخ الاحتياطي السحابي لوكيل الذكاء الاصطناعي وحالته
يعرض إعدادات النسخ الاحتياطي للجهاز (التفعيل، ومدة الاحتفاظ، ومنطقة التخزين)، وحالة النسخ الاحتياطي المتجددة (آخر نسخة، والحجم، والأخطاء)، والمنطقة التلقائية المحددة، ومناطق التخزين المتاحة لأداة الاختيار. لا تُعرض أبدًا كلمة مرور مستودع restic.
المعلمات
club `string` (مطلوب) uuid `string` (مطلوب)نقطة النهاية
GET /api/devices/ph-ai-agent/backup-config/{club}/{uuid}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-config/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحديث إعدادات النسخ الاحتياطي السحابي لوكيل الذكاء الاصطناعي
يحفظ التفعيل ومدة الاحتفاظ والمنطقة. يسري التغيير عند دورة النسخ الاحتياطي التالية كل ساعة على الجهاز (يطلب الجهاز من PH سياق التشغيل قبل كل تشغيل)، لذا لا حاجة إلى إعادة تشغيل الجهاز.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/backup-config/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-config/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
سرد مصادر الاستعادة من النسخ الاحتياطية لإقران وكيل ذكاء اصطناعي جديد
عرض على مستوى المنشأة لخيار "الاستعادة من نسخة احتياطية" في مربع حوار إضافة وكيل: كل تسجيل في المنشأة (النشط وكذلك الملغى أو المستبدل) لا يزال لديه مستودع نسخ احتياطي قابل لفك التشفير ونقطة استعادة واحدة قابلة للاستخدام على الأقل، مع أحدث لقطاته. يعرض أيضًا قوائم خيارات إعدادات النسخ الاحتياطي (allowedRetentionDays وavailableRegions) حتى لا يحتاج مربع الحوار إلى UUID جهاز لملء قوائمه المنسدلة.
المعلمات
club `string` (مطلوب)نقطة النهاية
GET /api/devices/ph-ai-agent/backup-sources/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-sources/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد نقاط الاستعادة من النسخ الاحتياطية لوكيل الذكاء الاصطناعي
يعرض فهرس لقطات الجهاز (الأحدث أولًا) من DynamoDB دون أي اتصال بالجهاز أو المستودع، إضافةً إلى حالة طلب النسخ الاحتياطي اليدوي أو الاستعادة الحالية لاستطلاع اللوحة الجانبية. تُعرض الطلبات القديمة (التي لم تُلتقط قط أو بلا نبضة تقدّم) على أنها فاشلة حتى تتمكن الواجهة دائمًا من إرسال طلب جديد.
المعلمات
club `string` (مطلوب) uuid `string` (مطلوب)نقطة النهاية
GET /api/devices/ph-ai-agent/backup-snapshots/{club}/{uuid}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-snapshots/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
طلب نسخ احتياطي يدوي لوكيل الذكاء الاصطناعي الآن
يكتب طلب تشغيل يدوي (مع ملاحظة المستخدم) في صف التسجيل وينبّه الجهاز عبر MQTT. يجلب الجهاز الطلب المُتحقق منه عبر استدعاء سياق التشغيل في universal-api المصادَق عليه بـ JWT، وحتى دون MQTT يُلتقط الطلب عند دورة المجدول التالية. يُرفض الطلب أثناء تنفيذ نسخ احتياطي أو استعادة أخرى.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/backup-run/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-run/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
تثبيت نقطة استعادة لوكيل الذكاء الاصطناعي أو إلغاء تثبيتها
نقاط الاستعادة المثبتة محمية من التقليم وفق مدة الاحتفاظ: تتلقى الصيانة الليلية للجهاز معرّفات اللقطات المثبتة عبر استدعاء سياق التشغيل وتستثنيها من restic forget، ولا تنتهي صلاحية صفوف فهرسها (TTL) أبدًا. يعيد إلغاء التثبيت سلوك الاحتفاظ العادي.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/backup-pin/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-pin/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
استعادة وكيل الذكاء الاصطناعي من نقطة استعادة في نسخة احتياطية
يكتب طلب استعادة في صف التسجيل وينبّه الجهاز. تستبدل الاستعادة الكاملة محتويات /data و/home/hermeswebui (يلتقط الجهاز أولًا لقطة أمان تلقائية قبل الاستعادة ويوقف الوكيل أثناءها)، وتتطلب كتابة اسم الجهاز للتأكيد. يؤدي تمرير `paths` بدلًا من ذلك إلى استعادة غير معطِّلة على مستوى الملفات لتلك المسارات فقط. ويمكن اختياريًا تثبيت الجهاز على إصدار البرنامج الخاص باللقطة بعد اكتمال استعادة البيانات (راجع backup-restore-release).
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/backup-restore/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-restore/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
تطبيق إصدار البرنامج المسجّل في استعادة مكتملة
الخطوة الأخيرة من استعادة طلبت إصدار البرنامج الخاص باللقطة: بعد أن يُبلغ الجهاز باكتمال استعادة البيانات، يثبّت هذا الإجراء الجهاز على الإصدار المخزَّن ويفتح التحديثات (بالآلية نفسها لنقطة نهاية التحديث). يُشغَّل عبر استطلاع اللوحة الجانبية؛ وهو متساوي القوة (idempotent): يُمسح التثبيت المخزَّن بعد تطبيقه.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/backup-restore-release/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-restore-release/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
تصفّح الملفات داخل نقطة استعادة في نسخة احتياطية
يسرد مستوى دليل واحدًا من لقطة restic، ويُقدَّم بالكامل من الخادم من مستودع Wasabi (يعمل والجهاز غير متصل). تُقرأ البيانات الوصفية للشجرة فقط، ولا تُنزَّل أي بيانات ملفات لعمليات السرد.
المعلمات
club `string` (مطلوب) uuid `string` (مطلوب) takenAt `number` (مطلوب) path `string` (اختياري)نقطة النهاية
GET /api/devices/ph-ai-agent/backup-files/{club}/{uuid}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-files/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
البحث في أسماء الملفات داخل نقطة استعادة في نسخة احتياطية
بحث في أسماء الملفات غير حساس لحالة الأحرف من دليل معيّن نزولًا، يُقدَّم من الخادم من البيانات الوصفية لشجرة restic (لا تُقرأ أي بيانات ملفات؛ ويعمل والجهاز غير متصل). يبثّ القائمة ويتوقف عند أول 200 نتيجة مطابقة.
المعلمات
club `string` (مطلوب) uuid `string` (مطلوب) takenAt `number` (مطلوب) q `string` (مطلوب) path `string` (اختياري)نقطة النهاية
GET /api/devices/ph-ai-agent/backup-search/{club}/{uuid}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-search/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
ما الذي تغيّر بين نقطتي استعادة في النسخ الاحتياطية
يشغّل restic diff على الخادم بين لقطتين من لقطات الجهاز (البيانات الوصفية للشجرة فقط) ويعرض قائمة الملفات المضافة والمحذوفة والمعدّلة (بحد أقصى 500 تغيير) مع إحصاءات موجزة. تُخزَّن النتائج مؤقتًا لأن اللقطات غير قابلة للتغيير.
المعلمات
club `string` (مطلوب) uuid `string` (مطلوب) fromTakenAt `number` (مطلوب) toTakenAt `number` (مطلوب)نقطة النهاية
GET /api/devices/ph-ai-agent/backup-diff/{club}/{uuid}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-diff/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سجل إصدارات ملف واحد عبر جميع نقاط الاستعادة
عملية restic find واحدة على الخادم عبر كل لقطة في مستودع الجهاز، تُختصر إلى إصدارات مميزة (تُدمج النتائج المتتالية المتطابقة في الحجم وmtime) وتُربط بصفوف فهرس اللقطات لعرض التواريخ والأنواع والملاحظات.
المعلمات
club `string` (مطلوب) uuid `string` (مطلوب) path `string` (مطلوب)نقطة النهاية
GET /api/devices/ph-ai-agent/backup-file-versions/{club}/{uuid}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-file-versions/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
البحث في كل نقاط الاستعادة من النسخ الاحتياطية للجهاز حسب اسم الملف
مسار استرداد الملفات المحذوفة: عملية restic find واحدة على الخادم عبر جميع اللقطات في المستودع (غير حساسة لحالة الأحرف، بسلسلة جزئية أو نمط glob)، مجمّعة حسب المسار مع نقاط الاستعادة التي يظهر فيها كل ملف. يظل الملف المحذوف من الجهاز قابلًا للعثور عليه هنا ما دامت أي نقطة استعادة تحتويه.
المعلمات
club `string` (مطلوب) uuid `string` (مطلوب) q `string` (مطلوب)نقطة النهاية
GET /api/devices/ph-ai-agent/backup-find/{club}/{uuid}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-find/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تنزيل ملف واحد من نقطة استعادة في نسخة احتياطية
يبثّ ملفًا واحدًا مباشرةً من مستودع restic إلى المتصفح (كمرفق). تُبثّ الأدلة كأرشيف tar. الحجم محدود؛ ويُقدَّم من الخادم، لذا يعمل والجهاز غير متصل.
المعلمات
club `string` (مطلوب) uuid `string` (مطلوب) takenAt `number` (مطلوب) path `string` (مطلوب)نقطة النهاية
GET /api/devices/ph-ai-agent/backup-file-download/{club}/{uuid}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/backup-file-download/{club}/{uuid} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إلغاء تشغيل وكيل الذكاء الاصطناعي من منشأة
المعلمات
club `string` (مطلوب)نقطة النهاية
POST /api/devices/ph-ai-agent/decommission/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/decommission/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إزالة وكيل الذكاء الاصطناعي من منشأة وإعادة ضبط الجهاز على إعدادات المصنع
يفصل الجهاز بالكامل حتى يمكن إقرانه في أي منشأة، ويمحو جميع البيانات على NUC. يُجهَّز المحو عبر متغير جهاز balena باسم PH_FACTORY_RESET (رمز يُستخدم مرة واحدة) قبل التفكيك السحابي، فيظل ساريًا حتى لو كان الجهاز غير متصل وقت الإزالة، ويُنفَّذ المحو عند اتصاله التالي. يجعل تنبيه MQTT factoryReset الحالة المتصلة فورية. ثم يُلغي التفكيك السحابي كل بيانات اعتماد ومنحة، ويمسح ربط المنشأة في Balena (متغيرات الجهاز + وسم club) وclubID في البيانات الوصفية، ويحذف طلبات الوصول وسجل DNS للشبكة المحلية. يُحتفظ بالنسخ الاحتياطية السحابية: يبقى فهرس اللقطات وكلمة مرور المستودع في التسجيل المحذوف حذفًا مرنًا، ويمكن استخدامهما كمصدر استعادة عند إضافة بديل. يتطلب كتابة اسم الجهاز للتأكيد.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/reset/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/reset/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
استبدال وكيل ذكاء اصطناعي معطّل بجهاز NUC جديد (التعافي من الكوارث)
استبدال الجهاز في خطوة واحدة: يربط جهاز NUC البديل (فتحة النفق، والأسرار، ومتغيرات balena، وبذرة النسخ الاحتياطي)، وينقل اسم الجهاز القديم وموقعه وجدول إعادة تشغيله وإعدادات نسخه الاحتياطي وحظر الوصول ومنحة MCP، ويعيد ربط فهرس اللقطات القديم بالجهاز الجديد (فيظل سجل نسخه الاحتياطي الكامل قابلًا للتصفح)، ويلغي التسجيل القديم (مع ختم replacedBy / replacedFrom)، وما لم تكن قيمة `restore` هي false، يضع في قائمة الانتظار استعادة كاملة لنقطة الاستعادة المختارة من مستودع النسخ الاحتياطي للجهاز القديم إلى الجهاز الجديد. يعمل والجهاز القديم معطّل أو غير متصل؛ ويتطلب كتابة اسم الجهاز القديم للتأكيد. داخل المنشأة نفسها فقط.
المعلمات
club `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/devices/ph-ai-agent/replace/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/devices/ph-ai-agent/replace/{club} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
يحلّ رابط QR المختصر لجهاز Performance Hub إلى الرابط العميق الذي يشير إليه، حتى يتمكن ماسح Add Device من اكتشاف نوع الجهاز. لا تُتبع إلا مضيفات performancehub.co.
المعلمات
url `string` (مطلوب) الرابط المختصر الذي تم مسحهنقطة النهاية
GET /api/devices/resolve-qr
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/resolve-qr \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يختبر الاتصال بوحدة تحكم Unifi في المنشأة وما إذا كانت بيانات الاعتماد صحيحة.
المعلمات
facilityID `string` (مطلوب) المعرّف الداخلي للمنشأة التي تريد اختبار الاتصال بـ Unifi معهانقطة النهاية
GET /api/devices/testUnifiController/{facilityID}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/devices/testUnifiController/{facilityID} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يحدّث جهاز IoT عامًا مع منشأة.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للمنشأة التي تريد تحديث الجهاز فيها. body `string` (مطلوب) كائن JSON لمعلمات التحديث.نقطة النهاية
PUT /api/devices/updateGenericDevice/{club}
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/devices/updateGenericDevice/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تسرد عدد الاتفاقيات المعلّقة التي تتطلب إجراءً بناءً على المستخدم والأندية المرتبطة به
نقطة النهاية
GET /api/agreements/agreements-outstanding
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/agreements/agreements-outstanding \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تسرد جميع الاتفاقيات المتاحة لنادٍ
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه. contracts-sort `string` (اختياري) فرز الاتفاقيات حسب date-effective أو alphabetical. القيمة الافتراضية date-effective. contracts-acknowledgement `string` (اختياري) تصفية الاتفاقيات حسب all أو acknowledged أو unacknowledged. القيمة الافتراضية all. contracts-requirement `string` (اختياري) تصفية الاتفاقيات حسب all أو signature أو checkbox أو popup أو none. القيمة الافتراضية all. contracts-status `string` (اختياري) تصفية الاتفاقيات حسب all أو active أو archived. القيمة الافتراضية all.نقطة النهاية
GET /api/agreements/list-agreements/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/agreements/list-agreements/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
توقّع اتفاقية بناءً على معرّفها.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي يوقّع الاتفاقية. agreementid `string` (مطلوب) معرّف الاتفاقية التي يجري توقيعها. body `string` (مطلوب) كائن JSON يحتوي على الاتفاقية والمعلمات المراد إضافتها أو رفعها إلى النظام ...نقطة النهاية
POST /api/agreements/sign/{club}/{agreementid}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/agreements/sign/{club}/{agreementid} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
ملخص Model Router للمنشأة (التهيئة والرصيد والإنفاق).
المعلمات
clubID `string` (مطلوب) tz `string` (اختياري) المنطقة الزمنية IANA للمشاهد، وتُستخدم بديلًا لنوافذ الإنفاق اليومية والشهرية عندما لا تتوفر بيانات منطقة زمنية للمنشأة.نقطة النهاية
GET /api/clubs/{clubID}/ai-credits/overview
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/overview \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
كتالوج النماذج المتاحة مع حالة التمكين لكل منشأة (جميعها ممكّنة افتراضيًا).
المعلمات
clubID `string` (مطلوب)نقطة النهاية
GET /api/clubs/{clubID}/ai-credits/models
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/models \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الضوابط الوقائية المتاحة والقوالب المعدّة مسبقًا من PH.
المعلمات
clubID `string` (مطلوب)نقطة النهاية
GET /api/clubs/{clubID}/ai-credits/guardrails
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/guardrails \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
خدمات Model Router المتصلة. تشمل أجهزة وكيل الذكاء الاصطناعي المقترنة، والوكلاء الخارجيين المحدد نوعهم صراحةً، وخدمة Workflow الخاصة بالمنشأة. تُحرَّر التهيئة عبر PATCH /keys/{keyHash}.
المعلمات
clubID `string` (مطلوب) tz `string` (اختياري) المنطقة الزمنية IANA للمشاهد، وتُستخدم بديلًا لنوافذ الإنفاق اليومية والشهرية عندما لا تتوفر بيانات منطقة زمنية للمنشأة.نقطة النهاية
GET /api/clubs/{clubID}/ai-credits/agents
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/agents \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تمكين Model Router لمنشأة وتوفير صلاحية الوصول إلى الاستدلال لها.
المعلمات
clubID `string` (مطلوب)نقطة النهاية
POST /api/clubs/{clubID}/ai-credits/enable
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/enable \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحديث الخطة وقائمة السماح للنماذج والضوابط الوقائية وعوامل تصفية المحتوى (تنقيح أو حظر بالتعبيرات النمطية من جانب PH) وحد الإنفاق وتهيئة إعادة الشحن التلقائي.
المعلمات
clubID `string` (مطلوب)نقطة النهاية
PATCH /api/clubs/{clubID}/ai-credits/config
مثال على الطلب
curl -X PATCH https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/config \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إعادة تعيين عدّاد الحد الأقصى الثابت مدى الحياة إلى 0 (إعادة ضبط خط الأساس على الإنفاق الحالي) وتسجيل الفترة المغلقة في السجل.
المعلمات
clubID `string` (مطلوب)نقطة النهاية
POST /api/clubs/{clubID}/ai-credits/spend-limit/reset-total
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/spend-limit/reset-total \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سجل إعادة تعيين الحد الأقصى الثابت (الأحدث أولًا): الحد والمبلغ المُنفَق والطوابع الزمنية لكل فترة مغلقة.
المعلمات
clubID `string` (مطلوب)نقطة النهاية
GET /api/clubs/{clubID}/ai-credits/spend-limit/history
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/spend-limit/history \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إنشاء مفتاح API جديد من نوع phk_ للمنشأة (يُرجَع النص الصريح مرة واحدة). يقبل حدود إنفاق اختيارية وقائمة سماح للنماذج وضوابط وقائية وعوامل تصفية للمحتوى وحدود المعدل rpmLimit/tpmLimit.
المعلمات
clubID `string` (مطلوب)نقطة النهاية
POST /api/clubs/{clubID}/ai-credits/keys
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/keys \
-H "x-api-key: YOUR_API_KEY"
تحديث حقول المفتاح القابلة للتحرير: التسمية وحدود الإنفاق لكل مفتاح وقائمة السماح للنماذج والضوابط الوقائية وعوامل تصفية المحتوى وحدود المعدل rpmLimit/tpmLimit (تُزامَن مع المفتاح).
المعلمات
clubID `string` (مطلوب) keyHash `string` (مطلوب)نقطة النهاية
PATCH /api/clubs/{clubID}/ai-credits/keys/{keyHash}
مثال على الطلب
curl -X PATCH https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/keys/{keyHash} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سجلات الاستدلال لكل طلب في المنشأة (مباشرة، بيانات وصفية فقط).
المعلمات
clubID `string` (مطلوب) page `string` (اختياري) pageSize `string` (اختياري) status `string` (اختياري) model `string` (اختياري) provider `string` (اختياري) source `string` (اختياري) `key` أو `agent` keyHash `string` (اختياري) التصفية إلى مفتاح أو وكيل واحد حسب قيمة keyHash الخاصة به في PH. q `string` (اختياري) بحث نصي حر في معرّف الطلب وتسمية المفتاح أو الوكيل والنموذج والمزوّد والمستخدم النهائي. minutes `string` (اختياري) نافذة أقل من يوم (مثل Live=1440)؛ تتجاوز startDate/endDate. startTs `string` (اختياري) بداية النافذة بثوانٍ منذ بداية الحقبة (انقر للتكبير)؛ تتجاوز الدقائق والتواريخ. endTs `string` (اختياري) نهاية النافذة بثوانٍ منذ بداية الحقبة (انقر للتكبير)؛ تتجاوز الدقائق والتواريخ.نقطة النهاية
GET /api/clubs/{clubID}/ai-credits/logs
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/logs \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
مدرّج تكراري للطلبات عبر الزمن لعرض Logs. عوامل التصفية نفسها المستخدمة في مسار القائمة، لكن مع التجميع من جانب الخادم في فترات زمنية (أعداد النجاح والفشل) كي تكون الاستجابة صغيرة جدًا بغض النظر عن حجم السجلات. يُختار حجم الفترة تلقائيًا بحسب المدى.
المعلمات
clubID `string` (مطلوب) status `string` (اختياري) model `string` (اختياري) provider `string` (اختياري) source `string` (اختياري) keyHash `string` (اختياري) q `string` (اختياري) minutes `string` (اختياري) startDate `string` (اختياري) endDate `string` (اختياري) startTs `string` (اختياري) endTs `string` (اختياري)نقطة النهاية
GET /api/clubs/{clubID}/ai-credits/logs/histogram
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/logs/histogram \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
فترات تحليلات الاستخدام + الإجماليات لكل نموذج لنطاق زمني (مباشرة).
المعلمات
clubID `string` (مطلوب) range `string` (اختياري) 24h | 7 | 30 | 90 | year | all (تُتجاهل إذا قُدِّمت startDate/endDate) startDate `string` (اختياري) endDate `string` (اختياري) groupBy `string` (اختياري) model (افتراضي) | key | source | provider | status، البُعد المستخدم للفترات + المجموعات subgroupBy `string` (اختياري) بُعد ثانٍ اختياري متداخل تحت كل مجموعة (Explore) keyHash `string` (اختياري) عامل تصفية للتعمق: التقييد بمفتاح أو وكيل واحد model `string` (اختياري) عامل تصفية للتعمق: التقييد بنموذج واحد provider `string` (اختياري) source `string` (اختياري) compare `string` (اختياري) اضبطه على "prev" لإرجاع groupsPrev أيضًا (الفترة السابقة مباشرةً المساوية في الطول)نقطة النهاية
GET /api/clubs/{clubID}/ai-credits/stats
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/stats \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تقويم النشاط اليومي على مدى السنة الأخيرة المتجددة (بأسلوب GitHub، نحو 53 أسبوعًا).
المعلمات
clubID `string` (مطلوب)نقطة النهاية
GET /api/clubs/{clubID}/ai-credits/activity
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/activity \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الخصم من بطاقة فوترة SaaS المحفوظة لإضافة رصيد Model Router مدفوع مسبقًا.
المعلمات
clubID `string` (مطلوب) body `object` (اختياري)نقطة النهاية
POST /api/clubs/{clubID}/ai-credits/topup
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/topup \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إتمام عملية شحن الرصيد بعد أن يكمل التطبيق المصغّر مصادقة 3DS.
المعلمات
clubID `string` (مطلوب)نقطة النهاية
POST /api/clubs/{clubID}/ai-credits/topup/confirm
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/topup/confirm \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
ملخص بطاقة فوترة SaaS المحفوظة التي ستُخصم منها عمليات شحن الرصيد والشحن التلقائي.
المعلمات
clubID `string` (مطلوب)نقطة النهاية
GET /api/clubs/{clubID}/ai-credits/payment-method
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/payment-method \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
معاملات دفتر الحسابات للمنشأة، الأحدث أولًا. يمكن تصفيتها اختياريًا حسب النوع (مثل `types=topup,adjustment` لسجل حركة الأموال، أو `types=charge-reconcile` مع `from`/`to` لخصومات الاستخدام في شهر ما).
المعلمات
clubID `string` (مطلوب) limit `integer` (اختياري) الحد الأقصى للصفوف (الافتراضي 50، والحد الأقصى 200) types `string` (اختياري) أنواع المعاملات مفصولة بفواصل (topup وcharge-reconcile وrefund وadjustment وtrueup-shortfall) from `integer` (اختياري) المعاملات التي تكون فيها createdAt >= from فقط (بثواني unix) to `integer` (اختياري) المعاملات التي تكون فيها createdAt <= to فقط (بثواني unix)نقطة النهاية
GET /api/clubs/{clubID}/ai-credits/transactions
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/transactions \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الأشهر المميزة بصيغة `YYYY-MM` (بتوقيت UTC، الأحدث أولًا) التي تحتوي على معاملة واحدة على الأقل من الأنواع المطلوبة. تغذّي القوائم المنسدلة لتصفية السنة والشهر المستندة إلى البيانات، كي لا تعرض واجهة المستخدم إلا الفترات التي تحتوي فعلًا على بيانات.
المعلمات
clubID `string` (مطلوب) types `string` (اختياري) أنواع المعاملات مفصولة بفواصل (topup وcharge-reconcile وrefund وadjustment وtrueup-shortfall)نقطة النهاية
GET /api/clubs/{clubID}/ai-credits/transactions/available-periods
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/transactions/available-periods \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إيصال دفع بصيغة PDF يحمل العلامة التجارية لمعاملة Model Router واحدة.
المعلمات
clubID `string` (مطلوب) txId `string` (مطلوب)نقطة النهاية
GET /api/clubs/{clubID}/ai-credits/transactions/{txId}/receipt.pdf
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/transactions/{txId}/receipt.pdf \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
حزمة إيصالات دفع بصيغة PDF تحمل العلامة التجارية لمعاملات شحن الرصيد المحددة، كملف ZIP. يجب أن يكون كل معرّف عملية شحن رصيد تابعة للمنشأة، فخصومات الاستخدام والتعديلات الإدارية ليس لها إيصالات وتُرفض.
المعلمات
clubID `string` (مطلوب) ids `string` (مطلوب) معرّفات المعاملات مفصولة بفواصل (50 كحد أقصى)نقطة النهاية
GET /api/clubs/{clubID}/ai-credits/transactions/receipts.zip
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/transactions/receipts.zip \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تجميعات خصومات الاستخدام في المنشأة لكل شهر تقويمي (بتوقيت UTC)، الأحدث أولًا. يُضمَّن الشهر الحالي دائمًا ويُوسَم بـ `isCurrentMonth` (منذ بداية الشهر حتى تاريخه).
المعلمات
clubID `string` (مطلوب) months `integer` (اختياري) نافذة المراجعة بالأشهر (الافتراضي 12، والحد الأقصى 24؛ تُتجاهل عند ضبط `year`) year `integer` (اختياري) تقييد التجميعات بسنة تقويمية واحدة بتوقيت UTC (مثل 2026)نقطة النهاية
GET /api/clubs/{clubID}/ai-credits/usage-statements
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/usage-statements \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
كشف استخدام شهري بصيغة PDF يحمل العلامة التجارية: ملخص لخصومات الاستخدام في الشهر (المجاميع الفرعية اليومية + الإجمالي). ليس فاتورة أو إيصالًا صراحةً؛ إذ لا تُحصَّل أي دفعة عبر خصومات الاستخدام.
المعلمات
clubID `string` (مطلوب) month `string` (مطلوب) الشهر التقويمي بتوقيت UTC، `YYYY-MM`نقطة النهاية
GET /api/clubs/{clubID}/ai-credits/usage-statements/{month}/statement.pdf
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/usage-statements/{month}/statement.pdf \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
البنود الأولية لخصومات الاستخدام لشهر ما بصيغة CSV (معرّف المعاملة والطابع الزمني بتوقيت UTC والمبلغ والرصيد بعد المعاملة ولقطة الإنفاق مدى الحياة)، وهي التصدير التفصيلي الذي يطابق إجمالي كشف الشهر.
المعلمات
clubID `string` (مطلوب) month `string` (مطلوب) الشهر التقويمي بتوقيت UTC، `YYYY-MM`نقطة النهاية
GET /api/clubs/{clubID}/ai-credits/usage-statements/{month}/detail.csv
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/usage-statements/{month}/detail.csv \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
ملخص الاستخدام والإنفاق للمنشأة (البيانات المباشرة بالإضافة إلى دفتر الحسابات المطابَق).
المعلمات
clubID `string` (مطلوب) tz `string` (اختياري) المنطقة الزمنية IANA للمشاهد، وتُستخدم بديلًا لنوافذ الإنفاق اليومية والشهرية عندما لا تتوفر بيانات منطقة زمنية للمنشأة.نقطة النهاية
GET /api/clubs/{clubID}/ai-credits/usage
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/ai-credits/usage \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تربط جهاز AI Edge Processor بنادٍ أو تحدّثه
المعلمات
body `string` (مطلوب) كائن JSON لتحديث تسجيل جهاز AI Edge Processor.نقطة النهاية
POST /api/ai-edge-processor/devices
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/ai-edge-processor/devices \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تربط جهاز AI Edge Processor بنادٍ. تحدّد الجهاز بالاعتماد على البيانات الوصفية أولًا (تكون الأولوية لنبضات الاتصال المباشرة)، وتملأ صف التسجيل إذا لم يسجّل الجهاز نفسه قط، وتنظّف صفوف التسجيل القديمة المتبقية من أجهزة أُعيد توفيرها.
المعلمات
body `string` (مطلوب) كائن JSON لتحديث تسجيل جهاز AI Edge Processor.نقطة النهاية
POST /api/ai-edge-processor/devices/associate
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/ai-edge-processor/devices/associate \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع قائمة بسجلات رفع bbox في نادٍ
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
GET /api/cctv/bbox-timeline/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/bbox-timeline/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
فهرس البحث في قاعدة بيانات الكاميرات
تمرّر فهرس البحث camera-db في الوثائق العامة (الشركات المصنّعة والسلاسل والطرازات والأسماء البديلة) الذي يستخدمه مربع الحوار Find my camera عند إضافة كاميرات الشبكة. يُخزَّن مؤقتًا من جانب الخادم لمدة 12 ساعة.
نقطة النهاية
GET /api/cctv/camera-db/search-index
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/camera-db/search-index \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
قوالب الشركات المصنّعة في قاعدة بيانات الكاميرات
تمرّر قوالب عناوين RTSP URL والقيم الافتراضية لشركة مصنّعة واحدة من قاعدة بيانات الكاميرات في الوثائق العامة. يُتحقق من المعرّف النصي (slug) لمنع اجتياز المسارات. يُخزَّن مؤقتًا من جانب الخادم لمدة 12 ساعة.
المعلمات
slug `string` (مطلوب) المعرّف النصي للشركة المصنّعة (مثل hikvision)نقطة النهاية
GET /api/cctv/camera-db/manufacturers/{slug}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/camera-db/manufacturers/{slug} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع قائمة ببيانات تسجيلات الحضور لمنشأة
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي أو المنشأة التي تريد الوصول إليها. startDate `string` (اختياري) تاريخ البدء بالتنسيق YYYY-MM-DD endDate `string` (اختياري) تاريخ الانتهاء بالتنسيق YYYY-MM-DD timezone `string` (اختياري) المنطقة الزمنية لتفسير التاريخ (الافتراضية Australia/Brisbane) nextToken `string` (اختياري) رمز ترقيم الصفحات لجلب الصفحة التاليةنقطة النهاية
GET /api/cctv/check-ins/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/check-ins/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
استرداد تهيئة الواجهة الأمامية أو واجهة المستخدم للدوائر التلفزيونية المغلقة
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
GET /api/cctv/config/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/config/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على تهيئة توصيل المحتوى للدوائر التلفزيونية المغلقة
تُرجع نطاق المحتوى الذي تستخدمه عملاء الدوائر التلفزيونية المغلقة لتحديد أصول الوسائط. يُحدَّد النطاق بواسطة متغير البيئة CONTENT_DOMAIN، مع الرجوع إلى قيمة افتراضية تراعي المرحلة (تخدم بيئة الإنتاج /cctv، وتخدم المراحل الأخرى /cctv-stg).
نقطة النهاية
GET /api/cctv/content-config
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/content-config \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تغيير تهيئة الواجهة الأمامية أو واجهة المستخدم للدوائر التلفزيونية المغلقة
المعلمات
body `object` (مطلوب) كائن JSON لكتلة التهيئة الجديدة المراد إضافتها إلى النظام.نقطة النهاية
PUT /api/cctv/config/:club/:section
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/cctv/config/:club/:section \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع قائمة بمدى توفر مناطق الحاويات لتهيئة مزوّد التخزين للدوائر التلفزيونية المغلقة
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
GET /api/cctv/bucket-region/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/bucket-region/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إعادة تعيين مجموعة الوجوه غير المحددة
تعيد تعيين مجموعة CompreFace للوجوه غير المحددة في المنشأة بحذف جميع الأشخاص. لا تتأثر سجلات الأشخاص في DynamoDB ولا عمليات اكتشاف الوجوه ولا كتل المخطط الزمني في OpenSearch. تُمسح بيانات التعرف على الوجوه الأساسية فقط. ستُنشأ ملفات تعريف ظل جديدة تلقائيًا مع معالجة النظام لاكتشافات الكاميرات الجديدة.
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
DELETE /api/cctv/config/{facilityId}/unidentified-collection
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/cctv/config/{facilityId}/unidentified-collection \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على معلومات مجموعة الوجوه غير المحددة
تُرجع العدد الحالي للأشخاص في مجموعة CompreFace للوجوه غير المحددة في المنشأة.
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
GET /api/cctv/config/{facilityId}/unidentified-collection-info
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/config/{facilityId}/unidentified-collection-info \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تضيف كاميرا شبكة (كاميرا OEM/IP) عبر عنوان URL للبث (RTSP أو HTTP أو HTTPS)
المعلمات
body `string` (مطلوب) كائن JSON لإضافة كاميرا شبكة.نقطة النهاية
POST /api/cctv/devices/add-network-camera
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/cctv/devices/add-network-camera \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إضافة مجمّعة لكاميرات الشبكة إلى Edge Processor
تسجّل عدة كاميرات شبكة من نوع RTSP/HTTP على Edge Processor واحد، ثم تدفع FEED_CONFIG مرة واحدة كي يعيد الجهاز تحميل التهيئة مرة واحدة فقط.
المعلمات
body `object` (مطلوب)نقطة النهاية
POST /api/cctv/devices/add-network-cameras
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/cctv/devices/add-network-cameras \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تربط جهازًا بنادٍ أو تحدّثه
المعلمات
body `string` (مطلوب) كائن JSON لتحديث تسجيل جهاز الدوائر التلفزيونية المغلقة.نقطة النهاية
POST /api/cctv/devices
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/cctv/devices \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تربط جهازًا بنادٍ
المعلمات
body `string` (مطلوب) كائن JSON لتحديث تسجيل جهاز الدوائر التلفزيونية المغلقة.نقطة النهاية
POST /api/cctv/devices/associate
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/cctv/devices/associate \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
ترسل طلب MQTT إلى قيمة UUID لجهاز محدد، وتتوقع استجابة (عبر websocket) بالإمكانات المتاحة للكاميرا.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي يملك الجهاز الذي تستعلم عنه. body `string` (مطلوب) كائن JSON لمعلمات التحديث.نقطة النهاية
POST /api/cctv/devices/list-camera-capabilities/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/cctv/devices/list-camera-capabilities/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد تسجيلات الأجهزة
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
GET /api/cctv/devices/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/devices/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تزيل كاميرا شبكة بوضع علامة عليها كمحذوفة وإزالتها من FEED_CONFIG في Edge Processor
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي يملك الجهاز. balenaUUID `string` (مطلوب) UUID لكاميرا الشبكة المراد إزالتها.نقطة النهاية
DELETE /api/cctv/devices/remove-network-camera/{club}/{balenaUUID}
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/cctv/devices/remove-network-camera/{club}/{balenaUUID} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحفظ أيًا من إمكانات الكاميرا المهيأة أو جميعها وتطبّقها على الجهاز كمتغير بيئة (عبر balena)
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي يملك الجهاز الذي تستعلم عنه. body `string` (مطلوب) كائن JSON لمعلمات التحديث.نقطة النهاية
POST /api/cctv/devices/save-camera-capabilities/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/cctv/devices/save-camera-capabilities/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحفظ قناع الحركة (إذا كان مهيأً) للكاميرا وتطبّقه على الجهاز كمتغير بيئة (عبر balena)
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي يملك الجهاز الذي تستعلم عنه. body `string` (مطلوب) كائن JSON لقناع الكاميرا.نقطة النهاية
POST /api/cctv/devices/save-camera-mask/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/cctv/devices/save-camera-mask/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
ترسل أمر v4l2 محددًا (مثل السطوع أو التباين) إلى الجهاز الفعلي
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي يملك الجهاز الذي تستعلم عنه. body `string` (مطلوب) كائن JSON لمعلمات التحديث.نقطة النهاية
POST /api/cctv/devices/set-camera-capability/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/cctv/devices/set-camera-capability/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
اختبار عنوان URL لبث كاميرا شبكة
ترسل أمر اختبار إلى Edge Processor للتحقق من صحة عنوان URL لبث الكاميرا باستخدام ffprobe
نص الطلب
نقطة النهاية
POST /api/cctv/devices/test-stream
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/cctv/devices/test-stream \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
تحذف سجل اكتشاف وجه واحدًا نهائيًا من قاعدة البيانات. تُستخدم لإزالة إدخالات التتبع غير المتطابقة أو غير الصحيحة من سجل نشاط شخص ما.
المعلمات
club `string` (مطلوب) fdID `string` (مطلوب)نقطة النهاية
DELETE /api/cctv/face-detections/:club/:fdID
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/cctv/face-detections/:club/:fdID \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع قائمة ببيانات اكتشافات الوجه لشخص ما
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه. personID `string` (مطلوب) معرّف الشخص في نظام التعرف على الوجوهنقطة النهاية
GET /api/cctv/face-detections/:club/:personID
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/face-detections/:club/:personID \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع اكتشافات الوجه التي تشير إلى صورة مقتطعة محددة لشخص، ويُستعلم عنها عبر الفهرس GSI المسمى personCropImage.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه. personCropImage `string` (مطلوب) عنوان URL للصورة المقتطعة للشخص المحفوظ في سجل اكتشاف الوجه. limit `string` (اختياري) الحد الأقصى لعدد الاكتشافات المراد إرجاعها. nextToken `string` (اختياري) رمز ترقيم الصفحات من استجابة سابقة.نقطة النهاية
GET /api/cctv/face-detections-by-person-crop-image/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/face-detections-by-person-crop-image/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع قائمة ببيانات اكتشافات الوجه لنادٍ مجمّعة حسب نطاق نسبةً إلى الوقت الحالي
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
GET /api/cctv/face-detections/:club/timeline
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/face-detections/:club/timeline \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع قائمة ببيانات اكتشافات الوجه لنادٍ
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
GET /api/cctv/face-detections/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/face-detections/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
البحث في كتل المخطط الزمني لاكتشاف الوجوه في منشأة باستخدام OpenSearch
المعلمات
facilityId `string` (مطلوب) المعرّف الداخلي للمنشأة المراد البحث فيها timezone `string` (مطلوب) المنطقة الزمنية IANA لتحويل التاريخ (مثل Pacific/Auckland) startDate `string` (اختياري) عامل تصفية تاريخ البدء (YYYY-MM-DD)، يُحوَّل إلى startUnix باستخدام المنطقة الزمنية endDate `string` (اختياري) عامل تصفية تاريخ الانتهاء (YYYY-MM-DD)، يُحوَّل إلى endUnix باستخدام المنطقة الزمنية personId `string` (اختياري) التصفية حسب معرّف شخص محدد query `string` (اختياري) بحث نصي حر (مثل اسم الشخص) limit `string` (اختياري) عدد النتائج لكل صفحة (الافتراضي 20، والحد الأقصى 100) filters `string` (اختياري) كائن عوامل تصفية مرمّز بتنسيق JSON (مثل {"matchType":"identified"}) sortBy `string` (اختياري) الحقل المراد الفرز حسبه (startUnix أو endUnix أو created). القيمة الافتراضية endUnix. page `string` (اختياري) رقم الصفحة لترقيم الصفحات (الافتراضي 1) sortOrder `string` (اختياري) اتجاه الفرز (asc أو desc). القيمة الافتراضية desc.نقطة النهاية
GET /api/cctv/search/face-detections/timeline-blocks/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/search/face-detections/timeline-blocks/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع قائمة بالتقارير الخاصة بمنشأة النادي
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
GET /api/cctv/facility/:club/reports
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/facility/:club/reports \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تشغيل إنشاء الخريطة الحرارية عند الطلب. تستدعي منطق Starter نفسه الذي تستخدمه المهمة المجدولة (cron)، لكنها تتيح استهداف منشأة محددة وتاريخ ووقت ومجموعة فترات. عند استدعائها دون نص طلب، تتصرف تمامًا مثل المهمة المجدولة: تفحص جميع المنشآت المؤهلة وتضع كل جهاز في قائمة الانتظار.
نص الطلب
نقطة النهاية
POST /api/cctv/heatmaps/generate
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/cctv/heatmaps/generate \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
تحديد موقع صورة PNG لخريطة حرارية مركّبة بنافذة متجددة لجهاز واحد. تُرجع بيانات وصفية بتنسيق JSON فقط، إذ توجد بايتات PNG على نطاق المحتوى، وتنشئ الواجهة الأمامية عنوان URL على النحو التالي: `${contentDomain}/cctv/${storageService}/${region}/${filePath}?s=${token}` ترتيب التحديد: 1. العثور على الفهرس `composed#…` في DynamoDB ← الإرجاع فورًا (~10 ms). 2. طلب Wasabi HEAD على مفتاح ذاكرة التخزين المؤقت الحتمي. عند العثور عليه، يُكتب صف فهرس تكميلي ويُرجَع. 3. الرجوع إلى سجل قديم: يوجد أي سجل مركّب لهذه المجموعة (الجهاز، النطاق، الساعة)، حتى لو كان من تاريخ مختلف. يُرجَع فورًا مع `cache: 'HIT-STALE'` كي تتمكن الواجهة الأمامية من عرض *شيء ما*. ويُطلق تركيب جديد بشكل غير متزامن. 4. المسار البارد: لا يوجد أي سجل على الإطلاق. توضع دالة Lambda للتركيب في قائمة الانتظار عبر `InvocationType: 'Event'` وتُرجع نقطة النهاية `202 { cache: 'PENDING' }`. تستطلع الواجهة الأمامية حتى يصل سجل (عادةً خلال 3-5 ثوانٍ). معالجة اليوم الحالي: عندما تكون قيمة `endDate` هي "اليوم" بالتوقيت المحلي للمنشأة، تقدّم نقطة النهاية صورة PNG ليوم أمس بدلًا من ذلك، لأن شرائح اليوم لا تزال قيد الكتابة بواسطة المهمة المجدولة Starter وسيكون التركيب الجديد غير مكتمل. تعيد الاستجابة قيمة `endDate` المطلوبة وتتضمن `endDateUsed` (= أمس). قيم التعداد `cache`: - `HIT`: تُقدَّم من فهرس DDB للتاريخ المطلوب. - `HIT-FALLBACK`: طُلب اليوم الحالي؛ وقُدِّم صف فهرس الأمس. - `HIT-BACKFILL`: لم يُعثر عليه في DDB لكن صورة PNG كانت في Wasabi؛ وقد كُتب الصف للتو. - `HIT-FALLBACK-BACKFILL`: إكمال تكميلي عند الرجوع إلى الأمس. - `HIT-STALE`: لا يوجد سجل للتاريخ المطلوب لكن يوجد سجل من تاريخ آخر لهذه المجموعة؛ يُقدَّم فورًا ويوضع تركيب جديد في قائمة الانتظار في الخلفية. - `PENDING`: لا يوجد أي سجل؛ وقد وُضع التركيب في قائمة الانتظار. يجب أن تستطلع الواجهة الأمامية. الاستجابة هي `202 Accepted`، دون `filePath`.
المعلمات
facilityId `string` (مطلوب) deviceUUID `string` (مطلوب) الجهاز المراد التركيب له. تكون التركيبات لكل جهاز على حدة. hour `integer` (مطلوب) ساعة اليوم من 0 إلى 23 المراد التركيب لها عبر نافذة المراجعة. endDate `string` (اختياري) آخر تاريخ في النافذة (YYYY-MM-DD). القيمة الافتراضية اليوم (بالمنطقة الزمنية للمنشأة). range `string` (اختياري) نافذة المراجعة. يجب أن تكون أحد النطاقات المسموح بها. nocache `integer` (اختياري) اضبطها على `1` لتجاوز طبقتَي ذاكرة التخزين المؤقت DDB + HEAD وفرض تركيب جديد.نقطة النهاية
GET /api/cctv/heatmaps/hourly/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/heatmaps/hourly/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
اكتشاف ساعات اليوم التي تحتوي على سجلات شرائح `1h` لجهاز عبر نافذة مراجعة متجددة. تستخدم الواجهة الأمامية ذلك لملء أداة اختيار الساعة إلى جانب أداة اختيار التاريخ + النطاق قبل استدعاء نقطة نهاية التركيب (`/api/cctv/heatmaps/hourly/...`). مثال: `GET /api/cctv/heatmaps/query-hourly/Birkdale?deviceUUID=abc123&endDate=2026-04-16&range=30d` داخليًا: استعلام نطاق واحد في DynamoDB على `cctvheatmaps` (`sk BETWEEN 1h#{start}-00 AND 1h#{end}-23`)، مجمّع حسب الساعة. تُرجع إدخالًا واحدًا لكل ساعة تحتوي على شريحة واحدة على الأقل، بما في ذلك صورة JPEG مرجعية تمثيلية (مأخوذة من أحدث يوم في النافذة، إذ تُشارَك الصورة المرجعية لكل جهاز في كل يوم).
المعلمات
facilityId `string` (مطلوب) deviceUUID `string` (مطلوب) الجهاز المراد الاستعلام عنه. تكون الشرائح الساعية لكل جهاز على حدة. endDate `string` (اختياري) آخر تاريخ في النافذة (YYYY-MM-DD). القيمة الافتراضية اليوم (بالمنطقة الزمنية للمنشأة). range `string` (اختياري) نافذة المراجعة. يجب أن تكون أحد النطاقات المسموح بها.نقطة النهاية
GET /api/cctv/heatmaps/query-hourly/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/heatmaps/query-hourly/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الاستعلام عن سجلات الخرائط الحرارية المُنشأة مسبقًا لمنشأة. **جميع السجلات لنوع فترة:** - `/api/cctv/heatmaps/Birkdale?periodType=1y` - `/api/cctv/heatmaps/Birkdale?deviceUUID=abc123&periodType=1d` **نطاق تاريخ، نوع فترة واحد:** - `/api/cctv/heatmaps/Birkdale?periodType=1d&from=2026-03-01&to=2026-03-31` - `/api/cctv/heatmaps/Birkdale?periodType=6h&from=2026-03-31&to=2026-03-31` **نطاق تاريخ، جميع أنواع الفترات المنطبقة (احذف periodType):** - `/api/cctv/heatmaps/Birkdale?from=2026-03-01&to=2026-03-31` تُرجع السجلات السنوية ونصف السنوية والربع سنوية وغيرها وصولًا إلى سجلات 6h التي تتداخل مع النطاق المحدد. **نقطة زمنية محددة، جميع أنواع الفترات التسعة لجهاز واحد:** - `/api/cctv/heatmaps/Birkdale?deviceUUID=abc123&date=2026-03-15T14:30` تُرجع ما يصل إلى 9 سجلات (1y و6m و3m و2m و1m و1w و1d و12h و6h).
المعلمات
facilityId `string` (مطلوب) معرّف المنشأة. deviceUUID `string` (اختياري) الاستعلام عن جهاز محدد. عند حذفه، يشمل الاستعلام جميع الأجهزة (GSI). periodType `string` (اختياري) التصفية إلى نوع فترة واحد. عند حذفه مع from/to، يشمل الاستعلام جميع الأنواع. from `string` (اختياري) تاريخ البدء (yyyy-mm-dd). يجب استخدامه مع `to`. to `string` (اختياري) تاريخ الانتهاء (yyyy-mm-dd). يجب استخدامه مع `from`. date `string` (اختياري) البحث عن نقطة زمنية محددة (yyyy-mm-dd أو yyyy-mm-ddTHH:mm). يتطلب deviceUUID. يُرجع سجلًا واحدًا لكل نوع فترة.نقطة النهاية
GET /api/cctv/heatmaps/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/heatmaps/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على الصورة المصغّرة للبث المباشر للجهاز
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي. deviceId `string` (مطلوب) المعرّف الداخلي لجهاز الدوائر التلفزيونية المغلقة.نقطة النهاية
GET /api/cctv/livestream/:club/thumbnail/:deviceId
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/livestream/:club/thumbnail/:deviceId \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إبلاغ نظام الدوائر التلفزيونية المغلقة بأنك ستشاهد بثًا مباشرًا
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي. deviceId `string` (مطلوب) المعرّف الداخلي لجهاز الدوائر التلفزيونية المغلقة.نقطة النهاية
POST /api/cctv/livestream/:club/iswatching/:deviceId
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/cctv/livestream/:club/iswatching/:deviceId \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الموافقة على تطابق تقاطعي
تضبط حالة التطابق على confirmed وتسجّل المراجع.
المعلمات
club `string` (مطلوب) matchId `string` (مطلوب)نقطة النهاية
POST /api/cctv/matching/{club}/detail/{matchId}/approve
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/cctv/matching/{club}/detail/{matchId}/approve \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على تطابق تقاطعي واحد مع تفاصيل الزيارة
تُرجع سجل التطابق وتفصيل التوقيت لكل زيارة.
المعلمات
club `string` (مطلوب) matchId `string` (مطلوب)نقطة النهاية
GET /api/cctv/matching/{club}/detail/{matchId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/matching/{club}/detail/{matchId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
ربط شخص غير مطابق بعضو يدويًا
تربط قيمة personId في الدوائر التلفزيونية المغلقة بعضو محدد، وتضبط التطابق على confirmed.
المعلمات
club `string` (مطلوب) matchId `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/cctv/matching/{club}/detail/{matchId}/link
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/cctv/matching/{club}/detail/{matchId}/link \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
سرد التطابقات التقاطعية لمنشأة
تُرجع التطابقات مقسّمة إلى صفحات ومصفّاة حسب الحالة.
المعلمات
club `string` (مطلوب) status `string` (اختياري) limit `integer` (اختياري) nextToken `string` (اختياري)نقطة النهاية
GET /api/cctv/matching/{club}/list
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/matching/{club}/list \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
رفض تطابق تقاطعي
تضبط حالة التطابق على rejected وتسجّل المراجع.
المعلمات
club `string` (مطلوب) matchId `string` (مطلوب)نقطة النهاية
POST /api/cctv/matching/{club}/detail/{matchId}/reject
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/cctv/matching/{club}/detail/{matchId}/reject \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على الأعداد الملخّصة للتطابق التقاطعي
تُرجع أعداد التطابقات مجمّعة حسب الحالة للمنشأة.
المعلمات
club `string` (مطلوب) معرّف المنشأةنقطة النهاية
GET /api/cctv/matching/{club}/summary
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/matching/{club}/summary \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إلغاء ربط تطابق ملف تعريف مُتعلَّم تلقائيًا
تعيد التطابق المرتبط إلى الحالة rejected وتمسح autoLearnedFrom في سجل العضو.
المعلمات
club `string` (مطلوب) matchId `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/cctv/matching/{club}/detail/{matchId}/unlink
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/cctv/matching/{club}/detail/{matchId}/unlink \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
قراءة حالة عملية "upsert identified person" قيد التنفيذ (تشمل الإنشاء والتحرير). تقرأ الصف مباشرةً من الجدول `people-ops` المملوك لـ cctv-rekognition-api؛ دون المرور عبر Lambda. تستخدمها الواجهة الأمامية للدوائر التلفزيونية المغلقة لاستطلاع التقدم بعد POST /api/cctv/people/{facility}/identified. المسار شقيق لـ `/cctv/people/...` (وليس متداخلًا تحته) كي لا يطابق موجّه express قيمة `operationId` خطأً على أنها `:personID` في `/cctv/people/:club/:personID`. راجع ترتيب أنماط createAPIRouter. تُرجع عنصرًا نائبًا `pending` ما دامت دالة Lambda المسماة upsertIdentifiedPerson لم تكتب بعد إدخال مرحلتها الأولى (فترة البدء البارد). يتعامل خطاف الاستطلاع في الواجهة الأمامية مع العنصر النائب وpending بالطريقة نفسها، لذا يحافظ ذلك على استقرار العقد للمستدعين.
المعلمات
operationId `string` (مطلوب)نقطة النهاية
GET /api/cctv/people-operations/{operationId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/people-operations/{operationId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تضيف صورة وجه (من اكتشاف تتبع موجود) إلى كيان التعرف الخاص بالشخص في CompreFace وتخزّن مرجعًا في جدول صور الظل. لا ترفع الصورة إلى Wasabi، فهي موجودة هناك بالفعل كلقطة اكتشاف وجه.
المعلمات
club `string` (مطلوب) personID `string` (مطلوب) body `string` (مطلوب)نقطة النهاية
POST /api/cctv/people/:club/:personID/add-face
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/cctv/people/:club/:personID/add-face \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إضافة صور ظل إلى سجل شخص
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه. personID `string` (مطلوب) معرّف سجل الشخص body `string` (مطلوب) كائن JSON لكتلة التهيئة الجديدة المراد إضافتها إلى النظام.نقطة النهاية
POST /api/cctv/people/:club/shadow-photos/:personID
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/cctv/people/:club/shadow-photos/:personID \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الاستعلام عن صور الظل لشخص
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه. personID `string` (مطلوب) معرّف سجل الشخصنقطة النهاية
GET /api/cctv/people/:club/shadow-photos/:personID
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/people/:club/shadow-photos/:personID \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تزيل سجل صورة ظل نهائيًا من CCTVShadowPhotosTable وتزيل الوجه المقابل من CompreFace (إذا كانت قيمة faceId محفوظة).
المعلمات
club `string` (مطلوب) personID `string` (مطلوب) id `string` (مطلوب) معرّف سجل صورة الظل (المفتاح الأساسي)نقطة النهاية
DELETE /api/cctv/people/:club/shadow-photos/:personID/:id
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/cctv/people/:club/shadow-photos/:personID/:id \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحذف المراجع وسجلات rekognition المرتبطة حسب قيمة personID
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه. personID `string` (مطلوب) المعرّف الفريد للشخص في الدوائر التلفزيونية المغلقة.نقطة النهاية
DELETE /api/cctv/people/:club/:personID
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/cctv/people/:club/:personID \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع سجل شخص في نادٍ
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه. personID `string` (مطلوب) معرّف الشخص في قاعدة البيانات.نقطة النهاية
GET /api/cctv/people/:club/:personID
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/people/:club/:personID \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على مناطق الوصول المطابقة لملف عضوية شخص
تحدّد نوع عضوية الشخص ووسومه وخطط عضويته، ثم تُرجع مناطق الوصول الحقيقية (origin=membership-plan، غير المدمجة) المطابقة لقواعد التضمين والاستبعاد. تُقلَّص قيمة accessRestriction في كل منطقة لتقتصر على القواعد التي طابقت الشخص. تُدمج كاميرات المناطق الفرعية في المناطق الأصلية.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للمنشأة personID `string` (مطلوب) معرّف الشخص من جدول الأشخاص في الدوائر التلفزيونية المغلقةنقطة النهاية
GET /api/cctv/people/{club}/{personID}/allowed-zones
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/people/{club}/{personID}/allowed-zones \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع الحالة الحالية لمهمة دمج بما في ذلك النتائج لكل مصدر. استطلع نقطة النهاية هذه كل 3-5 ثوانٍ ما دامت الحالة IN_PROGRESS.
المعلمات
club `string` (مطلوب) mergeJobID `string` (مطلوب)نقطة النهاية
GET /api/cctv/people/:club/merge-status/:mergeJobID
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/people/:club/merge-status/:mergeJobID \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تبدأ دمجًا في الخلفية لعدة ملفات تعريف لأشخاص غير محددين في ملف واحد باقٍ. تستجيب فورًا بالرمز 202 مع قيمة mergeJobID. استطلع /merge-status/:mergeJobID لمعرفة التقدم.
المعلمات
club `string` (مطلوب) body `string` (مطلوب)نقطة النهاية
POST /api/cctv/people/:club/merge-unidentified
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/cctv/people/:club/merge-unidentified \
-H "x-api-key: YOUR_API_KEY"
إضافة وجه إلى مجموعة القائمة السوداء لمنشأة
المعلمات
facilityId `string` (مطلوب) المعرّف الداخلي للمنشأةنص الطلب
نقطة النهاية
POST /api/cctv/people/{facilityId}/blacklist
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/cctv/people/{facilityId}/blacklist \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
إدراج شخص محدد الهوية في منشأة أو تحديثه: تنشئ سجلًا جديدًا أو تحدّث سجلًا موجودًا. تمرّر الطلب إلى دالة Lambda المسماة upsertIdentifiedPerson، التي تكتب سجل الشخص وترفع أي صورة مقدَّمة إلى Wasabi وتعيد فهرسة الوجه في CompreFace. عندما تكون قيمة `isNewRecord` هي true (الافتراضي) تشغّل دالة Lambda فرع الإنشاء (cctvPeople.save) ويُنشأ `personID` إذا لم يُقدَّم. وعندما تكون قيمة `isNewRecord` هي false تشغّل دالة Lambda فرع التحديث (cctvPeople.update)، ويكون `personID` مطلوبًا ويجب أن يحدد سجلًا موجودًا.
المعلمات
facilityId `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/cctv/people/{facilityId}/identified
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/cctv/people/{facilityId}/identified \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
تحديث مجموعة حقول الشركاء الاختيارية التي تُزامَن في جدول الأشخاص في الدوائر التلفزيونية المغلقة لمنشأة.
المعلمات
facilityId `string` (مطلوب) المعرّف الداخلي للمنشأةنص الطلب
نقطة النهاية
PUT /api/cctv/people/{facilityId}/sync-fields
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/cctv/people/{facilityId}/sync-fields \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
تُرجع قائمة ببيانات الأشخاص في نادٍ
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
GET /api/cctv/people/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/people/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
البحث عن الأشخاص في منشأة باستخدام صورة وجه. تستدعي دالة Lambda المسماة imageFaceSearch في cctv-rekognition-api مع صورة base64 المرفوعة ومعرّف المنشأة من المسار. تُرجع التطابقات مرتبة بالإضافة إلى ملخص سمات DeepFace.
المعلمات
club `string` (مطلوب) معرّف المنشأة / النادي body `string` (مطلوب)نقطة النهاية
POST /api/cctv/people/{club}/search-by-face
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/cctv/people/{club}/search-by-face \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
البحث عن الأشخاص في منشأة باستخدام OpenSearch
المعلمات
facilityId `string` (مطلوب) المعرّف الداخلي للمنشأة المراد البحث فيها query `string` (اختياري) مصطلح البحث (مثل الاسم) page `string` (اختياري) رقم الصفحة (الافتراضي 1) limit `string` (اختياري) عدد النتائج لكل صفحة (الافتراضي 20، والحد الأقصى 100) filters `string` (اختياري) كائن عوامل تصفية مرمّز بتنسيق JSON (مثل {"membershipStatus":"active"}) sortBy `string` (اختياري) الحقل المراد الفرز حسبه (created أو lastName أو firstName أو membershipUpdatedOn). القيمة الافتراضية created. sortOrder `string` (اختياري) اتجاه الفرز (asc أو desc). القيمة الافتراضية desc.نقطة النهاية
GET /api/cctv/search/people/:facilityId
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/search/people/:facilityId \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحدّث عناصر اكتشاف الوجه بقيمة personID جديدة وتربط سجلات rekognition
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه. body `string` (مطلوب) كائن JSON لكتلة التهيئة الجديدة المراد إضافتها إلى النظام.نقطة النهاية
POST /api/cctv/people/:club/validate
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/cctv/people/:club/validate \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع كائنًا بجميع عوامل التصفية المتاحة لبيانات تسجيلات الدوائر التلفزيونية المغلقة في نادٍ
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
GET /api/cctv/recordings/filters/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/recordings/filters/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
بث التسجيل.
نقطة النهاية
GET /api/cctv/recordings/:club/:dir/:filename
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/recordings/:club/:dir/:filename \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحديث معلومات التسجيل.
نقطة النهاية
PUT /api/cctv/recordings/:club/:dir/:filename
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/cctv/recordings/:club/:dir/:filename \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع ملخصًا لبيانات تسجيلات الدوائر التلفزيونية المغلقة في نادٍ
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
GET /api/cctv/recordings/:club/summary
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/recordings/:club/summary \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع قائمة ببيانات تسجيلات الدوائر التلفزيونية المغلقة في نادٍ بناءً على نطاق نسبةً إلى الوقت الحالي
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
GET /api/cctv/recordings/:club/timeline
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/recordings/:club/timeline \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع قائمة ببيانات تسجيلات الدوائر التلفزيونية المغلقة في نادٍ
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
GET /api/cctv/recordings/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/recordings/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُحذف التسجيلات تلقائيًا خلال فترة محددة، استخدم هذه الوظيفة للاحتفاظ بالتسجيلات
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
POST /api/cctv/recordings/:club/:action
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/cctv/recordings/:club/:action \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
البحث في لقطات التقارير لمنشأة ضمن نطاق تاريخ
المعلمات
facilityId `string` (مطلوب) المعرّف الداخلي للمنشأة startDate `string` (مطلوب) عامل تصفية تاريخ البدء (YYYY-MM-DD) endDate `string` (مطلوب) عامل تصفية تاريخ الانتهاء (YYYY-MM-DD) deviceIds `string` (اختياري) قائمة بمعرّفات الكاميرات أو الأجهزة مفصولة بفواصل للتصفية حسبها view `string` (اختياري) عرض تقرير بديل لحسابه (يُمرَّر إلى دالة Lambda الخاصة بالتقارير)نقطة النهاية
GET /api/cctv/reports/search-report-snapshots/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/reports/search-report-snapshots/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
بحث متجهي في وسائط الدوائر التلفزيونية المغلقة المفهرسة لمنشأة. تستجيب بتدفق text/event-stream يُرحَّل من دالة Lambda المسماة searchAnything، كي يتمكن العميل من عرض التقدم بينما تحمّل حاوية باردة المُرمِّز. الأحداث هي `status`، ثم إما `result` أو `error`. هناك ثلاث طرق للسؤال، اثنتان منها بهذا الفعل. أرسل `query` للبحث بنص حر. أرسل `seedIndex` + `seedKey` للبحث بمثال، أي "المزيد مثل هذا"، باستخدام متجه صف موجود بالفعل في الفهرس، وهي الطريقة التي تجد بها المزيد من نتيجة ينظر إليها المستخدم. للبحث بصورة لدى المستخدم، أرسل البايتات بالطريقة `POST` إلى المسار نفسه بدلًا من ذلك. أرسل كلمات مع صورة لتضييق إحداهما بالأخرى: **النص يصفّي، والصورة ترتّب**. يأتي المرشحون من البذرة، وتحدد الكلمات أيهم يبقى، ويحدد التشابه البصري الترتيب، لذا تظل النتائج شبيهة بالصورة وتستبعد الكلمات ما لا يطابقها. لا يُدمج الاثنان أبدًا في متجه واحد، ولهذا تبقى قيمة `queryKind` هي `similar` في البحث المركّب؛ ووجود `query` في النتيجة هو ما يخبرك بأنه طُبِّق تصفية نصية. توقّع أن تُرجع عمليات البحث المركّبة نتائج فارغة كثيرًا، وتعامل مع ذلك كنتيجة مستقلة: يحسب `perIndex.
المعلمات
facilityId `string` (مطلوب) المعرّف الداخلي للمنشأة المراد البحث فيها query `string` (اختياري) وصف بنص حر لما يجب البحث عنه. مطلوب ما لم تُرسَل warm=1 أو بذرة. عند دمجه مع بذرة، لا يعود هو ما يُرتَّب بل يصبح عامل تصفية على مرشحي البذرة، ويستبعد من تقل درجتهم النصية عن الحد الأدنى للصلة في الفهرس. seedIndex `string` (اختياري) البحث بمثال بدلًا من النص: الفهرس الذي يوجد فيه صف البذرة (person-crops أو recording-frames أو timelapse-frames). هذا هو `index` للنتيجة التي نقر عليها المستخدم. يجب إرساله مع seedKey. seedKey `string` (اختياري) قيمة `key` لصف البذرة، مأخوذة حرفيًا من النتيجة. تُستبعد البذرة من نتائجها الخاصة، وفي حالة التسجيل يعني ذلك المقطع بأكمله، لأن إطاراته الأخرى تفصل بينها 2s وهي شبه متطابقة. seedFrameId `string` (اختياري) مطلوب عندما تكون قيمة seedIndex هي recording-frames: يخزّن ذلك الفهرس صفًا واحدًا لكل إطار مأخوذ كعينة، وتتشارك جميعها مفتاح المقطع، لذا يحدد المفتاح وحده مقطعًا وليس لحظة. أرسل قيمة `frameId` للنتيجة. لا تحتوي الصفوف الأقدم على هذه القيمة، فأرسل seedOffsetMs بدلًا من ذلك. seedOffsetMs `string` (اختياري) معرّف إطار بديل لبذور recording-frames التي يسبق صفها ظهور `frame_id`. أرسل قيمة `offsetMs` للنتيجة. يُتجاهل عند تقديم seedFrameId. warm `string` (اختياري) تهيئة حاوية Lambda مسبقًا دون إجراء بحث. استدعِ هذا عند تحميل الصفحة. warmTarget `string` (اختياري) المُرمِّز الذي يحمّله `warm`: `text` (الافتراضي) أو `image` أو `both`. يبلغ حجم برج الرؤية 355 MB مقابل 283 MB لبرج النص، لذا تكون تهيئته المسبقة اختيارية؛ اطلب `image` فقط بعد أن يجهّز المستخدم صورة فعلًا، وليس عند تحميل الصفحة. index `string` (اختياري) مجموعات البيانات المراد البحث فيها مفصولة بفواصل: person-crops وrecording-frames وtimelapse-frames. تُدمج النتائج في قائمة واحدة مرتبة حسب الدرجة. يُبحث في الثلاث افتراضيًا؛ مرّر قائمة صريحة لتضييق البحث. تغطي timelapse-frames الكاميرات التي لا تسجّل شيئًا وتنتج إطارًا واحدًا في الدقيقة فقط، ولم يُعايَر حدها الأدنى للصلة بعد. model `string` (اختياري) المُرمِّز المستخدم في الاستعلام. يجب أن يطابق المُرمِّز الذي فُهرست به مجموعة البيانات. limit `string` (اختياري) عدد النتائج المراد إرجاعها لكل فهرس (الافتراضي 50، والحد الأقصى 100)، وليس إجماليًا، لذا قد يُرجع البحث في الفهارس الثلاثة ما يصل إلى ثلاثة أضعاف هذا العدد. بالنسبة إلى التسجيلات، يُحتسب عدد المقاطع وليس الإطارات المطابقة. from `string` (اختياري) مطابقة الوسائط الملتقطة في هذا الوقت أو بعده فقط، بالمللي ثانية منذ بداية الحقبة. لاحظ أن هذا هو وقت الالتقاط وليس وقت الرفع. to `string` (اختياري) مطابقة الوسائط الملتقطة قبل هذا الوقت فقط (غير شامل)، بالمللي ثانية منذ بداية الحقبة. cameraId `string` (اختياري) قيم balenaUUID للكاميرات مفصولة بفواصل لتضييق البحث بها، وهي الحقل `balenaUUID` لكل إدخال تُرجعه /api/cctv/recordings/filters/:club. هذا هو عامل تصفية الكاميرا المفضّل: يخزّن كل فهرس هذه القيمة نفسها، لذا يضيّق عامل تصفية واحد جميع الفهارس. لاحظ أن الصور المقتطعة التي نجح ربطها باكتشاف الوجه هي وحدها التي تحمل هذه القيمة (~1% حاليًا)، لذا سيُرجع تضييق الصور المقتطعة حسب الكاميرا نتائج قليلة أو لا شيء حتى يُشغَّل الإكمال التكميلي للصور المقتطعة؛ أما التسجيلات فمكتملة البيانات وتُصفّى بدقة. camera `string` (اختياري) أسماء الكاميرات مفصولة بفواصل لتضييق البحث بها. تقتصر فعليًا على التسجيلات: يخزّن person-crops اسم كاميرا فارغًا في كل صف، لذا تستبعد أي قيمة هنا جميع الصور المقتطعة. فضّل cameraId. cameraGroup `string` (اختياري) مجموعات الكاميرات مفصولة بفواصل لتضييق البحث بها. مملوءة في جميع التسجيلات لكن في ~1% فقط من الصور المقتطعة، للسبب نفسه المذكور في cameraId. minScore `string` (اختياري) تجاوز الحد الأدنى لتشابه جيب التمام لكل فهرس الذي يستبعد الضوضاء. احذفه في بيئة الإنتاج؛ إذ يحمل كل فهرس قيمة افتراضية معايَرة (وقيمة منفصلة غير معايَرة لعمليات البحث بالبذرة). مرّر 0 لرؤية أقرب الجيران دون تصفية عند تصحيح أخطاء الصلة.نقطة النهاية
GET /api/cctv/search/anything/:facilityId
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/search/anything/:facilityId \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
البحث بصورة لدى المستخدم، بدلًا من الكلمات أو من نتيجة معروضة بالفعل على الشاشة. مطابقة لطريقة GET في كل الجوانب الأخرى (معلمات الاستعلام نفسها وتدفق الأحداث نفسه وشكل النتيجة نفسه)، لذا لا يوثّق هذا إلا ما يختلف. أرسل **بايتات الملف الأصلية** كنص الطلب مع Content-Type من نوع `image/*`. لا تغيّر حجمها أو تقتطعها أو تعيد ترميزها في المتصفح أولًا: يطابق الخادم عملية تغيير حجم محددة جدًا (ضغط إلى 256x256 بنواة ثنائية الخطية مع تنعيم الحواف) بُنيت بها المتجهات المفهرسة، بينما يستخدم تغيير الحجم في canvas طريقة مختلفة. بالقياس، يؤدي هذا الاستبدال إلى ابتعاد بنحو 0.93 في تشابه جيب التمام عن الإجابة الصحيحة، وهو أبعد من الفرق بين صورتين مختلفتين فعلًا، لذا تعود النتائج مرتبة بشكل يبدو معقولًا لكنه خاطئ، دون أي خطأ. الحد الأقصى 4 MB، وهو قيد في النقل وليس في الجودة: تنتقل البايتات داخل حمولة استدعاء Lambda التي يبلغ حدها الأقصى 6 MB، ويزيد ترميز base64 حجمها بمقدار الثلث. تُحتسب درجات النتائج بالمقارنة بين صورة وصورة، لذا تكون قيمة `queryKind` هي `image` وتكون الدرجات على المقياس المرتفع نفسه للبحث بالبذرة، ولا يمكن مقارنتها أبدًا بدرجات النص. توقّع أن تكون *أقل* قليلًا من بحث مكافئ بالبذرة: فمتجه البذرة كتبه الجهاز نفسه، بينما يُعاد ترميز الصورة المرفوعة هنا بمحرك مختلف، ما يضعها على بُعد بضعة أجزاء من مئة من الموضع الذي كان الجهاز سيضعها فيه. بالقياس، تكون النتائج متساوية الجودة رغم ذلك؛ لكنها ببساطة ليست المجموعة نفسها تمامًا. تؤدي إضافة `query` إلى تصفية النتائج بتلك الكلمات، تمامًا كما في حالة البذرة. يُرفض إرسال بذرة *و*صورة معًا: فكلاهما هو ما يُرتَّب، لذا لا معنى للجمع بينهما. هذا هو أعلى الطلبات تكلفةً التي تخدمها نقطة النهاية. تحمّل الصورة المرفوعة برج الرؤية، وتحمّل إضافة الكلمات برج النص أيضًا، وكلاهما على حاوية باردة. يُخرج استدعاء `warm=1&warmTarget=image` بمجرد أن يجهّز المستخدم صورة ذلك من المسار الحرج.
المعلمات
facilityId `string` (مطلوب) المعرّف الداخلي للمنشأة المراد البحث فيها body `string` (مطلوب) بايتات الصورة الأولية دون تعديل، بحد أقصى 4 MB query `string` (اختياري) كلمات اختيارية لتضييق نتائج الصورة بها، مع استبعاد التطابقات التي تقل درجتها النصية عن الحد الأدنى للصلة في الفهرس.نقطة النهاية
POST /api/cctv/search/anything/:facilityId
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/cctv/search/anything/:facilityId \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع تفاصيل التخزين وبيانات المقاييس الأخرى للدوائر التلفزيونية المغلقة في النادي
نقطة النهاية
GET /api/cctv/storage-details/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/storage-details/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع قائمة بسجلات رفع التصوير المتقطع (Timelapse) في نادٍ
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
GET /api/cctv/timelapse/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/timelapse/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد إجراءات المستخدمين المنفّذة على التسجيلات في الواجهة الأمامية أو واجهة المستخدم للدوائر التلفزيونية المغلقة
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
GET /api/cctv/ui/actions/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/ui/actions/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تسجيل إجراء مستخدم منفّذ على التسجيلات في الواجهة الأمامية أو واجهة المستخدم للدوائر التلفزيونية المغلقة
المعلمات
body `string` (مطلوب) كائن JSON لكتلة التهيئة الجديدة المراد إضافتها إلى النظام.نقطة النهاية
POST /api/cctv/ui/actions/:club
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/cctv/ui/actions/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على الرمز المميز للمستخدم للواجهة الأمامية أو واجهة المستخدم للدوائر التلفزيونية المغلقة
المعلمات
club `string` (مطلوب) معرّف النادينقطة النهاية
GET /api/cctv/ui/token/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/ui/token/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إنشاء رمز مميز للوصول المؤقت أو وصول الضيوف
المعلمات
club `string` (مطلوب) المعرّف الفريد للنادي. body `string` (مطلوب) كائن JSON لتفاصيل الرمز المميز المراد إصداره.نقطة النهاية
POST /api/cctv/token/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/cctv/token/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{
"accessID": "00000000-0000-0000-0000-000000000014"
}
تُرجع قائمة بسجلات الرموز المميزة للوصول المؤقت أو وصول الضيوف
المعلمات
club `string` (مطلوب) المعرّف الفريد للنادي.نقطة النهاية
GET /api/cctv/token/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/cctv/token/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على رمز الوصول عبر معرّف الوصول
المعلمات
accessID `string` (مطلوب) معرّف سجل الرمز في قاعدة البيانات.نقطة النهاية
POST /guest/cctv/token/:accessID
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/guest/cctv/token/:accessID \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
حذف ساعات الوصول إلى المنشأة
المعلمات
facilityId `string` (مطلوب) body `object` (مطلوب) كائن JSON لساعات الوصول الجديدة.نقطة النهاية
DELETE /api/ai/computer-vision/access-hours/:facilityId
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/ai/computer-vision/access-hours/:facilityId \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع قائمة بساعات الوصول إلى المنشأة
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
GET /api/ai/computer-vision/access-hours/:facilityId
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/ai/computer-vision/access-hours/:facilityId \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحدّث ساعات الوصول إلى المنشأة أو تنشئها
المعلمات
facilityId `string` (مطلوب) body `object` (مطلوب) كائن JSON لساعات الوصول الجديدة.نقطة النهاية
POST /api/ai/computer-vision/access-hours/:facilityId
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/ai/computer-vision/access-hours/:facilityId \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
حذف منطقة وصول في المنشأة
المعلمات
facilityId `string` (مطلوب) body `object` (مطلوب) كائن JSON لمنطقة الوصول الجديدة.نقطة النهاية
DELETE /api/ai/computer-vision/access-zones/:facilityId
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/ai/computer-vision/access-zones/:facilityId \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع قائمة بمناطق الوصول في المنشأة
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
GET /api/ai/computer-vision/access-zones/:facilityId
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/ai/computer-vision/access-zones/:facilityId \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحدّث منطقة وصول في المنشأة أو تنشئها
المعلمات
facilityId `string` (مطلوب) body `object` (مطلوب) كائن JSON لمنطقة الوصول الجديدة.نقطة النهاية
POST /api/ai/computer-vision/access-zones/:facilityId
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/ai/computer-vision/access-zones/:facilityId \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد اتحاد جميع معرّفات وحدات الإدارة النمطية عبر العلامات التجارية والمنشآت لمنظمة، معبّأة ككائنات وحدات نمطية.
المعلمات
organisationId `string` (مطلوب) معرّف المنظمةنقطة النهاية
GET /api/organisations/{organisationId}/admin-modules
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/organisations/{organisationId}/admin-modules \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد قائمة بجميع المنظمات
المعلمات
includeBrands `string` (اختياري) تضمين العلامات التجارية المرتبطة بالمنظمة includeFacilities `string` (اختياري) تضمين المنشآت المرتبطة بالمنظمة includeRegions `string` (اختياري) تضمين المناطق المرتبطة بالمنظمةنقطة النهاية
GET /api/organisations
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/organisations \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
أداة مساعدة بسيطة بالذكاء الاصطناعي لتحليل محتوى تذكرة الدعم وإنشاء اقتراحات بناءً على الموضوعات المتاحة، إضافةً إلى موضوعات بحث Algolia المقترحة...
المعلمات
messageBody `string` (مطلوب) نص الرسالة المراد إرسالها topicData `string` (مطلوب) كائن أو مصفوفة JSON لبيانات topicData المُرجَعة من osTicket (نظام التذاكر والدعم) facilityId `string` (اختياري) المعرّف الداخلي للنادي اللازم لتحديد فهرس Algolia الصحيح للبحث فيه.نقطة النهاية
PUT /api/ai/helpers/analyse-support-ticket
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/ai/helpers/analyse-support-ticket \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
واجهة API بسيطة لإنشاء الصور
المعلمات
type `string` (مطلوب) نوع الصورة المراد إنشاؤها name `string` (مطلوب) اسم الصورة maxSize `string` (اختياري) الحد الأقصى الاختياري لحجم الاستجابة، مثل 200KB أو 1MB أو عدد بايتات مجرد. تُصغَّر الصورة أو تُضغط لتلائمه.نقطة النهاية
PUT /api/ai/images/:type/:name
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/ai/images/:type/:name \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
استعلام LLM بسيط
نقطة نهاية خفيفة لاستعلامات LLM البسيطة عديمة الحالة. تستخدم نموذجًا منخفض التكلفة لا يعتمد على الاستدلال المنطقي (gpt-4o-mini) مع حدود صارمة للرموز. لا سجل محادثة، ولا أدوات، ولا بث متدفق: مطالبة تدخل ونص يخرج فقط.
نص الطلب
نقطة النهاية
POST /api/ai/llm/query
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/ai/llm/query \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
تُرجع تهيئة Algolia بما في ذلك اسم الفهرس ومعرّف التطبيق ومفتاح API.
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
GET /api/facilities/{facilityId}/algolia/config
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/algolia/config \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تهيّئ فهرس مواد الطباعة التسويقية في Algolia
المعلمات
organisationId `string` (مطلوب)نقطة النهاية
PUT /api/algolia/index
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/algolia/index \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
البحث عن مواد الطباعة التسويقية
نص الطلب
نقطة النهاية
POST /algolia/search-marketing-print
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/algolia/search-marketing-print \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
البحث عن مواد الطباعة التسويقية
المعلمات
club `string` (اختياري) معرّف النادي searchTerms `string` (اختياري) مصطلحات البحث algoliaArgs `object` (اختياري) وسيطات بحث Algolia إضافيةنقطة النهاية
GET /algolia/search-marketing-print
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/algolia/search-marketing-print \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحديث مجمّع لكائنات الطباعة التسويقية لنادٍ محدد
نقطة النهاية
POST /algolia/bulk-update-marketing-print
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/algolia/bulk-update-marketing-print \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تجلب أصول الطباعة التسويقية من Algolia.
المعلمات
organisationId `string` (مطلوب) search `string` (اختياري) limit `string` (اختياري) brand `string` (اختياري) tag `string` (اختياري)نقطة النهاية
GET /api/algolia/marketing/assets
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/algolia/marketing/assets \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تهيّئ فهرس مواد الطباعة التسويقية في Algolia بتهيئة المنشأة.
المعلمات
organisationId `string` (مطلوب)نقطة النهاية
POST /api/algolia/marketing/assets
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/algolia/marketing/assets \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تجري بحثًا في فهرس Algolia محدد بناءً على مصطلحات البحث و/أو النادي و/أو الإعدادات المحلية. يمكن تخصيص البحث بشكل أكبر باستخدام وسيطات Algolia إضافية.
المعلمات
searchTerms `string` (مطلوب) المصطلحات المراد البحث عنها في فهرس Algolia. club `string` (اختياري) المعرّف الداخلي للنادي الذي يقدّم الطلب. عند تحديده، تُصفّى نتائج البحث بناءً على المنطقة المرتبطة بالنادي. locale `string` (اختياري) الإعدادات المحلية المستخدمة لتحديد المنطقة إذا لم يُحدَّد نادٍ. مشتقة من navigator.languages. algoliaArgs `string` (اختياري) وسيطات إضافية أو مخصصة لتمريرها إلى طلب بحث Algolia.نقطة النهاية
POST /api/algolia/search-wiki
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/algolia/search-wiki \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تسرد جميع الإعلانات
نقطة النهاية
GET /api/announcements/list
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/announcements/list \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
ترفع أصلًا إلى حاوية S3 عامة (عبر واجهة API للرفع)، والتي ستعالج الملف لاحقًا وتحسّنه وتنشئ صورًا مصغّرة وغير ذلك. *ملاحظة: ستكون الأصول متاحة للعامة*
المعلمات
file `string` (اختياري) اسم الملف أو الأصل المراد رفعه.نقطة النهاية
POST /api/asset-upload
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/asset-upload \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع حالة الرفع حسب قيمة uuid المحددة لسجل الرفع
المعلمات
uuid `string` (مطلوب) UUID لسجل الرفعنقطة النهاية
GET /api/asset-upload/:uuid
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/asset-upload/:uuid \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إرسال أمر إلى Sonos في النادي
المعلمات
body `object` (مطلوب) كائن JSON للأمر والمدخلات المراد إرسالها إلى Sonos.نقطة النهاية
PUT /api/audio-control/command/:club
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/audio-control/command/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
استرداد تهيئة الواجهة الأمامية للتحكم في الصوت
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
GET /api/audio-control/config/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/audio-control/config/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تغيير تهيئة الواجهة الأمامية للتحكم في الصوت
المعلمات
body `object` (مطلوب) كائن JSON لكتلة التهيئة الجديدة المراد إضافتها إلى النظام.نقطة النهاية
PUT /api/audio-control/config/:club/:section
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/audio-control/config/:club/:section \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تسترد إعدادات العلامة التجارية لمنطقة محددة
المعلمات
brandId `string` (اختياري) معرّف العلامة التجارية regionCode `string` (اختياري) رمز ISO للمنطقة المراد استرداد إعداداتهانقطة النهاية
GET /api/brands/{brandId}/regions/{regionCode}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/regions/{regionCode} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحدّث عدة إعدادات للعلامة التجارية لمنطقة محددة
المعلمات
brandId `string` (اختياري) معرّف العلامة التجارية المراد تحديثها regionCode `string` (اختياري) رمز ISO للمنطقة المراد تحديث إعداداتها acceptFreeTrialBookingsVisibility `string` (اختياري) customTrackingCodeVisibility `string` (اختياري) displayDataSources `string` (اختياري) displayDefaultDataSource `string` (اختياري) displayDefaultUI `string` (اختياري) displayUIOptions `string` (اختياري) defaultAboutBusiness `string` (اختياري) defaultAboutBusinessFacebook `string` (اختياري) facilityCoverImage `string` (اختياري) digitalProfileSettingsVisibility `string` (اختياري) facilityHoursVisibility `string` (اختياري) facilityLocationVisibility `string` (اختياري) facilityPaymentMethods `string` (اختياري) facilityPrimaryLogo `string` (اختياري) facilityStatusVisibility `string` (اختياري) landingPagesVisibility `string` (اختياري) lineChatIntegrationVisibility `string` (اختياري) whatsAppIntegrationVisibility `string` (اختياري) defaultWhatsAppMessage `string` (اختياري) socialUrlsVisibility `string` (اختياري) yextApiKey `string` (اختياري) مفتاح API الذي يستخدمه تكامل Yext لهذه العلامة التجارية والمنطقة. لا يُرجَع إليه إلا عندما تكون قيمة `directorySyncMode` هي `yext`. directorySyncMode `string` (اختياري) الواجهة الخلفية للمزامنة التي يجب تشغيلها للمنشآت التابعة لهذه العلامة التجارية والمنطقة. القيمة الافتراضية عند غيابها هي `yext` للتوافق مع العلامات التجارية التي سبقت طرح Directory Publishers. websiteUrl `string` (اختياري) androidAppUrl `string` (اختياري) iosAppUrl `string` (اختياري) featuredMessageDescription `string` (اختياري) yextCategoryIds `string` (اختياري) مفتاح تخزين قديم: هذه في الواقع معرّفات فئات Google Business Profile (مثل gcid:gym). تعود البادئة "yext" إلى ما قبل إيقاف Yext؛ وقد أُبقي عليها للتوافق مع صفوف قاعدة البيانات الحالية. customInputFields `string` (اختياري) customInputFieldsToRemove `string` (اختياري)نقطة النهاية
PUT /api/brands/{brandId}/regions/{regionCode}
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/brands/{brandId}/regions/{regionCode} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تسترد إعدادات العلامة التجارية لمنشأة محددة
المعلمات
facilityId `string` (اختياري) معرّف المنشأة المراد استرداد إعدادات العلامة التجارية لهانقطة النهاية
GET /api/facilities/{facilityId}/brand-settings
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/brand-settings \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تنشئ علامة تجارية جديدة
المعلمات
name `string` (مطلوب) اسم العلامة التجارية organisationId `string` (مطلوب) معرّف المنظمة التي تنتمي إليها العلامة التجارية redirectDashboard `string` (اختياري) عنوان URL المراد إعادة التوجيه إليه بعد تسجيل الدخول بدلًا من لوحة القيادة الافتراضيةنقطة النهاية
POST /api/brands
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/brands \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع قائمة بجميع العلامات التجارية
نقطة النهاية
GET /api/brands
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/brands \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع كائن العلامة التجارية
المعلمات
brandId `string` (مطلوب) معرّف العلامة التجارية المراد استردادها includeOrganisation `boolean` (اختياري) ما إذا كان يجب تضمين بيانات المنظمة في الاستجابةنقطة النهاية
GET /api/brands/{brandId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحدّث علامة تجارية حسب المعرّف
المعلمات
brandId `string` (اختياري) معرّف العلامة التجارية المراد تحديثها name `string` (مطلوب) اسم العلامة التجارية brandOrganisationId `string` (اختياري) معرّف المنظمة التي تنتمي إليها العلامة التجارية redirectDashboard `string` (اختياري) عنوان URL المراد إعادة التوجيه إليه بعد تسجيل الدخول بدلًا من لوحة القيادة الافتراضية yextApiKey `string` (اختياري) مفتاح API المستخدم للوصول إلى Yext API لهذه العلامة التجارية customMenuLayout `object` (اختياري) شجرة تخطيط القائمة الجانبية لكل علامة تجارية (أقسام / مجموعات / عناصر مع مراجع إلى وحدات النظام أو عناوين URL مخصصة). لا يمكن ضبطها إلا بواسطة مسؤول المنظمة التابعة لها هذه العلامة التجارية.نقطة النهاية
PUT /api/brands/{brandId}
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/brands/{brandId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد المنشآت لعلامة تجارية
تُرجع قائمة مختصرة بالمنشآت (المعرّف والاسم ورمز ISO للمنطقة) التابعة للعلامة التجارية. تُستخدم لملء أدوات اختيار استهداف المنشآت في تهيئة العلامة التجارية.
المعلمات
brandId `string` (مطلوب) معرّف العلامة التجارية المراد سرد منشآتهانقطة النهاية
GET /api/brands/{brandId}/facilities
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/facilities \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع قائمة بجميع العلامات التجارية المرتبطة بمنظمة النادي.
نقطة النهاية
GET /api/clubs/{club}/brands
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/brands \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد قائمة بجميع أنواع التقويمات
نقطة النهاية
GET /api/programs/calendars/calendar-types
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/programs/calendars/calendar-types \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع أصل KYC لنادٍ.
المعلمات
clubId `string` (مطلوب) معرّف النادي. key `string` (مطلوب) مفتاح أصل KYC.نقطة النهاية
GET /api/clubs/{clubId}/kyc-assets/{key}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubId}/kyc-assets/{key} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع معلومات KYC للنادي.
نقطة النهاية
GET /api/clubs/{clubId}/kyc
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubId}/kyc \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحدّث معلومات KYC للنادي.
المعلمات
clubId `string` (مطلوب) معرّف النادي المراد تحديثه. body `object` (مطلوب)نقطة النهاية
PUT /api/clubs/{clubId}/kyc
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubId}/kyc \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
ترفع أصل KYC لنادٍ.
المعلمات
clubId `string` (مطلوب) معرّف النادي. file `string` (مطلوب) الملف المراد رفعه.نقطة النهاية
POST /api/clubs/{clubId}/kyc-assets
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubId}/kyc-assets \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع إعدادات تفضيلات النادي.
نقطة النهاية
GET /api/club/preferences/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/club/preferences/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تنشئ إدخال تفضيلات النادي أو تحدّثه.
نص الطلب
نقطة النهاية
POST /api/club/preferences/:club
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/club/preferences/:club \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
تُرجع قائمة بالأعضاء مع الاتفاقية.
نقطة النهاية
GET /api/clubpass/user/email/exist/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubpass/user/email/exist/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع قائمة بالأعضاء مع الاتفاقية.
نقطة النهاية
GET /api/clubpass/user/phone/exist/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubpass/user/phone/exist/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع قائمة بالمستخدمين التابعين للنادي المحدد
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليهنقطة النهاية
GET /api/clubs/{club}/members
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/members \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع ما إذا كان النادي مفتوحًا في التاريخ المحدد.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه. date `string` (مطلوب) التاريخ المراد التحقق منه بتنسيق unixنقطة النهاية
GET /api/club-busy-hours/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/club-busy-hours/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع جميع البيانات الوصفية للنادي التي تُعرض على مواقع Example Club الإلكترونية.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
GET /api/clubs/clubpage/clubdata/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/clubpage/clubdata/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحدّث البيانات الوصفية لنادٍ ببيانات جديدة مقدَّمة من الواجهة الأمامية. يُحتفظ بالحقول غير الموجودة في نص الطلب (لا SET ولا REMOVE). تُمسح الحقول المرسلة بقيمة `null` أو سلسلة فارغة. مرّر `updateAll: false` لاستخدام مسار الدمج الجزئي المخصص؛ وفي كلتا الحالتين، لا يحتاج المستدعون أبدًا إلى إرسال حقول لا يملكونها.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه. body `string` (مطلوب) كائن JSON لبيانات النادي التي تريد تحديثها.نقطة النهاية
POST /api/clubs/clubpage/updateclub/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/clubs/clubpage/updateclub/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إضافة سجل تتبع مخصص جديد
المعلمات
club `string` (مطلوب) معرّف النادي body `string` (مطلوب) مصفوفة من عناصر التتبع المخصص.نقطة النهاية
POST /api/clubs/{club}/customtracking
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/clubs/{club}/customtracking \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع التتبع المخصص لنادٍ محدد
نقطة النهاية
GET /api/clubs/customtracking/:clubID
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/customtracking/:clubID \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحديث إدخالات التتبع المخصص
المعلمات
club `string` (مطلوب) معرّف النادي body `string` (مطلوب) كائن JSON لبيانات النادي التي تريد تحديثها.نقطة النهاية
POST /api/clubs/{club}/customtracking/update
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/clubs/{club}/customtracking/update \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع صورة واجهة المتجر الافتراضية لنادٍ.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
GET /api/clubs/{club}/default-shop-front
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/default-shop-front \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد الأبواب المتاحة في المنشأة
المعلمات
body `object` (مطلوب) كائن JSON لبيانات النادي التي تريد تحديثها.نقطة النهاية
POST /api/clubs/integrations/doors/:facilityId
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/clubs/integrations/doors/:facilityId \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
فتح قفل باب محدد في المنشأة
المعلمات
body `object` (مطلوب) كائن JSON لبيانات النادي التي تريد تحديثها.نقطة النهاية
POST /api/clubs/integrations/doors/unlock
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/clubs/integrations/doors/unlock \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع جميع عمليات التكامل وتفاصيل التهيئة للنادي المحدد.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
GET /api/clubs/integrations/list/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/integrations/list/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحدّث البيانات الوصفية لنادٍ ببيانات جديدة مقدَّمة من الواجهة الأمامية.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه. body `object` (مطلوب) كائن JSON لبيانات النادي التي تريد تحديثها.نقطة النهاية
POST /api/clubs/integrations/update/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/clubs/integrations/update/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع قيمة منطقية تحدد ما إذا كان النادي في دولة أوروبية أم لا
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه. date `string` (مطلوب) التاريخ المراد التحقق منه بتنسيق unixنقطة النهاية
GET /api/clubs/is-eu/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/is-eu/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع قائمة عامة بجميع الأندية في قاعدة بياناتنا.
نقطة النهاية
GET /api/clubs/listclubs
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/listclubs \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع ما إذا كان النادي مفتوحًا في التاريخ المحدد.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه. date `string` (مطلوب) التاريخ المراد التحقق منه بتنسيق unixنقطة النهاية
GET /api/clubs/{club}/open-on/{date}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/open-on/{date} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على مراجعات النادي من DynamoDB.
المعلمات
club `string` (مطلوب) معرّف النادينقطة النهاية
GET /api/clubs/{club}/reviews
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/reviews \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على إعدادات مراجعات النادي من DynamoDB.
المعلمات
facilityId `string` (مطلوب) معرّف المنشأةنقطة النهاية
GET /api/clubs/{club}/reviews-settings
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/reviews-settings \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحديث إعدادات مراجعات النادي في DynamoDB.
المعلمات
club `string` (مطلوب) معرّف النادينقطة النهاية
PUT /api/clubs/{club}/reviews-settings
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews-settings \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إعادة تمكين النشر التلقائي في إعدادات المراجعات.
المعلمات
club `string` (مطلوب) معرّف النادينقطة النهاية
PUT /api/clubs/{club}/reviews/publish-recent-reviews
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/publish-recent-reviews \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تنشر مراجعة
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه. review `string` (مطلوب) المعرّف الداخلي للمراجعة التي تريد نشرها.نقطة النهاية
PUT /api/clubs/{club}/reviews/{review}/publish
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/{review}/publish \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إعادة تمكين النشر التلقائي في إعدادات المراجعات.
المعلمات
club `string` (مطلوب) معرّف النادينقطة النهاية
PUT /api/clubs/{club}/reviews-settings/re-enable-auto-publish
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews-settings/re-enable-auto-publish \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
نشر رد على مراجعة عبر الناشر الذي جاءت منه (Google وغيره).
المعلمات
club `string` (مطلوب) معرّف المنشأة reviewId `string` (مطلوب) معرّف المراجعة في PH (يُبحث عنه في الجدول club-social-reviews) body `string` (مطلوب)نقطة النهاية
POST /api/clubs/{club}/reviews/{reviewId}/respond
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/{reviewId}/respond \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تلغي نشر مراجعة
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه. review `string` (مطلوب) المعرّف الداخلي للمراجعة التي تريد إلغاء نشرها.نقطة النهاية
PUT /api/clubs/{club}/reviews/{review}/un-publish
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/{review}/un-publish \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع قائمة بالمالكين التابعين للنادي المحدد من قاعدة بيانات PH
المعلمات
clubID `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليهنقطة النهاية
GET /api/clubs/{clubID}/owners
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/owners \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع جميع خطط العضوية للمنشأة.
المعلمات
facilityId `string` (مطلوب) المعرّف الداخلي للمنشأةنقطة النهاية
GET /api/facilities/membership-plans/:facilityId
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/facilities/membership-plans/:facilityId \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحدّث سجل خطة عضوية.
المعلمات
facilityId `string` (مطلوب) المعرّف الداخلي للمنشأة body `object` (مطلوب) كائن JSON لبيانات خطة العضوية التي تريد تحديثها.نقطة النهاية
PUT /api/facilities/membership-plans/:facilityId
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/facilities/membership-plans/:facilityId \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إعادة تمكين النشر التلقائي في إعدادات المراجعات.
المعلمات
club `string` (مطلوب) معرّف النادينقطة النهاية
PUT /api/clubs/{club}/reviews/publish-recent-reviews
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews/publish-recent-reviews \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إعادة تمكين النشر التلقائي في إعدادات المراجعات.
المعلمات
club `string` (مطلوب) معرّف النادينقطة النهاية
PUT /api/clubs/{club}/reviews-settings/re-enable-auto-publish
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{club}/reviews-settings/re-enable-auto-publish \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع قائمة بجميع العملات المتاحة
نقطة النهاية
GET /api/currencies
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/currencies \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعرض الموقع الجغرافي باستخدام عنوان IP.
المعلمات
ip `string` (مطلوب) عنوان IP المراد البحث عنهنقطة النهاية
GET /api/geo/ip-location/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/geo/ip-location/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعرض الموقع الجغرافي للمستخدم الحالي بناءً على عنوان IP الخاص به.
نقطة النهاية
GET /api/geo/ip-current
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/geo/ip-current \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعرض عنوان IP العام للعميل مقدّم الطلب فقط (دون بحث عن الموقع الجغرافي ودون استدعاء API لجهة خارجية). يستخدمه تطبيق AI Agent لمقارنة عنوان IP العام للمتصفح بعنوان WAN IP الذي يبثّه الجهاز لاكتشاف وجودهما على الشبكة نفسها.
نقطة النهاية
GET /api/geo/client-ip
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/geo/client-ip \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
محلّل أرقام الهواتف.
المعلمات
body `string` (مطلوب) كائن JSON للرقم الذي تريد تحليله.نقطة النهاية
POST /api/phone/parser
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/phone/parser \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع جهاز الساعة الرئيسية
المعلمات
club_id `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد إضافة الجهاز تحته.نقطة النهاية
GET /api/clubs/{club_id}/smart-club/health-check/master-clock
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club_id}/smart-club/health-check/master-clock \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع جهاز Sonos الرئيسي
المعلمات
club_id `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد إضافة الجهاز تحته.نقطة النهاية
GET /api/clubs/{club_id}/smart-club/health-check/sonos-mqtt
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club_id}/smart-club/health-check/sonos-mqtt \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على إشعارات انخفاض بطارية Duress لنادٍ محدد.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
GET /api/clubs/{club}/smart-club/health-check/low-battery-duress
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/smart-club/health-check/low-battery-duress \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع بيانات تحليل الشبكة
المعلمات
club_id `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد إضافة الجهاز تحته.نقطة النهاية
GET /api/clubs/{club_id}/smart-club/health-check/network-analysis
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club_id}/smart-club/health-check/network-analysis \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إرسال إشعارات انخفاض بطارية Duress لنادٍ محدد.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
GET /api/clubs/{club}/smart-club/health-check/send-low-battery-duress-notifs
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club}/smart-club/health-check/send-low-battery-duress-notifs \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع بيانات اختبار سرعة الأجهزة لكل نوع جهاز
المعلمات
club_id `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد إضافة الجهاز تحته.نقطة النهاية
GET /api/clubs/{club_id}/smart-club/health-check/speed-test
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{club_id}/smart-club/health-check/speed-test \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على إحصاءات القوائم لمنشأة. يعرض إجماليات يومية مجمّعة عبر الناشرين افتراضيًا، أو ناشرًا واحدًا عند تقديم `publisherId`.
المعلمات
facilityId `string` (مطلوب) publisherId `string` (اختياري) startDate `string` (مطلوب) endDate `string` (مطلوب)نقطة النهاية
GET /api/facilities/{facilityId}/directory-insights
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/directory-insights \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على إحصاءات القوائم المجمّعة لعلامة تجارية عبر جميع الناشرين.
المعلمات
brandId `string` (مطلوب) startDate `string` (مطلوب) endDate `string` (مطلوب)نقطة النهاية
GET /api/brands/{brandId}/directory-insights
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/directory-insights \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
أهم كلمات البحث (مع التقسيم بين ما يتضمن العلامة التجارية وما لا يتضمنها) لمنشأة، ومصدرها حاليًا Google Business Profile.
المعلمات
facilityId `string` (مطلوب) publisherId `string` (اختياري) القيمة الافتراضية "google"، فـ Google هو الوحيد المدعوم حاليًا. startDate `string` (مطلوب) endDate `string` (مطلوب) limit `string` (اختياري)نقطة النهاية
GET /api/facilities/{facilityId}/directory-search-keywords
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/directory-search-keywords \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
أهم كلمات البحث لعلامة تجارية، مجمّعة عبر جميع المنشآت.
المعلمات
brandId `string` (مطلوب) startDate `string` (مطلوب) endDate `string` (مطلوب) limit `string` (اختياري)نقطة النهاية
GET /api/brands/{brandId}/directory-search-keywords
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/brands/{brandId}/directory-search-keywords \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد الأسئلة والأجوبة لمنشأة.
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
GET /api/facilities/{facilityId}/qna
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/qna \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الإجابة عن سؤال.
نقطة النهاية
POST /api/facilities/{facilityId}/qna/{questionId}/answer
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/facilities/{facilityId}/qna/{questionId}/answer \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
حذف إجابة.
نقطة النهاية
DELETE /api/facilities/{facilityId}/qna/{questionId}/answer/{answerId}
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/facilities/{facilityId}/qna/{questionId}/answer/{answerId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعرض الناشرين المفعّلين لمنظمة المنشأة، مع حالة اتصالهم.
المعلمات
facilityId `string` (مطلوب) organisationId `string` (مطلوب)نقطة النهاية
GET /api/facilities/{facilityId}/directory-publishers/resolved
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/directory-publishers/resolved \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على Access Policies لمنشأة
تُحوَّل إعدادات الوصول الحالية تلقائيًا إلى سياسات مطبَّقة مكافئة عند أول قراءة.
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
GET /api/door-access/policies/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
استبدال Access Policies باستخدام التحقق المتفائل من المراجعة
المعلمات
facilityId `string` (مطلوب)نص الطلب
نقطة النهاية
PUT /api/door-access/policies/{facilityId}
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
إنشاء Access Policy
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
POST /api/door-access/policies/{facilityId}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحديث Access Policy واحدة
المعلمات
facilityId `string` (مطلوب) policyId `string` (مطلوب)نقطة النهاية
PATCH /api/door-access/policies/{facilityId}/{policyId}
مثال على الطلب
curl -X PATCH https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
حذف Access Policy واحدة
المعلمات
facilityId `string` (مطلوب) policyId `string` (مطلوب) revision `integer` (مطلوب)نقطة النهاية
DELETE /api/door-access/policies/{facilityId}/{policyId}
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تكرار Access Policy بمعرّف ثابت جديد
المعلمات
facilityId `string` (مطلوب) policyId `string` (مطلوب)نقطة النهاية
POST /api/door-access/policies/{facilityId}/{policyId}/duplicate
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId}/duplicate \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
حساب المستخدمين والأبواب المتأثرين لجميع Access Policies
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
GET /api/door-access/policies/{facilityId}/impacts
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/impacts \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
حساب المستخدمين والأبواب المتأثرين بـ Access Policy
المعلمات
facilityId `string` (مطلوب) policyId `string` (مطلوب)نقطة النهاية
GET /api/door-access/policies/{facilityId}/{policyId}/impact
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/door-access/policies/{facilityId}/{policyId}/impact \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد وحدات التحكم بالأبواب في منشأة مع قواعد Door & Gate Access السارية عليها
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
GET /api/door-access/doors/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
حفظ التجاوزات الخاصة بكل باب والأيقونة وإعدادات الجهاز
واجهة كتابة واحدة لكل ما يعدّله تطبيق إدارة DGA على الباب: - `accessRulesOverride` / `geofenceOverride`: مرّر `null` للمسح والرجوع إلى الإعداد الافتراضي للمنشأة. - `icon`: مفتاح ثابت (راجع services/door-access/door-icons.js)؛ القيم غير المعروفة تعيد 400. - `holdTimeSeconds` (من 1 إلى 30)، و`maintenanceMode` (`off` / `force-open` / `force-closed`)، و`doorLocation` (نص حر، 64 حرفًا كحد أقصى)، و`playNotificationSoundOnRelayToggle` (قيمة منطقية)، و`autoUnlockSchedule` (شبكة نوافذ أسبوعية). كانت هذه حقولًا خاصة بـ Device Management فقط، لكن التطبيق يكتبها الآن مباشرةً حتى لا يضطر المسؤولون إلى مغادرة اللوحة الجانبية للباب لإجراء تغييرات الإعدادات اليومية. عند تعديل أي من حقول الجهاز، يرسل المسار أيضًا متغيرات بيئة Balena المطابقة (`RELAY_NOTIFICATION_SOUND`، `DOOR_MAINTENANCE_MODE`، `DOOR_AUTO_UNLOCK_SCHEDULE`) ويُطلق أمر MQTT `unlockUpdates` حتى يلتقط الجهاز الإعدادات الجديدة دون انتظار تحديث بيئة Balena التالي. يتم ذلك بأفضل جهد، إذ تعيد الاستجابة 200 حتى لو تعذّر الوصول إلى Balena مؤقتًا.
المعلمات
facilityId `string` (مطلوب) doorId `string` (مطلوب)نص الطلب
نقطة النهاية
PUT /api/door-access/doors/{facilityId}/{doorId}/override
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/override \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
فحص خفيف لحالة Balena لإشعار إعادة التحميل في اللوحة الجانبية للباب
تجلب اللوحة الجانبية في تطبيق DGA هذا الإجراء عند الحاجة عندما يفتح المسؤول بابًا، حتى تعرض النص المناسب "سيؤدي الحفظ إلى إعادة تحميل وحدة التحكم": الصيغة الافتراضية "بضع ثوانٍ"، أو الصيغة الأقوى "عدة دقائق" عندما يكون تحديث إصدار معلّقًا أيضًا. يعرض لقطة مسطّحة مستمدة من `balena.models.device.get()`. يفشل بلطف إلى `data: null` (بدلًا من إرجاع خطأ 5xx) حتى يؤدي انقطاع Balena إلى تبسيط نص الإشعار بدلًا من منع اللوحة الجانبية من الفتح.
المعلمات
facilityId `string` (مطلوب) doorId `string` (مطلوب)نقطة النهاية
GET /api/door-access/doors/{facilityId}/{doorId}/device-status
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/device-status \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تجاوز المسؤول: فتح قفل باب من التطبيق
يبدّل المرحّل لفترة قصيرة باستخدام قيمة `holdTimeSeconds` الحالية للباب، ويكتب صف تدقيق `admin-override` في ph-door-app-access-events حتى يمكن نسب الإجراء في سجلات الوصول. ينجح دائمًا بغض النظر عن `maintenanceMode === 'force-closed'`، فهذا هو منفذ الطوارئ للمسؤول. يعيد 200 فور إرسال نشر MQTT؛ ولا تُنتظر هنا حالات التأكيد أو الفشل أو انتهاء المهلة (فالتدفق القديم /api/devices/door-controllers + /api/ics/devices/command يعمل أيضًا بأسلوب الإرسال دون انتظار).
المعلمات
facilityId `string` (مطلوب) doorId `string` (مطلوب)نقطة النهاية
POST /api/door-access/doors/{facilityId}/{doorId}/unlock
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/unlock \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تشغيل نمط صفير لتحديد موقع وحدة التحكم بالباب
ينشر أمر MQTT `beep` فتُصدر وحدة التحكم ثلاث صفارات متوسطة الطول (نحو 500 مللي ثانية لكل منها، وفاصل نحو 350 مللي ثانية، ونحو 2 ثانية إجمالًا). يستخدمه المسؤولون لتحديد موقع وحدة التحكم بالباب فعليًا في الموقع. يستخدم زر Device Management القديم دفعة من صفارات قصيرة لنحو 30 ثانية، لكن برنامج تشغيل الطنان في البرنامج الثابت لا يُصدر بشكل موثوق إلا الصفارة الأولى، لذا يرسل التطبيق نمطًا أقصر وأكثر موثوقية بدلًا من ذلك. لا يُكتب صف تدقيق، فهو إجراء تشخيصي بلا أثر جانبي على التحكم في الوصول.
المعلمات
facilityId `string` (مطلوب) doorId `string` (مطلوب)نقطة النهاية
POST /api/door-access/doors/{facilityId}/{doorId}/identify
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/identify \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إعادة تشغيل وحدة التحكم بالباب عن بُعد
ينشر أمر MQTT `rebootDevice` نفسه (إرسال دون انتظار) الذي يرسله زر "Remotely Reboot Device" القديم في Device Management، لكنه مقيَّد بالوحدة النمطية `door-gate-access` حتى يتمكن مسؤولو DGA من إعادة تشغيل وحدة تحكم من القسم المتقدم في اللوحة الجانبية للباب دون منحة `device-management` منفصلة. يعيد 200 فور إرسال النشر؛ ويصبح الجهاز غير متصل طوال مدة إعادة التشغيل.
المعلمات
facilityId `string` (مطلوب) doorId `string` (مطلوب)نقطة النهاية
POST /api/door-access/doors/{facilityId}/{doorId}/reboot
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/door-access/doors/{facilityId}/{doorId}/reboot \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد صفوف User Access في منشأة
يعرض كل صفوف user-access غير المحذوفة في المنشأة. يدعم عوامل تصفية من جهة العميل (source، search، accessEnabled، hasGrants). ستُضاف عملية الحساب `hideExcluded` على الخادم في المرحلة 4 بعد إطلاق مقيِّم المنح الهجين؛ وحاليًا تُقبل المعلمة لكنها تعيد المجموعة الكاملة.
المعلمات
facilityId `string` (مطلوب) search `string` (اختياري) source `string` (اختياري) accessEnabled `string` (اختياري) hasGrants `string` (اختياري) hideExcluded `boolean` (اختياري) عند ضبطها على true، يُخفى المستخدمون المتزامنون (source != manual) الذين لا يمكنهم عبور أي باب في أي وقت في هذه المنشأة. تتضمن الاستجابة غلاف `hidden: { count, sample }`.نقطة النهاية
GET /api/door-access/users/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/door-access/users/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إنشاء صف User Access يدويًا في منشأة
ينشئ صفًا جديدًا بالقيمة `source: 'manual'`. يعيد 409 مع `existingUserId` إذا كان الهاتف أو البريد الإلكتروني المقدَّم مرتبطًا بالفعل بصف في هذه المنشأة.
المعلمات
facilityId `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/door-access/users/{facilityId}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الحصول على صف User Access واحد
المعلمات
facilityId `string` (مطلوب) userId `string` (مطلوب)نقطة النهاية
GET /api/door-access/users/{facilityId}/{userId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحديث جزئي لصف User Access
يعدّل أي مجموعة فرعية من حقول الهوية / التفويض. مرّر `null` لمسح حقل اختياري. يعيد 409 إذا تعارض الهاتف أو البريد الإلكتروني الجديد مع صف آخر في المنشأة نفسها. يقبل `appMessage` البنية نفسها لرسالة المنشأة العامة في PUT /api/door-access/rules/{facilityId}: نص الرسالة، ودرجة الخطورة، ورابط اختياري، وجدول بدء/انتهاء اختياري. يعرض تطبيق الهاتف المحمول هذه الرسالة في لوحة القيادة للمستخدم المستهدف فقط.
المعلمات
facilityId `string` (مطلوب) userId `string` (مطلوب)نص الطلب
نقطة النهاية
PATCH /api/door-access/users/{facilityId}/{userId}
مثال على الطلب
curl -X PATCH https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
حذف مرن لصف User Access
يضع على الصف العلامة `deleted: true` ويعطّل الوصول. يُحتفظ بربط سجل التدقيق بـ userId؛ ويمكن للمسؤولين إعادة التفعيل يدويًا.
المعلمات
facilityId `string` (مطلوب) userId `string` (مطلوب)نقطة النهاية
DELETE /api/door-access/users/{facilityId}/{userId}
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إسناد الوصول لكل باب لمستخدم
لكل باب، يعرض التفويض الحتمي الحالي (`allowedNow`، `allowedVia`، `deniedReason`) والمسارات المهيأة من Access Policies، والمنح الدائمة، وجداول السياسات، ومنح النوافذ الزمنية من المسؤول، ونوافذ مصادر الشركاء المعيّنة الحديثة. يعرض أيضًا التوفر النشط/التالي وحداثة المصدر. يُقيَّم blockAllAccess للباب ووضع الصيانة قبل جميع مسارات السماح.
المعلمات
facilityId `string` (مطلوب) userId `string` (مطلوب)نقطة النهاية
GET /api/door-access/users/{facilityId}/{userId}/effective-access
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/effective-access \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إنشاء صفوف User Access بالجملة من استيراد CSV
ينشئ عدة صفوف `source: 'manual'` في طلب واحد، مع إعادة استخدام التحقق نفسه، وتوحيد الهاتف/البريد الإلكتروني، والتحقق من التعارض لكل منشأة، والمراسلة التلقائية ومنطق الدعوة (الاختياري) كما في الإنشاء الفردي. تُعالَج الصفوف بالترتيب، لذا يُبلَّغ عن الصف اللاحق المتعارض مع صف أُنشئ سابقًا على أنه مكرر. تُقدَّم المنح كمعرّفات أبواب/مجموعات محلولة مسبقًا (يحلّ العميل الأسماء إلى معرّفات). تُرفض منح النوافذ الزمنية عمدًا في العمليات المجمّعة ويجب إضافتها عبر نقطة نهاية الاستبدال لكل مستخدم بعد الاستيراد. لا يطرح أخطاء لكل صف؛ ويُبلَّغ عن نتيجة كل صف على حدة.
المعلمات
facilityId `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/door-access/users/{facilityId}/bulk
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/bulk \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
استبدال منح Access Time Window الإضافية في صف User Access
يستبدل `timeWindowGrants` فقط؛ ولا تُمسّ `grants` الدائمة و`sourceTimeWindows` الخاصة بالتكاملات. يتطلب كل عنصر نطاقًا (`facilityWide` أو `doors` أو `groups`) و`window` مطلقة أو أسبوعية. يؤدي إرسال مصفوفة فارغة إلى مسح جميع نوافذ المسؤول صراحةً.
المعلمات
facilityId `string` (مطلوب) userId `string` (مطلوب)نص الطلب
نقطة النهاية
PUT /api/door-access/users/{facilityId}/{userId}/time-window-grants
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/time-window-grants \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
تجميد صف User Access ضد تحديثات المزامنة المستندة إلى المصدر
يضبط `decoupledFromSource: true`، ويمسح كل `sourceTimeWindows` المملوكة للتكاملات، ويجعل المزامنة (cron + streams) تسجّل هذا الصف وتتخطاه إلى أن يمسح المسؤول العلامة عبر /recouple.
المعلمات
facilityId `string` (مطلوب) userId `string` (مطلوب)نقطة النهاية
POST /api/door-access/users/{facilityId}/{userId}/decouple
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/decouple \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إعادة ربط صف User Access بتحديثات المزامنة المستندة إلى المصدر
المعلمات
facilityId `string` (مطلوب) userId `string` (مطلوب)نقطة النهاية
POST /api/door-access/users/{facilityId}/{userId}/recouple
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/recouple \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إلغاء جميع رموز التحديث لتطبيق Door & Gate Access لمستخدم
يُلغي الرموز باستخدام الهاتف/البريد الإلكتروني المخزَّن للمستخدم (جدول رموز التحديث مفهرس بـ `sha256(plaintext)`؛ وتتيح لنا فهارس GSI byMobilePhone / byEmail الحذف الموزّع انطلاقًا من مستخدم واحد). سيُسجَّل أيضًا خروج المستخدمين الآخرين الذين يشاركون الهاتف/البريد الإلكتروني نفسه في منشأة أخرى.
المعلمات
facilityId `string` (مطلوب) userId `string` (مطلوب)نقطة النهاية
POST /api/door-access/users/{facilityId}/{userId}/logout
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/logout \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إرسال (أو إعادة إرسال) رسالة البريد الإلكتروني لدعوة تطبيق Door & Gate Access إلى مستخدم
يفرض إرسال رسالة دعوة تنزيل التطبيق إلى عنوان البريد الإلكتروني المخزَّن للمستخدم (بريد إلكتروني فقط؛ دون رسائل SMS). يتجاهل شروط الأهلية وقيود "أُرسلت سابقًا" المستخدمة في مسار المزامنة التلقائية، فهذا إجراء صريح من المسؤول. يعيد 400 إذا لم يكن للمستخدم بريد إلكتروني مسجّل.
المعلمات
facilityId `string` (مطلوب) userId `string` (مطلوب)نقطة النهاية
POST /api/door-access/users/{facilityId}/{userId}/resend-invite
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/{userId}/resend-invite \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
معاينة مستلمي إرسال دعوات التطبيق بالجملة
يحسب مجموعة المستخدمين الذين سيتلقون رسالة دعوة التطبيق بالبريد الإلكتروني. المجموعة الأساسية هي كل مستخدم غير محذوف لديه بريد إلكتروني ولم يستخدم التطبيق قط (`appLastSeenAt` فارغ). افتراضيًا تُضيَّق المجموعة إلى المستخدمين الذين لديهم وصول حاليًا (تطابق قاعدة أو منحة) ولم يُدعَوا قط؛ ويوسّعها `includeAlreadyInvited` و`includeNoAccess`. لا تُرسل أي رسائل بريد إلكتروني: يعيد الأعداد وعيّنة صغيرة ومعرّفات المستخدمين المرشحين لنقطة نهاية التنفيذ.
المعلمات
facilityId `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/door-access/users/{facilityId}/bulk-invite/preview
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/bulk-invite/preview \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
إرسال رسائل البريد الإلكتروني لدعوة التطبيق إلى دفعة من المستخدمين
يرسل رسالة دعوة تنزيل التطبيق إلى كل معرّف من معرّفات المستخدمين المقدَّمة (50 كحد أقصى لكل طلب؛ يقسّم العميل قائمة المرشحين الكاملة من المعاينة إلى دفعات). يُعاد التحقق من كل مستخدم وقت الإرسال: الصفوف التي لم تعد موجودة، أو لا تحتوي على بريد إلكتروني، أو استخدم أصحابها التطبيق منذ المعاينة تُتخطى ولا تُعدّ فاشلة. يُبلَّغ عن نتيجة كل مستخدم على حدة حتى يتمكن العميل من تلخيص المرسَل / الفاشل / المتخطى.
المعلمات
facilityId `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/door-access/users/{facilityId}/bulk-invite
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/door-access/users/{facilityId}/bulk-invite \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
سرد مجموعات الأبواب في منشأة
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
GET /api/door-access/door-groups/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/door-access/door-groups/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إنشاء مجموعة أبواب
المعلمات
facilityId `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/door-access/door-groups/{facilityId}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/door-access/door-groups/{facilityId} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الحصول على مجموعة أبواب واحدة
المعلمات
facilityId `string` (مطلوب) groupId `string` (مطلوب)نقطة النهاية
GET /api/door-access/door-groups/{facilityId}/{groupId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/door-access/door-groups/{facilityId}/{groupId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحديث مجموعة أبواب
المعلمات
facilityId `string` (مطلوب) groupId `string` (مطلوب)نص الطلب
نقطة النهاية
PATCH /api/door-access/door-groups/{facilityId}/{groupId}
مثال على الطلب
curl -X PATCH https://portal.hub.gymsystems.co/api/door-access/door-groups/{facilityId}/{groupId} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
حذف مرن لمجموعة أبواب
المعلمات
facilityId `string` (مطلوب) groupId `string` (مطلوب)نقطة النهاية
DELETE /api/door-access/door-groups/{facilityId}/{groupId}
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/door-access/door-groups/{facilityId}/{groupId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد تكاملات الشركاء المهيأة في منشأة
يعرض تكاملات الشركاء في المنشأة (المعرّف، والاسم، والشعار، وحالة التفعيل) بربط ph-facility-partner-config بكتالوج ph-partners. مقيَّد بنطاق door-gate-access (حتى يتمكن المسؤولون الذين لا يملكون وصولًا إلى external-integrations من عرض شارات الشركاء وقائمة المزامنة لكل شريك).
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
GET /api/door-access/partners/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/door-access/partners/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
قراءة إعدادات مزامنة User Access لمنشأة
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
GET /api/door-access/sync-config/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/door-access/sync-config/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحديث إعدادات مزامنة User Access لمنشأة
لا تُقبل إلا الحقول التي يتحكم بها المسؤول (`enabled` و`requireIdentifier` وخريطة `partners` للشركاء)؛ أما `lastRunAt` و `lastRunCounts` فيكتبهما محرك المزامنة نفسه. `partner.partners` خريطة تفعيل لكل شريك مفهرسة بـ partnerId (إلغاء الاشتراك): عندما يكون `partner.enabled` الرئيسي مفعّلًا، يُزامَن الشريك ما لم يكن له إدخال صريح `{ enabled: false }` هنا.
المعلمات
facilityId `string` (مطلوب)نص الطلب
نقطة النهاية
PUT /api/door-access/sync-config/{facilityId}
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/door-access/sync-config/{facilityId} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
قراءة إعدادات المراسلة التلقائية لكل مستخدم لمنشأة
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
GET /api/door-access/auto-messages/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/door-access/auto-messages/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحديث إعدادات المراسلة التلقائية لكل مستخدم لمنشأة
يحفظ القواعد، ثم يعيد فورًا تقييم كل صف User Access في المنشأة حتى يحصل المستخدمون الحاليون على رسالتهم التلقائية أو يفقدوها مباشرةً. لا تُمسّ الرسائل اليدوية والصفوف المفصولة.
المعلمات
facilityId `string` (مطلوب)نص الطلب
نقطة النهاية
PUT /api/door-access/auto-messages/{facilityId}
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/door-access/auto-messages/{facilityId} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
حالة عملية إعادة تقييم الرسائل التلقائية في الخلفية
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
GET /api/door-access/auto-messages/{facilityId}/sweep-status
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/door-access/auto-messages/{facilityId}/sweep-status \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تشغيل مزامنة User Access عند الطلب لمنشأة
يمرّ بشكل متزامن على كل مصدر مفعّل (partner / cctv) في المنشأة ويوحّد صفوف ph-door-access-users عبر تسلسل إزالة التكرار. يعيد الأعداد لكل مصدر. تظهر المصادر المعطّلة بالقيمة `skippedSyncDisabled: 1` بدلًا من غيابها حتى تعرض الواجهة الصفين بشكل متسق.
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
POST /api/door-access/sync/{facilityId}/run
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/door-access/sync/{facilityId}/run \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
معاينة تجريبية لحذف بالجملة لمستخدمين متزامنين من الشركاء
يعيد العدد وعيّنة من صفوف user-access التي سيتم حذفها حذفًا مرنًا، إضافةً إلى confirmToken يجب إعادته إلى نقطة نهاية التنفيذ. لا تُعدَّل أي بيانات. لا تتأثر سجلات الوصول أبدًا.
المعلمات
facilityId `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/door-access/sync/{facilityId}/bulk-delete/preview
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/door-access/sync/{facilityId}/bulk-delete/preview \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
تنفيذ حذف بالجملة لمستخدمين متزامنين من الشركاء (حذف مرن)
يحذف حذفًا مرنًا كل صف user-access متزامن من الشركاء ضمن النطاق. يتطلب confirmToken الذي أعادته المعاينة؛ فإذا تغيّرت المجموعة الفعلية منذ المعاينة فلن يتطابق الرمز ويُرفض الطلب (409) ليعيد المسؤول المراجعة. يُحتفظ بسجلات الوصول.
المعلمات
facilityId `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/door-access/sync/{facilityId}/bulk-delete
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/door-access/sync/{facilityId}/bulk-delete \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
نشاط مزامنة User Access الأخير (سجل استكشاف الأخطاء وإصلاحها)
يعرض أحدث نتائج المزامنة لمنشأة (أُنشئ / تُخطّي / معطّل) مع السبب، حتى يرى المسؤولون سبب مزامنة عضو أو عدم مزامنته. الأحدث أولًا.
المعلمات
facilityId `string` (مطلوب) limit `integer` (اختياري)نقطة النهاية
GET /api/door-access/sync/{facilityId}/log
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/door-access/sync/{facilityId}/log \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد أحداث Door & Gate Access لمنشأة
يعرض أحداث فتح القفل من الهاتف المحمول وتجاوز المسؤول وPartner API الخارجية في موجز واحد بترتيب زمني عكسي.
المعلمات
facilityId `string` (مطلوب) from `integer` (اختياري) to `integer` (اختياري) limit `integer` (اختياري)نقطة النهاية
GET /api/door-access/events/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/door-access/events/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تقييم تجريبي للسياج الجغرافي لدبوس وضع الاختبار الخاص بالمسؤول
نص الطلب
نقطة النهاية
POST /api/door-access/geofence/test
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/door-access/geofence/test \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
الحصول على حالة الإعداد الأولي / التفعيل لمنشأة
يشغّل صفحة "Get Started" في التطبيق وشريط تقدّم الإعداد. يعرض الأعداد المباشرة للأبواب والمستخدمين، والخطوتين الأساسيتين المشتقتين (وجود مستخدم، ووجود باب)، وعلامات "تمت المراجعة" الاختيارية المحفوظة، و ما إذا كانت المنشأة مفعّلة (اكتمال الخطوتين الأساسيتين). في أول مرة تصبح فيها المنشأة مفعّلة، يُختم الطابع الزمني activatedAt.
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
GET /api/door-access/onboarding/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/door-access/onboarding/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحديث علامات "تمت المراجعة" الاختيارية للإعداد الأولي لمنشأة
يحفظ علامات قائمة الإعداد الاختيارية التي يحدّدها المسؤول (قواعد الوصول، وإعدادات المزامنة، والسياج الجغرافي). تُشتق الخطوات الأساسية والتفعيل مباشرةً من أعداد البيانات ولا يمكن ضبطها هنا. يعيد حالة الإعداد الأولي الكاملة بعد تحديثها.
المعلمات
facilityId `string` (مطلوب)نص الطلب
نقطة النهاية
PUT /api/door-access/onboarding/{facilityId}
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/door-access/onboarding/{facilityId} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
يعيد استجابة JSON ببيانات تحليلات المنشأة.
المعلمات
clubId `string` (اختياري) معرّف المنشأة المراد استرداد بيانات التحليلات لها. fromDate `string` (اختياري) تاريخ بداية بيانات التحليلات المراد استردادها. toDate `string` (اختياري) تاريخ نهاية بيانات التحليلات المراد استردادها.نقطة النهاية
GET /clubs/{clubId}/lead-events
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/clubs/{clubId}/lead-events \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد استجابة JSON ببيانات تحليلات المنشأة.
المعلمات
clubId `string` (اختياري) معرّف المنشأة المراد استرداد بيانات التحليلات لها. fromDate `string` (اختياري) تاريخ بداية بيانات التحليلات المراد استردادها. toDate `string` (اختياري) تاريخ نهاية بيانات التحليلات المراد استردادها.نقطة النهاية
GET /clubs/{clubId}/analytics/page-views
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/clubs/{clubId}/analytics/page-views \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد استجابة JSON ببيانات تحليلات المنشأة.
المعلمات
clubId `string` (اختياري) معرّف المنشأة المراد استرداد بيانات التحليلات لها. fromDate `string` (اختياري) تاريخ بداية بيانات التحليلات المراد استردادها. toDate `string` (اختياري) تاريخ نهاية بيانات التحليلات المراد استردادها.نقطة النهاية
GET /clubs/{clubId}/analytics/referrers
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/clubs/{clubId}/analytics/referrers \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد استجابة JSON ببيانات تحليلات المنشأة.
المعلمات
clubId `string` (اختياري) معرّف المنشأة المراد استرداد بيانات التحليلات لها. fromDate `string` (اختياري) تاريخ بداية بيانات التحليلات المراد استردادها. toDate `string` (اختياري) تاريخ نهاية بيانات التحليلات المراد استردادها.نقطة النهاية
GET /clubs/{clubId}/analytics/socials
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/clubs/{clubId}/analytics/socials \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد استجابة JSON ببيانات تحليلات المنشأة.
المعلمات
clubId `string` (اختياري) معرّف المنشأة المراد استرداد بيانات التحليلات لها. fromDate `string` (اختياري) تاريخ بداية بيانات التحليلات المراد استردادها. toDate `string` (اختياري) تاريخ نهاية بيانات التحليلات المراد استردادها.نقطة النهاية
GET /clubs/{clubId}/analytics/top-cities
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/clubs/{clubId}/analytics/top-cities \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد استجابة JSON ببيانات تحليلات المنشأة.
المعلمات
clubId `string` (اختياري) معرّف المنشأة المراد استرداد بيانات التحليلات لها. fromDate `string` (اختياري) تاريخ بداية بيانات التحليلات المراد استردادها. toDate `string` (اختياري) تاريخ نهاية بيانات التحليلات المراد استردادها.نقطة النهاية
GET /clubs/{clubId}/analytics/total-page-views
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/clubs/{clubId}/analytics/total-page-views \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد استجابة JSON ببيانات تحليلات المنشأة.
المعلمات
clubId `string` (اختياري) معرّف المنشأة المراد استرداد بيانات التحليلات لها. fromDate `string` (اختياري) تاريخ بداية بيانات التحليلات المراد استردادها. toDate `string` (اختياري) تاريخ نهاية بيانات التحليلات المراد استردادها.نقطة النهاية
GET /clubs/{clubId}/analytics/traffic
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/clubs/{clubId}/analytics/traffic \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
ينشئ رمز JWT (Json Web Token) مؤقتًا للواجهة الأمامية لمخططات Google Analytics القابلة للتضمين في صفحة 'analytics' في الواجهة الأمامية.
نقطة النهاية
GET /api/ga/onetimetoken
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/ga/onetimetoken \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد أدوات لوحة القيادة من 'The Training Camp' إذا كان للمنشأة أي أعضاء نشطين.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
GET /api/reporting/apps/widgets/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/reporting/apps/widgets/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد جميع عطلات المنشأة التي لم تتم مراجعتها.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
GET /api/reporting/club/{club}/unreviewed-holidays
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/reporting/club/{club}/unreviewed-holidays \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تعيين جميع عطلات المنشأة التي لم تتم مراجعتها على أنها تمت مراجعتها.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
PUT /api/reporting/club/{club}/review-holidays
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/reporting/club/{club}/review-holidays \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد تقرير مؤشرات الأداء الرئيسية (KPI) بتنسيق CSV، مقسّمًا شهرًا بشهر على مدى آخر 12 شهرًا. *ملاحظة* ينشئ هذا تقريرًا واحدًا لجميع المنشآت في النظام، فلا تشغّله عدة مرات بالتوازي وإلا فستُثقل GymMaster!
المعلمات
months `string` (اختياري) عدد الأشهر (من التاريخ الحالي) المراد جلبها (القيمة الافتراضية 12)نقطة النهاية
GET /api/reporting/gymmaster/all-clubs-kpi-report
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/reporting/gymmaster/all-clubs-kpi-report \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد مخطط (مخططات) الإيرادات من نظام MMS لمنشأة معيّنة.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه. range `string` (اختياري) النطاق بالأيام (عدًّا تنازليًا من التاريخ الحالي) الذي نريد جلبهنقطة النهاية
GET /api/reporting/gymmaster/revenuegraph/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/reporting/gymmaster/revenuegraph/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد بيانات/تحليلات MMS (Member Management System) في لوحة القيادة لمنشأة معيّنة. تشمل البيانات إحصاءات GymMaster/Perfect Gym إضافةً إلى مقاييس داخلية أخرى يجمعها نظامنا.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه. range `string` (اختياري) النطاق بالأيام (عدًّا تنازليًا من التاريخ الحالي) الذي نريد جلبهنقطة النهاية
GET /api/reporting/gymmaster/widgets/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/reporting/gymmaster/widgets/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد بيانات أداة Myzone في لوحة القيادة لمنشأة معيّنة.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
GET /api/reporting/myzone/widgets/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/reporting/myzone/widgets/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد كائنًا بالخدمات التي تُعدّ غير متصلة وفقًا لواحدة أو أكثر من نقاط نهاية صفحة الحالة/المراقبة لدينا، والمهيأة عبر الأداة الداخلية 'Uptime Kuma'.
نقطة النهاية
GET /api/reporting/statuspage/events
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/reporting/statuspage/events \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد حجوزات التمارين القادمة للأيام السبعة التالية.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
GET /api/reporting/clubs/{club}/workout-bookings
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/reporting/clubs/{club}/workout-bookings \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعرض قائمة العطلات السابقة لمنشأة.
المعلمات
clubId `string` (اختياري) معرّف النادي fromDate `string` (اختياري) الطابع الزمني Unix لتاريخ بداية نطاق العطلات المراد إرجاعها. toDate `string` (اختياري) الطابع الزمني Unix لتاريخ نهاية نطاق العطلات المراد إرجاعها.نقطة النهاية
GET /api/clubs/{clubId}/historical-holidays
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubId}/historical-holidays \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعرض أتمتة الأجهزة المرتبطة بالمنشأة.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد سرد أجهزته.نقطة النهاية
GET /api/ics/automations/list/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/ics/automations/list/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يحدّث إعدادات الجهاز لشاشة/جهاز موجود.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للمنشأة التي تريد تحديث الجهاز فيها. body `string` (مطلوب) كائن JSON لمعلمات التحديث.نقطة النهاية
POST /api/ics/automations/update/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/ics/automations/update/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يضيف جهاز شاشة/حاسوبًا فعليًا إلى منشأتك ويربطه بها.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد إضافة الجهاز تحته. body `string` (مطلوب) كائن JSON للشاشة الجديدة المراد ربطها.نقطة النهاية
POST /api/ics/devices/add/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/ics/devices/add/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يوجّه الجهاز للاتصال بـ SSID جديد بناءً على المعلمات.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للمنشأة التي تريد تحديث الجهاز فيها. body `string` (مطلوب) كائن JSON لمعلمات التحديث.نقطة النهاية
POST /api/ics/devices/changewifi/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/ics/devices/changewifi/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يحدّث إعدادات الجهاز لشاشة/جهاز موجود.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للمنشأة التي تريد تحديث الجهاز فيها. body `string` (مطلوب) كائن JSON لمعلمات التحديث.نقطة النهاية
POST /api/ics/devices/command/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/ics/devices/command/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يحمّل عنوان URL/صفحة ويب على شاشة جهاز محدد.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للمنشأة التي تريد تحديث الجهاز فيها. body `string` (مطلوب) كائن JSON لمعلمات التحديث.نقطة النهاية
POST /api/ics/devices/loadurl/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/ics/devices/loadurl/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يحدّث إعدادات الجهاز لشاشة/جهاز موجود.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للمنشأة التي تريد تحديث الجهاز فيها. body `string` (مطلوب) كائن JSON لمعلمات التحديث.نقطة النهاية
PUT /api/ics/devices/update/{club}
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/ics/devices/update/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد تسمية شاشة/جهاز. يقتصر على التسجيل: على عكس نقطة نهاية التحديث، لا يرسل أي شيء إلى الجهاز، لذا يتوفر أيضًا للشاشات التي تشغّل إصدار برنامج انتهى دعمه.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للمنشأة التي ينتمي إليها الجهاز. body `string` (مطلوب) كائن JSON لمعلمات إعادة التسمية.نقطة النهاية
PUT /api/ics/devices/rename/{club}
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/ics/devices/rename/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يحصل على الأدوات المصغّرة وروابط الوسائط غير المتصلة لمنشأة، بناءً على التاريخ المقدَّم.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للمنشأة التي تريد تغيير برنامج التمارين لها. date `string` (مطلوب) التاريخ المراد إرجاع عناوين URL للأدوات المصغّرة له، استخدم التنسيق `YYYY-MM-DD`.نقطة النهاية
GET /api/ics/external-resources/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/ics/external-resources/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يحصل على الأدوات المصغّرة وروابط الوسائط غير المتصلة لمنشأة، بناءً على التاريخ المقدَّم.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للمنشأة التي تريد تغيير برنامج التمارين لها.نقطة النهاية
GET /api/ics/list-scheduled-workouts/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/ics/list-scheduled-workouts/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يغيّر برنامج التمارين لمنشأة معيّنة.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للمنشأة التي تريد تغيير برنامج التمارين لها. body `string` (مطلوب) كائن JSON لبرنامج التمارين الجديد المراد تغييره.نقطة النهاية
POST /api/ics/loadprogram/{club}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/ics/loadprogram/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يسترد إعدادات البرنامج لشاشة/جهاز موجود.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للمنشأة التي تريد استرداد بيانات برنامجها.نقطة النهاية
GET /api/ics/programs/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/ics/programs/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يحدّث إعدادات البرنامج لشاشة/جهاز موجود.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للمنشأة التي تريد تحديث الجهاز فيها. body `string` (مطلوب) كائن JSON لمعلمات التحديث.نقطة النهاية
PUT /api/ics/programs/{club}
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/ics/programs/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يسترد خيارات إعدادات البرنامج.
نقطة النهاية
GET /api/ics/programs/options/{facilityID}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/ics/programs/options/{facilityID} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
دردشة مع سياق RAG: لا تملك وصولًا إلى الأدوات، بل أداة طلب/استجابة API بسيطة فقط تتيح لك سحب المعرفة مباشرةً من قاعدة المعرفة.
المعلمات
organisationId `string` (اختياري) معرّف المنظمة (يُكتشف تلقائيًا إذا لم يُقدَّم)نص الطلب
نقطة النهاية
POST /api/llm/chat
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/llm/chat \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
حذف التضمينات المتجهية للمقالات من مخزن المتجهات وتحديث حالة تتبع التضمين
نص الطلب
نقطة النهاية
DELETE /api/llm/delete-article
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/llm/delete-article \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
سرد سجلات متتبع التضمين حسب المنظمة والحالة
المعلمات
organisationId `string` (اختياري) معرّف المنظمة (يُحدَّد تلقائيًا إذا حُذف) status `string` (مطلوب) الحالة المراد التصفية حسبها (يجب أن تكون إحدى القيم in_queue أو done أو anomaly أو fail أو deleted) Limit `string` (اختياري) الحد الأقصى للعناصر في الصفحة LastEvaluatedKey `string` (اختياري) قيمة LastEvaluatedKey من DynamoDB بصيغة JSON لتقسيم الصفحاتنقطة النهاية
GET /api/llm/embedding-track/by-org-and-status
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/llm/embedding-track/by-org-and-status \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد سجلات متتبع التضمين حسب المنظمة (مع إمكانية التصفية حسب نوع المورد)
المعلمات
organisationId `string` (اختياري) معرّف المنظمة (يُحدَّد تلقائيًا إذا حُذف) resourceType `string` (اختياري) نوع مورد اختياري (مثل "article"). عند تقديمه، يصفّي النتائج التي يبدأ فيها resourceTypeId بـ "{type}#". Limit `string` (اختياري) الحد الأقصى للعناصر في الصفحة LastEvaluatedKey `string` (اختياري) قيمة LastEvaluatedKey من DynamoDB بصيغة JSON لتقسيم الصفحاتنقطة النهاية
GET /api/llm/embedding-track/by-org
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/llm/embedding-track/by-org \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تهيئة مجموعة قاعدة بيانات المتجهات للمنظمة
المعلمات
organisationId `string` (اختياري) معرّف المنظمة (يُكتشف تلقائيًا إذا لم يُقدَّم)نقطة النهاية
POST /api/llm/init-org
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/llm/init-org \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
بحث دلالي في قاعدة المعرفة
المعلمات
organisationId `string` (اختياري) معرّف المنظمة (يُكتشف تلقائيًا إذا لم يُقدَّم)نص الطلب
نقطة النهاية
POST /api/llm/semantic-search
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/llm/semantic-search \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
بدء معالجة متدفقة للمقالات الموجودة في قائمة الانتظار لتضمينها، مع تحديثات تقدّم فورية
المعلمات
organisationId `string` (اختياري) معرّف المنظمة (يُكتشف تلقائيًا إذا لم يُقدَّم)نقطة النهاية
POST /api/llm/start-embedding-stream
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/llm/start-embedding-stream \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إدراج التضمينات المتجهية للمقالات أو تحديثها في قاعدة بيانات المتجهات
يعالج تضمين المقالة بناءً على حالتها الحالية: - إذا كانت المقالة غير منشورة أو خاصة: يحذف التضمينات - إذا كانت المقالة منشورة وعامة: يعيد تضمينها بالمحتوى الكامل يتطلب دائمًا نص المقالة الكامل.
المعلمات
organisationId `string` (اختياري) معرّف المنظمة (يُكتشف تلقائيًا إذا لم يُقدَّم)نص الطلب
نقطة النهاية
POST /api/llm/upsert-embeddings
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/llm/upsert-embeddings \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
نقطة نهاية اختبار لحذف التضمينات المتجهية للمقالات دفعةً واحدة حسب المنظمة والحالة الاختيارية
المعلمات
organisationId `string` (اختياري) معرّف المنظمة (يُحدَّد تلقائيًا من سياق المستخدم إذا حُذف) status `string` (اختياري) الحالة المراد التصفية حسبها (اختيارية؛ إذا حُذفت، تُحذف جميع مقالات المنظمة بغض النظر عن حالتها) hardDelete `string` (اختياري) ما إذا كان سيتم حذف سجلات تتبع التضمين حذفًا نهائيًا (true) أو حذفًا مرنًا بتحديث الحالة (false)نقطة النهاية
DELETE /api/llm/test/batch-delete-by-status
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/llm/test/batch-delete-by-status \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحويل النص وتقسيمه إلى أجزاء مع إحصاءات تفصيلية
نقطة نهاية اختبار تحوّل النص وتقسّمه إلى أجزاء، ثم تقدّم إحصاءات تفصيلية عن توزيع الأجزاء تشمل أعداد الأحرف والنسب المئوية ومقاييس الجودة للمساعدة في تقييم فعالية التقسيم.
نص الطلب
نقطة النهاية
POST /api/llm/test/transform-chunk
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/llm/test/transform-chunk \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
الحصول على العدد الإجمالي للمتجهات في فهرس المتجهات للمنظمة
نقطة نهاية اختبار لحساب جميع المتجهات في فهرس المتجهات لمنظمة المستخدم الحالي
المعلمات
organisationId `string` (اختياري) معرّف المنظمة (يُكتشف تلقائيًا إذا لم يُقدَّم)نقطة النهاية
GET /api/llm/test/vector-count
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-count \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
حذف جميع المتجهات الخاصة بـ articleId محدد من فهرس المتجهات
نقطة نهاية اختبار لحذف جميع المتجهات المرتبطة بـ articleId محدد من فهرس المتجهات لمنظمة المستخدم الحالي.
المعلمات
organisationId `string` (اختياري) معرّف المنظمة (يُكتشف تلقائيًا إذا لم يُقدَّم) articleId `string` (مطلوب) قيمة articleId المراد حذف متجهاتها dryRun `string` (اختياري) عند ضبطها على true، يعرض فقط ما سيُحذف دون حذفه فعليًانقطة النهاية
DELETE /api/llm/test/vector-delete-article
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/llm/test/vector-delete-article \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
اختبار Vector SDK بسرد جميع الفهارس
نقطة نهاية اختبار للتحقق من اتصال Vector SDK وسرد جميع الفهارس في حاوية المتجهات
نقطة النهاية
GET /api/llm/test/vector-indices
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-indices \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تهيئة فهرس المتجهات لمنظمة
ينشئ حاوية المتجهات والفهرس لمنظمة المستخدم الحالي
المعلمات
organisationId `string` (اختياري) معرّف المنظمة (يُكتشف تلقائيًا إذا لم يُقدَّم)نقطة النهاية
POST /api/llm/test/vector-init-index
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/llm/test/vector-init-index \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على جميع البيانات الوصفية للمتجهات الخاصة بـ articleId محدد
نقطة نهاية اختبار لاسترداد جميع أجزاء المتجهات وبياناتها الوصفية الخاصة بـ articleId محدد من فهرس المتجهات. مفيدة لفحص كيفية تقسيم المقالة وتخزينها. تتولى خدمة مخزن المتجهات عملية التصفية.
المعلمات
organisationId `string` (اختياري) معرّف المنظمة (يُكتشف تلقائيًا إذا لم يُقدَّم) articleId `string` (مطلوب) معرّف المقالة المراد استرداد البيانات الوصفية لمتجهاتهانقطة النهاية
GET /api/llm/test/vector-metadata-by-article
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-metadata-by-article \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على أحدث المتجهات مع بياناتها الوصفية من فهرس المتجهات
نقطة نهاية اختبار لاسترداد أحدث 10 متجهات مع بياناتها الوصفية (دون بيانات المتجهات) من فهرس المتجهات لمنظمة المستخدم الحالي. مفيدة لفحص بنية البيانات الوصفية.
المعلمات
organisationId `string` (اختياري) معرّف المنظمة (يُكتشف تلقائيًا إذا لم يُقدَّم) limit `string` (اختياري) عدد أحدث المتجهات المراد إرجاعها (100 كحد أقصى)نقطة النهاية
GET /api/llm/test/vector-recent
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/llm/test/vector-recent \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يرفع أصلًا لـ Marketing Manager/Designer إلى تخزين S3.
المعلمات
file `string` (اختياري) اسم الملف أو الأصل المراد رفعه.نقطة النهاية
POST /api/marketing/design/static/download
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/marketing/design/static/download \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد الأصول الفردية بتنسيق JSON لتحميلها في مدير الأصول.
المعلمات
id `string` (مطلوب) معرّف الأصل المراد الحصول عليه. organisationId `string` (مطلوب) معرّف المنظمة للمنشأة التي ينتمي إليها الأصل.نقطة النهاية
GET /api/marketing/assets/get/{id}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/marketing/assets/get/{id} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد جميع أصول التصميم.
المعلمات
body `string` (مطلوب) كائن JSON لبيانات المنشأة التي تريد حفظها. organisationId `string` (مطلوب) معرّف المنظمة للمنشأة التي ينتمي إليها الأصل. useCache `string` (اختياري) search `string` (اختياري) استعلام البحث لتصفية الأصول حسب الاسم أو الوسوم. brand `string` (اختياري) العلامة التجارية المراد تصفية الأصول حسبها. tag `string` (اختياري) الوسم المراد تصفية الأصول حسبه.نقطة النهاية
GET /api/marketing/assets/get
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/marketing/assets/get \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد صفحة واحدة من أصول الطباعة التسويقية لمنظمة. يستخدم Algolia للبحث حسب الصلة مع تقسيم الصفحات (مع الأعداد الإجمالية)، ويرجع إلى DynamoDB عندما لا يتوفر Algolia.
المعلمات
organisationId `string` (مطلوب) معرّف المنظمة للمنشأة التي تنتمي إليها الأصول. search `string` (اختياري) استعلام البحث لتصفية الأصول حسب الاسم أو الوسوم. brand `string` (اختياري) العلامة التجارية المراد تصفية الأصول حسبها. tag `string` (اختياري) الوسم المراد تصفية الأصول حسبه. page `string` (اختياري) رقم الصفحة المراد جلبها (يبدأ الترقيم من الصفر). limit `string` (اختياري) عدد الأصول في الصفحة (300 كحد أقصى). useCache `string` (اختياري) عند ضبطها على false، يتجاوز Algolia ويستعلم DynamoDB مباشرةً.نقطة النهاية
GET /api/marketing/assets
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/marketing/assets \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد قائمة الأصول المتاحة التي رُفعت عبر مدير الأصول.
المعلمات
organisationId `string` (مطلوب)نقطة النهاية
GET /api/marketing/assets/list
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/marketing/assets/list \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يضيف أصلًا أو يحفظه.
المعلمات
body `string` (مطلوب) كائن JSON لبيانات المنشأة التي تريد حفظها. organisationId `string` (مطلوب) معرّف المنظمة للمنشأة التي ينتمي إليها الأصل.نقطة النهاية
PUT /api/marketing/assets/save
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/marketing/assets/save \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يرفع أصلًا لـ Marketing Manager/Designer إلى تخزين S3.
المعلمات
file `string` (اختياري) اسم الملف أو الأصل المراد رفعه. organisationId `string` (اختياري) معرّف المنظمة التي ينتمي إليها الأصل.نقطة النهاية
POST /api/marketing/assets/upload
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/marketing/assets/upload \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد قائمة بجميع الصفحات المخصصة لمنظمة.
المعلمات
organisationId `string` (مطلوب) المعرّف الداخلي للمنظمة المراد إرجاع صفحاتها المخصصة.نقطة النهاية
GET /api/marketing/custom-pages
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/marketing/custom-pages \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يُدرج صفحة مخصصة لمنظمة أو يحدّثها.
المعلمات
organisationId `string` (مطلوب) المعرّف الداخلي للمنظمة المراد إرجاع صفحاتها المخصصة. body `object` (مطلوب) بيانات الصفحة المخصصة المراد إدراجها أو تحديثها.نقطة النهاية
PUT /api/marketing/custom-pages
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/marketing/custom-pages \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد قائمة بجميع الصفحات المخصصة لمنشأة.
المعلمات
facilityId `string` (مطلوب) المعرّف الداخلي للمنشأة المراد إرجاع صفحاتها المخصصة.نقطة النهاية
GET /api/facilities/{facilityId}/marketing/custom-pages
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/marketing/custom-pages \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد جميع التصاميم المصدَّرة/المعروضة لمعرّف منشأة محدد.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للمنشأة التي تقدّم الطلب. sort `string` (اختياري) عامل التصفية لفرز التصاميم، والقيم المدعومة هي 'oldest' أو 'newest' أو 'design'.نقطة النهاية
GET /api/marketing/designs/{club}/exports
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/{club}/exports \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد محتويات HTML الفردية لتصميم بتنسيق JSON لتحميلها في المحرر.
المعلمات
id `string` (مطلوب) معرّف التصميم المراد الحصول عليه.نقطة النهاية
GET /api/marketing/designs/get/{id}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/get/{id} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد قائمة تعيينات الإدخال في تصاميم التسويق والطباعة وقوالب التصميم
المعلمات
clubId `string` (مطلوب) المعرّف الداخلي للمنشأة التي تقدّم الطلب. availableFeatures `string` (اختياري) إرجاع جميع العناصر ذات الميزات المحددة brand `string` (اختياري) يصفّي التصاميم حسب العلامة التجارية features `string` (اختياري) تصفية النتائج حسب الميزاتنقطة النهاية
GET /api/marketing/designs/input-mapping/{clubId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/input-mapping/{clubId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد قائمة التصاميم المتاحة لمنشأة معيّنة، والتي يمكن استخدامها داخل التصاميم (تصاميم الطباعة) المُنشأة في محرر التسويق/الطباعة في المنصة.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للمنشأة التي تقدّم الطلب. designAdmin `string` (اختياري) إرجاع جميع بيانات التصاميم (عرض المسؤول / يتطلب أن يكون المستخدم مسؤولًا). brand `string` (اختياري) يصفّي التصاميم حسب العلامة التجاريةنقطة النهاية
GET /api/marketing/designs/{club}/list
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/{club}/list \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يفرض على النظام عرض أو إعادة عرض جميع الصور المصغّرة للتصاميم ومعايناتها (يُستخدم أساسًا عند تغيير الأصول 'المصدرية' في S3 وما إلى ذلك)... **ملاحظة** لا يمكنك استدعاء هذه الدالة إلا مرة واحدة كل X دقيقة (ولا يمكنك استدعاؤها إذا كانت عملية عرض قيد التشغيل بالفعل). يضمن ذلك عدم تحميل خوادمنا بعبء زائد عند عرض جميع التصاميم...
نقطة النهاية
GET /api/marketing/designs/render-all-thumbnails
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/render-all-thumbnails \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
بدء عرض تصميم ديناميكي
المعلمات
body `string` (مطلوب) كائن JSON لبيانات المنشأة التي تريد إرسالها إلى معالج عرض التصاميم...نقطة النهاية
POST /api/marketing/designs/dynamic/render-design
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/marketing/designs/dynamic/render-design \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يضيف تصميمًا أو يحفظه أو يحدّثه.
المعلمات
body `string` (مطلوب) كائن JSON لبيانات المنشأة التي تريد حفظها.نقطة النهاية
PUT /api/marketing/designs/{club}/save
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/marketing/designs/{club}/save \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد تنسيق JSON للتصميم الثابت الفردي المراد تحميله
المعلمات
id `string` (مطلوب) معرّف التصميم الثابت المراد الحصول عليه.نقطة النهاية
GET /api/marketing/designs/static/get/{id}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/marketing/designs/static/get/{id} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يضيف قالب تصميم ثابتًا أو يحفظه أو يحدّثه.
المعلمات
body `string` (مطلوب) كائن JSON لبيانات المنشأة التي تريد حفظها.نقطة النهاية
PUT /api/marketing/designs/static/{club}/save
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/marketing/designs/static/{club}/save \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يزيل متغيرًا عيّنه المستخدم من النظام.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للمنشأة التي تقدّم الطلب. body `string` (مطلوب) JSON يحتوي على معرّف المتغير المراد إزالته.نقطة النهاية
DELETE /api/marketing/variables/{club}/delete
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/marketing/variables/{club}/delete \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد قائمة المتغيرات المتاحة لمنشأة معيّنة، والتي يمكن استخدامها داخل التصاميم (تصاميم الطباعة) المُنشأة في محرر التسويق/الطباعة في المنصة.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للمنشأة التي تقدّم الطلب.نقطة النهاية
GET /api/marketing/variables/{club}/list
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/marketing/variables/{club}/list \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
ينشئ 'متغيرًا' جديدًا واحدًا خاصًا بالمستخدم للمنشأة المحددة.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للمنشأة التي تقدّم الطلب. body `string` (مطلوب) كائن JSON للمتغير الجديد.نقطة النهاية
POST /api/marketing/variables/{club}/new
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/marketing/variables/{club}/new \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يضيف متغير تصميم واحدًا أو أكثر في النظام أو يحفظه أو يحدّثه عبر مصفوفة من الكائنات.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للمنشأة التي تقدّم الطلب. body `string` (مطلوب) مصفوفة من كائن JSON واحد أو أكثر لإضافته أو تحديثه (يتيح ذلك حفظ عدة عناصر/كائنات في طلب API واحد).نقطة النهاية
PUT /api/marketing/variables/{club}/save
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/marketing/variables/{club}/save \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد بيان وثائق MCP للمستخدم الذي سجّل الدخول
يشغّل صفحة `/mcp-docs` داخل التطبيق. يعيد عنوان URL لخادم MCP، و ترويسات المصادقة المدعومة، وهوية المستدعي وعلامة المسؤول، و قائمة الأدوات المصفّاة (تُصفّى بالطريقة نفسها في `/mcp/tools/list`، حتى لا تعرض صفحة الوثائق أبدًا أداة لا يستطيع المستدعي استخدامها فعليًا).
نقطة النهاية
GET /api/mcp/docs-manifest
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/mcp/docs-manifest \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إنشاء اتفاقية مستخدم.
المعلمات
body `object` (مطلوب) كائن JSON لبيانات المنشأة التي تريد حفظها.نقطة النهاية
POST /api/member-agreements/contracts-tna/:club
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد قائمة الاتفاقيات.
نقطة النهاية
GET /api/member-agreements/contracts-tna/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
حذف اتفاقية مستخدم.
نقطة النهاية
DELETE /api/member-agreements/contracts-tna/:club/:id
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club/:id \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد تفاصيل اتفاقية محددة.
نقطة النهاية
GET /api/member-agreements/contracts-tna/:club/:id
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club/:id \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحديث اتفاقية مستخدم.
المعلمات
body `object` (مطلوب) كائن JSON لبيانات المنشأة التي تريد حفظها.نقطة النهاية
PATCH /api/member-agreements/contracts-tna/:club/:id
مثال على الطلب
curl -X PATCH https://portal.hub.gymsystems.co/api/member-agreements/contracts-tna/:club/:id \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على الاتفاقيات الافتراضية للمنشأة.
المعلمات
body `object` (مطلوب) كائن JSON لبيانات المنشأة التي تريد حفظها.نقطة النهاية
GET /api/member-agreements/default-tna/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/member-agreements/default-tna/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تعيين الاتفاقية الافتراضية للمنشأة.
المعلمات
body `object` (مطلوب) كائن JSON لبيانات المنشأة التي تريد حفظها.نقطة النهاية
POST /api/member-agreements/default-tna/:club
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/member-agreements/default-tna/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد قائمة الاتفاقيات العامة أو الخاصة بالمنطقة.
نقطة النهاية
GET /api/member-agreements/global-tna/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/member-agreements/global-tna/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تُرجع قائمة بالأعضاء مع الاتفاقية.
نقطة النهاية
GET /api/member-agreements/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/member-agreements/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد قائمة أعضاء المنشأة حسب الموسم لتطبيق المعسكر التدريبي.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه. season `string` (اختياري) موسم المعسكر التدريبي الذي تريد التصفية حسبه. userIds `string` (اختياري) مصفوفة معرّفات المستخدمين المراد التصفية حسبها. useCache `string` (اختياري) ما إذا كان سيتم استخدام ذاكرة التخزين المؤقت. isUserMemberInfo `string` (اختياري) عند التفعيل، يصفّي البيانات بناءً على userIds (يُوصى باستخدام معرّف مستخدم واحد فقط) ويتضمن البيانات اللازمة مثل لوحة الصدارة وتفضيلات المستخدم.نقطة النهاية
GET /api/members-leads/trainingcamp/club/season-members/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/members-leads/trainingcamp/club/season-members/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يحذف عدة عملاء محتملين لحجوزات التمارين.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه. body `string` (مطلوب)نقطة النهاية
DELETE /api/members-leads/workout-booking/club/leads/{club}
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد قائمة العملاء المحتملين لحجوزات التمارين في منشأة.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه. all `string` (اختياري) لعرض جميع العملاء المحتملين أو القادمين منهم فقط.نقطة النهاية
GET /api/members-leads/workout-booking/club/leads/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يحدّث عميلًا محتملًا لحجز تمرين.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه. body `string` (مطلوب)نقطة النهاية
PUT /api/members-leads/workout-booking/club/leads/{club}
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يبدّل حالة الإشارة لعميل محتمل لحجز تمرين.
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي. body `string` (مطلوب)نقطة النهاية
PATCH /api/members-leads/workout-booking/club/leads/{club}/flag
مثال على الطلب
curl -X PATCH https://portal.hub.gymsystems.co/api/members-leads/workout-booking/club/leads/{club}/flag \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على الوحدات النمطية السارية لمنشأة
يعيد جميع الوحدات النمطية المتاحة لمنشأة بحلّ التسلسل الهرمي: تفضيلات المنشأة ← وحدات العلامة التجارية ← وحدات المنظمة. تُخزَّن النتائج مؤقتًا في Redis لتحسين الأداء.
المعلمات
facilityId `string` (مطلوب) معرّف المنشأة المراد تحديد وحداتها النمطيةنقطة النهاية
GET /api/facilities/{facilityId}/modules
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/facilities/{facilityId}/modules \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
[]
يعيد كتالوج الوحدات النمطية إضافةً إلى إعدادات عرض القائمة الجانبية. تُعاد قائمة الوحدات النمطية الكاملة حتى تتمكن أداة العرض في الواجهة الأمامية من تحديد الظهور لكل مستخدم؛ ولا تزال قوائم التحكم في الوصول (ACL) تُفرض على الخادم عبر `auth.checkModuleAccess()`.
نقطة النهاية
GET /api/modules
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/modules \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على فئات الإشعارات.
نقطة النهاية
GET /api/notification/categories
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/notification/categories \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
حذف الإشعارات المقروءة.
نقطة النهاية
DELETE /api/club/notification/consumed/:club
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/club/notification/consumed/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
ينشئ رسالة إشعار.
نقطة النهاية
POST /api/club/notification/consumed/:club
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/club/notification/consumed/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد مصفوفة الإشعارات المقروءة.
نقطة النهاية
GET /api/club/notification/consumed/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/club/notification/consumed/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
حذف رسالة إشعار.
نقطة النهاية
DELETE /api/club/notification/messages/:club
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/club/notification/messages/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد مصفوفة رسائل الإشعارات.
نقطة النهاية
GET /api/club/notification/messages/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/club/notification/messages/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يحدّث رسالة إشعار.
نقطة النهاية
PATCH /api/club/notification/messages/:club
مثال على الطلب
curl -X PATCH https://portal.hub.gymsystems.co/api/club/notification/messages/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
ينشئ رسالة إشعار.
المعلمات
body `string` (مطلوب)نقطة النهاية
POST /api/club/notification/messages/:club
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/club/notification/messages/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على مشاهدي الإشعار حسب المنشأة.
نقطة النهاية
POST /api/club/notification/viewers/:club
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/club/notification/viewers/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على فئات الإشعارات حسب المستخدم.
نقطة النهاية
GET /api/club/notification/user-categories/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/club/notification/user-categories/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
ينشئ رسالة إشعار.
نقطة النهاية
POST /api/notification/webhook
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/notification/webhook \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على مفتاح VAPID العام لإشعارات HTML5 الفورية
يعيد مفتاح VAPID العام المستخدم لإنشاء اشتراكات الإشعارات الفورية في المتصفح.
نقطة النهاية
GET /html5-push/vapid-public-key
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/html5-push/vapid-public-key \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
حفظ اشتراك إشعارات HTML5 الفورية أو تحديثه
يحفظ اشتراك الإشعارات الفورية في المتصفح للمستخدم الحالي.
نص الطلب
نقطة النهاية
POST /html5-push/subscribe
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/html5-push/subscribe \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
حذف اشتراك إشعارات HTML5 الفورية
يزيل اشتراك الإشعارات الفورية في المتصفح للمستخدم الحالي.
نص الطلب
نقطة النهاية
POST /html5-push/unsubscribe
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/html5-push/unsubscribe \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
الحصول على حالة الإعداد الأولي للموقع للمستخدم المستدعي
يعيد جزأي الإعداد الأولي لمنشأة: الإعداد (التفاصيل + اختيارات المنتجات، المخزنة في تفضيلات المنشأة) والدفع (المشتق مباشرةً من سجل إعدادات الدفع في فوترة SaaS)، إضافةً إلى علامة `required` مخصصة للمستدعي تعتمد عليها واجهة التطبيق في التقييد. للمواقع التقنية فقط؛ أما مواقع الأعمال فتعيد دائمًا required=false.
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
GET /api/onboarding/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/onboarding/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
حفظ تقدّم معالج الإعداد الأولي الجاري لمنشأة
يحفظ الحالة الجزئية للمعالج (اختيارات المنتجات، ونص "Other" الحر، وتفاصيل النشاط التجاري التي تمت مراجعتها، والخطوة الحالية) حتى يستأنف المستخدم بعد التحديث أو المغادرة من حيث توقف. لا يختم الإكمال أبدًا؛ راجع نقطة نهاية الإكمال.
المعلمات
facilityId `string` (مطلوب)نص الطلب
نقطة النهاية
PUT /api/onboarding/{facilityId}
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/onboarding/{facilityId} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
إنشاء اقتراحات تعبئة مسبقة بالذكاء الاصطناعي لمعالج الإعداد الأولي
يستخدم سياق المنشأة/العلامة التجارية/المنظمة الحالي لاقتراح تفاصيل المنشأة (نص التعريف، وحقول الاتصال بعد تنظيمها)، واختيارات المنتجات المقترحة، ونصائح قصيرة مخصصة. تُخزَّن النتائج مؤقتًا في Redis لمدة 7 أيام. الاقتراحات استشارية فقط، إذ يعرضها العميل في نموذج مراجعة قابل للتعديل. يستجيب دائمًا بـ 200؛ وتكون `suggestions` بقيمة null عندما لا يتوفر الذكاء الاصطناعي حتى يستمر المعالج بالعمل بسلاسة.
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
POST /api/onboarding/{facilityId}/ai-prefill
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/onboarding/{facilityId}/ai-prefill \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إكمال جزء الإعداد من الإعداد الأولي للموقع
يتحقق من الاختيارات/التفاصيل المؤكدة، ويحفظ تفاصيل النشاط التجاري في سجل المنشأة، ويهيئ تخطيط القائمة التقنية للمنشأة من اختيارات المنتجات (ما لم يوجد تخطيط مخصص بالفعل)، ويختم إكمال الإعداد. لا يمكن إكمال جزء الدفع هنا عمدًا، فهو مشتق مباشرةً من سجل إعدادات الدفع في فوترة SaaS، لذا لا يمكن تجاوز اشتراط البطاقة الإلزامي باستدعاء نقطة النهاية هذه. يعيد الحالة المحدّثة.
المعلمات
facilityId `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/onboarding/{facilityId}/complete
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/onboarding/{facilityId}/complete \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
تشغيل إجراء تكامل شريك مُعلَن لمنشأة
يشغّل إجراء "Run integration" المُعلَن في سجل الشريك (ph-partners.actions[])، ضمن نطاق منشأة. يمنع قفل Redis أحادي التنفيذ عمليات التشغيل اليدوية المتزامنة للإجراء والمنشأة نفسيهما.
المعلمات
partnerId `string` (مطلوب) actionId `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/partners/{partnerId}/actions/{actionId}/run
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/partners/{partnerId}/actions/{actionId}/run \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
قراءة حالة تشغيل إجراء تكامل شريك
يعيد ما إذا كان تشغيل يدوي جاريًا حاليًا (القفل أحادي التنفيذ محجوز) إضافةً إلى آخر تشغيل مطلوب، ليستطلعه زر الإعدادات.
المعلمات
partnerId `string` (مطلوب) actionId `string` (مطلوب) facilityId `string` (مطلوب)نقطة النهاية
GET /api/partners/{partnerId}/actions/{actionId}/status
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/partners/{partnerId}/actions/{actionId}/status \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على جميع إعدادات الشركاء لعلامة تجارية
المعلمات
brandId `string` (مطلوب) معرّف العلامة التجاريةنقطة النهاية
GET /api/partners/brand-config/{brandId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/partners/brand-config/{brandId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
[]
إنشاء إعدادات شريك لعلامة تجارية أو تحديثها
المعلمات
body `object` (مطلوب)نقطة النهاية
PUT /api/partners/brand-config
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/partners/brand-config \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
ترحيل بيانات تكامل GymMaster إلى facility-partner-config
يستعلم عن جميع المنشآت التي تحتوي على الحقلين gymMasterAPI وgymMasterDomain وينشئ أو يحدّث سجلات facility-partner-config المقابلة. هذه نقطة نهاية ترحيل تُستخدم مرة واحدة.
المعلمات
partnerId `string` (مطلوب) معرّف شريك GymMaster المراد استخدامه لجميع السجلات المرحَّلة dryRun `boolean` (اختياري) عند ضبطها على true، يُبلغ فقط عمّا سيتم ترحيله دون الكتابة في قاعدة البياناتنقطة النهاية
GET /api/partners/migrate-gymmaster
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/partners/migrate-gymmaster \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تفعيل شريك لمنظمة.
المعلمات
partnerId `string` (مطلوب) معرّف الشريكنقطة النهاية
POST /api/partners/organisation/enable
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/partners/organisation/enable \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد شركاء المنظمة. لا يرى مسؤولو المنظمة إلا شركاء منظمتهم.
نقطة النهاية
GET /api/partners/organisation
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/partners/organisation \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إزالة شريك من المنظمة.
المعلمات
keyId `string` (مطلوب) معرّف المفتاح لشريك المنظمة organisationId `string` (مطلوب) معرّف المنظمة للشريكنقطة النهاية
DELETE /api/partners/organisation/{keyId}
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/partners/organisation/{keyId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحديث وضع وصول شريك المنظمة ووحداته النمطية.
المعلمات
keyId `string` (مطلوب) معرّف المفتاح لشريك المنظمة organisationId `string` (مطلوب) معرّف المنظمة للشريك partnerId `string` (مطلوب) معرّف الشريك accessMode `string` (مطلوب) وضع الوصول للشريك modules `string` (اختياري) قائمة الوحدات النمطية لوضع الوصول LIMITEDنقطة النهاية
PUT /api/partners/organisation/update-access
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/partners/organisation/update-access \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إنشاء تسجيلات حضور لمنشأة
يقبل مصفوفة من كائنات تسجيل الحضور ويمرّرها إلى Partner API لمعالجتها. الحد الأقصى 25 تسجيل حضور لكل طلب.
نص الطلب
نقطة النهاية
POST /api/partners/check-ins
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/partners/check-ins \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
حذف إعدادات شريك لمنشأة
يزيل إعدادات تكامل شريك في منشأة
المعلمات
facilityId `string` (مطلوب) معرّف المنشأة (club ID) partnerId `string` (مطلوب) معرّف الشريكنقطة النهاية
DELETE /api/partners/facility-config/{facilityId}/{partnerId}
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/partners/facility-config/{facilityId}/{partnerId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد جميع إعدادات الشركاء لمنشأة
يعيد جميع تكاملات الشركاء المهيأة للمنشأة المحددة
المعلمات
facilityId `string` (مطلوب) معرّف المنشأة (club ID)نقطة النهاية
GET /api/partners/facility-config/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/partners/facility-config/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إنشاء إعدادات شريك لمنشأة أو تحديثها
يُدرج إعدادات تكامل شريك في منشأة أو يحدّثها
نص الطلب
نقطة النهاية
POST /api/partners/facility-config
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/partners/facility-config \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
حذف عضو حسب memberId
يحذف سجل عضو موجودًا باستخدام memberId.
المعلمات
memberId `string` (مطلوب) المعرّف الفريد للعضونقطة النهاية
DELETE /api/partners/members/{memberId}
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/partners/members/{memberId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحديث عضو حسب memberId
يحدّث سجل عضو موجودًا باستخدام memberId.
المعلمات
memberId `string` (مطلوب) المعرّف الفريد للعضونص الطلب
نقطة النهاية
PUT /api/partners/members/{memberId}
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/partners/members/{memberId} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
الحصول على حالة عملية مزامنة الأعضاء
يعيد الحالة الحالية لعملية إنشاء/حذف عضو غير متزامنة بدأت عبر POST /api/partners/members أو DELETE /api/partners/members/{memberId}. تستطلع الواجهة الأمامية نقطة النهاية هذه لتحلّ محل التدفق القديم القائم على استطلاع القائمة ومطابقة الأسماء. ملاحظة: تقييد partnerId/facilityId على مستوى الصف مطلوب بموجب قواعد العزل بين المستأجرين المتعددين، لكنه مؤجَّل إلى طلب سحب لتعزيز الأمان في المرحلة 3a.1، فمعرّفات operationId هي UUID بطول 128 بت والمسار مقيَّد بالفعل بالوصول إلى الوحدة النمطية `external-integrations`. يمكن لأي شخص لديه operationId صالح ووصول إلى وحدة الإدارة النمطية الاستعلام عن حالتها.
المعلمات
operationId `string` (مطلوب) قيمة UUID المُعادة من POST/DELETEنقطة النهاية
GET /api/partners/members/operations/{operationId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/partners/members/operations/{operationId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إنشاء أعضاء لمنشأة أو تحديثهم
يقبل مصفوفة من كائنات الأعضاء ويمرّرها إلى Partner API لمعالجتها. الحد الأقصى 25 عضوًا لكل طلب.
نص الطلب
نقطة النهاية
POST /api/partners/members
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/partners/members \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
إنشاء خطط عضوية لمنشأة أو تحديثها
يقبل مصفوفة من كائنات خطط العضوية ويمرّرها إلى Partner API لمعالجتها. الحد الأقصى 25 خطة عضوية لكل طلب.
نص الطلب
نقطة النهاية
POST /api/partners/membership-plans
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/partners/membership-plans \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
ينشئ دورًا جديدًا
المعلمات
body `string` (مطلوب) كائن الدورنقطة النهاية
POST /api/roles
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/roles \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد قائمة بجميع الأدوار
نقطة النهاية
GET /api/roles
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/roles \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يحذف دورًا حسب المعرّف
نقطة النهاية
DELETE /api/roles/{roleId}
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/roles/{roleId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يحدّث دورًا حسب المعرّف
المعلمات
body `string` (مطلوب) كائن الدورنقطة النهاية
PUT /api/roles/{roleId}
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/roles/{roleId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إنشاء بند إضافي جديد لفاتورة فوترة SaaS
المعلمات
organisationId `string` (اختياري) معرّف المنظمة المراد إنشاء البند الإضافي لها body `string` (اختياري) نص الطلبنقطة النهاية
POST /api/saas-billing/additional-line-items
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/saas-billing/additional-line-items \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد قائمة البنود الإضافية لفاتورة فوترة SaaS
المعلمات
organisationId `string` (مطلوب) معرّف المنظمةنقطة النهاية
GET /api/saas-billing/additional-line-items
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/additional-line-items \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد قائمة البنود الإضافية لفاتورة فوترة SaaS الخاصة بالمنشأة
نقطة النهاية
GET /api/clubs/{clubId}/saas-billing/additional-line-items
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubId}/saas-billing/additional-line-items \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يحدّث بندًا إضافيًا لفاتورة فوترة SaaS
المعلمات
itemId `string` (مطلوب) معرّف البند الإضافي المراد تحديثه body `string` (مطلوب) نص الطلبنقطة النهاية
PUT /api/saas-billing/additional-line-items/{itemId}
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/saas-billing/additional-line-items/{itemId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الأسعار بالساعة المجمّعة لـ Cloud Agent في Your Rates
يعيد أحجام Cloud Agent المعروضة بسعر واحد مجمّع بالساعة (الاستضافة + البرنامج). لا يتضمن التقسيم. usedPlans هي رموز SKU التي شغّلتها هذه المنشأة في آخر 30 يومًا.
المعلمات
clubID `string` (مطلوب)نقطة النهاية
GET /api/clubs/{clubID}/saas-billing/cloud-agent-rates
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/cloud-agent-rates \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
حذف تقرير شهري مستورد
المعلمات
club `string` (اختياري) معرّف النادي reportId `string` (اختياري) معرّف التقريرنقطة النهاية
DELETE /api/saas-billing/extended-access/monthly-usage-report/{reportId}
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/saas-billing/extended-access/monthly-usage-report/{reportId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على أحدث تقرير تخزين لـ CCTV لمنشأة
يعيد أحدث لقطة يومية لتخزين CCTV للمنشأة من سجلات الفوترة المخزنة (حتى آخر 31 يومًا). تتضمن totalStorage وdate والرسوم المتعلقة بالتخزين.
المعلمات
club `string` (مطلوب) معرّف النادينقطة النهاية
GET /api/saas-billing/extended-access/latest-cctv-storage-report/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/latest-cctv-storage-report/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد فاتورة PDF للمنشأة عن الفترة المحددة.
المعلمات
club `string` (اختياري) معرّف النادي month `string` (اختياري) شهر التقرير بتنسيق رقمي. 1 = يناير، 2 = فبراير، وهكذا. year `string` (اختياري) سنة التقرير بتنسيق رقمي، مثل 2021نقطة النهاية
GET /api/saas-billing/extended-access/monthly-usage-report/:club/invoice
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/monthly-usage-report/:club/invoice \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
حزمة من ملفات PDF لفواتير المنصة لأشهر الاستخدام المحددة، كملف ZIP. النظير المجمّع لنقطة النهاية الفردية .../invoice، ويشغّل التنزيل متعدد الاختيار في علامة التبويب Invoices & Receipts في تطبيق Billing & Cost Management.
المعلمات
club `string` (اختياري) معرّف النادي months `string` (اختياري) أشهر الاستخدام/التقارير مفصولة بفواصل بتنسيق YYYY-MM (24 كحد أقصى)نقطة النهاية
GET /api/saas-billing/extended-access/monthly-usage-report/{club}/invoices.zip
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/monthly-usage-report/{club}/invoices.zip \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد تقارير الاستخدام الشهرية لعدة أشهر استخدام في استدعاء واحد. يشغّل مخطط سجل التكاليف والفروق الشهرية في تطبيق Billing & Cost Management. تعيد الأشهر التي لا يوجد بها استخدام بعد report: null (بما يطابق استجابة 404 ← $0 في واجهة نقطة النهاية الخاصة بالشهر الواحد).
المعلمات
club `string` (اختياري) معرّف النادي months `string` (اختياري) أشهر الاستخدام مفصولة بفواصل بتنسيق YYYY-MM (12 كحد أقصى)نقطة النهاية
GET /api/saas-billing/extended-access/monthly-usage-report/{club}/batch
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/monthly-usage-report/{club}/batch \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
استيراد التقارير الشهرية للمنشأة.
المعلمات
club `string` (اختياري) معرّف النادينقطة النهاية
PUT /api/saas-billing/extended-access/usage-report/:club
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/saas-billing/extended-access/usage-report/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد تقرير CSV لاستخدام CCTV خلال آخر 30 يومًا لجميع المنشآت.
نقطة النهاية
GET /api/saas-billing/extended-access/usage-report/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/usage-report/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يسرد جميع التقارير اليومية للشهر للمنشأة.
المعلمات
club `string` (اختياري) معرّف النادي month `string` (اختياري) شهر التقرير بتنسيق رقمي. 1 = يناير، 2 = فبراير، وهكذا. year `string` (اختياري) سنة التقرير بتنسيق رقمي، مثل 2021نقطة النهاية
GET /api/saas-billing/extended-access/monthly-usage-report/{club}/daily-reports
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/monthly-usage-report/{club}/daily-reports \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد قائمة التقارير الشهرية المستوردة للمسؤول
المعلمات
organisationId `string` (مطلوب) معرّف المنظمةنقطة النهاية
GET /api/saas-billing/extended-access/usage-report/imported
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/usage-report/imported \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد تقرير CSV لاستخدام CCTV خلال آخر 30 يومًا لجميع المنشآت.
المعلمات
club `string` (اختياري) معرّف النادي month `string` (اختياري) شهر التقرير بتنسيق رقمي. 1 = يناير، 2 = فبراير، وهكذا. year `string` (اختياري) سنة التقرير بتنسيق رقمي، مثل 2021نقطة النهاية
GET /api/saas-billing/extended-access/monthly-usage-report/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/monthly-usage-report/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد تقرير الاستخدام الدوري للمنشأة.
المعلمات
club `string` (اختياري) معرّف النادي periodStart `string` (اختياري) بداية الفترة بتنسيق YYYY-MM-DD periodEnd `string` (اختياري) نهاية الفترة بتنسيق YYYY-MM-DDنقطة النهاية
GET /api/saas-billing/extended-access/periodical-usage-report/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/extended-access/periodical-usage-report/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
حزمة من ملفات PDF لمستندات الفوترة في ملف ZIP واحد، تجمع أنواعًا مختلفة من المستندات: فواتير المنصة (حسب شهر الاستخدام)، وإيصالات شحن رصيد محفظة SaaS، وإيصالات شحن رصيد Model Router. النظير المجمّع لنقطتي النهاية invoices.zip / receipts.zip الخاصتين بكل نوع، لعلامة التبويب الموحدة Invoices & Receipts. يجب أن يقابل كل شهر/معرّف مطلوب مستندًا تملكه المنشأة، وأي قيمة غير صالحة تُفشل الحزمة بأكملها.
المعلمات
clubID `string` (مطلوب) invoiceMonths `string` (اختياري) أشهر الاستخدام مفصولة بفواصل بتنسيق YYYY-MM walletIds `string` (اختياري) معرّفات معاملات شحن رصيد محفظة SaaS مفصولة بفواصل aiIds `string` (اختياري) معرّفات معاملات شحن رصيد Model Router مفصولة بفواصلنقطة النهاية
GET /api/clubs/{clubID}/saas-billing/documents.zip
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/documents.zip \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إضافة ملاحظة إلى سجل شهري
المعلمات
recordID `string` (اختياري) معرّف السجل المراد الحصول عليه note `string` (اختياري) الملاحظة المراد إضافتها إلى السجلنقطة النهاية
POST /api/saas-billing/monthly-records/{recordID}/notes
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/saas-billing/monthly-records/{recordID}/notes \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد قائمة السجلات الشهرية لفوترة SaaS
المعلمات
club `string` (اختياري) معرّف المنشأة المراد الحصول عليها month `string` (اختياري) شهر الفوترة بتنسيق YYYY-MMنقطة النهاية
GET /api/saas-billing/monthly-records/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/monthly-records/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد قائمة السجلات الشهرية لفوترة SaaS التي فشلت أو تتطلب 3D Secure
المعلمات
clubID `string` (اختياري) معرّف المنشأة المراد الحصول على سجلاتها الشهرية الفاشلةنقطة النهاية
GET /api/clubs/:clubID/saas-billing/flagged
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/:clubID/saas-billing/flagged \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد جميع السجلات الشهرية لفوترة SaaS (دفتر الفواتير) لمنشأة، بدءًا بأحدث شهر فوترة. النظير الخاص بنطاق المنشأة لنقطة النهاية paginate-monthly-records المخصصة للمسؤولين فقط، ويشغّل علامة التبويب "Invoices & Receipts" للعملاء في تطبيق Billing & Cost Management.
المعلمات
clubID `string` (اختياري) معرّف المنشأة المراد سرد سجلاتها الشهريةنقطة النهاية
GET /api/clubs/{clubID}/saas-billing/monthly-records
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/monthly-records \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد قائمة السجلات الشهرية لفوترة SaaS
المعلمات
organisationId `string` (اختياري) معرّف المنظمة month `string` (اختياري) الشهر بتنسيق MM. year `string` (اختياري) السنة بتنسيق YYYY. filters `string` (اختياري) عوامل تصفية سلسلة الاستعلام التي أنشأها Datatable. order `string` (اختياري) سلسلة الاستعلام التي أنشأها Datatable.نقطة النهاية
GET /api/saas-billing/monthly-records
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/monthly-records \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إعادة محاولة الدفعات الفاشلة لمنشأة
المعلمات
clubID `string` (اختياري) معرّف المنشأة المراد الحصول على سجلاتها الشهرية الفاشلةنقطة النهاية
PUT /api/clubs/:clubID/saas-billing/retry-failed-payments
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/:clubID/saas-billing/retry-failed-payments \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحديث سجل شهري
المعلمات
recordID `string` (اختياري) معرّف السجل المراد الحصول عليه status `string` (اختياري) الحالة المراد تحديث السجل إليهانقطة النهاية
PUT /api/saas-billing/monthly-records/{recordID}
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/saas-billing/monthly-records/{recordID} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يتحقق مما إذا كانت الدفعات قد نجحت ويحدّث حالة السجل
المعلمات
clubID `string` (اختياري) recordID `string` (اختياري) معرّف السجل المراد الحصول عليهنقطة النهاية
PUT /api/clubs/{clubID}/saas-billing/monthly-records/{recordID}/validate
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/monthly-records/{recordID}/validate \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إضافة طريقة دفع لمنشأة.
المعلمات
clubID `string` (اختياري)نقطة النهاية
POST /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/payment-methods \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يزامن طرق الدفع لمنشأة مع Stripe.
المعلمات
clubID `string` (اختياري)نقطة النهاية
PUT /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/payment-methods \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد ميزانية الإنفاق للمنشأة إضافةً إلى الإنفاق المحسوب منذ بداية الشهر (MTD) والتوقعات.
المعلمات
clubID `string` (اختياري)نقطة النهاية
GET /api/clubs/{clubID}/saas-billing/budget
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/budget \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إنشاء ميزانية الإنفاق للمنشأة أو تحديثها أو مسحها.
المعلمات
clubID `string` (اختياري) body `object` (اختياري)نقطة النهاية
PUT /api/clubs/{clubID}/saas-billing/budget
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/budget \
-H "x-api-key: YOUR_API_KEY"
حذف طريقة دفع من إعدادات الدفع للمنشأة.
المعلمات
clubID `string` (اختياري) paymentMethodID `string` (اختياري)نقطة النهاية
DELETE /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{paymentMethodID}
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{paymentMethodID} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على إعدادات الدفع لمنشأة.
المعلمات
clubID `string` (اختياري)نقطة النهاية
GET /api/clubs/{clubID}/saas-billing/payment-settings
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحديث إعدادات الدفع لمنشأة.
المعلمات
clubID `string` (اختياري) lockedOut `boolean` (اختياري) ما إذا كانت المنشأة ستُمنع من الوصول إلى النظام. pauseBilling `boolean` (اختياري) ما إذا كانت الفوترة التلقائية للمنشأة ستُوقف مؤقتًا. customerID `string` (اختياري) تؤدي إضافة هذا إلى تحديث معرّف عميل Stripe للمنشأة. deleteSourceID `string` (اختياري) ما إذا كان سيتم حذف العميل المصدر من Stripe.نقطة النهاية
PUT /api/clubs/{clubID}/saas-billing/payment-settings
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على أقدم شهر تمت فوترته لجميع المنشآت.
المعلمات
clubID `string` (اختياري)نقطة النهاية
GET /api/saas-billing/payment-settings/earliest-billed-month
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/payment-settings/earliest-billed-month \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد الحسابات التي يمكنها رفع حظر الفوترة عن منشأة، مرتبة حسب الأولوية: المستخدمون الذين يملكون وحدة الفوترة أولًا، ومسؤولو المنظمة فقط كبديل عندما لا يوجد أحد منهم.
المعلمات
clubID `string` (مطلوب)نقطة النهاية
GET /api/clubs/{clubID}/saas-billing/lockout-contacts
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/lockout-contacts \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
التنقل بين صفحات جميع المنشآت في النظام وإرجاع معرّفات العملاء لكل منشأة.
المعلمات
clubID `string` (اختياري) organisationId `string` (اختياري) معرّف المنظمةنقطة النهاية
GET /api/saas-billing/payment-settings/customer-ids
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/payment-settings/customer-ids \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تعيين طريقة الدفع الأساسية لمنشأة.
المعلمات
clubID `string` (اختياري)نقطة النهاية
PUT /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{paymentMethodID}/primary
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{paymentMethodID}/primary \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحديث ملف الفوترة لمنشأة.
المعلمات
clubID `string` (اختياري) invoiceEntity `string` (اختياري) billingContacts `string` (اختياري) قائمة معرّفات UUID لجهات اتصال KYC ccEmails `string` (اختياري) قائمة عناوين البريد الإلكتروني المراد نسخها (cc) في الفواتيرنقطة النهاية
PUT /api/clubs/{clubID}/saas-billing/payment-settings/billing-profile
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/billing-profile \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحديث طريقة دفع لمنشأة.
المعلمات
clubID `string` (اختياري) cardID `string` (اختياري)نقطة النهاية
PUT /api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{cardID}
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/payment-settings/payment-methods/{cardID} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد تفصيلًا لكل منشأة لجميع رسوم المنتجات السارية والبنود الإضافية لتصديرها بتنسيق CSV. يحلّ تسلسل التجاوز العام/الإقليمي/الخاص بالمنشأة لكل منشأة يمكن للمستخدم الوصول إليها.
المعلمات
organisationId `string` (مطلوب) معرّف المنظمة لقوائم التحكم في الوصول (ACL)نقطة النهاية
GET /api/saas-billing/charges-config/export
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/charges-config/export \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد إعدادات الرسوم لهدف محدد
المعلمات
clubId `string` (اختياري) معرّف المنشأة المراد الحصول على إعدادات رسومهانقطة النهاية
GET /api/saas-billing/charges-config/{clubId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/saas-billing/charges-config/{clubId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
ملخص فوترة المنظمة لمنظمة هذه المنشأة: نطاق الجهة الدافعة الفعلي، وأي تغيير مجدول في التوحيد، وما إذا كان يجوز للمستدعي إدارة مفتاح تبديل التوحيد.
المعلمات
clubID `string` (مطلوب)نقطة النهاية
GET /api/clubs/{clubID}/saas-billing/org/summary
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/org/summary \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
السجلات الشهرية الموحدة للمنظمة (الكشوف) مع التفصيل لكل منشأة، الأحدث أولًا. تكون فارغة حتى تتم تسوية أول شهر موحد للمنظمة.
المعلمات
clubID `string` (مطلوب)نقطة النهاية
GET /api/clubs/{clubID}/saas-billing/org/monthly-records
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/org/monthly-records \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
ملخص المحفظة المدفوعة مسبقًا: الرصيد، وخصومات الاستخدام منذ بداية الشهر، وإعدادات الشحن التلقائي للرصيد، وطريقة الفوترة.
المعلمات
clubID `string` (مطلوب)نقطة النهاية
GET /api/clubs/{clubID}/saas-billing/wallet
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
دفتر المحفظة، الأحدث أولًا. تتضمن المحافظ على مستوى المنظمة صفوف جميع المنشآت (يحمل كل صف clubID الخاص بالمنشأة التي نشأ منها).
المعلمات
clubID `string` (مطلوب) limit `string` (اختياري) types `string` (اختياري) أنواع المعاملات مفصولة بفواصل from `string` (اختياري) to `string` (اختياري) cursor `string` (اختياري) قيمة nextCursor من صفحة سابقةنقطة النهاية
GET /api/clubs/{clubID}/saas-billing/wallet/transactions
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/transactions \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إيصال PDF يحمل العلامة التجارية لمعاملة محفظة واحدة (عمليات شحن الرصيد والأرصدة الدائنة).
المعلمات
clubID `string` (مطلوب) txId `string` (مطلوب)نقطة النهاية
GET /api/clubs/{clubID}/saas-billing/wallet/transactions/{txId}/receipt.pdf
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/transactions/{txId}/receipt.pdf \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
حزمة من إيصالات PDF التي تحمل العلامة التجارية لمعاملات شحن رصيد المحفظة المحددة، كملف ZIP. يجب أن يكون كل معرّف عملية شحن رصيد (بالبطاقة أو بالفاتورة) تابعة لمحفظة هذه المنشأة، أما خصومات الاستخدام والتسويات فلا إيصالات لها وتُرفض.
المعلمات
clubID `string` (مطلوب) ids `string` (مطلوب) معرّفات المعاملات مفصولة بفواصل (50 كحد أقصى)نقطة النهاية
GET /api/clubs/{clubID}/saas-billing/wallet/transactions/receipts.zip
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/transactions/receipts.zip \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
خصم مبلغ من بطاقة مخزنة لفوترة SaaS لإضافة رصيد مدفوع مسبقًا. يعيد requires_action + clientSecret عند الحاجة إلى 3DS.
المعلمات
clubID `string` (مطلوب) body `object` (اختياري)نقطة النهاية
POST /api/clubs/{clubID}/saas-billing/wallet/topup
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/topup \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إتمام شحن رصيد المحفظة بعد أن يُكمل التطبيق مصادقة 3DS. متساوي القوة (idempotent).
المعلمات
clubID `string` (مطلوب)نقطة النهاية
POST /api/clubs/{clubID}/saas-billing/wallet/topup/confirm
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/topup/confirm \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحديث قاعدة الشحن التلقائي للرصيد للمنشأة (المخزنة في صف تجاوز ملف الفوترة الخاص بها).
المعلمات
clubID `string` (مطلوب) body `object` (اختياري)نقطة النهاية
PATCH /api/clubs/{clubID}/saas-billing/wallet/auto-topup
مثال على الطلب
curl -X PATCH https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/auto-topup \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
فواتير شحن رصيد محفظة هذه المنشأة (طريقة الدفع بالفاتورة)، الأحدث أولًا.
المعلمات
clubID `string` (مطلوب)نقطة النهاية
GET /api/clubs/{clubID}/saas-billing/wallet/invoices
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/invoices \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
طلب فاتورة شحن رصيد للدفع بالرقم المرجعي (لطريقة الدفع بالفاتورة فقط). فاتورة معلّقة واحدة كحد أقصى لكل محفظة، ويعيد الطلب الثاني الفاتورة الموجودة مع alreadyPending=true.
المعلمات
clubID `string` (مطلوب) body `string` (اختياري) { amountCents: number }نقطة النهاية
POST /api/clubs/{clubID}/saas-billing/wallet/topup-invoice
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/clubs/{clubID}/saas-billing/wallet/topup-invoice \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد قائمة الطلبات للمنشأة.
المعلمات
facilityID `string` (اختياري)نقطة النهاية
GET /api/store/facilities/:facilityID/orders
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/store/facilities/:facilityID/orders \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد قائمة المنتجات المتاحة للمنشأة.
المعلمات
clubID `string` (مطلوب) search `string` (اختياري) limit `string` (اختياري) page `string` (اختياري) رقم الصفحة لتقسيم الصفحات (يبدأ من 1).نقطة النهاية
GET /api/store/clubs/{clubID}/products
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/store/clubs/{clubID}/products \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد سجلات Stripe للمنشأة.
المعلمات
club `string` (مطلوب) fromDate `string` (اختياري) طابع زمني Unix toDate `string` (اختياري) طابع زمني Unix socketID `string` (مطلوب) معرّف فريد لطلب المقبسنقطة النهاية
GET /api/club/{club}/stripe/records
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/club/{club}/stripe/records \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إلغاء نية دفع
المعلمات
club `string` (مطلوب) paymentIntent `string` (اختياري)نقطة النهاية
GET /api/club/{club}/stripe/payment-intent/:paymentIntent/cancel
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/club/{club}/stripe/payment-intent/:paymentIntent/cancel \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إنشاء جلسة حساب Stripe للمكونات المضمّنة
ينشئ جلسة حساب Stripe لحساب متصل. يعيد client_secret يُستخدم لتهيئة مكونات Connect المضمّنة (النزاعات، والمدفوعات، وإدارة الحساب، والمستندات).
نص الطلب
نقطة النهاية
POST /api/stripe/account-session
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/stripe/account-session \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
ينشئ رابطًا لمرة واحدة لصفحة KYC في Stripe لحساب متصل.
المعلمات
club `string` (مطلوب)نقطة النهاية
GET /api/club/{club}/stripe/generate-kyc-token
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/club/{club}/stripe/generate-kyc-token \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يحصل على تفاصيل حساب Stripe المتصل كجزء من عملية KYC.
المعلمات
club `string` (مطلوب)نقطة النهاية
GET /api/club/{club}/stripe/connect-account-details
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/club/{club}/stripe/connect-account-details \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يعيد سجل جميع التذاكر بناءً على معرّف المنشأة
المعلمات
club `string` (مطلوب) المعرّف الداخلي للنادي الذي تريد الوصول إليه.نقطة النهاية
GET /api/ticketing/clubtickets/{club}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/ticketing/clubtickets/{club} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يحصل على الأقسام
نقطة النهاية
GET /api/ticketing/departments
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/ticketing/departments \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يحصل على تفاصيل تذكرة واحدة
المعلمات
user `string` (مطلوب) البريد الإلكتروني للمستخدم. ticketNumber `string` (مطلوب) المعرّف المكوّن من 6 أرقام للتذكرة التي تريد الوصول إليها. club `string` (مطلوب) معرّف المنشأة المحددة.نقطة النهاية
GET /api/ticketing/ticket-details/:ticketNumber/:club
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/ticketing/ticket-details/:ticketNumber/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يحصل على الموضوعات
نقطة النهاية
GET /api/ticketing/topics
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/ticketing/topics \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يحصل على جميع التذاكر التي أنشأها المستخدم الحالي الذي سجّل الدخول. ملاحظة: يُحدَّد ذلك من الترويسات التي توفرها خدمة Google SSO لدينا.
المعلمات
user `string` (مطلوب) البريد الإلكتروني للمستخدم الذي سجّل الدخول حاليًانقطة النهاية
GET /api/ticketing/usertickets
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/ticketing/usertickets \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
ينشئ تذكرة جديدة
المعلمات
club `string` (مطلوب) معرّف المنشأة المحددة.نقطة النهاية
POST /api/ticketing/clubticket/:club
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/ticketing/clubticket/:club \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
ينشئ تذكرة جديدة
المعلمات
subject `string` (مطلوب) موضوع التذكرة. message `string` (مطلوب) الرسالة الكاملة للتذكرة.نقطة النهاية
POST /api/ticketing/userticket
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/ticketing/userticket \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
ينشئ ردًا على تذكرة موجودة
المعلمات
subject `string` (مطلوب) موضوع التذكرة. message `string` (مطلوب) الرسالة الكاملة للتذكرة.نقطة النهاية
POST /api/ticketing/user-reply
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/ticketing/user-reply \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يسترد تفضيلات المستخدم
نقطة النهاية
GET /api/user-preferences
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/user-preferences \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يحدّث تفضيلات المستخدم
المعلمات
body `string` (مطلوب)نقطة النهاية
PUT /api/user-preferences
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/user-preferences \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تغيير كلمة مرور المستخدم
يغيّر كلمة مرور المستخدم. يتطلب التحقق برمز OTP إذا كان للمستخدم رقم هاتف، أو يتطلب إضافة رقم هاتف إذا لم يكن موجودًا.
نص الطلب
نقطة النهاية
POST /api/user/change-password
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/user/change-password \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
التحقق من حالة المصادقة الثنائية للمستخدم
يعيد ما إذا كانت المصادقة الثنائية مفعّلة للمستخدم وما إذا كان أي من أدواره يفرضها
نقطة النهاية
GET /api/user/check-2fa-status
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/user/check-2fa-status \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد المنظمات والمنشآت والمناطق التي يمكن للمستخدم الوصول إليها لوحدة نمطية محددة.
المعلمات
moduleId `string` (مطلوب)نقطة النهاية
POST /api/user/me/modules/{moduleId}/org-access
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/user/me/modules/{moduleId}/org-access \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
ينشئ 'طلب ربط' من مستخدم نهائي يطلب 'الانضمام' إلى منشأة.
المعلمات
body `string` (مطلوب) كائن JSON للنادي الجديد المراد إضافته إلى النظام.نقطة النهاية
POST /api/user/linkclub
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/user/linkclub \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
يسرد جميع المنشآت المصرّح بها للمستخدم.
نقطة النهاية
GET /api/user/listauthorised
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/user/listauthorised \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إرسال رمز OTP عبر قناتين (البريد الإلكتروني + SMS)
يرسل رموز OTP إلى عنوان البريد الإلكتروني للمستخدم وإلى رقم هاتف محدد معًا. يُستخدم للعمليات عالية الأمان مثل التحقق من رقم الهاتف لأول مرة. ترسل نقطة النهاية هذه رموز OTP فقط ولا تعدّل أي بيانات للمستخدم.
نص الطلب
نقطة النهاية
POST /api/user/send-dual-otp
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/user/send-dual-otp \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
إرسال رمز OTP إلى رقم الهاتف أو البريد الإلكتروني
يرسل رمز OTP إلى رقم هاتف المستخدم (SMS) أو عنوان بريده الإلكتروني للتحقق
نص الطلب
نقطة النهاية
POST /api/user/send-otp
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/user/send-otp \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
التحقق مما إذا كان لدى المستخدم وصول صالح إلى الصفحات الحساسة
يعيد ما إذا كان لدى المستخدم جلسة صالحة متحقق منها برمز OTP للوصول إلى الصفحات الحساسة
نقطة النهاية
GET /api/user/sensitive-page-access
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/user/sensitive-page-access \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
التحقق من رمز OTP ومنح الوصول إلى الصفحات الحساسة
يتحقق من رمز OTP ويمنح وصولًا لمدة ساعة واحدة إلى الصفحات الحساسة إذا كان صالحًا
نص الطلب
نقطة النهاية
POST /api/user/sensitive-page-access/verify
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/user/sensitive-page-access/verify \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
إلغاء الوصول إلى الصفحات الحساسة (تسجيل الخروج من الصفحات الحساسة)
يلغي جلسة الوصول الحالية للمستخدم إلى الصفحات الحساسة
نقطة النهاية
POST /api/user/sensitive-page-access/revoke
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/user/sensitive-page-access/revoke \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تفعيل المصادقة الثنائية أو تعطيلها
يفعّل المصادقة الثنائية للمستخدم أو يعطّلها. يتطلب رقم هاتف والتحقق برمز OTP.
نص الطلب
نقطة النهاية
POST /api/user/toggle-2fa
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/user/toggle-2fa \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
تحديث المستخدم لملفه الشخصي
يتيح للمستخدم تحديث معلومات ملفه الشخصي (الاسم الأول، واسم العائلة، ورقم الهاتف). عند إضافة رقم هاتف لأول مرة، يلزم التحقق برمز OTP عبر قناتين (رمزا البريد الإلكتروني وSMS معًا). عند تغيير رقم هاتف موجود، يلزم رمز OTP عبر البريد الإلكتروني فقط.
نص الطلب
نقطة النهاية
PATCH /api/user/update-profile
مثال على الطلب
curl -X PATCH https://portal.hub.gymsystems.co/api/user/update-profile \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
استرداد أيقونة بناءً على عنوان URL.
نقطة النهاية
GET /api/website-icon
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/website-icon \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد قوالب إدخالات خزنة كلمات المرور
المعلمات
organisationId `string` (اختياري) سياق المنظمة لعمليات التحقق من الوصول إلى الوحدات النمطيةنقطة النهاية
GET /api/vault/templates
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/vault/templates \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد إدخالات خزنة كلمات المرور المرئية
المعلمات
organisationId `string` (مطلوب) scope `string` (اختياري)نقطة النهاية
GET /api/vault/entries
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/vault/entries \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إنشاء إدخال في خزنة كلمات المرور
نقطة النهاية
POST /api/vault/entries
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/vault/entries \
-H "x-api-key: YOUR_API_KEY"
الحصول على إدخال في خزنة كلمات المرور دون كشف القيم السرية
المعلمات
entryId `string` (مطلوب) organisationId `string` (مطلوب)نقطة النهاية
GET /api/vault/entries/{entryId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/vault/entries/{entryId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تحديث إدخال في خزنة كلمات المرور
نقطة النهاية
PUT /api/vault/entries/{entryId}
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/vault/entries/{entryId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
حذف إدخال من خزنة كلمات المرور
نقطة النهاية
DELETE /api/vault/entries/{entryId}
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/vault/entries/{entryId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
كشف الحقول المخفية أو السرية المحددة
نقطة النهاية
POST /api/vault/entries/{entryId}/reveal
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/vault/entries/{entryId}/reveal \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد ملخصات مجلدات خزنة كلمات المرور
نقطة النهاية
GET /api/vault/folders
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/vault/folders \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد الإدخالات التي تحتوي على رموز المصادقة
نقطة النهاية
GET /api/vault/authenticator
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/vault/authenticator \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد أنواع عُقد سير العمل المسجلة
نقطة النهاية
GET /api/workflow-engine/node-types
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/node-types \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على إسقاط ساعات عمل المنشأة الذي تستخدمه كتل سير العمل
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
GET /api/workflow-engine/facility-hours/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/facility-hours/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
معاينة مُرسِل رسائل البريد الإلكتروني لسير العمل الذي يحمل العلامة التجارية للمنشأة
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
GET /api/workflow-engine/email-branding/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/email-branding/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد موارد المنشأة لتهيئة المشغّلات
المعلمات
facilityId `string` (مطلوب) resourceType `string` (مطلوب)نقطة النهاية
GET /api/workflow-engine/resources/{facilityId}/{resourceType}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/resources/{facilityId}/{resourceType} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد مسارات سير العمل لمنشأة
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
GET /api/workflow-engine/workflows/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إنشاء مسودة سير عمل من رسم بياني غير فارغ
يحتفظ المحرر بسير العمل الجديد محليًا حتى يحتوي على كتلة واحدة على الأقل، لذا ينشئه الحفظ الأول مع رسمه البياني في استدعاء واحد. يُرفض النص الذي لا يحتوي على `nodes` بدلًا من تخزينه.
المعلمات
facilityId `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/workflow-engine/workflows/{facilityId}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
سرد بيانات الاعتماد التي يمكن لمسارات سير العمل في منشأة استخدامها
يعيد بيانات الاعتماد الخاصة بالمنشأة إضافةً إلى أي بيانات اعتماد مشتركة على مستوى علامتها التجارية أو منظمتها. لا تُعاد الأسرار أبدًا؛ ويُبلغ `hasValue` فقط بوجود سرّ مخزَّن.
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
GET /api/workflow-engine/credentials/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/credentials/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إنشاء بيانات اعتماد لسير العمل
يأتي مستوى النطاق من `scopeType`؛ وتُحدَّد معرّفات العلامة التجارية والمنظمة من المنشأة بدلًا من قبولها من المستدعي.
المعلمات
facilityId `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/workflow-engine/credentials/{facilityId}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/credentials/{facilityId} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
إعدادات سير العمل على مستوى المنشأة (مستلمو إشعارات الفشل)
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
GET /api/workflow-engine/facility-settings/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/facility-settings/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تخزين مستلمي إشعارات الفشل على مستوى المنشأة
المعلمات
facilityId `string` (مطلوب)نص الطلب
نقطة النهاية
PUT /api/workflow-engine/facility-settings/{facilityId}
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/workflow-engine/facility-settings/{facilityId} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
استبدال بيانات اعتماد سير العمل
تُبقي قيمة `secret` الفارغة على السرّ المخزَّن، لذا يمكن إعادة تسمية بيانات الاعتماد دون إعادة إدخاله. لا توجد طريقة لقراءة السرّ مرة أخرى.
المعلمات
facilityId `string` (مطلوب) credentialId `string` (مطلوب)نقطة النهاية
PUT /api/workflow-engine/credentials/{facilityId}/{credentialId}
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/workflow-engine/credentials/{facilityId}/{credentialId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
حذف بيانات اعتماد سير العمل
تفشل العُقد التي تشير إليها بشكل مغلق عند الاستدعاء التالي، بما في ذلك في مسارات سير العمل المنشورة بالفعل، لأن اللقطة تخزّن المرجع فقط.
المعلمات
facilityId `string` (مطلوب) credentialId `string` (مطلوب)نقطة النهاية
DELETE /api/workflow-engine/credentials/{facilityId}/{credentialId}
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/workflow-engine/credentials/{facilityId}/{credentialId} \
-H "x-api-key: YOUR_API_KEY"
الحصول على عنوان URL لخطاف الويب لمشغّل سير العمل
المعلمات
facilityId `string` (مطلوب) workflowId `string` (مطلوب) nodeId `string` (مطلوب)نقطة النهاية
GET /api/workflow-engine/workflows/{facilityId}/{workflowId}/nodes/{nodeId}/webhook
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/nodes/{nodeId}/webhook \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تدوير عنوان URL لخطاف الويب لمشغّل سير العمل
يُبطل عنوان URL السابق فورًا.
المعلمات
facilityId `string` (مطلوب) workflowId `string` (مطلوب) nodeId `string` (مطلوب)نقطة النهاية
POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/nodes/{nodeId}/webhook/rotate
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/nodes/{nodeId}/webhook/rotate \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
الحصول على سير عمل حسب المعرّف
المعلمات
facilityId `string` (مطلوب) workflowId `string` (مطلوب)نقطة النهاية
GET /api/workflow-engine/workflows/{facilityId}/{workflowId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إنشاء مسودة سير عمل أو تحديثها
المعلمات
facilityId `string` (مطلوب) workflowId `string` (مطلوب)نص الطلب
نقطة النهاية
PUT /api/workflow-engine/workflows/{facilityId}/{workflowId}
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
تحديث اسم سير العمل و/أو وصفه
المعلمات
facilityId `string` (مطلوب) workflowId `string` (مطلوب)نص الطلب
نقطة النهاية
PATCH /api/workflow-engine/workflows/{facilityId}/{workflowId}
مثال على الطلب
curl -X PATCH https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
حذف سير عمل وإصداراته
المعلمات
facilityId `string` (مطلوب) workflowId `string` (مطلوب)نقطة النهاية
DELETE /api/workflow-engine/workflows/{facilityId}/{workflowId}
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تكرار سير عمل في مسودة جديدة غير نشطة
المعلمات
facilityId `string` (مطلوب) workflowId `string` (مطلوب)نقطة النهاية
POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/duplicate
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/duplicate \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
نشر المسودة الحالية (لقطة إصدار غير قابلة للتغيير)
المعلمات
facilityId `string` (مطلوب) workflowId `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/publish
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/publish \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
إعادة تعيين المسودة إلى آخر إصدار منشور
المعلمات
facilityId `string` (مطلوب) workflowId `string` (مطلوب)نقطة النهاية
POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/discard
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/discard \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تفعيل سير عمل أو تعطيله
المعلمات
facilityId `string` (مطلوب) workflowId `string` (مطلوب)نص الطلب
نقطة النهاية
PATCH /api/workflow-engine/workflows/{facilityId}/{workflowId}/active
مثال على الطلب
curl -X PATCH https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/active \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
إنشاء رسم بياني لسير العمل أو مراجعته بالذكاء الاصطناعي
المعلمات
facilityId `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/workflow-engine/generate/{facilityId}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/generate/{facilityId} \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
سرد النماذج التي يمكن لعقدة Agent العمل عليها لهذه المنشأة
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
GET /api/workflow-engine/agent-models/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-models/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد أدوات MCP التي يمكن لعقدة Agent إرفاقها لهذه المنشأة
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
GET /api/workflow-engine/agent-tools/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-tools/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
البحث في محادثات Agent المحفوظة لهذه المنشأة (روابط مفاتيح Conversation)
المعلمات
facilityId `string` (مطلوب) deviceId `string` (اختياري) تقييد النتائج بمحادثات جهاز Agent واحد (قيمة deviceId المهيأة للعقدة) q `string` (اختياري) مطابقة سلسلة جزئية غير حساسة لحالة الأحرف في مفتاح Conversation أو معرّف الجلسة أو اسم الجهاز limit `integer` (اختياري) offset `integer` (اختياري)نقطة النهاية
GET /api/workflow-engine/agent-conversations/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-conversations/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
البحث في المحادثات المحفوظة على جهاز Agent الخاص بالمنشأة نفسه
يسرد جلسات الجهاز نفسه (محادثات الشريط الجانبي في واجهة Agent) حتى يتمكن سير العمل من مواصلة محادثة موجودة مع سياقها. الجهاز هو مالك السجل؛ وعندما تحتوي المنشأة على عدة أجهزة، يحدد `deviceId` الجهاز المقصود (الجهاز المهيأ للعقدة). الجهاز الذي يتعذر الوصول إليه ← 502.
المعلمات
facilityId `string` (مطلوب) deviceId `string` (اختياري) جهاز Agent المهيأ للعقدة؛ احذفه لتحديد الجهاز الوحيد في المنشأة q `string` (اختياري) مطابقة سلسلة جزئية غير حساسة لحالة الأحرف في عنوان الجلسة أو معرّفها limit `integer` (اختياري) offset `integer` (اختياري)نقطة النهاية
GET /api/workflow-engine/agent-device-sessions/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/agent-device-sessions/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
البحث في لوحات كانبان على جهاز Agent الخاص بالمنشأة
يغذّي أداة اختيار Board ID في كتلة Agent: Kanban. مطابقة سلسلة جزئية غير حساسة لحالة الأحرف في اسم اللوحة أو المعرّف النصي (slug)؛ و`current` هو المعرّف النصي للوحة النشطة على الجهاز حتى تتمكن أداة اختيار المهام من اعتماده نطاقًا افتراضيًا. عندما تحتوي المنشأة على عدة أجهزة، يحدد `deviceId` الجهاز المقصود. الجهاز الذي يتعذر الوصول إليه ← 502.
المعلمات
facilityId `string` (مطلوب) deviceId `string` (اختياري) جهاز Agent المهيأ للعقدة؛ احذفه لتحديد الجهاز الوحيد في المنشأة q `string` (اختياري) مطابقة سلسلة جزئية غير حساسة لحالة الأحرف في اسم اللوحة أو المعرّف النصي (slug) limit `integer` (اختياري) offset `integer` (اختياري)نقطة النهاية
GET /api/workflow-engine/kanban-boards/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/kanban-boards/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
البحث في مهام لوحة واحدة على لوحة كانبان في جهاز Agent الخاص بالمنشأة
يغذّي أداة اختيار Task ID في كتلة Agent: Kanban. مطابقة سلسلة جزئية غير حساسة لحالة الأحرف في معرّف المهمة أو عنوانها أو نصها؛ والمهام محفوظة لكل لوحة (لا يدعم الجهاز البحث عبر اللوحات)، لذا يحدد `board` نطاق الجلب، واحذفه لاستخدام اللوحة النشطة على الجهاز. الجهاز الذي يتعذر الوصول إليه ← 502.
المعلمات
facilityId `string` (مطلوب) deviceId `string` (اختياري) جهاز Agent المهيأ للعقدة؛ احذفه لتحديد الجهاز الوحيد في المنشأة board `string` (اختياري) المعرّف النصي (slug) للوحة المراد سردها؛ احذفه لاستخدام اللوحة النشطة على الجهاز q `string` (اختياري) مطابقة سلسلة جزئية غير حساسة لحالة الأحرف في معرّف المهمة أو عنوانها أو نصها limit `integer` (اختياري) offset `integer` (اختياري)نقطة النهاية
GET /api/workflow-engine/kanban-tasks/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/kanban-tasks/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد قوالب سير العمل المنتقاة، مصفّاة لهذه المنشأة
المعلمات
facilityId `string` (مطلوب)نقطة النهاية
GET /api/workflow-engine/templates/{facilityId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/templates/{facilityId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إنشاء جزء رسم بياني من قالب للمسودة المفتوحة
المعلمات
facilityId `string` (مطلوب) templateId `string` (مطلوب)نقطة النهاية
POST /api/workflow-engine/templates/{facilityId}/{templateId}
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/templates/{facilityId}/{templateId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سياق أداة اختيار النطاق لصفحة إدارة القوالب (مستويات الإدارة)
نقطة النهاية
GET /api/workflow-engine/template-admin/context
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/context \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
سرد القوالب التي يمكن للمستدعي إدارتها، مع علامات الأذونات
نقطة النهاية
GET /api/workflow-engine/template-admin
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/template-admin \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إنشاء قالب (مستويات الإدارة)
نص الطلب
نقطة النهاية
POST /api/workflow-engine/template-admin
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/template-admin \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
تفاصيل القالب بما في ذلك الرسم البياني، لمحرر الإدارة
نقطة النهاية
GET /api/workflow-engine/template-admin/{templateId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/{templateId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
استبدال قالب (المنظمة المالكة)
نقطة النهاية
PUT /api/workflow-engine/template-admin/{templateId}
مثال على الطلب
curl -X PUT https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/{templateId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
حذف مرن لقالب (المنظمة المالكة)
نقطة النهاية
DELETE /api/workflow-engine/template-admin/{templateId}
مثال على الطلب
curl -X DELETE https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/{templateId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
تكرار قالب مرئي في نطاق هدف يمكن للمستدعي استخدامه
نص الطلب
نقطة النهاية
POST /api/workflow-engine/template-admin/{templateId}/duplicate
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/template-admin/{templateId}/duplicate \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
تشغيل الرسم البياني المنشور لسير عمل من مشغّل يدوي
المعلمات
facilityId `string` (مطلوب) workflowId `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/run
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/run \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
اختبار المسودة المحفوظة دون نشرها
ينفّذ الرسم البياني للمسودة الحالية ويسجّل النتيجة مع `mode: test` ودون `versionId`. لا تُمسّ أبدًا عملية النشر، أو علامة التشغيل الفعلي، أو `publishedVersionId`. تُحاكى الآثار الجانبية افتراضيًا؛ ويتطلب `sideEffects: live` إضافةً إلى ذلك `confirmLiveSideEffects: true`.
المعلمات
facilityId `string` (مطلوب) workflowId `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/test
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/test \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
اختبار عقدة سير عمل واحدة مدرجة في قائمة السماح
ينفّذ عقدة واحدة قابلة للاختبار بشكل مستقل من المسودة المحفوظة. يمكن تقديم قيم المتغيرات من خطوات التشغيل المسجّلة. تتطلب طرق HTTP التي تُجري تعديلات تأكيدًا صريحًا.
المعلمات
facilityId `string` (مطلوب) workflowId `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/test-node
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/test-node \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
سرد عمليات التشغيل الأخيرة لسير عمل
المعلمات
facilityId `string` (مطلوب) workflowId `string` (مطلوب)نقطة النهاية
GET /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/runs \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
قراءة عملية تشغيل واحدة (الحالة + الخطوات المرتبة)
المعلمات
facilityId `string` (مطلوب) workflowId `string` (مطلوب) executionId `string` (مطلوب)نقطة النهاية
GET /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إلغاء خطوة Delay المعلّقة التي تنتظر عندها عملية تشغيل
المعلمات
facilityId `string` (مطلوب) workflowId `string` (مطلوب) executionId `string` (مطلوب)نقطة النهاية
POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}/cancel
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}/cancel \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
إعادة تشغيل عملية تشغيل منتهية من حمولة المشغّل المسجّلة
يعيد `mode: published` تنفيذ الإصدار نفسه الذي ثُبّتت عليه عملية التشغيل الأصلية، مع آثار جانبية حقيقية. ويعيد `mode: draft-test` تنفيذ المسودة الحالية كاختبار محاكى. لا يمكن إعادة تشغيل عملية تشغيل اقتُطعت حمولة مشغّلها عند الكتابة.
المعلمات
facilityId `string` (مطلوب) workflowId `string` (مطلوب) executionId `string` (مطلوب)نص الطلب
نقطة النهاية
POST /api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}/retry
مثال على الطلب
curl -X POST https://portal.hub.gymsystems.co/api/workflow-engine/workflows/{facilityId}/{workflowId}/runs/{executionId}/retry \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
الاستجابة
{}
بحث مفهرس عن مسارات سير العمل التي تحتوي على نوع عقدة
المعلمات
nodeType `string` (مطلوب) facilityId `string` (اختياري) organisationId `string` (اختياري)نقطة النهاية
GET /api/workflow-engine/master-view/{nodeType}
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/api/workflow-engine/master-view/{nodeType} \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
وكيل إعادة توجيه OAuth بعلامة تجارية مخصصة (Connected Apps)
إعادة توجيه 302 عامة دون مصادقة تمرّر رد اتصال موفّر OAuth إلى رد اتصال المصادقة في منصة الأدوات المصدرية، مع الحفاظ على سلسلة الاستعلام. تتيح لتطبيقات OAuth المملوكة لـ PH تسجيل عنوان URI لإعادة التوجيه على performancehub.co حتى لا يظهر نطاق المورّد المصدري أبدًا في شريط العنوان (مطلوب لمشروع تطبيقات OAuth المخصصة المستقبلي؛ ولا ضرر منه في ظل المصادقة المُدارة).
نقطة النهاية
GET /guest/connected-apps/oauth-callback
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/guest/connected-apps/oauth-callback \
-H "x-api-key: YOUR_API_KEY"
صفحة إنهاء سلسلة الاتصال (Connected Apps)
صفحة خفيفة تفيد بأنه "يمكنك إغلاق هذه النافذة" لعلامة تبويب OAuth التي جرت فيها سلسلة الاتصال. ترسل النتيجة (المجموعة/حزمة الأدوات المتصلة + معرّفات الحسابات الجديدة، أو حزمة الأدوات التي فشلت) إلى علامة تبويب السوق عبر window.opener.postMessage من الأصل نفسه؛ وعند انقطاع الصلة بالنافذة الأصلية، ترجع إلى رابط عميق إلى تطبيق ph-ai-agent يعيد إنتاج الصفحة داخل التطبيق. لأغراض إعلامية فقط: لا تحتفظ بأي أسرار ولا تُجري أي عمليات كتابة.
المعلمات
connected `string` (اختياري) معرّف المجموعة أو المعرّف النصي لحزمة الأدوات التي انتهى اتصالها (حالة النجاح). accounts `string` (اختياري) معرّفات الحسابات المتصلة التي أنشأتها السلسلة، مفصولة بفواصل. connectError `string` (اختياري) المعرّف النصي لحزمة الأدوات التي فشلت خطوتها (حالة الفشل).نقطة النهاية
GET /guest/connected-apps/finish
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/guest/connected-apps/finish \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}
رد اتصال سلسلة ربط المجموعة (Connected Apps)
خطوة رد اتصال OAuth لتدفق ربط المجموعة بنقرة واحدة. يرمّز JWT الحالة الموقّع (HS256، مدة صلاحية 30 دقيقة) القيم { clubID, deviceId, suite, toolkits, step, caids }: تتصل الحسابات بجهاز الوكيل الواحد هذا، وتجمع caids معرّفات الحسابات التي أنشأتها كل خطوة (تحملها إعادة التوجيه الأخيرة إلى التطبيق حتى يعرض السوق تسمية الحسابات الجديدة). يضع على حزمة أدوات الخطوة علامة الاتصال، ثم يعيد التوجيه (302) إلى Connect Link لحزمة الأدوات التالية، أو إلى صفحة تطبيق ph-ai-agent (برابط عميق إلى الوكيل) عند انتهاء المجموعة. تمر عمليات ربط حزمة أدوات واحدة عبر المعالج نفسه بمجموعة من حزمة أدوات واحدة.
المعلمات
state `string` (مطلوب) JWT حالة سلسلة الاتصال الموقّع.نقطة النهاية
GET /guest/connected-apps/connect-next
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/guest/connected-apps/connect-next \
-H "x-api-key: YOUR_API_KEY"
إرسال رسالة البريد الإلكتروني لإعداد كلمة المرور
يتحقق من الرابط الموقّع في رسالة الترحيب، ويرسل رسالة بريد إلكتروني لإعادة تعيين كلمة المرور، ويعرض صفحة تأكيد. لا يتطلب مصادقة.
المعلمات
email `string` (مطلوب) عنوان البريد الإلكتروني للمستخدم sig `string` (مطلوب) توقيع HMAC للبريد الإلكترونينقطة النهاية
GET /guest/setup-password
مثال على الطلب
curl -X GET https://portal.hub.gymsystems.co/guest/setup-password \
-H "x-api-key: YOUR_API_KEY"
الاستجابة
{}