← ablaut

The ablaut API

Verb conjugation for 14 European languages over HTTP or MCP. Every form is verified against two independent lexicons per language; answers are computed in microseconds by a native Rust engine.

Quickstart

curl -H "x-api-key: YOUR_KEY" \
  "https://api.ablaut.dev/v1/conjugate?verb=appeler&lang=fr"
{
  "verb": "appeler",
  "lang": "fr",
  "us": 42,
  "table": {
    "infinitive": "appeler",
    "present": ["appelle", "appelles", "appelle",
                "appelons", "appelez", "appellent"],
    "auxiliary": "avoir",
    ...
  }
}

Authentication

Every /v1 request needs an x-api-key header. The API is in early access: request a key through the API dialog and we send one by email. Requests without a valid key get 401.

Endpoints

GET /v1/conjugate

ParameterDescription
verbThe infinitive (or citation form) to conjugate. Required. Whitespace, casing, and zu-/a-style particles are normalized.
langISO 639-1 (fr), ISO 639-3 (fra), or an English name (French), case-insensitive. Defaults to German.

Responses include us, the engine compute time in microseconds. Errors: 400 missing verb, 401 bad key, 422 unknown language or a string that is not an infinitive of the requested language — ablaut only conjugates real verbs, it never invents forms:

{ "error": "not a supported French verb" }

GET /v1/lemma

Reverse lookup: ?form=suis&lang=fr returns every lemma whose paradigm contains the form, with the slots it occupies — ambiguity included (suis matches both être and suivre). Productive coverage for French, Spanish, German, and English; irregular forms reverse in all 14 languages. Every match is verified by forward conjugation, so a cited slot always really contains the form.

{ "form": "suis", "matches": [
  { "infinitive": "être",   "slots": ["present 1sg"] },
  { "infinitive": "suivre", "slots": ["present 1sg", "present 2sg", "imperative 2sg"] } ] }

GET /v1/languages

The 14 languages with ISO codes and maturity status (beta: verified at 100% agreement against two gold lexicons; wip: known gaps under active work).

Response shapes per language

Each language's table mirrors its real morphology instead of forcing one template: German carries both Konjunktiv rows and separable-prefix forms, Czech carries aspect and its counterpart, Spanish the Rioplatense voseo, Irish returns fully composed and mutated rows, Swedish tenses are single forms rather than person arrays. The reference below is generated from live engine output at build time, so it cannot drift. Person arrays run 1sg → 3pl (German adds the polite Sie row on the site only). Analytic tenses composed from auxiliaries (passé composé, passato prossimo, perfekti) are part of the API response for every language except Danish, whose auxiliary coverage is still partial.

