API referenca
Pregled
Ova stranica dokumentira trenutačni ugovor koji Nibomo nudi vanjskim AI agentima.
Ako vaš klijent podržava MCP, MCP konektor najjednostavniji je način povezivanja i u pozadini koristi isto podatkovno sučelje. Ova stranica dokumentira HTTP ugovor za otkrivanje, SQL, vodiče i ponavljanje koji koriste CLI agenti.
Krenite od kanonske ulazne točke za otkrivanje:
GET https://api.nibomo.com/v1/
Isti sadržaj za otkrivanje dostupan je i na GET /v1/agent, ali je /v1/ glavna javna ulazna točka.
Odgovor za otkrivanje govori agentu kako da:
- pokrene prijavu OTP kodom iz e-pošte
- zamijeni OTP za dugotrajni API ključ
- učita kontekst računa
- izradi ili odabere radni prostor
- nastavi putem objavljenog SQL sučelja
- dohvati referentne vodiče i ponavlja kartice jednu po jednu
Otkrivanje pri izvođenju i izvorni kod
OpenAPI nije dostupan. Četiri nekadašnja URL-a specifikacije u nastavku sada umjesto sheme vraćaju istu JSON obavijest za otkrivanje s "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
Za trenutačno otkrivanje pri izvođenju koristite GET https://api.nibomo.com/v1/. Za rute dostupne pri izvođenju slijedite vraćeni docs.discoveryUrl, a za detalje implementacije docs.source.agentRoutesUrl.
Početno postavljanje autentifikacije
Početno postavljanje OTP-om odvija se na usluzi autentifikacije:
POST https://auth.nibomo.com/api/agent/send-codePOST https://auth.nibomo.com/api/agent/verify-code
Tok je sljedeći:
- Pozovite
GET /v1/. - Pošaljite korisnikovu adresu e-pošte na
send-code. - Pročitajte
otpSessionTokeniz odgovora. - Zatražite od korisnika najnoviji 8-znamenkasti kod iz e-pošte.
- Pozovite
verify-codescode,otpSessionTokenilabel. - Vraćeni API ključ spremite izvan memorije razgovora.
Preporučena varijabla okruženja:
export FLASHCARDS_OPEN_SOURCE_API_KEY="fca_ABCDEFGH_0123456789ABCDEFGHJKMNPQRS"
Autentificirani zahtjevi koriste:
Authorization: ApiKey <key>
Primjer slijeda početnog postavljanja:
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"
}'
Sučelje za agente nakon prijave
Nakon potvrde agentima je trenutačno dostupno ovo sučelje:
GET /v1/agent/meGET /v1/agent/workspacesPOST /v1/agent/workspacesPOST /v1/agent/workspaces/{workspaceId}/selectPOST /v1/agent/sql/query(samo za čitanje)POST /v1/agent/sql/execute(pisanje)GET /v1/agent/guide/{topic}(samo za čitanje)POST /v1/agent/reviews/next(samo za čitanje)POST /v1/agent/reviews/reveal(samo za čitanje)POST /v1/agent/reviews/submit(pisanje)
Uobičajeno početno postavljanje izgleda ovako:
GET /v1/agent/meGET /v1/agent/workspaces?limit=100- Po potrebi
POST /v1/agent/workspacess{"name":"Personal"} - Po potrebi
POST /v1/agent/workspaces/{workspaceId}/select - Koristite
POST /v1/agent/sql/queryza čitanje iPOST /v1/agent/sql/executeza pisanje
Odabir radnog prostora izričito se postavlja za svaku vezu s API ključem. Umjesto da nagađaju sljedeći korak, agenti trebaju slijediti vraćeni tekst instructions i docs.discoveryUrl za rute dostupne pri izvođenju te docs.source.agentRoutesUrl za detalje implementacije.
SQL rute i rute za ponavljanje prihvaćaju i neobavezni workspaceId u JSON tijelu. Tada se taj jedan poziv izvršava nad navedenim radnim prostorom, a odabir se ne mijenja; izostavite ga ako želite koristiti odabrani radni prostor. Ako nema ni odabira ni workspaceId, rute odgovaraju s 409 WORKSPACE_SELECTION_REQUIRED.
SQL sučelje
POST /v1/agent/sql/query je sučelje strogo samo za čitanje (SHOW TABLES, DESCRIBE, SHOW COLUMNS, SELECT), a POST /v1/agent/sql/execute je sučelje za pisanje (INSERT, UPDATE, DELETE); jedan poziv mora sadržavati samo čitanja ili samo pisanja.
Namjerno je ograničeno i nije potpuni PostgreSQL. Ova dokumentacija pokriva samo podržani dijalekt, a ne referencu kompatibilnosti s PostgreSQL-om.
Nijedna operacija čitanja ne popravlja podatke, ne preračunava raspored niti mijenja stanje kartica. Za svako pisanje kartica i špilova koristite POST /v1/agent/sql/execute. SQL ne može pisati review_events ni FSRS stanje raspoređivanja; ponavljanja bilježite putem POST /v1/agent/reviews/submit.
Trenutačne vrste naredbi:
SHOW TABLESDESCRIBE <resource>SHOW COLUMNS FROM <resource>SELECTINSERTUPDATEDELETE
Objavljeni logički resursi trenutačno uključuju:
workspacecardsdecksreview_events
Napomene:
- zadana vrijednost za
LIMITje100, a najveća dopuštena također je100 - koristite
ORDER BYkad vam treba stabilno straničenje - za otkrivanje sheme koristite
SHOW TABLESiliDESCRIBE cards - svaki SQL poziv ograničen je na jedan radni prostor:
workspaceIdu tijelu ili odabrani radni prostor
Primjer zahtjeva:
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"}'
Primjer upita za kartice:
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"
}'
Primjer izmjene:
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'\''"
}'
Dostupan je i udaljeni MCP poslužitelj na https://mcp.nibomo.com/mcp koji koristi OAuth 2.1 (Dynamic Client Registration + PKCE). Nudi istu podjelu SQL-a na sql_query (strogo samo za čitanje) i sql_execute (pisanje), uz list_workspaces, get_guide i alate za ponavljanje next_review_card, reveal_answer i submit_review; pogledajte MCP konektor.
Sigurnost i opseg
SQL sučelje je ograničen dijalekt čija pravila provodi parser, a ne izravan pristup PostgreSQL-u. Zaštitne mjere su:
- Zatvoreni popis dopuštenih naredbi: samo
SHOW TABLES,DESCRIBE,SHOW COLUMNSiSELECTza čitanje teINSERT,UPDATEiDELETEza pisanje. Sve ostalo odbija se već pri parsiranju. - Ograničeni resursi: naredbe mogu pristupiti samo resursima
workspace,cards,decksireview_events. - Ograničenje na radni prostor: svaka naredba ograničena je na jedan radni prostor kojem imate pristup, bilo
workspaceIdu tijelu zahtjeva bilo vaš odabrani radni prostor, bez pristupa drugim radnim prostorima. - Stroga tijela zahtjeva: SQL rute i rute za ponavljanje odbijaju nepoznato polje u tijelu, pa pogrešno napisan
workspaceIduzrokuje pogrešku umjesto da se zahtjev izvrši nad odabranim radnim prostorom. - Ograničenja: do
100redaka po naredbi, do50naredbi po skupu i ograničenje rezultata od otprilike12ktokena. Skupovi izmjena primjenjuju se atomarno. - Podjela na čitanje i pisanje:
sql_queryilist_workspacesstrogo su samo za čitanje (readOnlyHint) i nikad ne popravljaju podatke, ne preračunavaju raspored niti mijenjaju stanje kartica.sql_executeje jedini SQL alat za pisanje i izvodi pisanja (destructiveHint); jedan poziv mora sadržavati samo čitanja ili samo pisanja. SQL ne može pisatireview_eventsni FSRS stanje raspoređivanja; ponavljanje bilježi samoPOST /v1/agent/reviews/submit(MCPsubmit_review).
Vodiči
GET /v1/agent/guide/{topic} vraća jedan referentni vodič u data.guide, s istim sadržajem koji poslužuje MCP alat get_guide. Teme:
sql_dialect: potpuna SQL gramatika, ograničenja i primjericard_authoring: ugovor kartice, oznake, provjere duplikata i oblikovanjebulk_authoring: podjela i provjera velikog skupnog upisareview_flow: petlja ponavljanja i ocjenjivanja
Za nepoznatu temu odgovor je 400 s popisom podržanih tema. Prije izrade kartica, skupnog pisanja ili ponavljanja dohvatite odgovarajući vodič, a nakon odbijene naredbe ponovno pročitajte sql_dialect.
curl https://api.nibomo.com/v1/agent/guide/sql_dialect \
-H "Authorization: ApiKey $FLASHCARDS_OPEN_SOURCE_API_KEY"
Ponavljanje
Rute za ponavljanje omogućuju agentu da ispituje učenika karticu po karticu i svaku ocjenu spremi u FSRS raspored kartice. Primaju iste JSON argumente kao MCP alati za ponavljanje:
POST /v1/agent/reviews/nextvraćacardscardIdifrontTextilicard: nullkad ništa nije na redu. Neobaveznitags(bilo koja od oznaka) ilideckIdsužava red, ali nikad oba zajedno; zahtjev bez tijela je valjan.POST /v1/agent/reviews/revealzahtijevacardIdi vraćabackTextte kartice.POST /v1/agent/reviews/submitzahtijevacardId, UUIDreviewIdkoji generira klijent,ratings vrijednošćuAgain,Hard,GoodiliEasyte učenikov IANAreviewedTimeZone. Poslužitelj bilježi vrijeme ponavljanja i vraća novi raspored kartice, uključujućidueAt,state,repsilapses.
Sve tri rute prihvaćaju neobavezni workspaceId. Spremite reviewId prije slanja, a slanje čiji ishod nije siguran ponovite s identičnim zahtjevom; time se nikad ne bilježi drugo ponavljanje. Rute za ponavljanje mogu vratiti i ove odgovore:
409 REVIEW_EVENT_CONFLICT: ponavljanje je već zabilježeno, aerror.details.reviewSchedulesadrži trenutačni raspored kartice.409 REVIEW_ID_CARD_MISMATCH:reviewIdveć označava ponavljanje druge kartice, pa ništa nije spremljeno; pošaljite ponovno s novimreviewId.409 REVIEW_STALE: spremljeno vrijeme ponavljanja kartice jednako je trenutačnom vremenu poslužitelja ili je nakon njega; ponovite neku drugu karticu.400 REVIEW_INPUT_INVALID: argument nedostaje, nije valjan ili nije podržan, uključujućitagsu kombinaciji sdeckIdili oznaku koju radni prostor ne koristi.
Primjer slanja:
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-ji za ljude i sinkronizaciju
Nibomo uključuje i zasebne API-je za klijente kojima se služe ljudi i za sinkronizaciju koja prvenstveno radi offline, ali oni nisu glavni ugovor za vanjske agente:
- tokovi u pregledniku koriste kolačiće na zajedničkoj domeni uz CSRF zaštitu
- klijenti koji prvenstveno rade offline koriste implementirane rute za sinkronizaciju
/v1/workspaces/{workspaceId}/sync/pushi/v1/workspaces/{workspaceId}/sync/pull - rute za sinkronizaciju odvojene su od sučelja za vanjske agente