API apraksts
Pārskats
Šajā lapā aprakstīta pašreizējā Nibomo saskarne ārējiem MI aģentiem.
Ja tavs klients atbalsta MCP, MCP savienotājs ir vienkāršākais veids, kā pieslēgties, un tas izmanto to pašu datu saskarni. Šajā lapā aprakstīta HTTP saskarne atklāšanai, SQL, ceļvežiem un atkārtošanai, ko izmanto CLI aģenti.
Sāc ar kanonisko atklāšanas ieejas punktu:
GET https://api.nibomo.com/v1/
Tie paši atklāšanas dati ir pieejami arī adresē GET /v1/agent, taču galvenais publiskais ieejas punkts ir /v1/.
Atklāšanas atbilde aģentam paskaidro, kā:
- sākt pieteikšanos ar e-pasta OTP
- apmainīt OTP pret ilgtermiņa API atslēgu
- ielādēt konta kontekstu
- izveidot vai izvēlēties darbvietu
- turpināt darbu ar publicēto SQL saskarni
- iegūt uzziņu ceļvežus un atkārtot kartītes pa vienai
Atklāšana izpildes laikā un pirmkods
OpenAPI nav pieejams. Četri tālāk norādītie bijušie specifikācijas URL shēmas vietā tagad atgriež to pašu JSON atklāšanas paziņojumu ar "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
Pašreizējai atklāšanai izpildes laikā izmanto GET https://api.nibomo.com/v1/. Izpildes laika maršrutiem seko atgrieztajam docs.discoveryUrl, bet implementācijas detaļām — docs.source.agentRoutesUrl.
Autentifikācijas sākotnējā iestatīšana
OTP sākotnējā iestatīšana notiek autentifikācijas pakalpojumā:
POST https://auth.nibomo.com/api/agent/send-codePOST https://auth.nibomo.com/api/agent/verify-code
Plūsma ir šāda:
- Izsauc
GET /v1/. - Nosūti lietotāja e-pasta adresi uz
send-code. - Nolasi
otpSessionTokenno atbildes. - Palūdz lietotājam jaunāko 8 ciparu kodu no e-pasta.
- Izsauc
verify-codearcode,otpSessionTokenunlabel. - Saglabā atgriezto API atslēgu ārpus sarunas atmiņas.
Ieteicamais vides mainīgais:
export FLASHCARDS_OPEN_SOURCE_API_KEY="fca_ABCDEFGH_0123456789ABCDEFGHJKMNPQRS"
Autentificētie pieprasījumi izmanto:
Authorization: ApiKey <key>
Sākotnējās iestatīšanas secības piemērs:
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"
}'
Aģenta saskarne pēc pieteikšanās
Pēc pārbaudes pašreizējā aģenta saskarne ir šāda:
GET /v1/agent/meGET /v1/agent/workspacesPOST /v1/agent/workspacesPOST /v1/agent/workspaces/{workspaceId}/selectPOST /v1/agent/sql/query(tikai lasīšanai)POST /v1/agent/sql/execute(rakstīšanai)GET /v1/agent/guide/{topic}(tikai lasīšanai)POST /v1/agent/reviews/next(tikai lasīšanai)POST /v1/agent/reviews/reveal(tikai lasīšanai)POST /v1/agent/reviews/submit(rakstīšanai)
Tipiska sākotnējā iestatīšana izskatās šādi:
GET /v1/agent/meGET /v1/agent/workspaces?limit=100- Ja nepieciešams,
POST /v1/agent/workspacesar{"name":"Personal"} - Ja nepieciešams,
POST /v1/agent/workspaces/{workspaceId}/select - Lasīšanai izmanto
POST /v1/agent/sql/query, bet rakstīšanai —POST /v1/agent/sql/execute
Darbvieta katram API atslēgas savienojumam tiek izvēlēta skaidri. Aģentiem nevajadzētu minēt nākamo soli: izpildes laika maršrutiem jāseko atgrieztajam instructions tekstam un docs.discoveryUrl, bet implementācijas detaļām — docs.source.agentRoutesUrl.
SQL un atkārtošanas maršruti JSON pamattekstā pieņem arī neobligātu workspaceId. Tas novirza vienu izsaukumu uz norādīto darbvietu, nemainot izvēli; ja to izlaid, tiek izmantota izvēlētā darbvieta. Ja nav ne izvēles, ne workspaceId, tie atbild ar 409 WORKSPACE_SELECTION_REQUIRED.
SQL saskarne
POST /v1/agent/sql/query ir saskarne stingri tikai lasīšanai (SHOW TABLES, DESCRIBE, SHOW COLUMNS, SELECT), bet POST /v1/agent/sql/execute ir rakstīšanas saskarne (INSERT, UPDATE, DELETE); vienā izsaukumā drīkst būt tikai lasīšanas vai tikai rakstīšanas vaicājumi.
Tā ir apzināti ierobežota un nav pilnvērtīgs PostgreSQL. Šī dokumentācija aptver tikai atbalstīto dialektu, un tā nav PostgreSQL saderības rokasgrāmata.
Neviena lasīšanas darbība nelabo datus, nepārrēķina plānojumu un nemaina kartītes stāvokli. Visām
kartīšu un kartīšu komplektu izmaiņām izmanto POST /v1/agent/sql/execute. SQL nevar rakstīt
review_events vai FSRS plānošanas stāvokli; atkārtojumi jāreģistrē ar
POST /v1/agent/reviews/submit.
Pašreizējie vaicājumu veidi:
SHOW TABLESDESCRIBE <resource>SHOW COLUMNS FROM <resource>SELECTINSERTUPDATEDELETE
Publicētie loģiskie resursi pašlaik ir:
workspacecardsdecksreview_events
Piezīmes:
LIMITnoklusējuma vērtība ir100, un maksimālā vērtība ir100- ja vajadzīga stabila lapošana, izmanto
ORDER BY - shēmas izpētei izmanto
SHOW TABLESvaiDESCRIBE cards - katrs SQL izsaukums attiecas uz vienu darbvietu: pamattekstā norādīto
workspaceIdvai izvēlēto darbvietu
Pieprasījuma piemērs:
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"}'
Kartīšu vaicājuma piemērs:
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"
}'
Izmaiņu piemērs:
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'\''"
}'
Pieejams arī attālais MCP serveris adresē https://mcp.nibomo.com/mcp, kas izmanto OAuth 2.1 (Dynamic Client Registration + PKCE). Tajā ir tas pats SQL sadalījums — sql_query (stingri tikai lasīšanai) un sql_execute (rakstīšanai) —, kā arī list_workspaces, get_guide un atkārtošanas rīkus next_review_card, reveal_answer un submit_review; skati MCP savienotāju.
Drošība un darbības joma
SQL saskarne ir norobežots dialekts, kura ievērošanu nodrošina parsētājs, nevis neapstrādāts PostgreSQL. Aizsardzības mehānismi ir šādi:
- Slēgts atļauto vaicājumu saraksts: lasīšanai tikai
SHOW TABLES,DESCRIBE,SHOW COLUMNSunSELECT, rakstīšanai —INSERT,UPDATEunDELETE. Viss pārējais tiek noraidīts parsēšanas laikā. - Ierobežoti resursi: vaicājumi var piekļūt tikai resursiem
workspace,cards,decksunreview_events. - Ierobežojums vienā darbvietā: katrs vaicājums attiecas uz vienu darbvietu, kurai tev ir piekļuve, — vai nu pieprasījuma pamattekstā norādīto
workspaceId, vai tavu izvēlēto darbvietu — bez piekļuves citām darbvietām. - Stingri pieprasījumu pamatteksti: SQL un atkārtošanas maršruti noraida nezināmu pamatteksta lauku, tāpēc kļūdaini uzrakstīts
workspaceIdizraisa kļūdu, nevis izpildi izvēlētajā darbvietā. - Ierobežojumi: līdz
100rindām vienā vaicājumā, līdz50vaicājumiem vienā paketē un rezultāta ierobežojums aptuveni12ktokenu. Izmaiņu paketes tiek piemērotas atomāri. - Lasīšanas un rakstīšanas nodalīšana:
sql_queryunlist_workspacesir stingri tikai lasīšanai (readOnlyHint) un nekad nelabo datus, nepārrēķina plānojumu un nemaina kartītes stāvokli.sql_executeir vienīgais SQL rakstīšanas rīks, un tas veic rakstīšanu (destructiveHint); vienā izsaukumā drīkst būt tikai lasīšanas vai tikai rakstīšanas vaicājumi. SQL nevar rakstītreview_eventsvai FSRS plānošanas stāvokli; atkārtojumu reģistrē tikaiPOST /v1/agent/reviews/submit(MCPsubmit_review).
Ceļveži
GET /v1/agent/guide/{topic} laukā data.guide atgriež vienu uzziņu ceļvedi — to pašu saturu, ko nodrošina MCP rīks get_guide. Tēmas:
sql_dialect: pilna SQL gramatika, ierobežojumi un piemēricard_authoring: prasības kartītēm, birkas, dublikātu pārbaudes un formatējumsbulk_authoring: liela rakstīšanas darba sadalīšana un pārbaudereview_flow: atkārtošanas un vērtēšanas cikls
Uz nezināmu tēmu tiek atbildēts ar 400 un atbalstīto tēmu sarakstu. Pirms kartīšu veidošanas, lielapjoma rakstīšanas vai atkārtošanas ielādē atbilstošo ceļvedi, bet pēc noraidīta vaicājuma vēlreiz izlasi sql_dialect.
curl https://api.nibomo.com/v1/agent/guide/sql_dialect \
-H "Authorization: ApiKey $FLASHCARDS_OPEN_SOURCE_API_KEY"
Atkārtošana
Atkārtošanas maršruti ļauj aģentam pa vienai kartītei pārbaudīt lietotāja zināšanas un saglabāt katru vērtējumu kartītes FSRS grafikā. Tie pieņem tos pašus JSON argumentus kā MCP atkārtošanas rīki:
POST /v1/agent/reviews/nextatgriežcardarcardIdunfrontTextvaicard: null, ja nekas nav jāatkārto. Rindu var sašaurināt ar neobligātutags(der jebkura no birkām) vaideckId, bet ne ar abiem reizē; pieprasījums bez pamatteksta ir derīgs.POST /v1/agent/reviews/revealpieprasacardIdun atgriež šīs kartītesbackText.POST /v1/agent/reviews/submitpieprasacardId, klienta ģenerētureviewIdUUID,ratingar vērtībuAgain,Hard,GoodvaiEasyun lietotāja IANA laika joslureviewedTimeZone. Serveris piešķir atkārtojuma laiku un atgriež kartītes jauno grafiku, tostarpdueAt,state,repsunlapses.
Visi trīs maršruti pieņem neobligāto workspaceId. Pirms iesniegšanas saglabā reviewId, un, ja nav skaidrs, vai iesniegšana izdevās, atkārto tieši to pašu pieprasījumu; otrs atkārtojums nekad netiek reģistrēts. Atkārtošanas maršruti var atbildēt arī ar:
409 REVIEW_EVENT_CONFLICT: atkārtojums jau ir reģistrēts, unerror.details.reviewSchedulesatur kartītes pašreizējo grafiku.409 REVIEW_ID_CARD_MISMATCH:reviewIdjau identificē citas kartītes atkārtojumu, tāpēc nekas netika saglabāts; iesniedz vēlreiz ar jaunureviewId.409 REVIEW_STALE: kartītes saglabātais atkārtošanas laiks ir vienāds ar pašreizējo servera laiku vai vēlāks par to; atkārto citu kartīti.400 REVIEW_INPUT_INVALID: trūkst kāda argumenta, tas nav derīgs vai netiek atbalstīts, tostarptagskopā ardeckIdvai birka, ko darbvieta neizmanto.
Iesniegšanas piemērs:
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 cilvēkiem un sinhronizācijai
Nibomo ietver arī atsevišķus API cilvēku klientiem un sinhronizācijai, kas orientēta uz darbu bezsaistē, taču tie nav galvenā saskarne ārējiem aģentiem:
- pārlūka plūsmas izmanto kopīgā domēna sīkdatnes un CSRF aizsardzību
- uz darbu bezsaistē orientēti klienti izmanto ieviestos sinhronizācijas maršrutus
/v1/workspaces/{workspaceId}/sync/pushun/v1/workspaces/{workspaceId}/sync/pull - sinhronizācijas maršruti ir nodalīti no ārējo aģentu saskarnes