Deutschde, sample: aufstehen, 21 fields
FieldTypeExample (aufstehen)
infinitivestringaufstehen
zuInfinitivestringaufzustehen
perfectInfinitivestringaufgestanden sein
auxiliarystringsein
presentParticiplestringaufstehend
pastParticiplestringaufgestanden
imperativearray[2]steh auf, …
imperativeExtendedarray[2]stehen wir auf, …
presentarray[6]stehe auf, …
preteritearray[6]stand auf, …
konjunktiv1array[6]stehe auf, …
konjunktiv2array[6]stünde auf, …
perfectarray[6]bin aufgestanden, …
pluperfectarray[6]war aufgestanden, …
future1array[6]werde aufstehen, …
future2array[6]werde aufgestanden sein, …
wuerdearray[6]würde aufstehen, …
konj1Perfectarray[6]sei aufgestanden, …
konj1Futurearray[6]werde aufstehen, …
konj2Pluperfectarray[6]wäre aufgestanden, …
konj2Future2array[6]würde aufgestanden sein, …
Françaisfr, sample: appeler, 19 fields
FieldTypeExample (appeler)
infinitivestringappeler
auxiliarystringavoir
presentParticiplestringappelant
pastParticiplestringappelé
imperativearray[3]appelle, …
presentarray[6]appelle, …
imperfectarray[6]appelais, …
pastHistoricarray[6]appelai, …
futurearray[6]appellerai, …
conditionalarray[6]appellerais, …
subjunctivePresentarray[6]appelle, …
subjunctiveImperfectarray[6]appelasse, …
passeComposearray[6]ai appelé, …
plusQueParfaitarray[6]avais appelé, …
passeAnterieurarray[6]eus appelé, …
futurAnterieurarray[6]aurai appelé, …
conditionnelPassearray[6]aurais appelé, …
subjonctifPassearray[6]aie appelé, …
subjonctifPlusQueParfaitarray[6]eusse appelé, …
Españoles, sample: hablar, 21 fields
FieldTypeExample (hablar)
infinitivestringhablar
gerundstringhablando
pastParticiplestringhablado
presentVosstringhablás
imperativeVosstringhablá
imperativearray[5]habla, …
presentarray[6]hablo, …
imperfectarray[6]hablaba, …
preteritearray[6]hablé, …
futurearray[6]hablaré, …
conditionalarray[6]hablaría, …
subjunctivePresentarray[6]hable, …
subjunctiveImperfectarray[6]hablara, …
subjunctiveFuturearray[6]hablare, …
perfectoCompuestoarray[6]he hablado, …
pluscuamperfectoarray[6]había hablado, …
preteritoAnteriorarray[6]hube hablado, …
futuroPerfectoarray[6]habré hablado, …
condicionalPerfectoarray[6]habría hablado, …
subjuntivoPerfectoarray[6]haya hablado, …
subjuntivoPluscuamperfectoarray[6]hubiera hablado, …
Portuguêspt, sample: falar, 20 fields
FieldTypeExample (falar)
infinitivestringfalar
gerundstringfalando
pastParticiplestringfalado
imperativearray[5]fala, …
personalInfinitivearray[6]falar, …
presentarray[6]falo, …
imperfectarray[6]falava, …
preteritearray[6]falei, …
pluperfectarray[6]falara, …
futurearray[6]falarei, …
conditionalarray[6]falaria, …
subjunctivePresentarray[6]fale, …
subjunctiveImperfectarray[6]falasse, …
subjunctiveFuturearray[6]falar, …
perfeitoCompostoarray[6]tenho falado, …
maisQuePerfeitoCompostoarray[6]tinha falado, …
futuroCompostoarray[6]terei falado, …
condicionalCompostoarray[6]teria falado, …
conjuntivoPerfeitoarray[6]tenha falado, …
conjuntivoMaisQuePerfeitoarray[6]tivesse falado, …
Italianoit, sample: parlare, 19 fields
FieldTypeExample (parlare)
infinitivestringparlare
auxiliarystringavere
gerundstringparlando
presentParticiplestringparlante
pastParticiplestringparlato
imperativearray[5]parla, …
presentarray[6]parlo, …
imperfectarray[6]parlavo, …
pastHistoricarray[6]parlai, …
futurearray[6]parlerò, …
conditionalarray[6]parlerei, …
subjunctivePresentarray[6]parli, …
subjunctiveImperfectarray[6]parlassi, …
passatoProssimoarray[6]ho parlato, …
trapassatoProssimoarray[6]avevo parlato, …
futuroAnteriorearray[6]avrò parlato, …
condizionalePassatoarray[6]avrei parlato, …
congiuntivoPassatoarray[6]abbia parlato, …
congiuntivoTrapassatoarray[6]avessi parlato, …
Svenskasv, sample: tala, 15 fields
FieldTypeExample (tala)
infinitivestringtala
presentstringtalar
paststringtalade
supinestringtalat
imperativestringtala
infinitivePassivestringtalas
presentPassivestringtalas
pastPassivestringtalades
supinePassivestringtalats
presensRowarray[6]talar, …
preteritumRowarray[6]talade, …
perfektRowarray[6]har talat, …
pluskvamperfektRowarray[6]hade talat, …
futurumRowarray[6]ska tala, …
konditionalisRowarray[6]skulle tala, …
Românăro, sample: a vorbi, 15 fields
FieldTypeExample (a vorbi)
infinitivestringvorbi
gerundstringvorbind
participlestringvorbit
imperativearray[2]vorbește, …
presentarray[6]vorbesc, …
imperfectarray[6]vorbeam, …
simplePerfectarray[6]vorbii, …
pluperfectarray[6]vorbisem, …
subjunctivearray[6]vorbesc, …
perfectCompusarray[6]am vorbit, …
viitorarray[6]voi vorbi, …
conditionalPrezentarray[6]aș vorbi, …
subjunctivePerfectarray[6]fi vorbit, …
conditionalPerfectarray[6]aș fi vorbit, …
viitorAnteriorarray[6]voi fi vorbit, …
Englishen, sample: run, 11 fields
FieldTypeExample (run)
infinitivestringrun
paststringran
pastParticiplestringrun
presentParticiplestringrunning
thirdSingularstringruns
presentRowarray[6]run, …
pastRowarray[6]ran, …
presentPerfectRowarray[6]have run, …
pastPerfectRowarray[6]had run, …
futureRowarray[6]will run, …
futurePerfectRowarray[6]will have run, …
Danskda, sample: virke, 9 fields
FieldTypeExample (virke)
infinitivestringvirke
presentstringvirker
paststringvirkede
pastParticiplestringvirket
imperativestringvirk
presentParticiplestringvirkende
infinitivePassivestringvirkes
presentPassivestringvirkes
pastPassivestringvirkedes
Češtinacs, sample: mluvit, 9 fields
FieldTypeExample (mluvit)
infinitivestringmluvit
aspectstringimperfective
presentarray[6]mluvím, …
imperativearray[3]mluv, …
pastParticiplearray[6]mluvil, …
passiveParticiplearray[6]mluven, …
transgressivearray[3]mluvě, …
minulyCasarray[6]mluvil jsem, …
kondicionalarray[6]mluvil bych, …
Slovenščinasl, sample: delati, 8 fields
FieldTypeExample (delati)
infinitivestringdelati
supinestringdelat
presentarray[9]delam, …
imperativearray[5]delaj, …
participlearray[9]delal, …
preteklikarray[9]sem delal, …
prihodnjikarray[9]bom delal, …
pogojnikarray[9]bi delal, …
Eestiet, sample: rääkima, 14 fields
FieldTypeExample (rääkima)
infinitivestringrääkima
daInfinitivestringrääkida
presentarray[6]räägin, …
pastarray[6]rääkisin, …
conditionalarray[6]räägiksin, …
imperativearray[4]räägi, …
presentImpersonalstringräägitakse
pastImpersonalstringräägiti
quotativestringrääkivat
presentParticiplestringrääkiv
nudParticiplestringrääkinud
tudParticiplestringräägitud
perfectarray[6]olen rääkinud, …
pluperfectarray[6]olin rääkinud, …
Suomifi, sample: puhua, 17 fields
FieldTypeExample (puhua)
infinitivestringpuhua
presentarray[6]puhun, …
pastarray[6]puhuin, …
conditionalarray[6]puhuisin, …
potentialarray[6]puhunen, …
imperativearray[5]puhu, …
presentPassivestringpuhutaan
pastPassivestringpuhuttiin
conditionalPassivestringpuhuttaisiin
potentialPassivestringpuhuttaneen
imperativePassivestringpuhuttakoon
presentParticiplestringpuhuva
pastParticiplestringpuhunut
presentPassiveParticiplestringpuhuttava
pastPassiveParticiplestringpuhuttu
perfektiarray[6]olen puhunut, …
pluskvamperfektiarray[6]olin puhunut, …
Gaeilgega, sample: glan, 10 fields
FieldTypeExample (glan)
infinitivestringglan
verbalNounstringglanadh
verbalAdjectivestringglanta
presentarray[7]glanaim, …
pastarray[7]ghlan mé, …
pastHabitualarray[7]ghlanainn, …
futurearray[7]glanfaidh mé, …
conditionalarray[7]ghlanfainn, …
imperativearray[7]glanaim, …
subjunctivearray[7]glana mé, …

MCP

The same engine as an MCP server, for Claude Code, Cursor, or any MCP-capable agent:

claude mcp add ablaut --env ABLAUT_API_KEY=YOUR_KEY -- npx -y @v4nn4/ablaut-mcp
{
  "mcpServers": {
    "ablaut": {
      "command": "npx",
      "args": ["-y", "@v4nn4/ablaut-mcp"],
      "env": { "ABLAUT_API_KEY": "YOUR_KEY" }
    }
  }
}

Tools: conjugate(verb, language) returning the same table as the HTTP API, and list_languages(). Set ABLAUT_API_URL to point at another instance.

Machine-readable spec

OpenAPI 3.1: https://api.ablaut.dev/openapi.json. The library behind the API is open source: ablaut-dev/ablaut (Rust, Python, WebAssembly).