API-referencia
Áttekintés
Ez az oldal a Nibomo jelenlegi, külső AI-ügynököknek szóló szerződését dokumentálja.
Ha a kliensed támogatja az MCP-t, az MCP-csatlakozó a legegyszerűbb módja a csatlakozásnak, és ugyanezt az adatfelületet teszi elérhetővé. Ez az oldal a parancssori ügynökök által használt HTTP-alapú felderítési, SQL-, útmutató- és ismétlési szerződést dokumentálja.
Indulj a kanonikus felderítési belépési pontról:
GET https://api.nibomo.com/v1/
Ugyanez a felderítési tartalom a GET /v1/agent címen is elérhető, de az elsődleges nyilvános belépési pont a /v1/.
A felderítési válasz elmondja az ügynöknek, hogyan:
- indítsa el az e-mailes OTP-bejelentkezést
- cserélje be az OTP-t egy hosszú élettartamú API-kulcsra
- töltse be a fiók kontextusát
- hozzon létre vagy válasszon ki egy munkaterületet
- haladjon tovább a közzétett SQL-felületen
- kérjen le referencia-útmutatókat, és ismételje a kártyákat egyenként
Futásidejű felderítés és forráskód
Az OpenAPI-specifikáció nem érhető el. Az alábbi négy korábbi specifikációs URL séma helyett most ugyanazt a JSON-formátumú felderítési értesítést adja vissza, "openapiAvailable": false értékkel:
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
Az aktuális futásidejű felderítéshez használd a GET https://api.nibomo.com/v1/ hívást. A futásidejű útvonalakért kövesd a visszaadott docs.discoveryUrl értéket, a megvalósítás részleteiért pedig a docs.source.agentRoutesUrl értéket.
Hitelesítési előkészítés
Az OTP-alapú előkészítés a hitelesítési szolgáltatáson fut:
POST https://auth.nibomo.com/api/agent/send-codePOST https://auth.nibomo.com/api/agent/verify-code
A folyamat:
- Hívd meg a
GET /v1/végpontot. - Küldd el a felhasználó e-mail-címét a
send-codevégpontnak. - Olvasd ki az
otpSessionTokenértéket a válaszból. - Kérd el a felhasználótól a legutóbbi, 8 számjegyű e-mailes kódot.
- Hívd meg a
verify-codevégpontot acode, azotpSessionTokenés alabelmezővel. - A visszaadott API-kulcsot a csevegés memóriáján kívül tárold el.
Ajánlott környezeti változó:
export FLASHCARDS_OPEN_SOURCE_API_KEY="fca_ABCDEFGH_0123456789ABCDEFGHJKMNPQRS"
A hitelesített kérések ezt használják:
Authorization: ApiKey <key>
Példa az előkészítés sorrendjére:
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"
}'
Ügynöki felület bejelentkezés után
Az ellenőrzés után a jelenlegi ügynöki felület a következő:
GET /v1/agent/meGET /v1/agent/workspacesPOST /v1/agent/workspacesPOST /v1/agent/workspaces/{workspaceId}/selectPOST /v1/agent/sql/query(csak olvasás)POST /v1/agent/sql/execute(írás)GET /v1/agent/guide/{topic}(csak olvasás)POST /v1/agent/reviews/next(csak olvasás)POST /v1/agent/reviews/reveal(csak olvasás)POST /v1/agent/reviews/submit(írás)
Egy tipikus előkészítés így néz ki:
GET /v1/agent/meGET /v1/agent/workspaces?limit=100- Ha szükséges,
POST /v1/agent/workspacesa{"name":"Personal"}törzzsel - Ha szükséges,
POST /v1/agent/workspaces/{workspaceId}/select - Olvasáshoz a
POST /v1/agent/sql/query, íráshoz aPOST /v1/agent/sql/executevégpontot használd
A munkaterületet API-kulcs-kapcsolatonként, explicit módon kell kiválasztani. Az ügynökök ne találgassák a következő lépést, hanem kövessék a visszaadott instructions szöveget és a futásidejű útvonalakhoz a docs.discoveryUrl, a megvalósítás részleteihez pedig a docs.source.agentRoutesUrl értéket.
Az SQL- és ismétlési útvonalak a JSON-törzsben opcionális workspaceId mezőt is elfogadnak. Ez egyetlen hívás erejéig az adott munkaterületet célozza meg, a kiválasztás módosítása nélkül; ha elhagyod, a kiválasztott munkaterületre vonatkozik a hívás. Ha nincs sem kiválasztás, sem workspaceId, a válasz 409 WORKSPACE_SELECTION_REQUIRED.
SQL-felület
A POST /v1/agent/sql/query a szigorúan csak olvasható felület (SHOW TABLES, DESCRIBE, SHOW COLUMNS, SELECT), a POST /v1/agent/sql/execute pedig az írási felület (INSERT, UPDATE, DELETE); egy hívásban vagy csak olvasás, vagy csak írás szerepelhet.
Szándékosan korlátozott, és nem teljes értékű PostgreSQL. Ez a dokumentáció csak a támogatott dialektust írja le, nem PostgreSQL-kompatibilitási referencia.
Egyetlen olvasási útvonal sem javít adatot, nem számolja újra az ütemezést, és nem módosítja a kártya állapotát. Minden
kártya- és pakliíráshoz a POST /v1/agent/sql/execute végpontot használd. SQL-lel nem lehet a
review_events erőforrásba vagy az FSRS ütemezési állapotába írni; az ismétléseket a
POST /v1/agent/reviews/submit végponton keresztül rögzítsd.
Jelenlegi utasításcsaládok:
SHOW TABLESDESCRIBE <resource>SHOW COLUMNS FROM <resource>SELECTINSERTUPDATEDELETE
A közzétett logikai erőforrások jelenleg:
workspacecardsdecksreview_events
Megjegyzések:
- a
LIMITalapértéke100, és legfeljebb100lehet - ha stabil lapozásra van szükséged, használj
ORDER BYzáradékot - a séma feltérképezéséhez használd a
SHOW TABLESvagy aDESCRIBE cardsutasítást - minden SQL-hívás egyetlen munkaterületre vonatkozik: a törzsben megadott
workspaceIdmunkaterületére vagy a kiválasztott munkaterületre
Példakérés:
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"}'
Példa kártyalekérdezésre:
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"
}'
Példa módosításra:
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'\''"
}'
Távoli MCP-szerver is elérhető a https://mcp.nibomo.com/mcp címen, OAuth 2.1-gyel (Dynamic Client Registration + PKCE). Ugyanezt az SQL-felosztást kínálja sql_query (szigorúan csak olvasás) és sql_execute (írás) néven, valamint a list_workspaces és a get_guide eszközt, továbbá a next_review_card, a reveal_answer és a submit_review ismétlési eszközt; lásd az MCP-csatlakozó oldalt.
Biztonság és hatókör
Az SQL-felület egy zárt, az elemző által kikényszerített dialektus, nem nyers PostgreSQL. A védőkorlátok:
- Zárt utasításlista: olvasáshoz csak a
SHOW TABLES, aDESCRIBE, aSHOW COLUMNSés aSELECT, íráshoz csak azINSERT, azUPDATEés aDELETEengedélyezett. Minden mást a rendszer már az elemzéskor elutasít. - Korlátozott erőforrások: az utasítások csak a
workspace, acards, adecksés areview_eventserőforrást érhetik el. - Munkaterületenkénti hatókör: minden utasítás egyetlen, számodra elérhető munkaterületre vonatkozik, vagyis a kéréstörzsben megadott
workspaceIdmunkaterületére vagy a kiválasztott munkaterületedre, bérlők közötti hozzáférés nélkül. - Szigorú kéréstörzsek: az SQL- és ismétlési útvonalak elutasítják az ismeretlen törzsmezőt, így egy elgépelt
workspaceIdhibát ad, ahelyett hogy a kiválasztott munkaterületen futna le. - Korlátok: legfeljebb
100sor utasításonként, legfeljebb50utasítás kötegenként, és nagyjából12ktokenes eredménykorlát. A módosító kötegek atomikusan hajtódnak végre. - Olvasás és írás szétválasztása: a
sql_queryés alist_workspacesszigorúan csak olvasható (readOnlyHint), és soha nem javít adatot, nem számolja újra az ütemezést, és nem módosítja a kártya állapotát. Asql_executeaz egyetlen SQL-író eszköz, és írási műveleteket végez (destructiveHint); egy hívásban vagy csak olvasás, vagy csak írás szerepelhet. SQL-lel nem lehet areview_eventserőforrásba vagy az FSRS ütemezési állapotába írni; ismétlést csak aPOST /v1/agent/reviews/submit(MCP-ben asubmit_review) rögzít.
Útmutatók
A GET /v1/agent/guide/{topic} egy referencia-útmutatót ad vissza a data.guide mezőben, ugyanazt a tartalmat, amelyet az MCP get_guide eszköze is kiszolgál. Témák:
sql_dialect: a teljes SQL-nyelvtan, a korlátok és példákcard_authoring: a kártyaszerződés, a címkék, a duplikátumellenőrzés és a formázásbulk_authoring: egy nagy írási feladat felosztása és ellenőrzésereview_flow: az ismétlési és értékelési ciklus
Ismeretlen témára a válasz 400, a támogatott témák listájával. Kártyák írása, tömeges írás vagy ismétlés előtt kérd le a megfelelő útmutatót, és egy elutasított utasítás után olvasd el újra a sql_dialect útmutatót.
curl https://api.nibomo.com/v1/agent/guide/sql_dialect \
-H "Authorization: ApiKey $FLASHCARDS_OPEN_SOURCE_API_KEY"
Ismétlések
Az ismétlési útvonalakkal egy ügynök kártyánként kikérdezheti a tanulót, és minden értékelést elmenthet a kártya FSRS-ütemtervébe. Ugyanazokat a JSON-argumentumokat fogadják, mint az MCP ismétlési eszközei:
- A
POST /v1/agent/reviews/nextacardobjektumot adja vissza acardIdés afrontTextmezővel, vagycard: nullértéket, ha semmi sem esedékes. Az opcionálistags(bármelyik egyezik) vagydeckIdszűkíti a sort, de a kettő nem adható meg egyszerre; törzs nélküli kérés is érvényes. - A
POST /v1/agent/reviews/revealmegköveteli acardIdmezőt, és az adott kártyabackTextértékét adja vissza. - A
POST /v1/agent/reviews/submitmegköveteli acardIdmezőt, egy kliens által generáltreviewIdUUID-t, egyratingértéket (Again,Hard,GoodvagyEasy), valamint a tanuló IANA szerintireviewedTimeZoneidőzónáját. A szerver rögzíti az ismétlés időpontját, és visszaadja a kártya új ütemtervét, többek között adueAt, astate, arepsés alapsesértéket.
Mindhárom útvonal elfogadja az opcionális workspaceId mezőt. A beküldés előtt mentsd el a reviewId értéket, és egy bizonytalan kimenetelű beküldést ugyanazzal a kéréssel próbálj újra; ez soha nem rögzít második ismétlést. Az ismétlési útvonalak ezekkel is válaszolhatnak:
409 REVIEW_EVENT_CONFLICT: az ismétlést már rögzítették, és azerror.details.reviewScheduletartalmazza a kártya aktuális ütemtervét.409 REVIEW_ID_CARD_MISMATCH: areviewIdmár egy másik kártya ismétlését azonosítja, ezért semmi sem lett mentve; küldd be újra egy újreviewIdértékkel.409 REVIEW_STALE: a kártya tárolt ismétlési időpontja megegyezik a szerver aktuális idejével, vagy későbbi annál; ismételj egy másik kártyát.400 REVIEW_INPUT_INVALID: egy argumentum hiányzik, érvénytelen vagy nem támogatott, ideértve atagsés adeckIdegyüttes használatát, illetve olyan címkét, amelyet a munkaterület nem használ.
Példa beküldésre:
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"
}'
Emberi felhasználóknak szóló és szinkronizálási API-k
A Nibomo külön API-kat is tartalmaz az emberi felhasználók klienseihez és az offline-first szinkronizáláshoz, de ezek nem a külső ügynökök fő szerződését alkotják:
- a böngészős folyamatok közös domainű sütiket és CSRF-védelmet használnak
- az offline-first kliensek a megvalósított szinkronizálási útvonalakat használják a
/v1/workspaces/{workspaceId}/sync/pushés a/v1/workspaces/{workspaceId}/sync/pullalatt - a szinkronizálási útvonalak elkülönülnek a külső ügynöki felülettől