مرجع API
نظرة عامة
توثّق هذه الصفحة العقد الخارجي الحالي لوكلاء الذكاء الاصطناعي في Nibomo.
إذا كان عميلك يتحدث بروتوكول MCP، فإن موصّل MCP هو أبسط طريقة للاتصال، وهو يغلّف سطح البيانات نفسه. توثّق هذه الصفحة عقد HTTP للاكتشاف وSQL والأدلة والمراجعة الذي يستخدمه وكلاء سطر الأوامر.
ابدأ من نقطة الاكتشاف الأساسية:
GET https://api.flashcards-open-source-app.com/v1/
الحمولة نفسها متاحة أيضًا عبر GET /v1/agent، لكن /v1/ هو نقطة الدخول العامة الأساسية.
تخبر استجابة الاكتشاف الوكيل كيف:
- يبدأ تسجيل الدخول عبر OTP بالبريد
- يستبدل OTP بمفتاح API طويل العمر
- يحمّل سياق الحساب
- ينشئ أو يختار مساحة عمل
- يتابع عبر سطح SQL المنشور
- يجلب الأدلة المرجعية ويراجع البطاقات بطاقةً تلو الأخرى
الاكتشاف في وقت التشغيل والمصدر
OpenAPI غير متاح. تعيد عناوين المواصفات الأربعة السابقة أدناه إشعار اكتشاف JSON نفسه مع "openapiAvailable": false بدلًا من مخطط:
https://api.flashcards-open-source-app.com/v1/agent/openapi.jsonhttps://api.flashcards-open-source-app.com/v1/agent/swagger.jsonhttps://api.flashcards-open-source-app.com/v1/openapi.jsonhttps://api.flashcards-open-source-app.com/v1/swagger.json
استخدم GET https://api.flashcards-open-source-app.com/v1/ للاكتشاف الحالي في وقت التشغيل. اتبع docs.discoveryUrl المُعاد لمسارات التشغيل وdocs.source.agentRoutesUrl لتفاصيل التنفيذ.
تهيئة المصادقة
تعمل مرحلة OTP الأولى على خدمة auth:
POST https://auth.flashcards-open-source-app.com/api/agent/send-codePOST https://auth.flashcards-open-source-app.com/api/agent/verify-code
التدفق هو:
- نفّذ
GET /v1/. - أرسل بريد المستخدم إلى
send-code. - اقرأ
otpSessionTokenمن الاستجابة. - اطلب من المستخدم أحدث رمز بريد مكوّن من 8 أرقام.
- استدعِ
verify-codeمعcodeوotpSessionTokenوlabel. - خزّن مفتاح API المُعاد خارج ذاكرة المحادثة.
متغير البيئة المقترح:
export FLASHCARDS_OPEN_SOURCE_API_KEY="fca_ABCDEFGH_0123456789ABCDEFGHJKMNPQRS"
تستخدم الطلبات الموثّقة:
Authorization: ApiKey <key>
مثال تسلسل التهيئة:
curl https://api.flashcards-open-source-app.com/v1/
curl -X POST https://auth.flashcards-open-source-app.com/api/agent/send-code \
-H "Content-Type: application/json" \
-d '{"email":"you@example.com"}'
curl -X POST https://auth.flashcards-open-source-app.com/api/agent/verify-code \
-H "Content-Type: application/json" \
-d '{
"code":"12345678",
"otpSessionToken":"...",
"label":"Codex on MacBook"
}'
سطح الوكيل بعد تسجيل الدخول
بعد التحقق، يصبح السطح الحالي كالآتي:
GET /v1/agent/meGET /v1/agent/workspacesPOST /v1/agent/workspacesPOST /v1/agent/workspaces/{workspaceId}/selectPOST /v1/agent/sql/query(للقراءة فقط)POST /v1/agent/sql/execute(للكتابة)GET /v1/agent/guide/{topic}(للقراءة فقط)POST /v1/agent/reviews/next(للقراءة فقط)POST /v1/agent/reviews/reveal(للقراءة فقط)POST /v1/agent/reviews/submit(للكتابة)
التهيئة المعتادة تبدو هكذا:
GET /v1/agent/meGET /v1/agent/workspaces?limit=100- إذا لزم الأمر،
POST /v1/agent/workspacesمع{"name":"Personal"} - إذا لزم الأمر،
POST /v1/agent/workspaces/{workspaceId}/select - استخدم
POST /v1/agent/sql/queryللقراءة وPOST /v1/agent/sql/executeللكتابة
اختيار مساحة العمل صريح لكل اتصال بمفتاح API. يجب على الوكلاء اتباع نص instructions المُعاد وdocs.discoveryUrl لمسارات التشغيل، إضافة إلى docs.source.agentRoutesUrl لتفاصيل التنفيذ، بدل التخمين.
تقبل مسارات SQL والمراجعة أيضًا workspaceId اختياريًا في جسم JSON. وهو يستهدف مساحة العمل تلك لاستدعاء واحد دون تغيير الاختيار؛ احذفه لاستخدام مساحة العمل المحددة. وإذا لم يوجد اختيار ولا workspaceId، فإنها تجيب بـ 409 WORKSPACE_SELECTION_REQUIRED.
سطح SQL
POST /v1/agent/sql/query هو سطح القراءة فقط بشكل صارم (SHOW TABLES وDESCRIBE وSHOW COLUMNS وSELECT) وPOST /v1/agent/sql/execute هو سطح الكتابة (INSERT وUPDATE وDELETE)؛ يجب أن يكون الطلب الواحد إما قراءات بالكامل أو كتابات بالكامل.
هو محدود عمدًا وليس PostgreSQL كاملًا. تغطي هذه الوثائق اللهجة المدعومة فقط، وليست مرجع توافق مع PostgreSQL.
لا يصلح أي مسار قراءة البيانات، ولا يعيد حساب الجدولة، ولا يغيّر حالة البطاقة.
استخدم POST /v1/agent/sql/execute لكل كتابة للبطاقات والمجموعات. لا يمكن لـ SQL
كتابة review_events أو حالة جدولة FSRS؛ سجّل المراجعات عبر
POST /v1/agent/reviews/submit.
العائلات الحالية للأوامر:
SHOW TABLESDESCRIBE <resource>SHOW COLUMNS FROM <resource>SELECTINSERTUPDATEDELETE
الموارد المنطقية المنشورة حاليًا تشمل:
workspacecardsdecksreview_events
ملاحظات:
- القيمة الافتراضية لـ
LIMITهي100والحد الأقصى أيضًا100 - استخدم
ORDER BYعندما تحتاج إلى ترقيم صفحات ثابت - استخدم
SHOW TABLESأوDESCRIBE cardsلاكتشاف المخطط - كل استدعاء SQL مقيّد بمساحة عمل واحدة:
workspaceIdفي جسم الطلب، أو مساحة العمل المحددة
مثال طلب:
curl -X POST https://api.flashcards-open-source-app.com/v1/agent/sql/query \
-H "Content-Type: application/json" \
-H "Authorization: ApiKey $FLASHCARDS_OPEN_SOURCE_API_KEY" \
-d '{"sql":"SHOW TABLES"}'
مثال استعلام بطاقات:
curl -X POST https://api.flashcards-open-source-app.com/v1/agent/sql/query \
-H "Content-Type: application/json" \
-H "Authorization: ApiKey $FLASHCARDS_OPEN_SOURCE_API_KEY" \
-d '{
"sql":"SELECT card_id, front_text, back_text, tags FROM cards ORDER BY updated_at DESC LIMIT 20 OFFSET 0"
}'
مثال تعديل:
curl -X POST https://api.flashcards-open-source-app.com/v1/agent/sql/execute \
-H "Content-Type: application/json" \
-H "Authorization: ApiKey $FLASHCARDS_OPEN_SOURCE_API_KEY" \
-d '{
"sql":"UPDATE cards SET back_text = '\''Updated answer'\'' WHERE card_id = '\''50b5b928-7f04-4cc8-878d-6cd0e8b98474'\''"
}'
يتوفر أيضًا خادم MCP بعيد على https://mcp.nibomo.com/mcp باستخدام OAuth 2.1 (Dynamic Client Registration + PKCE). يكشف تقسيم SQL نفسه عبر sql_query (للقراءة فقط بشكل صارم) وsql_execute (للكتابة)، بالإضافة إلى list_workspaces وget_guide وأدوات المراجعة next_review_card وreveal_answer وsubmit_review؛ راجع موصّل MCP.
الأمان والنطاق
سطح SQL هو لهجة محتواة ومفروضة من المحلّل اللغوي وليس PostgreSQL كاملًا. وسائل الحماية هي:
- قائمة عبارات مغلقة: فقط
SHOW TABLESوDESCRIBEوSHOW COLUMNSوSELECTللقراءة، وINSERTوUPDATEوDELETEللكتابة. وأي شيء آخر يُرفض أثناء التحليل. - موارد محدودة: لا يمكن للعبارات أن تمسّ سوى موارد
workspaceوcardsوdecksوreview_events. - النطاق لكل مساحة عمل: كل عبارة مقيّدة بمساحة عمل واحدة يمكنك الوصول إليها، إما
workspaceIdفي جسم الطلب أو مساحة العمل المحددة لديك، بدون وصول عبر المستأجرين. - أجسام طلبات صارمة: ترفض مسارات SQL والمراجعة أي حقل غير معروف في جسم الطلب، لذا يفشل
workspaceIdالمكتوب بشكل خاطئ بدلًا من التنفيذ على مساحة العمل المحددة. - الحدود: حتى
100صف لكل عبارة، وحتى50عبارة لكل دفعة، وحد للنتائج يبلغ نحو12kرمز. وتُطبَّق دفعات التعديل بشكل ذرّي. - الفصل بين القراءة والكتابة:
sql_queryوlist_workspacesللقراءة فقط بشكل صارم (readOnlyHint) ولا تصلح البيانات أو تعيد حساب الجدولة أو تغيّر حالة البطاقة.sql_executeهو أداة الكتابة الوحيدة لـ SQL وينفّذ عمليات الكتابة (destructiveHint)؛ ويجب أن يكون الاستدعاء الواحد إما كله قراءة أو كله كتابة. لا يمكن لـ SQL كتابةreview_eventsأو حالة جدولة FSRS؛ ولا يسجّل المراجعة إلاPOST /v1/agent/reviews/submit(أداة MCPsubmit_review).
الأدلة
يعيد GET /v1/agent/guide/{topic} دليلًا مرجعيًا واحدًا في data.guide، وهو المحتوى نفسه الذي تقدّمه أداة MCP get_guide. المواضيع:
sql_dialect: قواعد SQL الكاملة والحدود والأمثلةcard_authoring: عقد البطاقة والوسوم والتحقق من التكرارات والتنسيقbulk_authoring: تقسيم مهمة كتابة كبيرة والتحقق منهاreview_flow: حلقة المراجعة والتقييم
يؤدي الموضوع غير المعروف إلى استجابة 400 مع قائمة المواضيع المدعومة. اجلب الدليل المناسب قبل إنشاء البطاقات أو الكتابة بالجملة أو تشغيل مراجعة، وأعد قراءة sql_dialect بعد رفض أي عبارة.
curl https://api.flashcards-open-source-app.com/v1/agent/guide/sql_dialect \
-H "Authorization: ApiKey $FLASHCARDS_OPEN_SOURCE_API_KEY"
المراجعات
تتيح مسارات المراجعة للوكيل أن يختبر المتعلم بطاقةً تلو الأخرى وأن يحفظ كل تقييم في جدول FSRS الخاص بالبطاقة. وهي تأخذ وسائط JSON نفسها التي تأخذها أدوات المراجعة في MCP:
- يعيد
POST /v1/agent/reviews/nextالحقلcardمعcardIdوfrontText، أوcard: nullعندما لا يكون هناك ما هو مستحق. ويضيّقtagsالاختياري (أيٌّ منها) أوdeckIdطابور المراجعة، ولا يُستخدمان معًا أبدًا؛ والطلب بدون جسم صالح. - يتطلب
POST /v1/agent/reviews/revealقيمةcardIdويعيدbackTextلتلك البطاقة. - يتطلب
POST /v1/agent/reviews/submitقيمةcardId، وreviewIdبصيغة UUID يولّده العميل، وratingبإحدى القيمAgainأوHardأوGoodأوEasy، وreviewedTimeZoneالخاص بالمتعلم بصيغة IANA. يضع الخادم الطابع الزمني للمراجعة ويعيد الجدول الجديد للبطاقة، بما في ذلكdueAtوstateوrepsوlapses.
تقبل المسارات الثلاثة كلها workspaceId الاختياري. خزّن reviewId قبل الإرسال، وأعد محاولة الإرسال غير المؤكد بالطلب نفسه تمامًا؛ فلن يسجّل ذلك مراجعة ثانية أبدًا. وقد تعيد مسارات المراجعة أيضًا أحد الردود التالية:
409 REVIEW_EVENT_CONFLICT: سُجّلت المراجعة بالفعل، ويحملerror.details.reviewScheduleالجدول الحالي للبطاقة.409 REVIEW_ID_CARD_MISMATCH: يعرّفreviewIdبالفعل مراجعةً لبطاقة مختلفة، لذا لم يُخزَّن شيء؛ أرسل مجددًا باستخدامreviewIdجديد.409 REVIEW_STALE: وقت المراجعة المخزّن للبطاقة يساوي وقت الخادم الحالي أو يأتي بعده؛ راجع بطاقة أخرى.400 REVIEW_INPUT_INVALID: أحد الوسائط مفقود أو غير صالح أو غير مدعوم، بما في ذلك استخدامtagsمعdeckIdمعًا أو وسم لا تستخدمه مساحة العمل.
مثال إرسال:
curl -X POST https://api.flashcards-open-source-app.com/v1/agent/reviews/submit \
-H "Content-Type: application/json" \
-H "Authorization: ApiKey $FLASHCARDS_OPEN_SOURCE_API_KEY" \
-d '{
"cardId":"693c4863-28a2-45e8-8f55-9fa31fc95ff2",
"reviewId":"429bb7cc-40fb-49f3-bb50-48a5db2826d1",
"rating":"Good",
"reviewedTimeZone":"Europe/Sofia"
}'
واجهات API البشرية والمزامنة
يتضمن Nibomo أيضًا واجهات منفصلة للعملاء البشريين ولمزامنة العمل دون اتصال أولًا، لكنها ليست العقد الرئيسي للوكلاء الخارجيين:
- تستخدم تدفقات المتصفح ملفات تعريف ارتباط مشتركة النطاق مع حماية CSRF
- يستخدم العملاء الذين يعملون دون اتصال أولًا مسارات المزامنة المنفذة تحت
/v1/workspaces/{workspaceId}/sync/pushو/v1/workspaces/{workspaceId}/sync/pull - تبقى مسارات المزامنة منفصلة عن السطح الخارجي للوكلاء