Voor ontwikkelaars

Langrit-naslag voor ontwikkelaars

Bouw je eigen tutor, bot of script op het leergeheugen: een standaard MCP-server, OAuth 2.1, persoonlijke tokens en een REST API.

Overzicht

Twee ingangen, één geheugen. Elke aanroep leest of schrijft hetzelfde leerdossier als de Langrit-app, dus herhalingen, reeksen en niveaus blijven gelijk.

MCP-serverhttps://langrit.com/mcp
REST APIhttps://langrit.com/api/v1

Snel aan de slag

Verbind een MCP-client

terminal
claude mcp add --transport http langrit https://langrit.com/mcp
JSON-RPC
curl https://langrit.com/mcp \
  -H "Authorization: Bearer lgr_…" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
       "params":{"name":"whats_due","arguments":{"limit":5}}}'

Roep de REST API aan met een persoonlijk token

REST
curl https://langrit.com/api/v1/due?limit=5 \
  -H "Authorization: Bearer lgr_…"

Authenticatie

Stuur bij elk verzoek een bearer-token mee. Gebruik OAuth 2.1 als mensen verbinden vanuit jouw app, of een persoonlijk token voor je eigen scripts.

OAuth 2.1

Clients vinden de autorisatieserver via discovery, vanaf de WWW-Authenticate-header van een 401 op /mcp. Dynamische clientregistratie en client ID metadata documents worden ondersteund, dus de meeste clients hoeven niets in te stellen.

401
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer resource_metadata="https://langrit.com/.well-known/oauth-protected-resource/mcp"
OAuth 2.1
GET https://langrit.com/.well-known/oauth-protected-resource/mcp
GET https://langrit.com/.well-known/oauth-authorization-server

authorize  https://langrit.com/oauth/authorize
token      https://langrit.com/oauth/token
register   https://langrit.com/oauth/register
revoke     https://langrit.com/oauth/revoke
  • Alleen authorization code met PKCE (S256). De redirect bevat code, state en iss.
  • Toegangstokens zijn een uur geldig. Refresh tokens zijn 60 dagen geldig en wisselen bij elk gebruik; een oud refresh token werkt dan niet meer.
  • Redirect-URI's: https, http op localhost (elke poort) of een eigen app-scheme.

Scopes

readProfiel, herhalingen, patronen, export
writeOok fouten opslaan en herhalingen beoordelen (inclusief read)

Persoonlijke tokens

Maak er tot vijf aan in Instellingen, API-toegang. Je ziet een token maar één keer en je kunt het altijd intrekken.

MCP-server

Streamable HTTP, stateless, JSON-antwoorden. Stuur elk JSON-RPC-bericht met POST; GET geeft 405, want er is geen serverstream.

Tools

ToolScopeInvoerGeeft terug
learner_profileread{}Talen, niveau, abonnement, aantal herhalingen
whats_duereadlimit?Kaarten die aan de beurt zijn, met modus, vraag en keuzes
my_patternsreadwindow? 7d | 30d | 90dPatronen met aantallen en voorbeelden
remember_mistakewritewrong, correct, rule?, context? | items[≤20]Nieuwe of samengevoegde kaarten, patroon, hint
grade_reviewwritecard_id, answer, mode, elapsed_ms?Goed of fout, verwacht antwoord, volgende herhaling, ladder

Prompts en resources

De prompts today, quiz, my-mistakes en write openen een studiesessie in de talen van de leerling. De resource langrit://me geeft het profiel terug als JSON.

Vraagmodi

recognition komt met keuzes en het verwachte antwoord; typed en translate tonen het antwoord nooit voor de beoordeling.

REST API

Hetzelfde geheugen via HTTPS. JSON erin en eruit.

EndpointWat het doet
GET /api/v1/meJe profiel, abonnement en aantal herhalingen
POST /api/v1/mistakesEén fout of tot 20 opslaan (write)
GET /api/v1/dueHerhalingen die aan de beurt zijn, met de vraagmodus
POST /api/v1/reviewsEen antwoord beoordelen (write)
GET /api/v1/patternsFoutpatronen over 7, 30 of 90 dagen
GET /api/v1/exportKaarten, fouten en herhalingen als JSON, CSV of Anki

Voorbeeld

mistakes
POST /api/v1/mistakes
Idempotency-Key: 6f1c…

{ "wrong": "de huis", "correct": "het huis", "rule": "huis is a het-word" }

201 -> { "created": 1, "merged": 0,
         "cards": [{ "id": 812, "pattern": "article_de_het", "pattern_label": "de vs het",
                     "merged": false, "l1_hint": "…" }] }
reviews
POST /api/v1/reviews
{ "card_id": 812, "answer": "het huis", "mode": "typed" }

200 -> { "correct": true, "expected": "het huis", "explanation_l1": null,
         "next_due_at": "2026-11-08T09:00:00Z", "interval_days": 4,
         "ladder": { "before": 1, "after": 2 }, "streak": 12 }

Fouten

Fouten zijn JSON met error, message en hint. De hint is geschreven zodat een model ermee aan de slag kan; geef hem door.

StatusBetekenis
401Token ontbreekt, is ongeldig of verlopen
402Geen actief abonnement of proefperiode (profiel en export werken nog)
403Het token mist de benodigde scope
404Onbekende kaart of route
422De body is niet geldig
429Limiet of dagbudget voor AI-beoordeling bereikt
402
402 -> { "error": "subscription_required",
         "message": "The Langrit subscription for this account is not active.",
         "url": "https://langrit.com/pricing?ref=api",
         "hint": "Tell the learner their Langrit trial or subscription has ended and give them the url." }

Limieten

60 verzoeken per minuut per token op de REST API en 120 op MCP. POST-verzoeken accepteren een Idempotency-Key-header; een herhaling binnen 24 uur geeft het eerste antwoord terug.

Data-export

GET /api/v1/export geeft alles terug als JSON. Voeg format=csv toe met table=cards, mistakes of reviews, of format=anki voor een Anki-importbestand. Werkt ook als je abonnement is afgelopen.