Справочник на API
Общ преглед
Тази страница описва актуалния договор на Nibomo за външни ИИ агенти.
Ако клиентът ви поддържа MCP, MCP конекторът е най-простият начин за свързване и обвива същия интерфейс към данните. Тази страница описва HTTP договора за откриване, SQL, ръководства и преговор, който използват CLI агентите.
Започнете от основната входна точка за откриване:
GET https://api.nibomo.com/v1/
Същият отговор за откриване е достъпен и на GET /v1/agent, но /v1/ е основната публична входна точка.
Отговорът за откриване казва на агента как да:
- започне вход по имейл с OTP
- замени OTP кода с дългосрочен API ключ
- зареди контекста на акаунта
- създаде или избере работно пространство
- продължи през публикувания SQL интерфейс
- изтегля справочни ръководства и преговаря карти една по една
Откриване по време на работа и изходен код
OpenAPI не е наличен. Четирите предишни URL адреса на спецификацията по-долу вече връщат същото JSON известие за откриване с "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
За актуално откриване по време на работа използвайте GET https://api.nibomo.com/v1/. Следвайте върнатия docs.discoveryUrl за маршрутите по време на работа и docs.source.agentRoutesUrl за подробностите по реализацията.
Първоначално удостоверяване
Първоначалното удостоверяване с OTP се извършва в услугата за удостоверяване:
POST https://auth.nibomo.com/api/agent/send-codePOST https://auth.nibomo.com/api/agent/verify-code
Процесът е следният:
- Извикайте
GET /v1/. - Изпратете имейла на потребителя към
send-code. - Прочетете
otpSessionTokenот отговора. - Поискайте от потребителя последния 8-цифрен код от имейла.
- Извикайте
verify-codeсcode,otpSessionTokenиlabel. - Запазете върнатия API ключ извън паметта на чата.
Препоръчителна променлива на средата:
export FLASHCARDS_OPEN_SOURCE_API_KEY="fca_ABCDEFGH_0123456789ABCDEFGHJKMNPQRS"
Заявките с удостоверяване използват:
Authorization: ApiKey <key>
Примерна последователност за първоначално удостоверяване:
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"
}'
Интерфейс за агенти след вход
След потвърждението текущият интерфейс за агенти е:
GET /v1/agent/meGET /v1/agent/workspacesPOST /v1/agent/workspacesPOST /v1/agent/workspaces/{workspaceId}/selectPOST /v1/agent/sql/query(само за четене)POST /v1/agent/sql/execute(запис)GET /v1/agent/guide/{topic}(само за четене)POST /v1/agent/reviews/next(само за четене)POST /v1/agent/reviews/reveal(само за четене)POST /v1/agent/reviews/submit(запис)
Обичайната първоначална настройка изглежда така:
GET /v1/agent/meGET /v1/agent/workspaces?limit=100- При нужда
POST /v1/agent/workspacesс{"name":"Personal"} - При нужда
POST /v1/agent/workspaces/{workspaceId}/select - Използвайте
POST /v1/agent/sql/queryза четене иPOST /v1/agent/sql/executeза запис
Работното пространство се избира изрично за всяка връзка с API ключ. Вместо да гадаят следващата стъпка, агентите трябва да следват върнатия текст instructions и docs.discoveryUrl за маршрутите по време на работа, както и docs.source.agentRoutesUrl за подробностите по реализацията.
SQL маршрутите и маршрутите за преговор приемат и незадължителен workspaceId в JSON тялото. Той насочва едно извикване към това работно пространство, без да променя избора; пропуснете го, за да се използва избраното работно пространство. Ако няма нито избор, нито workspaceId, те отговарят с 409 WORKSPACE_SELECTION_REQUIRED.
SQL интерфейс
POST /v1/agent/sql/query е интерфейсът строго само за четене (SHOW TABLES, DESCRIBE, SHOW COLUMNS, SELECT), а POST /v1/agent/sql/execute е интерфейсът за запис (INSERT, UPDATE, DELETE); едно извикване трябва да съдържа само четене или само запис.
Той е умишлено ограничен и не е пълен PostgreSQL. Тази документация описва само поддържания диалект и не е справочник за съвместимост с PostgreSQL.
Никоя операция за четене не поправя данни, не преизчислява планирането и не променя състоянието на картите. Използвайте
POST /v1/agent/sql/execute за всеки запис на карти и тестета. SQL не може да записва
review_events или състоянието на планирането по FSRS; записвайте преговорите чрез
POST /v1/agent/reviews/submit.
Текущи видове заявки:
SHOW TABLESDESCRIBE <resource>SHOW COLUMNS FROM <resource>SELECTINSERTUPDATEDELETE
Публикуваните логически ресурси в момента включват:
workspacecardsdecksreview_events
Бележки:
LIMITпо подразбиране е100и не може да надвишава100- използвайте
ORDER BY, когато ви трябва стабилно странициране - използвайте
SHOW TABLESилиDESCRIBE cards, за да разгледате схемата - всяко SQL извикване е ограничено до едно работно пространство:
workspaceIdот тялото или избраното работно пространство
Примерна заявка:
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"}'
Примерна заявка за карти:
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"
}'
Примерна промяна:
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'\''"
}'
Достъпен е и отдалечен MCP сървър на https://mcp.nibomo.com/mcp, който използва OAuth 2.1 (Dynamic Client Registration + PKCE). Той предоставя същото разделение на SQL като sql_query (строго само за четене) и sql_execute (запис), плюс list_workspaces, get_guide и инструментите за преговор next_review_card, reveal_answer и submit_review; вижте MCP конектора.
Безопасност и обхват
SQL интерфейсът е затворен диалект, чиито правила се налагат от парсера, а не суров PostgreSQL. Предпазните мерки са:
- Затворен списък с разрешени заявки: само
SHOW TABLES,DESCRIBE,SHOW COLUMNSиSELECTза четене иINSERT,UPDATEиDELETEза запис. Всичко друго се отхвърля още при синтактичния анализ. - Ограничени ресурси: заявките могат да засягат само ресурсите
workspace,cards,decksиreview_events. - Ограничение до работно пространство: всяка заявка е ограничена до едно работно пространство, до което имате достъп —
workspaceIdв тялото на заявката или избраното от вас работно пространство, без достъп до данни на други наематели (tenants). - Строги тела на заявките: SQL маршрутите и маршрутите за преговор отхвърлят непознато поле в тялото, така че сгрешен
workspaceIdводи до грешка, вместо заявката да се изпълни върху избраното работно пространство. - Лимити: до
100реда на заявка, до50заявки в пакет и резултат до около12kтокена. Пакетите с промени се прилагат атомарно. - Разделение на четене и запис:
sql_queryиlist_workspacesса строго само за четене (readOnlyHint) и никога не поправят данни, не преизчисляват планирането и не променят състоянието на картите.sql_executeе единственият SQL инструмент за запис и извършва записи (destructiveHint); едно извикване трябва да съдържа само четене или само запис. SQL не може да записваreview_eventsили състоянието на планирането по FSRS; самоPOST /v1/agent/reviews/submit(MCPsubmit_review) записва преговор.
Ръководства
GET /v1/agent/guide/{topic} връща едно справочно ръководство в data.guide — същото съдържание, което връща MCP инструментът get_guide. Теми:
sql_dialect: пълната SQL граматика, ограниченията и примериcard_authoring: договорът за картите, етикетите, проверките за дубликати и форматиранетоbulk_authoring: разделяне и проверка на голяма задача за записreview_flow: цикълът на преговор и оценяване
Непозната тема връща 400 със списъка на поддържаните теми. Изтеглете съответното ръководство, преди да създавате карти, да записвате масово или да провеждате преговор, и прочетете отново sql_dialect след отхвърлена заявка.
curl https://api.nibomo.com/v1/agent/guide/sql_dialect \
-H "Authorization: ApiKey $FLASHCARDS_OPEN_SOURCE_API_KEY"
Преговори
Маршрутите за преговор позволяват на агента да изпитва учащия карта по карта и да записва всяка оценка в графика на картата по FSRS. Те приемат същите JSON аргументи като MCP инструментите за преговор:
POST /v1/agent/reviews/nextвръщаcardсcardIdиfrontTextилиcard: null, когато няма карти за преговор. Незадължителнитеtags(карта с който и да е от етикетите) илиdeckIdстесняват опашката, но никога и двете едновременно; заявка без тяло е валидна.POST /v1/agent/reviews/revealизискваcardIdи връщаbackTextна тази карта.POST /v1/agent/reviews/submitизискваcardId, генериран от клиента UUIDreviewId,ratingсъс стойностAgain,Hard,GoodилиEasyи IANAreviewedTimeZoneна учащия. Сървърът записва времето на преговора и връща новия график на картата, включителноdueAt,state,repsиlapses.
И трите маршрута приемат незадължителния workspaceId. Запазете reviewId, преди да изпратите преговора; ако не сте сигурни дали изпращането е успяло, повторете го със същата заявка — повторението никога не записва втори преговор. Маршрутите за преговор могат да отговорят и с:
409 REVIEW_EVENT_CONFLICT: преговорът вече е записан, аerror.details.reviewScheduleсъдържа текущия график на картата.409 REVIEW_ID_CARD_MISMATCH:reviewIdвече обозначава преговор на друга карта, затова нищо не е записано; изпратете отново с новreviewId.409 REVIEW_STALE: записаното време на преговор на картата е равно на текущото време на сървъра или по-късно; преговорете друга карта.400 REVIEW_INPUT_INVALID: аргумент липсва, е невалиден или не се поддържа, включителноtagsзаедно сdeckIdили етикет, който работното пространство не използва.
Примерно изпращане:
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 за хора и за синхронизация
Nibomo включва и отделни API за клиенти, използвани от хора, и за синхронизация с приоритет на офлайн работата, но те не са основният договор за външни агенти:
- браузърните потоци използват бисквитки на общия домейн и защита срещу CSRF
- клиентите с приоритет на офлайн работата използват реализираните маршрути за синхронизация
/v1/workspaces/{workspaceId}/sync/pushи/v1/workspaces/{workspaceId}/sync/pull - маршрутите за синхронизация са отделени от интерфейса за външни агенти