مرجع API
نمای کلی
این صفحه قرارداد فعلی عاملهای هوش مصنوعی خارجی را برای Nibomo مستند میکند.
اگر کلاینت شما از MCP پشتیبانی میکند، اتصالدهندهٔ MCP سادهترین راه اتصال است و بر همین رابط داده بنا شده است. این صفحه قرارداد HTTP کشف، SQL، راهنماها و مرور را که عاملهای خط فرمان استفاده میکنند مستند میکند.
از نقطهٔ ورود رسمی کشف شروع کنید:
GET https://api.nibomo.com/v1/
همین محتوای کشف در GET /v1/agent هم در دسترس است، اما /v1/ نقطهٔ ورود عمومی اصلی است.
پاسخ کشف به عامل میگوید چگونه:
- ورود با کد یکبارمصرف ایمیلی را آغاز کند
- کد یکبارمصرف را با یک کلید API بلندمدت مبادله کند
- اطلاعات حساب را بارگذاری کند
- یک فضای کاری بسازد یا انتخاب کند
- کار را از طریق رابط SQL منتشرشده ادامه دهد
- راهنماهای مرجع را دریافت کند و کارتها را یکییکی مرور کند
کشف در زمان اجرا و کد منبع
OpenAPI در دسترس نیست. چهار نشانی زیر که پیشتر مشخصات API را برمیگرداندند، اکنون بهجای طرحواره همان پیام کشف را در قالب JSON با "openapiAvailable": false برمیگردانند:
https://api.nibomo.com/v1/agent/openapi.jsonhttps://api.nibomo.com/v1/agent/swagger.jsonhttps://api.nibomo.com/v1/openapi.jsonhttps://api.nibomo.com/v1/swagger.json
برای کشف فعلی در زمان اجرا از GET https://api.nibomo.com/v1/ استفاده کنید. برای مسیرهای زمان اجرا، docs.discoveryUrl برگشتی و برای جزئیات پیادهسازی، docs.source.agentRoutesUrl را دنبال کنید.
آمادهسازی اولیهٔ احراز هویت
آمادهسازی اولیه با OTP روی سرویس احراز هویت اجرا میشود:
POST https://auth.nibomo.com/api/agent/send-codePOST https://auth.nibomo.com/api/agent/verify-code
روند کار:
GET /v1/را فراخوانی کنید.- ایمیل کاربر را به
send-codeبفرستید. otpSessionTokenرا از پاسخ بخوانید.- آخرین کد ۸ رقمی را که به ایمیل کاربر فرستاده شده است از او بپرسید.
verify-codeرا باcode،otpSessionTokenوlabelفراخوانی کنید.- کلید API برگشتی را بیرون از حافظهٔ چت ذخیره کنید.
متغیر محیطی پیشنهادی:
export FLASHCARDS_OPEN_SOURCE_API_KEY="fca_ABCDEFGH_0123456789ABCDEFGHJKMNPQRS"
درخواستهای احرازشده از این سرآیند استفاده میکنند:
Authorization: ApiKey <key>
نمونهٔ ترتیب آمادهسازی اولیه:
curl https://api.nibomo.com/v1/
curl -X POST https://auth.nibomo.com/api/agent/send-code \
-H "Content-Type: application/json" \
-d '{"email":"you@example.com"}'
curl -X POST https://auth.nibomo.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.nibomo.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.nibomo.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.nibomo.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دستور در هر مجموعهدستور (batch) و سقف نتیجهای در حدود12kتوکن. مجموعهدستورهای تغییر داده بهصورت اتمی اعمال میشوند. - تفکیک خواندن و نوشتن:
sql_queryوlist_workspacesصرفاً خواندنیاند (readOnlyHint) و هرگز دادهها را ترمیم نمیکنند، زمانبندی را دوباره محاسبه نمیکنند یا وضعیت کارت را تغییر نمیدهند.sql_executeتنها ابزار نوشتن SQL است و عملیات نوشتن را انجام میدهد (destructiveHint)؛ هر فراخوانی باید یا تماماً خواندن باشد یا تماماً نوشتن. SQL نمیتواند درreview_eventsیا وضعیت زمانبندی FSRS بنویسد؛ فقطPOST /v1/agent/reviews/submit(در MCP،submit_review) مرور را ثبت میکند.
راهنماها
GET /v1/agent/guide/{topic} یک راهنمای مرجع را در data.guide برمیگرداند؛ همان متنی که ابزار get_guide در MCP ارائه میکند. موضوعها:
sql_dialect: گرامر کامل SQL، محدودیتها و نمونههاcard_authoring: قرارداد کارت، برچسبها، بررسی موارد تکراری و قالببندیbulk_authoring: تقسیم و بررسی یک کار نوشتن حجیمreview_flow: چرخهٔ مرور و امتیازدهی
موضوع ناشناخته با 400 و فهرست موضوعهای پشتیبانیشده پاسخ داده میشود. پیش از نوشتن کارت، نوشتن حجیم یا اجرای مرور، راهنمای مربوط را دریافت کنید و پس از رد شدن یک دستور، sql_dialect را دوباره بخوانید.
curl https://api.nibomo.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، یک UUID به نامreviewIdکه کلاینت میسازد، یک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.nibomo.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 همچنین APIهای جداگانهای برای کلاینتهای انسانی و همگامسازی آفلاینمحور دارد، اما اینها قرارداد اصلی عاملهای خارجی نیستند:
- جریانهای مرورگر از کوکیهای دامنهٔ مشترک بههمراه محافظت CSRF استفاده میکنند
- کلاینتهای آفلاینمحور از مسیرهای همگامسازی پیادهسازیشده در
/v1/workspaces/{workspaceId}/sync/pushو/v1/workspaces/{workspaceId}/sync/pullاستفاده میکنند - مسیرهای همگامسازی از رابط عاملهای خارجی جدا هستند