{"openapi":"3.1.0","info":{"title":"Interslavic dictionary access","version":"2.1.0"},"paths":{"/api/health":{"get":{"tags":["interslavic"],"summary":"Liveness probe","operationId":"health_api_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"anyOf":[{"type":"boolean"},{"type":"string"}]},"type":"object","title":"Response Health Api Health Get"}}}}}}},"/api":{"get":{"tags":["interslavic"],"summary":"API usage","operationId":"index_api_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Index Api Get"}}}}}}},"/api/search":{"get":{"tags":["interslavic"],"summary":"Look an Interslavic word up","operationId":"search_api_search_get","parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":80,"description":"The word to look up. isv (default): a single Interslavic word, any form and either script; an inflected form resolves to its headword via the reverse form index (see search_method), diacritics optional. eng: the English word whose Interslavic equivalents you want.","title":"Query"},"description":"The word to look up. isv (default): a single Interslavic word, any form and either script; an inflected form resolves to its headword via the reverse form index (see search_method), diacritics optional. eng: the English word whose Interslavic equivalents you want."},{"name":"search_language","in":"query","required":false,"schema":{"$ref":"#/components/schemas/SearchLanguage","description":"Query language: isv looks the Interslavic word up directly; eng finds an English word's Interslavic equivalents (the translations block) and expands them into full entries. Only these two are queryable in v1.","default":"isv"},"description":"Query language: isv looks the Interslavic word up directly; eng finds an English word's Interslavic equivalents (the translations block) and expands them into full entries. Only these two are queryable in v1."},{"name":"include_forms","in":"query","required":false,"schema":{"type":"boolean","description":"Attach each match's full inflection table inline. Bounded by the per-search cap. Defaults to false here — the MCP tool defaults to true.","default":false,"title":"Include Forms"},"description":"Attach each match's full inflection table inline. Bounded by the per-search cap. Defaults to false here — the MCP tool defaults to true."},{"name":"max_forms","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":12,"minimum":0},{"type":"null"}],"description":"Override the number of inline tables this request (0–12).","title":"Max Forms"},"description":"Override the number of inline tables this request (0–12)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/inflections":{"get":{"tags":["interslavic"],"summary":"Inflection table","operationId":"inflections_api_inflections_get","parameters":[{"name":"entry_id","in":"query","required":true,"schema":{"type":"string","pattern":"^[0-9]{1,24}$","description":"Numeric word id from a search handle.","title":"Entry Id"},"description":"Numeric word id from a search handle."},{"name":"word_class","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":24,"pattern":"^[a-z ]+$","description":"Paradigm class from a handle: noun, adjective or verb.","title":"Word Class"},"description":"Paradigm class from a handle: noun, adjective or verb."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/NounParadigm"},{"$ref":"#/components/schemas/AdjectiveParadigm"},{"$ref":"#/components/schemas/VerbParadigm"},{"$ref":"#/components/schemas/ParadigmNotFound"}],"discriminator":{"propertyName":"category","mapping":{"noun":"#/components/schemas/NounParadigm","adjective":"#/components/schemas/AdjectiveParadigm","verb":"#/components/schemas/VerbParadigm","not_found":"#/components/schemas/ParadigmNotFound"}},"title":"Response Inflections Api Inflections Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/transliterate":{"get":{"tags":["interslavic"],"summary":"Transliterate one Interslavic word between Latin and Cyrillic","operationId":"transliterate_api_transliterate_get","parameters":[{"name":"text","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":4000,"description":"ONE Interslavic word (not a phrase — the lookup does not tokenize). Auto-detects the input's script and returns the attested spelling in the OTHER script (source=dictionary). A word absent from the dataset, or input with no clear script, returns empty candidates — it never guesses.","title":"Text"},"description":"ONE Interslavic word (not a phrase — the lookup does not tokenize). Auto-detects the input's script and returns the attested spelling in the OTHER script (source=dictionary). A word absent from the dataset, or input with no clear script, returns empty candidates — it never guesses."},{"name":"target","in":"query","required":false,"schema":{"anyOf":[{"enum":["cyrillic","latin"],"type":"string"},{"type":"null"}],"description":"Force the output script instead of auto-detecting: cyrillic or latin. Omit to pick the opposite of the input's script.","title":"Target"},"description":"Force the output script instead of auto-detecting: cyrillic or latin. Omit to pick the opposite of the input's script."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Transliteration"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AdjectiveParadigm":{"properties":{"category":{"type":"string","const":"adjective","title":"Category","default":"adjective"},"entry_id":{"type":"string","title":"Entry Id","description":"The dictionary word id (NOT the headword)."},"word_class":{"type":"string","title":"Word Class","description":"The paradigm class: 'adjective'.","default":"adjective"},"found":{"type":"boolean","const":true,"title":"Found","default":true},"singular":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object","title":"Singular","description":"Case key → gender forms, singular."},"plural":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object","title":"Plural","description":"Case key → gender forms, plural."},"short":{"type":"string","title":"Short","description":"The short (predicative) form; may be empty.","default":""},"comparison":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object","title":"Comparison","description":"Degree ('positive','comparative','superlative') → forms."},"source":{"type":"string","title":"Source","default":"Interslavic dictionary (Medžuslovjansky slovnik), J. van Steenbergen et al. — steen.free.fr / medzuslovjansky (interslavic-dictionary.com). Morphology by @interslavic/utils. Reuse licence unconfirmed; reused here with attribution."}},"type":"object","required":["entry_id","singular","plural"],"title":"AdjectiveParadigm","description":"Declension of an adjective: singular and plural case tables (each case key →\nthe gender forms the engine renders, [masculine, neuter, feminine] where the case\ndistinguishes all three, fewer where it collapses them), the ``short`` form, and\nthe ``comparison`` degrees (positive/comparative/superlative)."},"Candidate":{"properties":{"word":{"type":"string","title":"Word","description":"A real orthographic word (source=dictionary) or the best-effort reconstruction (source=reconstruction)."},"source":{"type":"string","enum":["dictionary","reconstruction"],"title":"Source","description":"dictionary = an ATTESTED spelling recalled from the dictionary index (exact, no guessing); reconstruction = a best-effort algorithmic guess, returned only when no attested word matched (never emitted by Interslavic transliterate, which returns empty on a miss instead)."},"kind":{"anyOf":[{"type":"string","enum":["lemma","form"]},{"type":"null"}],"title":"Kind","description":"For a lossy-family dictionary candidate, whether the word is a headword (lemma) or an inflected form. None for a reconstruction, and always None for Interslavic transliterate (which does not distinguish lemma from form)."}},"type":"object","required":["word","source"],"title":"Candidate","description":"One candidate spelling from a reverse-lookup surface (deromanize /\ndetransliterate, or Interslavic transliterate)."},"Entry":{"properties":{"headword":{"type":"string","title":"Headword","description":"The Interslavic headword, Latin script."},"headword_cyrillic":{"type":"string","title":"Headword Cyrillic","description":"The headword in Cyrillic.","default":""},"part_of_speech":{"type":"string","title":"Part Of Speech","description":"Raw POS tag, e.g. 'm.anim.', 'v.tr.'.","default":""},"entry_id":{"type":"string","title":"Entry Id","description":"Word id — feed to interslavic_get_inflections.","default":""},"word_class":{"type":"string","title":"Word Class","description":"Paradigm class ('noun'/'adjective'/'verb') or '' if none.","default":""},"translations":{"$ref":"#/components/schemas/TranslationMatrix"},"intelligibility":{"type":"string","title":"Intelligibility","description":"Per-language intelligibility flags as the source marks them.","default":""}},"type":"object","required":["headword"],"title":"Entry","description":"One Interslavic dictionary entry: the headword (in both scripts), its part of\nspeech, and its translation matrix — the entry's content. ``word_class`` is the\nparadigm class ('noun'/'adjective'/'verb') or '' when the word has no generated\ntable; feed ``entry_id`` + ``word_class`` to ``interslavic_get_inflections``."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InflectionHandle":{"properties":{"entry_id":{"type":"string","title":"Entry Id","description":"The dictionary word id — NOT the headword."},"word_class":{"type":"string","title":"Word Class","description":"Paradigm class: 'noun', 'adjective' or 'verb'."},"context":{"type":"string","title":"Context","description":"The headword, for display.","default":""},"pos_hint":{"type":"string","title":"Pos Hint","description":"Raw part-of-speech tag, e.g. 'm.anim.'.","default":""},"forms":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/NounParadigm"},{"$ref":"#/components/schemas/AdjectiveParadigm"},{"$ref":"#/components/schemas/VerbParadigm"},{"$ref":"#/components/schemas/ParadigmNotFound"}],"discriminator":{"propertyName":"category","mapping":{"adjective":"#/components/schemas/AdjectiveParadigm","not_found":"#/components/schemas/ParadigmNotFound","noun":"#/components/schemas/NounParadigm","verb":"#/components/schemas/VerbParadigm"}}},{"type":"null"}],"title":"Forms","description":"The full paradigm, populated when a search is asked to include forms. None when not requested or beyond the cap."}},"type":"object","required":["entry_id","word_class"],"title":"InflectionHandle","description":"A structured anchor for fetching a full paradigm: feed ``entry_id`` (the word\nid) + ``word_class`` (the paradigm class) to ``interslavic_get_inflections`` — or\nask ``search`` to include the table inline (``forms``)."},"NounParadigm":{"properties":{"category":{"type":"string","const":"noun","title":"Category","default":"noun"},"entry_id":{"type":"string","title":"Entry Id","description":"The dictionary word id (NOT the headword)."},"word_class":{"type":"string","title":"Word Class","description":"The paradigm class: 'noun'.","default":"noun"},"found":{"type":"boolean","const":true,"title":"Found","default":true},"cases":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object","title":"Cases","description":"Case key ('nom','acc','gen','loc','dat','ins','voc') → [singular, plural], in table order."},"source":{"type":"string","title":"Source","default":"Interslavic dictionary (Medžuslovjansky slovnik), J. van Steenbergen et al. — steen.free.fr / medzuslovjansky (interslavic-dictionary.com). Morphology by @interslavic/utils. Reuse licence unconfirmed; reused here with attribution."}},"type":"object","required":["entry_id","cases"],"title":"NounParadigm","description":"Declension of a noun: case key → [singular, plural]. Interslavic has one\nnumber split (sg/pl) across seven cases. A cell may hold ' / '-separated\nalternates exactly as the reference engine renders them; a number the paradigm\ndoesn't fill is an empty string. ``category`` discriminates the ``Forms`` union —\nswitch on it before reading the body."},"ParadigmNotFound":{"properties":{"category":{"type":"string","const":"not_found","title":"Category","default":"not_found"},"entry_id":{"type":"string","title":"Entry Id"},"word_class":{"type":"string","title":"Word Class"},"found":{"type":"boolean","const":false,"title":"Found","default":false},"source":{"type":"string","title":"Source","default":"Interslavic dictionary (Medžuslovjansky slovnik), J. van Steenbergen et al. — steen.free.fr / medzuslovjansky (interslavic-dictionary.com). Morphology by @interslavic/utils. Reuse licence unconfirmed; reused here with attribution."}},"type":"object","required":["entry_id","word_class"],"title":"ParadigmNotFound","description":"No inflection table for this word/class: an indeclinable (adverb, preposition,\nconjunction, …), a multiword lemma, or a pronoun/numeral (closed sets carry no\ngenerated table in v1). ``found`` is False and there is no body."},"SearchLanguage":{"type":"string","enum":["isv","eng"],"title":"SearchLanguage","description":"The query language. ``isv`` looks an Interslavic word up directly — any of its\ninflected forms resolves to the headword via the bundled reverse form index, and\na Latin or Cyrillic spelling both work. ``eng`` searches in reverse: the English\nquery is matched against the entries' English glosses and each matched Interslavic\nlemma is then looked up normally. The dictionary translates into 11 more Slavic\nlanguages, but only isv and eng are QUERYABLE in v1 — the other columns are\nread-only (returned in each entry's translation matrix)."},"SearchResult":{"properties":{"query":{"type":"string","title":"Query"},"language":{"$ref":"#/components/schemas/SearchLanguage"},"found":{"type":"boolean","title":"Found","description":"False when nothing matched. For an eng query, True means the gloss index named Interslavic words — entries may still be empty when none of them expanded (see translations)."},"handles":{"items":{"$ref":"#/components/schemas/InflectionHandle"},"type":"array","title":"Handles"},"entries":{"items":{"$ref":"#/components/schemas/Entry"},"type":"array","title":"Entries"},"forms_truncated":{"type":"integer","title":"Forms Truncated","description":"How many handles did NOT get an inline table because the per-search cap was reached.","default":0},"translations":{"items":{"$ref":"#/components/schemas/TranslationSense"},"type":"array","title":"Translations","description":"Populated only for eng queries (always [] for isv): the Interslavic words whose English gloss matched the query. Entries/handles below are the expanded entries of those words."},"translations_truncated":{"type":"integer","title":"Translations Truncated","description":"How many distinct matched words were NOT expanded into entries because the per-search expansion cap was reached (they still appear under translations).","default":0},"search_method":{"type":"string","enum":["direct","lemma_index","translations"],"title":"Search Method","description":"How the match was found: 'direct' = the query matched a headword; 'lemma_index' = an inflected/alternate spelling resolved via the reverse form index; 'translations' = an English query resolved via the gloss index.","default":"direct"},"resolved_from":{"type":"string","title":"Resolved From","description":"The original query when resolved via the index; else empty. isv queries only — always empty for eng results.","default":""},"resolved_lemma":{"type":"string","title":"Resolved Lemma","description":"The headword actually searched when resolved; else empty. isv queries only — always empty for eng results.","default":""},"source":{"type":"string","title":"Source","default":"Interslavic dictionary (Medžuslovjansky slovnik), J. van Steenbergen et al. — steen.free.fr / medzuslovjansky (interslavic-dictionary.com). Morphology by @interslavic/utils. Reuse licence unconfirmed; reused here with attribution."}},"type":"object","required":["query","language","found"],"title":"SearchResult","description":"The result of a dictionary search."},"TranslationMatrix":{"properties":{"en":{"type":"string","title":"En","default":""},"ru":{"type":"string","title":"Ru","default":""},"be":{"type":"string","title":"Be","default":""},"uk":{"type":"string","title":"Uk","default":""},"pl":{"type":"string","title":"Pl","default":""},"cs":{"type":"string","title":"Cs","default":""},"sk":{"type":"string","title":"Sk","default":""},"sl":{"type":"string","title":"Sl","default":""},"hr":{"type":"string","title":"Hr","default":""},"sr":{"type":"string","title":"Sr","default":""},"mk":{"type":"string","title":"Mk","default":""},"bg":{"type":"string","title":"Bg","default":""}},"type":"object","title":"TranslationMatrix","description":"One entry's translations into the dictionary's target languages (isv → …).\nAn absent translation is an empty string. English (``en``) is also the reverse\nsearch key; the Slavic columns are read-only in v1. This IS the entry's content —\nInterslavic is a bridge language, so the multilingual equivalents are the point."},"TranslationSense":{"properties":{"sense":{"type":"string","title":"Sense","description":"The matched English query."},"terms":{"items":{"$ref":"#/components/schemas/TranslationTerm"},"type":"array","title":"Terms"}},"type":"object","required":["sense"],"title":"TranslationSense","description":"One English query and the Interslavic words whose English gloss matched it.\nMatching is by the local gloss index (built from every entry's English column);\nthe single sense carries the query itself."},"TranslationTerm":{"properties":{"word":{"type":"string","title":"Word","description":"The Interslavic headword, Latin script."},"word_cyrillic":{"type":"string","title":"Word Cyrillic","description":"The headword in Cyrillic.","default":""},"part_of_speech":{"type":"string","title":"Part Of Speech","description":"Raw POS tag.","default":""}},"type":"object","required":["word"],"title":"TranslationTerm","description":"One Interslavic word an English query's gloss match offers. ``word`` is the\nheadword (what an ``eng`` search re-searches and what a handle needs)."},"Transliteration":{"properties":{"original":{"type":"string","title":"Original","description":"The Interslavic text as given."},"candidates":{"items":{"$ref":"#/components/schemas/Candidate"},"type":"array","title":"Candidates","description":"The attested opposite-script spelling(s) — source is always 'dictionary'. Empty on a miss (word not in the dataset, or its target-script spelling is absent); this endpoint never returns a guessed reconstruction."},"direction":{"type":"string","enum":["latin_to_cyrillic","cyrillic_to_latin","unknown"],"title":"Direction","description":"Which way it resolved, from the input's script (or a target override): latin_to_cyrillic, cyrillic_to_latin, or unknown when the input had no clear script (still returns empty candidates, no error)."}},"type":"object","required":["original","candidates","direction"],"title":"Transliteration","description":"An Interslavic word rendered in the opposite script — an EXACT dataset lookup\n(both spellings are stored per entry), not a lossy transform. It never guesses: a\nmiss returns empty ``candidates``, not a reconstruction."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VerbParadigm":{"properties":{"category":{"type":"string","const":"verb","title":"Category","default":"verb"},"entry_id":{"type":"string","title":"Entry Id","description":"The dictionary word id (NOT the headword)."},"word_class":{"type":"string","title":"Word Class","description":"The paradigm class: 'verb'.","default":"verb"},"found":{"type":"boolean","const":true,"title":"Found","default":true},"infinitive":{"type":"string","title":"Infinitive","default":""},"present":{"items":{"type":"string"},"type":"array","title":"Present"},"imperfect":{"items":{"type":"string"},"type":"array","title":"Imperfect"},"perfect":{"items":{"type":"string"},"type":"array","title":"Perfect"},"pluperfect":{"items":{"type":"string"},"type":"array","title":"Pluperfect"},"future":{"items":{"type":"string"},"type":"array","title":"Future"},"conditional":{"items":{"type":"string"},"type":"array","title":"Conditional"},"imperative":{"type":"string","title":"Imperative","default":""},"prap":{"type":"string","title":"Prap","description":"Present active participle (imperfective).","default":""},"prpp":{"type":"string","title":"Prpp","description":"Present passive participle (uncommon).","default":""},"pfap":{"type":"string","title":"Pfap","description":"Past active participle (perfective).","default":""},"pfpp":{"type":"string","title":"Pfpp","description":"Past passive participle.","default":""},"gerund":{"type":"string","title":"Gerund","description":"Verbal noun.","default":""},"source":{"type":"string","title":"Source","default":"Interslavic dictionary (Medžuslovjansky slovnik), J. van Steenbergen et al. — steen.free.fr / medzuslovjansky (interslavic-dictionary.com). Morphology by @interslavic/utils. Reuse licence unconfirmed; reused here with attribution."}},"type":"object","required":["entry_id"],"title":"VerbParadigm","description":"Conjugation of a verb: the finite tense/mood series (each a positional list of\nperson forms — see the grammar-labels resource for the person order per series),\nthe imperative, the participles (present/past × active/passive, present only when\nthe aspect licenses them) and the verbal noun (gerund). Alternates are\ncomma-separated as the reference engine renders them."}}}}