API Referansı
Genel Bakış
Bu sayfa Nibomo'nun harici AI agent'ları için geçerli sözleşmesini belgeler.
İstemciniz MCP destekliyorsa bağlanmanın en basit yolu MCP bağlayıcısıdır; bağlayıcı aynı veri arayüzünü sarmalar. Bu sayfa ise CLI agent'larının kullandığı HTTP keşif, SQL, rehber ve tekrar sözleşmesini belgeler.
Kanonik keşif giriş noktasından başlayın:
GET https://api.nibomo.com/v1/
Aynı keşif yanıtı GET /v1/agent adresinden de alınabilir, ancak birincil ve herkese açık giriş noktası /v1/ adresidir.
Keşif yanıtı bir agent'a şunları nasıl yapacağını anlatır:
- e-posta OTP girişini başlatmak
- OTP karşılığında uzun ömürlü bir API anahtarı almak
- hesap bağlamını yüklemek
- bir çalışma alanı oluşturmak veya seçmek
- yayımlanan SQL arayüzüyle devam etmek
- başvuru rehberlerini almak ve kartları tek tek tekrar etmek
Çalışma Zamanında Keşif ve Kaynak Kod
OpenAPI sunulmuyor. Aşağıdaki dört eski spesifikasyon URL'si artık şema yerine "openapiAvailable": false içeren aynı JSON keşif bildirimini döndürür:
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
Güncel çalışma zamanı keşfi için GET https://api.nibomo.com/v1/ kullanın. Çalışma zamanı rotaları için döndürülen docs.discoveryUrl bağlantısını, uygulama ayrıntıları için docs.source.agentRoutesUrl bağlantısını izleyin.
Kimlik Doğrulamayla İlk Kurulum
OTP ile ilk kurulum, kimlik doğrulama hizmeti üzerinden yürür:
POST https://auth.nibomo.com/api/agent/send-codePOST https://auth.nibomo.com/api/agent/verify-code
Akış şöyledir:
GET /v1/çağrısını yapın.- Kullanıcının e-posta adresini
send-codeuç noktasına gönderin. - Yanıttan
otpSessionTokendeğerini okuyun. - Kullanıcıdan e-postayla gelen en son 8 haneli kodu isteyin.
verify-codeuç noktasınıcode,otpSessionTokenvelabelile çağırın.- Döndürülen API anahtarını sohbet belleğinin dışında saklayın.
Önerilen ortam değişkeni:
export FLASHCARDS_OPEN_SOURCE_API_KEY="fca_ABCDEFGH_0123456789ABCDEFGHJKMNPQRS"
Kimliği doğrulanmış istekler şunu kullanır:
Authorization: ApiKey <key>
Örnek ilk kurulum sırası:
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"
}'
Giriş Sonrası Agent Arayüzü
Doğrulamadan sonra geçerli agent arayüzü şöyledir:
GET /v1/agent/meGET /v1/agent/workspacesPOST /v1/agent/workspacesPOST /v1/agent/workspaces/{workspaceId}/selectPOST /v1/agent/sql/query(salt okunur)POST /v1/agent/sql/execute(yazma)GET /v1/agent/guide/{topic}(salt okunur)POST /v1/agent/reviews/next(salt okunur)POST /v1/agent/reviews/reveal(salt okunur)POST /v1/agent/reviews/submit(yazma)
Tipik bir ilk kurulum şöyle görünür:
GET /v1/agent/meGET /v1/agent/workspaces?limit=100- Gerekirse
{"name":"Personal"}ilePOST /v1/agent/workspaces - Gerekirse
POST /v1/agent/workspaces/{workspaceId}/select - Okumalar için
POST /v1/agent/sql/query, yazmalar içinPOST /v1/agent/sql/executekullanın
Çalışma alanı her API anahtarı bağlantısı için ayrı ayrı ve açıkça seçilir. Agent'lar sonraki adımı tahmin etmek yerine döndürülen instructions metnini, çalışma zamanı rotaları için docs.discoveryUrl bağlantısını ve uygulama ayrıntıları için docs.source.agentRoutesUrl bağlantısını izlemelidir.
SQL ve tekrar rotaları JSON gövdesinde isteğe bağlı bir workspaceId de kabul eder. Bu değer, seçimi değiştirmeden tek bir çağrı için o çalışma alanını hedefler; seçili çalışma alanını kullanmak için bu alanı belirtmeyin. Ne bir çalışma alanı seçilmişse ne de workspaceId verilmişse bu rotalar 409 WORKSPACE_SELECTION_REQUIRED ile yanıt verir.
SQL Arayüzü
POST /v1/agent/sql/query kesinlikle salt okunur arayüzdür (SHOW TABLES, DESCRIBE, SHOW COLUMNS, SELECT), POST /v1/agent/sql/execute ise yazma arayüzüdür (INSERT, UPDATE, DELETE); tek bir çağrı ya tamamen okumalardan ya da tamamen yazmalardan oluşmalıdır.
Bu arayüz kasıtlı olarak sınırlandırılmıştır ve tam PostgreSQL değildir. Bu belgeler yalnızca desteklenen lehçeyi kapsar; bir PostgreSQL uyumluluk referansı değildir.
Hiçbir okuma yolu veriyi onarmaz, zamanlamayı yeniden hesaplamaz veya kart durumunu değiştirmez. Her kart ve deste
yazması için POST /v1/agent/sql/execute kullanın. SQL, review_events tablosuna veya FSRS zamanlama durumuna
yazamaz; tekrarları POST /v1/agent/reviews/submit üzerinden kaydedin.
Şu anda desteklenen deyim türleri:
SHOW TABLESDESCRIBE <resource>SHOW COLUMNS FROM <resource>SELECTINSERTUPDATEDELETE
Yayımlanan mantıksal kaynaklar şu anda şunlardır:
workspacecardsdecksreview_events
Notlar:
LIMITvarsayılan olarak100olur ve en fazla100olabilir- kararlı sayfalama gerektiğinde
ORDER BYkullanın - şemayı keşfetmek için
SHOW TABLESveyaDESCRIBE cardskullanın - her SQL çağrısı tek bir çalışma alanıyla sınırlıdır: gövdedeki
workspaceIdya da seçili çalışma alanı
Örnek istek:
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"}'
Örnek kart sorgusu:
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"
}'
Örnek yazma işlemi:
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'\''"
}'
https://mcp.nibomo.com/mcp adresinde, OAuth 2.1 (Dynamic Client Registration + PKCE) kullanan uzak bir MCP sunucusu da bulunur. Bu sunucu aynı SQL ayrımını sql_query (kesinlikle salt okunur) ve sql_execute (yazma) olarak sunar; ayrıca list_workspaces, get_guide araçlarını ve next_review_card, reveal_answer, submit_review tekrar araçlarını da içerir. Ayrıntılar için MCP bağlayıcısı sayfasına bakın.
Güvenlik ve Kapsam
SQL arayüzü ham PostgreSQL değil, ayrıştırıcı tarafından denetlenen, sınırları belli bir lehçedir. Koruma önlemleri şunlardır:
- Kapalı deyim izin listesi: okumalar için yalnızca
SHOW TABLES,DESCRIBE,SHOW COLUMNSveSELECT, yazmalar için yalnızcaINSERT,UPDATEveDELETE. Diğer her şey ayrıştırma aşamasında reddedilir. - Sınırlı kaynaklar: deyimler yalnızca
workspace,cards,decksvereview_eventskaynaklarına erişebilir. - Çalışma alanı başına kapsam: her deyim, erişebildiğiniz tek bir çalışma alanıyla sınırlıdır; bu alan ya istek gövdesindeki
workspaceIdya da seçili çalışma alanınızdır ve kiracılar arası erişim yoktur. - Katı istek gövdeleri: SQL ve tekrar rotaları bilinmeyen bir gövde alanını reddeder; böylece yanlış yazılmış bir
workspaceId, seçili çalışma alanında çalışmak yerine hata verir. - Üst sınırlar: deyim başına en fazla
100satır, toplu iş başına en fazla50deyim ve yaklaşık12ktoken'lık sonuç sınırı. Yazma toplu işleri atomik olarak uygulanır. - Okuma/yazma ayrımı:
sql_queryvelist_workspaceskesinlikle salt okunurdur (readOnlyHint) ve hiçbir zaman veriyi onarmaz, zamanlamayı yeniden hesaplamaz veya kart durumunu değiştirmez.sql_executetek SQL yazma aracıdır ve yazma işlemleri yapar (destructiveHint); tek bir çağrı ya tamamen okumalardan ya da tamamen yazmalardan oluşmalıdır. SQL,review_eventstablosuna veya FSRS zamanlama durumuna yazamaz; bir tekrarı yalnızcaPOST /v1/agent/reviews/submit(MCP'desubmit_review) kaydeder.
Rehberler
GET /v1/agent/guide/{topic}, data.guide içinde tek bir başvuru rehberi döndürür; bu, MCP get_guide aracının sunduğu içeriğin aynısıdır. Konular:
sql_dialect: tam SQL dilbilgisi, sınırlar ve örneklercard_authoring: kart sözleşmesi, etiketler, yinelenen kart kontrolleri ve biçimlendirmebulk_authoring: büyük bir yazma işini bölme ve doğrulamareview_flow: tekrar ve değerlendirme döngüsü
Bilinmeyen bir konu, desteklenen konuların listesiyle birlikte 400 yanıtı verir. Kart oluşturmadan, toplu yazma yapmadan veya tekrar başlatmadan önce ilgili rehberi alın ve reddedilen bir deyimden sonra sql_dialect rehberini yeniden okuyun.
curl https://api.nibomo.com/v1/agent/guide/sql_dialect \
-H "Authorization: ApiKey $FLASHCARDS_OPEN_SOURCE_API_KEY"
Tekrarlar
Tekrar rotaları, bir agent'ın öğrenciye kartları tek tek sormasını ve her değerlendirmeyi kartın FSRS planına kaydetmesini sağlar. MCP tekrar araçlarıyla aynı JSON argümanlarını alırlar:
POST /v1/agent/reviews/next,cardIdvefrontTextiçerencarddöndürür ya da zamanı gelen kart yoksacard: nulldöndürür. İsteğe bağlıtags(etiketlerden herhangi biriyle eşleşir) veyadeckIdkuyruğu daraltır; ikisi birlikte kullanılamaz; gövdesiz bir istek de geçerlidir.POST /v1/agent/reviews/reveal,cardIdgerektirir ve o kartınbackTextdeğerini döndürür.POST /v1/agent/reviews/submit;cardId, istemcinin ürettiği birreviewIdUUID'si,Again,Hard,GoodveyaEasydeğerlerinden biri olan birratingve öğrencinin IANAreviewedTimeZonedeğerini gerektirir. Tekrar zamanını sunucu kaydeder ve kartındueAt,state,repsvelapsesdahil yeni planını döndürür.
Üç rota da isteğe bağlı workspaceId değerini kabul eder. Göndermeden önce reviewId değerini kalıcı olarak saklayın ve sonucu belirsiz kalan bir gönderimi birebir aynı istekle yeniden deneyin; yeniden deneme hiçbir zaman ikinci bir tekrar kaydı oluşturmaz. Tekrar rotaları ayrıca şu yanıtları verebilir:
409 REVIEW_EVENT_CONFLICT: tekrar zaten kaydedilmiştir veerror.details.reviewSchedulekartın güncel planını taşır.409 REVIEW_ID_CARD_MISMATCH:reviewIdzaten başka bir kartın tekrarını tanımlıyor, bu yüzden hiçbir şey kaydedilmedi; yeni birreviewIdile yeniden gönderin.409 REVIEW_STALE: kartın kayıtlı tekrar zamanı, sunucunun şu anki zamanına eşit ya da ondan sonradır; başka bir kartı tekrar edin.400 REVIEW_INPUT_INVALID: bir argüman eksik, geçersiz veya desteklenmiyor;tagsiledeckIddeğerinin birlikte kullanılması veya çalışma alanının kullanmadığı bir etiket de buna dahildir.
Örnek gönderim:
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"
}'
İnsan ve Senkronizasyon API'leri
Nibomo, insan istemciler ve çevrimdışı öncelikli senkronizasyon için ayrı API'ler de içerir, ancak bunlar harici agent'lar için ana sözleşme değildir:
- tarayıcı akışları paylaşılan alan adı çerezlerini ve CSRF korumasını kullanır
- çevrimdışı öncelikli istemciler
/v1/workspaces/{workspaceId}/sync/pushve/v1/workspaces/{workspaceId}/sync/pullaltındaki uygulanmış senkronizasyon rotalarını kullanır - senkronizasyon rotaları harici agent arayüzünden ayrıdır