مرجع API
يقع REST API الخاص بـ AY-Robots تحت https://www.ay-robots.com/api ويتحدث JSON في الاتجاهين. توثّق هذه الصفحة المصادقة، واتفاقيات الاستجابة، وكل نقطة نهاية، مع توثيق كامل للمعاملات للمسارات الأكثر احتمالاً أن تستدعيها برمجياً.
آخر تحديث 2026-08-09
المصادقة
تتطلب كل نقطة نهاية مصادقة ما لم تكن مُدرَجة في قسم Public. يقبل API نوعين من بيانات الاعتماد، وكلاهما يصل بالطريقة نفسها: إما كـ session cookie ترسلها لوحة التحكم أصلاً، أو كـ Authorization header برمز Bearer.
| الطريقة | كيف تعمل | استخدمها لـ |
|---|---|---|
| جلسة المتصفح | رمز جلسة Supabase لحسابك المسجَّل دخوله، يُرسَل كـ cookie أو كرمز Bearer | لوحة التحكم نفسها والتجارب السريعة من سياق متصفح مُصادَق عليه |
| مفتاح API | مفتاح بالبادئة ayr_live_، يُنشأ في /dashboard/settings ويُرسَل كرمز Bearer | البرامج النصية، الخوادم، CI، وكل ما يجب ألا يعتمد على تسجيل دخول في المتصفح |
| MCP | خادم MCP المُستضاف على https://www.ay-robots.com/api/mcp (Streamable HTTP) | وكلاء LLM والأدوات التي تتحدث Model Context Protocol |
curl https://www.ay-robots.com/api/sessions \
-H 'Authorization: Bearer ayr_live_your_key_here'تُنشأ مفاتيح API وتُلغى في /dashboard/settings. عاملها مثل كلمات المرور: احتفظ بها على جانب الخادم، وارفع بديلاً قبل إلغاء المفتاح القديم عند التدوير. إن كنت تستخدم CLI سطح المكتب، فيمكنه أيضاً إظهار المنصة كخادم MCP محلي بالأمر: ay-robots mcp.
الاستجابات بصيغة JSON. تستخدم الأخطاء شكلاً متسقاً: كائن JSON بحقل error واحد يحتوي رسالة مقروءة للبشر، مُسلَّم برمز حالة 4xx أو 5xx مناسب. تعيد استجابات النجاح المورد مباشرة؛ تُغلِّف بعض نقاط النهاية القوائم في حقل مُسمّى، وهو ما تُظهره الأمثلة أدناه حيث يهم ذلك.
نقاط نهاية المصادقة
البنية الأساسية للحساب والملف الشخصي. تستخدمها لوحة التحكم نفسها بشكل أساسي، لكنها تعمل مع أي بيانات اعتماد صالحة.
/api/auth/profileرمز جلسة Bearer أو مفتاح APIيعيد ملف المستخدم المُصادَق عليه.
/api/auth/profileرمز جلسة Bearer أو مفتاح APIيحدّث حقول الملف الشخصي مثل الاسم المعروض وتفضيلات الإشعارات.
/api/auth/syncرمز جلسة Bearerيزامن مستخدم مصادقة Supabase مع سجل مستخدم المنصة.
/api/auth/check-onboardingرمز جلسة Bearerيُبلِّغ عمّا إذا كان المستخدم المُصادَق عليه قد أكمل onboarding.
/api/auth/avatarرمز جلسة Bearerيرفع صورة رمزية جديدة للمستخدم المُصادَق عليه.
نقاط نهاية العميل
كل ما يديره صاحب الروبوتات: الروبوتات المسجَّلة، الملف الشخصي للعميل، مجموعات البيانات، الفواتير، وإحصاءات لوحة التحكم.
/api/client/robotsرمز جلسة Bearer أو مفتاح API (دور العميل)يسرد الروبوتات المسجَّلة من قِبل العميل المُصادَق عليه، الأحدث أولاً، حتى 50 إدخالاً. الأختام الزمنية بصيغة ISO 8601؛ يبقى last_online وlast_heartbeat فارغَين (null) حتى يتصل الروبوت مرة واحدة.
curl https://www.ay-robots.com/api/client/robots \
-H 'Authorization: Bearer ayr_live_your_key_here'[
{
"id": "1f9f4c1e-7f2a-4b7e-9a45-0f4d2b6c8a11",
"name": "Lab SO-100",
"robot_type": "SO-100",
"status": "AVAILABLE",
"control_url": "wss://robots.example.com/so100/control",
"stream_url": "https://robots.example.com/so100/stream",
"hardware_id": "board:local:usb-1",
"last_online": "2026-08-09T10:12:00.000Z",
"last_heartbeat": "2026-08-09T10:12:00.000Z",
"total_hours": 12.5,
"tags": ["lab"],
"notes": null,
"created_at": "2026-07-01T09:00:00.000Z"
}
]/api/client/robotsرمز جلسة Bearer أو مفتاح API (دور العميل)يسجّل روبوتاً جديداً ويعيد id الخاص به. يمكن أن ينتمي hardware id للوحة محرك واحدة إلى روبوت واحد فقط؛ يُرفض التعارض برمز حالة 409.
/api/client/profileرمز جلسة Bearer أو مفتاح API (دور العميل)يعيد الملف الشخصي للعميل المُصادَق عليه.
/api/client/profileرمز جلسة Bearer أو مفتاح API (دور العميل)يحدّث حقول الملف الشخصي للعميل.
/api/client/datasetsرمز جلسة Bearer أو مفتاح API (دور العميل)يسرد مجموعات البيانات السحابية للعميل مع عدد episodes وأحجامها.
/api/client/invoicesرمز جلسة Bearer أو مفتاح API (دور العميل)يسرد فواتير العميل الشهرية.
/api/client/statsرمز جلسة Bearer أو مفتاح API (دور العميل)يعيد إحصاءات الاستخدام للوحة تحكم العميل.
نقاط نهاية المشغل
جانب المشغل: الملف الشخصي والتوفر، والاعتمادات، والجدولة، وإحصاءات الأرباح.
/api/operator/profileرمز جلسة Bearer أو مفتاح API (دور المشغل)يعيد الملف الشخصي للمشغل المُصادَق عليه.
/api/operator/profileرمز جلسة Bearer أو مفتاح API (دور المشغل)ينشئ أو يحدّث الملف الشخصي للمشغل.
/api/operator/available-robotsرمز جلسة Bearer أو مفتاح API (دور المشغل)يسرد الروبوتات المتاحة حالياً والمطابقة لاعتمادات المشغل.
/api/operator/certificationsرمز جلسة Bearer أو مفتاح API (دور المشغل)يسرد طلبات اعتماد المشغل وحالتها.
/api/operator/certificationsرمز جلسة Bearer أو مفتاح API (دور المشغل)يطلب اعتماداً لنوع روبوت.
/api/operator/scheduleرمز جلسة Bearer أو مفتاح API (دور المشغل)يعيد جدول توفر المشغل الأسبوعي.
/api/operator/scheduleرمز جلسة Bearer أو مفتاح API (دور المشغل)يحدّث جدول التوفر الأسبوعي.
/api/operator/availabilityرمز جلسة Bearer أو مفتاح API (دور المشغل)يعيد توفر المشغل الحالي.
/api/operator/statsرمز جلسة Bearer أو مفتاح API (دور المشغل)يعيد إحصاءات الأرباح والجلسات للوحة تحكم المشغل.
الجلسات
الجلسات هي المورد الأساسي للمنصة: الجلسة الواحدة هي ارتباط تشغيل عن بُعد مستمر واحد بين مشغل وروبوت. تنتقل حالة الجلسة عبر PENDING وACTIVE وPAUSED وCOMPLETED وCANCELLED.
/api/sessionsرمز جلسة Bearer أو مفتاح APIيسرد الجلسات للمستخدم المُصادَق عليه. يرى المشغلون الجلسات التي شغّلوها؛ يرى العملاء الجلسات على روبوتاتهم. تختلف مجموعة الحقول قليلاً بين الرأيين: يتضمن رأي العميل episodes_collected وdata_collected_mb، ويتضمن رأي المشغل operator_earnings_cents.
| Name | In | Type | Description |
|---|---|---|---|
| status | query | string | اختياري. صفّي حسب حالة الجلسة، مثلاً ACTIVE أو COMPLETED. اتركه لعرض الكل. |
| limit | query | number | اختياري. حجم الصفحة، الافتراضي 50، الحد الأقصى 100. |
| offset | query | number | اختياري. إزاحة الترقيم، الافتراضي 0. |
curl 'https://www.ay-robots.com/api/sessions?status=COMPLETED&limit=10' \
-H 'Authorization: Bearer ayr_live_your_key_here'{
"sessions": [
{
"id": "6b0d2c9a-53f1-4f6e-8f1a-2c9d4e7b5a30",
"status": "COMPLETED",
"started_at": "2026-08-08T14:00:12.000Z",
"ended_at": "2026-08-08T14:47:31.000Z",
"duration_minutes": 47,
"client_charge_cents": 1175,
"episodes_collected": 23,
"data_collected_mb": 210.4,
"rating": 5,
"created_at": "2026-08-08T13:59:58.000Z",
"robot_id": "1f9f4c1e-7f2a-4b7e-9a45-0f4d2b6c8a11",
"robot_name": "Lab SO-100",
"robot_type": "SO-100",
"operator_name": "Jane D."
}
]
}/api/sessionsرمز جلسة Bearer أو مفتاح API (دور المشغل)يبدأ جلسة تشغيل عن بُعد على روبوت متاح. يتطلب دور المشغل: لا يمكن للعملاء بدء جلسات. يمكن لمشغل واحد الاحتفاظ بحد أقصى جلسة واحدة ACTIVE أو PAUSED في وقت واحد، ويجب أن يكون الروبوت حالياً بحالة AVAILABLE. عند البدء الفوري يتحول الروبوت إلى IN_SESSION ويُخطَر العميل.
| Name | In | Type | Description |
|---|---|---|---|
| robotId | body | string | مطلوب. id الروبوت المراد تشغيله. يجب أن يكون الروبوت AVAILABLE. |
| operatorId | body | string | اختياري. id صريح للمشغل؛ افتراضياً المشغل المُصادَق عليه. |
| scheduledFor | body | string (ISO 8601) | اختياري. يجدول الجلسة لوقت مستقبلي بدلاً من بدئها فوراً. |
curl -X POST https://www.ay-robots.com/api/sessions \
-H 'Authorization: Bearer ayr_live_your_key_here' \
-H 'Content-Type: application/json' \
-d '{"robotId": "1f9f4c1e-7f2a-4b7e-9a45-0f4d2b6c8a11"}'{
"sessionId": "6b0d2c9a-53f1-4f6e-8f1a-2c9d4e7b5a30",
"status": "ACTIVE"
}/api/sessions/[id]رمز جلسة Bearer أو مفتاح APIيعيد جلسة واحدة مع تفاصيلها.
/api/sessions/[id]رمز جلسة Bearer أو مفتاح APIيحدّث دورة حياة الجلسة: إيقاف مؤقت، استئناف، إنهاء، وإجراءات ذات صلة.
/api/sessions/[id]/extendرمز جلسة Bearer أو مفتاح API (العميل، مالك الجلسة)يطلب تمديد جلسة. لا يمكن استدعاء هذا إلا من العميل مالك الجلسة، ويجب أن تكون الجلسة ACTIVE. يُسجَّل الطلب كحدث جلسة ويتلقى المشغل إشعاراً؛ يحدث التمديد نفسه عندما يتصرف المشغل بناءً عليه.
| Name | In | Type | Description |
|---|---|---|---|
| id | path | string | id الجلسة. |
| additionalMinutes | body | number | مدة التمديد المطلوبة بالدقائق. |
curl -X POST https://www.ay-robots.com/api/sessions/6b0d2c9a-53f1-4f6e-8f1a-2c9d4e7b5a30/extend \
-H 'Authorization: Bearer ayr_live_your_key_here' \
-H 'Content-Type: application/json' \
-d '{"additionalMinutes": 30}'{
"message": "Extension request sent to operator"
}/api/sessions/[id]/messagesرمز جلسة Bearer أو مفتاح APIيسرد رسائل دردشة جلسة ما.
/api/sessions/[id]/messagesرمز جلسة Bearer أو مفتاح APIيرسل رسالة دردشة في جلسة.
/api/sessions/[id]/rateرمز جلسة Bearer أو مفتاح API (العميل)يقيّم جلسة مكتملة على مقياس من 1 إلى 5 نجوم، بتعليق اختياري.
/api/sessions/exportرمز جلسة Bearer أو مفتاح APIيصدّر بيانات الجلسة.
المدفوعات
كل حركة أموال تمر عبر Stripe. تستخدم فوترة العملاء عميل Stripe (customer) بطريقة دفع محفوظة؛ تستخدم مدفوعات المشغلين Stripe Connect. المنصة نفسها لا تخزّن أبداً بيانات البطاقات أو البنك.
/api/stripe/customerرمز جلسة Bearer (دور العميل)ينشئ أو يعيد عميل Stripe المستخدَم لفوترة العميل.
/api/stripe/connectرمز جلسة Bearer (دور المشغل)يعيد حالة حساب Stripe Connect الخاص بالمشغل.
/api/stripe/connectرمز جلسة Bearer (دور المشغل)يبدأ onboarding الخاص بـ Stripe Connect لمدفوعات المشغل.
/api/stripe/setup-intentرمز جلسة Bearer (دور العميل)ينشئ SetupIntent من Stripe لحفظ طريقة دفع.
/api/stripe/portalرمز جلسة Bearer (دور العميل)ينشئ جلسة Stripe billing portal لإدارة طرق الدفع والفواتير.
/api/stripe/payoutرمز جلسة Bearer (دور المشغل)يعيد معلومات الدفع للمشغل المُصادَق عليه.
/api/stripe/payoutرمز جلسة Bearer (دور المشغل)يطلب دفع الأرباح المتراكمة. الحد الأدنى للدفع هو 10.00 EUR.
/api/stripe/webhookتوقيع webhook من Stripeيستقبل أحداث webhook من Stripe. يستدعيه Stripe، لا عملاء API.
نقاط النهاية العامة
لا تتطلب نقاط النهاية هذه أي مصادقة. من الآمن استدعاؤها من المراقبة، أو صفحات التسويق، أو مسبار حالة.
/api/healthفحص سلامة للـ API واتصال قاعدة بياناته. يعيد 200 عندما يكون كلاهما بخير؛ إن فشل فحص قاعدة البيانات، يُعاد الشكل نفسه مع تعيين status وdb إلى error وحالة HTTP 503.
curl https://www.ay-robots.com/api/health{
"status": "ok",
"db": "ok",
"timestamp": "2026-08-09T10:12:00.000Z"
}/api/robots/[id]يعيد معلومات عامة عن طراز روبوت مدعوم.
/api/public/pricingيعيد خطط التسعير العامة الحالية.
/api/contactيرسل رسالة نموذج تواصل. تُخزَّن الرسالة أولاً ثم تُسلَّم عبر البريد الإلكتروني، لذا لا يفقدها انقطاع مؤقت في البريد: في تلك الحالة تُبلِّغ الاستجابة بـ stored true وdelivered false، وتُعاد محاولة التسليم تشغيلياً.
| Name | In | Type | Description |
|---|---|---|---|
| name | body | string | مطلوب. اسمك. |
| body | string | مطلوب. عنوان بريد إلكتروني صالح للرد. | |
| category | body | string | مطلوب. واحدة من: General Inquiry, Bug Report, Feature Request, Sales & Pricing, Partnership, Career/Jobs, Technical Support, Billing & Payments, Press & Media, Other. |
| subject | body | string | مطلوب. سطر موضوع قصير. |
| message | body | string | مطلوب. نص الرسالة. |
curl -X POST https://www.ay-robots.com/api/contact \
-H 'Content-Type: application/json' \
-d '{
"name": "Jane Doe",
"email": "jane@example.com",
"category": "Technical Support",
"subject": "SO-100 pairing question",
"message": "My arm shows as offline after pairing."
}'{
"success": true,
"message": "Message sent successfully",
"id": "b1f2c3d4-0000-0000-0000-000000000000",
"stored": true,
"delivered": true
}/api/robot-requestيطلب دعماً لنوع روبوت غير موجود بعد على المنصة.
/api/statsيعيد إحصاءات عامة عن المنصة.