API aprašas
Apžvalga
Šiame puslapyje aprašyta dabartinė Nibomo sutartis su išoriniais DI agentais.
Jei jūsų klientas palaiko MCP, paprasčiausia prisijungti per MCP jungtį, kuri suteikia prieigą prie tos pačios duomenų sąsajos. Šiame puslapyje aprašyta HTTP aptikimo, SQL, vadovų ir kartojimo sutartis, kuria naudojasi CLI agentai.
Pradėkite nuo kanoninio aptikimo įėjimo taško:
GET https://api.nibomo.com/v1/
Tas pats aptikimo turinys pasiekiamas ir adresu GET /v1/agent, tačiau pagrindinis viešas įėjimo taškas yra /v1/.
Aptikimo atsakymas nurodo agentui, kaip:
- pradėti prisijungimą el. pašto vienkartiniu kodu
- iškeisti vienkartinį kodą į ilgalaikį API raktą
- įkelti paskyros kontekstą
- sukurti arba pasirinkti darbo sritį
- toliau dirbti per paskelbtą SQL sąsają
- gauti informacinius vadovus ir kartoti korteles po vieną
Aptikimas vykdymo metu ir pirminis kodas
OpenAPI specifikacija nepateikiama. Keturi toliau nurodyti buvę specifikacijos URL dabar vietoje schemos grąžina tą patį JSON aptikimo pranešimą su "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
Dabartiniam aptikimui vykdymo metu naudokite GET https://api.nibomo.com/v1/. Vykdymo metu pasiekiamus maršrutus rasite grąžintu docs.discoveryUrl, o įgyvendinimo detales – docs.source.agentRoutesUrl.
Pradinis autentifikavimas
Pradinis prisijungimas vienkartiniu kodu vyksta autentifikavimo paslaugoje:
POST https://auth.nibomo.com/api/agent/send-codePOST https://auth.nibomo.com/api/agent/verify-code
Eiga tokia:
- Iškvieskite
GET /v1/. - Nusiųskite naudotojo el. pašto adresą į
send-code. - Iš atsakymo nuskaitykite
otpSessionToken. - Paprašykite naudotojo naujausio 8 skaitmenų kodo iš el. laiško.
- Iškvieskite
verify-codesucode,otpSessionTokenirlabel. - Grąžintą API raktą išsaugokite už pokalbio atminties ribų.
Rekomenduojamas aplinkos kintamasis:
export FLASHCARDS_OPEN_SOURCE_API_KEY="fca_ABCDEFGH_0123456789ABCDEFGHJKMNPQRS"
Autentifikuotose užklausose naudojama:
Authorization: ApiKey <key>
Pradinio prisijungimo sekos pavyzdys:
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"
}'
Agento sąsaja po prisijungimo
Po patvirtinimo dabartinė agento sąsaja yra tokia:
GET /v1/agent/meGET /v1/agent/workspacesPOST /v1/agent/workspacesPOST /v1/agent/workspaces/{workspaceId}/selectPOST /v1/agent/sql/query(tik skaitymas)POST /v1/agent/sql/execute(rašymas)GET /v1/agent/guide/{topic}(tik skaitymas)POST /v1/agent/reviews/next(tik skaitymas)POST /v1/agent/reviews/reveal(tik skaitymas)POST /v1/agent/reviews/submit(rašymas)
Įprasta pradinė sąranka atrodo taip:
GET /v1/agent/meGET /v1/agent/workspaces?limit=100- Prireikus
POST /v1/agent/workspacessu{"name":"Personal"} - Prireikus
POST /v1/agent/workspaces/{workspaceId}/select - Skaitymui naudokite
POST /v1/agent/sql/query, o rašymui –POST /v1/agent/sql/execute
Darbo sritis kiekvienam API rakto ryšiui pasirenkama aiškiai. Užuot spėlioję kitą žingsnį, agentai turėtų vadovautis grąžintu instructions tekstu ir docs.discoveryUrl vykdymo metu pasiekiamiems maršrutams, o įgyvendinimo detalėms – docs.source.agentRoutesUrl.
SQL ir kartojimo maršrutai JSON turinyje taip pat priima neprivalomą workspaceId. Jis nukreipia vieną iškvietimą į tą darbo sritį nekeisdamas pasirinkimo; jei jo nenurodysite, bus naudojama pasirinkta darbo sritis. Jei nėra nei pasirinktos darbo srities, nei workspaceId, šie maršrutai grąžina 409 WORKSPACE_SELECTION_REQUIRED.
SQL sąsaja
POST /v1/agent/sql/query yra griežtai tik skaitymui skirta sąsaja (SHOW TABLES, DESCRIBE, SHOW COLUMNS, SELECT), o POST /v1/agent/sql/execute yra rašymo sąsaja (INSERT, UPDATE, DELETE); viename iškvietime turi būti tik skaitymo arba tik rašymo sakiniai.
Ji sąmoningai apribota ir nėra visavertis PostgreSQL. Šioje dokumentacijoje aprašomas tik palaikomas dialektas; tai nėra PostgreSQL suderinamumo žinynas.
Joks skaitymo kelias netaiso duomenų, neperskaičiuoja planavimo ir nekeičia kortelių būsenos. Visiems
kortelių ir kaladžių įrašams naudokite POST /v1/agent/sql/execute. SQL negali rašyti į
review_events ar FSRS planavimo būsenos; kartojimus registruokite per
POST /v1/agent/reviews/submit.
Dabartinės sakinių grupės:
SHOW TABLESDESCRIBE <resource>SHOW COLUMNS FROM <resource>SELECTINSERTUPDATEDELETE
Šiuo metu paskelbti loginiai ištekliai:
workspacecardsdecksreview_events
Pastabos:
LIMITnumatytoji reikšmė yra100, o didžiausia leistina taip pat100- jei reikia stabilaus puslapiavimo, naudokite
ORDER BY - schemai sužinoti naudokite
SHOW TABLESarbaDESCRIBE cards - kiekvienas SQL iškvietimas apribotas viena darbo sritimi: turinyje nurodyta
workspaceIdarba pasirinkta darbo sritis
Užklausos pavyzdys:
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"}'
Kortelių užklausos pavyzdys:
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"
}'
Pakeitimo pavyzdys:
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'\''"
}'
Taip pat veikia nuotolinis MCP serveris adresu https://mcp.nibomo.com/mcp, naudojantis OAuth 2.1 (Dynamic Client Registration + PKCE). Jame SQL taip pat atskirta į sql_query (griežtai tik skaitymas) ir sql_execute (rašymas), be to, yra list_workspaces, get_guide ir kartojimo įrankiai next_review_card, reveal_answer bei submit_review; žr. MCP jungtį.
Saugumas ir apimtis
SQL sąsaja yra uždaras, analizatoriaus kontroliuojamas dialektas, o ne tiesioginė prieiga prie PostgreSQL. Apsaugos priemonės:
- Uždaras leidžiamų sakinių sąrašas: skaitymui tik
SHOW TABLES,DESCRIBE,SHOW COLUMNSirSELECT, rašymui –INSERT,UPDATEirDELETE. Visa kita atmetama analizės metu. - Riboti ištekliai: sakiniai gali paliesti tik
workspace,cards,decksirreview_eventsišteklius. - Apribojimas darbo sritimi: kiekvienas sakinys apribotas viena jums prieinama darbo sritimi – užklausos turinyje nurodyta
workspaceIdarba pasirinkta darbo sritis, be jokios prieigos prie kitų nuomininkų. - Griežtas užklausų turinys: SQL ir kartojimo maršrutai atmeta nežinomą turinio lauką, todėl užklausa su klaidingai parašytu
workspaceIdnepavyksta, užuot įvykdyta pasirinktoje darbo srityje. - Ribos: iki
100eilučių vienam sakiniui, iki50sakinių vienam paketui ir maždaug12kžetonų rezultato riba. Keitimų paketai pritaikomi atomiškai. - Skaitymo ir rašymo atskyrimas:
sql_queryirlist_workspacesyra griežtai tik skaitymui (readOnlyHint) ir niekada netaiso duomenų, neperskaičiuoja planavimo ir nekeičia kortelių būsenos.sql_executeyra vienintelis SQL rašymo įrankis ir atlieka rašymo operacijas (destructiveHint); viename iškvietime turi būti tik skaitymo arba tik rašymo sakiniai. SQL negali rašyti įreview_eventsar FSRS planavimo būsenos; kartojimą registruoja tikPOST /v1/agent/reviews/submit(MCPsubmit_review).
Vadovai
GET /v1/agent/guide/{topic} grąžina vieną informacinį vadovą lauke data.guide – tą patį turinį, kurį pateikia MCP įrankis get_guide. Temos:
sql_dialect: visa SQL gramatika, ribos ir pavyzdžiaicard_authoring: kortelių sutartis, žymos, dublikatų tikrinimas ir formatavimasbulk_authoring: didelės rašymo užduoties skaidymas ir tikrinimasreview_flow: kartojimo ir vertinimo ciklas
Nežinoma tema grąžina 400 su palaikomų temų sąrašu. Prieš kurdami korteles, rašydami dideliais kiekiais ar pradėdami kartojimą, gaukite atitinkamą vadovą, o atmetus sakinį iš naujo perskaitykite sql_dialect.
curl https://api.nibomo.com/v1/agent/guide/sql_dialect \
-H "Authorization: ApiKey $FLASHCARDS_OPEN_SOURCE_API_KEY"
Kartojimas
Kartojimo maršrutai leidžia agentui klausinėti besimokantįjį po vieną kortelę ir kiekvieną įvertinimą įrašyti į kortelės FSRS tvarkaraštį. Jie priima tuos pačius JSON argumentus kaip ir MCP kartojimo įrankiai:
POST /v1/agent/reviews/nextgrąžinacardsucardIdirfrontTextarbacard: null, kai nėra ką kartoti. Neprivalomastags(bet kuri iš žymų) arbadeckIdsusiaurina eilę, bet ne abu kartu; užklausa be turinio taip pat tinkama.POST /v1/agent/reviews/revealreikalaujacardIdir grąžina tos kortelėsbackText.POST /v1/agent/reviews/submitreikalaujacardId, kliento sugeneruotoreviewIdUUID,ratingreikšmėsAgain,Hard,GoodarbaEasyir besimokančiojo IANAreviewedTimeZone. Serveris pažymi kartojimo laiką ir grąžina naują kortelės tvarkaraštį, įskaitantdueAt,state,repsirlapses.
Visi trys maršrutai priima neprivalomą workspaceId. Prieš pateikdami išsaugokite reviewId, o jei nežinote, ar pateikimas pavyko, siųskite identišką užklausą dar kartą – antras kartojimas niekada nebus įrašytas. Kartojimo maršrutai taip pat gali grąžinti:
409 REVIEW_EVENT_CONFLICT: kartojimas jau įrašytas, oerror.details.reviewSchedulepateikia dabartinį kortelės tvarkaraštį.409 REVIEW_ID_CARD_MISMATCH:reviewIdjau žymi kitos kortelės kartojimą, todėl niekas neišsaugota; pateikite dar kartą su naujureviewId.409 REVIEW_STALE: išsaugotas kortelės kartojimo laikas yra lygus dabartiniam serverio laikui arba vėlesnis; kartokite kitą kortelę.400 REVIEW_INPUT_INVALID: trūksta argumento arba jis netinkamas ar nepalaikomas, įskaitanttagskartu sudeckIdarba žymą, kurios darbo sritis nenaudoja.
Pateikimo pavyzdys:
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 žmonėms ir sinchronizavimui
Nibomo taip pat turi atskiras API žmonių naudojamiems klientams ir pirmiausia neprisijungus veikiančių klientų sinchronizavimui, tačiau jos nėra pagrindinė sutartis išoriniams agentams:
- naršyklės srautai naudoja bendro domeno slapukus ir CSRF apsaugą
- pirmiausia neprisijungus veikiantys klientai naudoja įgyvendintus sinchronizavimo maršrutus
/v1/workspaces/{workspaceId}/sync/pushir/v1/workspaces/{workspaceId}/sync/pull - sinchronizavimo maršrutai yra atskirti nuo išorinių agentų sąsajos