Referència de l'API
Visió general
Aquesta pàgina documenta el contracte actual per a agents d'IA externs de Nibomo.
Si el teu client és compatible amb MCP, el connector MCP és la manera més senzilla de connectar-te i embolcalla aquesta mateixa interfície de dades. Aquesta pàgina documenta el contracte HTTP de descobriment, SQL, guies i repassos que fan servir els agents de línia d'ordres.
Comença pel punt d'entrada de descobriment canònic:
GET https://api.nibomo.com/v1/
La mateixa resposta de descobriment també està disponible a GET /v1/agent, però /v1/ és el punt d'entrada públic principal.
La resposta de descobriment indica a l'agent com:
- iniciar la sessió amb OTP per correu electrònic
- bescanviar l'OTP per una clau d'API de llarga durada
- carregar el context del compte
- crear o seleccionar un espai de treball
- continuar a través de la interfície SQL publicada
- obtenir guies de referència i repassar les targetes d'una en una
Descobriment en temps d'execució i codi font
OpenAPI no està disponible. Les quatre URL següents, que abans servien l'especificació, ara retornen el mateix avís de descobriment en JSON amb "openapiAvailable": false en lloc d'un esquema:
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
Fes servir GET https://api.nibomo.com/v1/ per al descobriment actual en temps d'execució. Segueix el docs.discoveryUrl retornat per a les rutes en temps d'execució i docs.source.agentRoutesUrl per als detalls d'implementació.
Configuració inicial de l'autenticació
La configuració inicial amb OTP s'executa al servei d'autenticació:
POST https://auth.nibomo.com/api/agent/send-codePOST https://auth.nibomo.com/api/agent/verify-code
El flux és:
- Crida
GET /v1/. - Envia el correu electrònic de l'usuari a
send-code. - Llegeix
otpSessionTokende la resposta. - Demana a l'usuari el codi de 8 xifres més recent que ha rebut per correu.
- Crida
verify-codeambcode,otpSessionTokenilabel. - Desa la clau d'API retornada fora de la memòria del xat.
Variable d'entorn recomanada:
export FLASHCARDS_OPEN_SOURCE_API_KEY="fca_ABCDEFGH_0123456789ABCDEFGHJKMNPQRS"
Les sol·licituds autenticades fan servir:
Authorization: ApiKey <key>
Exemple de seqüència de configuració inicial:
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"
}'
Interfície per a agents després de l'inici de sessió
Després de la verificació, la interfície actual per a agents és:
GET /v1/agent/meGET /v1/agent/workspacesPOST /v1/agent/workspacesPOST /v1/agent/workspaces/{workspaceId}/selectPOST /v1/agent/sql/query(només lectura)POST /v1/agent/sql/execute(escriptura)GET /v1/agent/guide/{topic}(només lectura)POST /v1/agent/reviews/next(només lectura)POST /v1/agent/reviews/reveal(només lectura)POST /v1/agent/reviews/submit(escriptura)
Una configuració inicial típica és així:
GET /v1/agent/meGET /v1/agent/workspaces?limit=100- Si cal,
POST /v1/agent/workspacesamb{"name":"Personal"} - Si cal,
POST /v1/agent/workspaces/{workspaceId}/select - Fes servir
POST /v1/agent/sql/queryper a les lectures iPOST /v1/agent/sql/executeper a les escriptures
La selecció de l'espai de treball és explícita per a cada connexió amb clau d'API. Els agents han de seguir el text instructions retornat i docs.discoveryUrl per a les rutes en temps d'execució, a més de docs.source.agentRoutesUrl per als detalls d'implementació, en lloc d'endevinar el pas següent.
Les rutes de SQL i de repàs també accepten un workspaceId opcional al cos JSON. Indica l'espai de treball d'una sola crida sense canviar la selecció; si l'omets, s'utilitza l'espai de treball seleccionat. Si no hi ha ni una selecció ni un workspaceId, responen 409 WORKSPACE_SELECTION_REQUIRED.
Interfície SQL
POST /v1/agent/sql/query és la interfície estrictament de només lectura (SHOW TABLES, DESCRIBE, SHOW COLUMNS, SELECT) i POST /v1/agent/sql/execute és la interfície d'escriptura (INSERT, UPDATE, DELETE); una sola crida ha de contenir només lectures o només escriptures.
És limitada a propòsit i no és un PostgreSQL complet. Aquesta documentació només descriu el dialecte admès; no és una referència de compatibilitat amb PostgreSQL.
Cap operació de lectura repara dades, recalcula la planificació ni canvia l'estat de les targetes. Fes servir POST /v1/agent/sql/execute per a totes les escriptures de targetes i baralles. SQL no pot escriure a review_events ni modificar l'estat de planificació de FSRS; registra els repassos a través de POST /v1/agent/reviews/submit.
Famílies d'instruccions actuals:
SHOW TABLESDESCRIBE <resource>SHOW COLUMNS FROM <resource>SELECTINSERTUPDATEDELETE
Els recursos lògics publicats inclouen actualment:
workspacecardsdecksreview_events
Notes:
LIMITés100per defecte i té un màxim de100- fes servir
ORDER BYquan necessitis una paginació estable - fes servir
SHOW TABLESoDESCRIBE cardsper descobrir l'esquema - cada crida SQL s'aplica a un sol espai de treball: el
workspaceIddel cos o l'espai de treball seleccionat
Exemple de sol·licitud:
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"}'
Exemple de consulta de targetes:
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"
}'
Exemple de modificació:
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'\''"
}'
També hi ha disponible un servidor MCP remot a https://mcp.nibomo.com/mcp que fa servir OAuth 2.1 (Dynamic Client Registration + PKCE). Exposa la mateixa separació SQL com a sql_query (estrictament de només lectura) i sql_execute (escriptura), a més de list_workspaces, get_guide i les eines de repàs next_review_card, reveal_answer i submit_review; consulta el connector MCP.
Seguretat i abast
La interfície SQL és un dialecte acotat i controlat per l'analitzador, no PostgreSQL en brut. Les salvaguardes són:
- Llista tancada d'instruccions permeses: només
SHOW TABLES,DESCRIBE,SHOW COLUMNSiSELECTper a les lectures, iINSERT,UPDATEiDELETEper a les escriptures. Qualsevol altra cosa es rebutja en el moment de l'anàlisi. - Recursos limitats: les instruccions només poden afectar els recursos
workspace,cards,decksireview_events. - Abast per espai de treball: cada instrucció s'aplica a un sol espai de treball al qual tinguis accés, ja sigui el
workspaceIddel cos de la sol·licitud o el teu espai de treball seleccionat, sense accés entre inquilins. - Cossos de sol·licitud estrictes: les rutes de SQL i de repàs rebutgen qualsevol camp del cos desconegut, de manera que un
workspaceIdmal escrit falla en lloc d'executar-se contra l'espai de treball seleccionat. - Límits: fins a
100files per instrucció, fins a50instruccions per lot i un límit de resultat d'aproximadament12ktokens. Els lots de modificació s'apliquen de manera atòmica. - Separació de lectura i escriptura:
sql_queryilist_workspacessón estrictament de només lectura (readOnlyHint) i mai reparen dades, recalculen la planificació ni canvien l'estat de les targetes.sql_executeés l'única eina SQL d'escriptura i fa escriptures (destructiveHint); una sola crida ha de contenir només lectures o només escriptures. SQL no pot escriure areview_eventsni modificar l'estat de planificació de FSRS; nomésPOST /v1/agent/reviews/submit(submit_reviewa MCP) registra un repàs.
Guies
GET /v1/agent/guide/{topic} retorna una guia de referència a data.guide, el mateix contingut que serveix l'eina get_guide de MCP. Temes:
sql_dialect: la gramàtica SQL completa, els límits i exemplescard_authoring: el contracte de les targetes, les etiquetes, les comprovacions de duplicats i el formatbulk_authoring: com dividir i verificar una tasca d'escriptura granreview_flow: el cicle de repàs i valoració
Un tema desconegut respon 400 amb la llista de temes admesos. Obtén la guia corresponent abans de crear targetes, d'escriure en bloc o de fer un repàs, i torna a llegir sql_dialect després que es rebutgi una instrucció.
curl https://api.nibomo.com/v1/agent/guide/sql_dialect \
-H "Authorization: ApiKey $FLASHCARDS_OPEN_SOURCE_API_KEY"
Repassos
Les rutes de repàs permeten que un agent posi a prova qui aprèn, targeta a targeta, i desi cada valoració a la planificació FSRS de la targeta. Accepten els mateixos arguments JSON que les eines de repàs de MCP:
POST /v1/agent/reviews/nextretornacardambcardIdifrontText, ocard: nullquan no hi ha res pendent. Opcionalment,tags(n'hi ha prou que en coincideixi una) odeckIdrestringeixen la cua, però mai tots dos alhora; una sol·licitud sense cos és vàlida.POST /v1/agent/reviews/revealrequereixcardIdi retorna elbackTextd'aquella targeta.POST /v1/agent/reviews/submitrequereixcardId, un UUIDreviewIdgenerat pel client, unratingamb el valorAgain,Hard,GoodoEasy, i elreviewedTimeZoneIANA de qui aprèn. El servidor registra l'hora del repàs i retorna la nova planificació de la targeta, inclososdueAt,state,repsilapses.
Les tres rutes accepten el workspaceId opcional. Desa el reviewId abans d'enviar i, si no saps si un enviament ha arribat, torna'l a provar amb exactament la mateixa sol·licitud; mai no es registra un segon repàs. Les rutes de repàs també poden respondre:
409 REVIEW_EVENT_CONFLICT: el repàs ja s'havia registrat, ierror.details.reviewScheduleconté la planificació actual de la targeta.409 REVIEW_ID_CARD_MISMATCH: elreviewIdja identifica un repàs d'una altra targeta, de manera que no s'ha desat res; torna a enviar-lo amb unreviewIdnou.409 REVIEW_STALE: l'hora de repàs desada de la targeta és igual o posterior a l'hora actual del servidor; repassa una altra targeta.400 REVIEW_INPUT_INVALID: falta un argument, o bé no és vàlid o no és compatible, inclòstagscombinat ambdeckIdo una etiqueta que l'espai de treball no fa servir.
Exemple d'enviament:
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 per a persones i de sincronització
Nibomo també inclou API separades per a clients humans i per a la sincronització que prioritza el funcionament fora de línia, però no són el contracte principal per als agents externs:
- els fluxos del navegador fan servir galetes en un domini compartit amb protecció CSRF
- els clients que prioritzen el funcionament fora de línia fan servir les rutes de sincronització implementades a
/v1/workspaces/{workspaceId}/sync/pushi/v1/workspaces/{workspaceId}/sync/pull - les rutes de sincronització estan separades de la interfície per a agents externs