Vocab Bloom Hub

Public API v1

The reference of the read-only dictionary API, generated from the OpenAPI document the server publishes — the same contract the SDKs are built from.

Read-only dictionary API under /api/v1 (contract version 1): no authentication, every answer in a { data, meta } envelope, errors as { statusCode, message, error: true }, X-API-Version on every response. The /api/compat/freedictionaryapi/v1 routes use freedictionaryapi.com objects, language lists and plain-text errors. The /api/compat/dictionaryapi routes use dictionaryapi.dev v1/v2 arrays and errors, with additive vocabBloom provenance. Compatibility lookups ending in /datasets wrap the responses from all installed datasets in { data, meta }; each group has dataset terms, status and response. Successful GET answers carry ETag, Last-Modified and Cache-Control. Documentation: https://vocab-bloom-hub.com/en/docs/api.

Base URLhttps://<instance>/api/v1
Every instance serves the API under its own origin; the examples below use a placeholder.
Contract
OpenAPI 3 document, served by every instance at /api/v1/openapi.json; the committed file
Read on

Endpoints

GET/api/v1/meta

API and dataset versions, data license and counts of the served dictionary

Parameters

No parameters.

Responses

Example

curl 'https://your-instance.example/api/v1/meta'

Try it in the playground

GET/api/v1/openapi.json

The OpenAPI 3 document of the public API (this contract)

Parameters

No parameters.

Responses

  • 200OK — object
  • 429Rate limit of the public prefix exceeded (PUBLIC_API_RATE_LIMIT); retry after the window — PublicApiErrorT
  • 503Not available: a selected dataset could not be read, the OpenAPI document is not ready, or the suggestion queue is full — PublicApiErrorT

Example

curl 'https://your-instance.example/api/v1/openapi.json'

GET/api/v1/search/detailed

Search dictionary entries with pagination, meanings and translations

The detailed search: the same term and tiers, paged, with meanings and translations joined on request; the fields travel in the query string (`translation_languages` as a repeated key). Cacheable like every public GET.

Parameters

NameInTypeRequiredDescription
searchquerystringyesThe term to search for
typequerystring
wordgrammar_patternphrase
noRestrict the answer to one entry type
limitqueryintegerno
default: 10
pagequeryintegerno
default: 1
with_meaningsquerybooleannoJoin the meanings (with translations, synonyms, antonyms) of every item
default: false
with_translationsquerybooleannoJoin the short translations of every item
default: false
translation_languagesquerystring[]
ruesfrdeptzhar
noKeep only these translation languages (a repeated key); omit the key for all of them
datasetquerystringnoPublic dataset name; omitted = the active dataset. Unknown or closed targets return 404, never a fallback.

Responses

  • 200OK — PublicSearchDetailedV1ResT
  • 400Invalid input: an unknown field, a value outside the allowed set, or a foreign cursor — PublicApiErrorT
  • 404Nothing matches — PublicApiErrorT
  • 429Rate limit of the public prefix exceeded (PUBLIC_API_RATE_LIMIT); retry after the window — PublicApiErrorT
  • 503Not available: a selected dataset could not be read, the OpenAPI document is not ready, or the suggestion queue is full — PublicApiErrorT

Example

curl 'https://your-instance.example/api/v1/search/detailed'

Try it in the playground

GET/api/v1/words/{word}

All entries of a headword: parts of speech, forms, meanings, translations, links

Parameters

NameInTypeRequiredDescription
wordpathstringyesHeadword spelling, case-insensitive (spaces URL-encoded for phrases). An inflected form resolves to its base entry

Responses

Example

curl 'https://your-instance.example/api/v1/words/run'

Try it in the playground

GET/api/v1/words/{word}/meanings

The meanings of a headword across its entries

Parameters

NameInTypeRequiredDescription
wordpathstringyesHeadword spelling, case-insensitive (spaces URL-encoded for phrases). An inflected form resolves to its base entry

Responses

Example

curl 'https://your-instance.example/api/v1/words/run/meanings'

Try it in the playground

GET/api/v1/words/{word}/translations

The short and per-meaning translations of a headword

Parameters

NameInTypeRequiredDescription
wordpathstringyesHeadword spelling, case-insensitive (spaces URL-encoded for phrases). An inflected form resolves to its base entry
languagequerystring[]
ruesfrdeptzhar
noTranslation languages; no value means all of them

Responses

Example

curl 'https://your-instance.example/api/v1/words/run/translations'

Try it in the playground

GET/api/v1/words/{word}/forms

The inflected forms of a headword across its entries

Parameters

NameInTypeRequiredDescription
wordpathstringyesHeadword spelling, case-insensitive (spaces URL-encoded for phrases). An inflected form resolves to its base entry

Responses

Example

curl 'https://your-instance.example/api/v1/words/run/forms'

Try it in the playground

GET/api/v1/words/{word}/synonyms

The synonyms of a headword, per meaning

One item per linked headword and meaning; each names its `meaning_id`, `word_id` and `part_of_speech`.

Parameters

NameInTypeRequiredDescription
wordpathstringyesHeadword spelling, case-insensitive (spaces URL-encoded for phrases). An inflected form resolves to its base entry

Responses

Example

curl 'https://your-instance.example/api/v1/words/run/synonyms'

Try it in the playground

GET/api/v1/words/{word}/antonyms

The antonyms of a headword, per meaning

One item per linked headword and meaning; each names its `meaning_id`, `word_id` and `part_of_speech`.

Parameters

NameInTypeRequiredDescription
wordpathstringyesHeadword spelling, case-insensitive (spaces URL-encoded for phrases). An inflected form resolves to its base entry

Responses

Example

curl 'https://your-instance.example/api/v1/words/run/antonyms'

Try it in the playground

GET/api/v1/words/{word}/history

What was changed or added on the instance in the entries of a headword

The edits that still show in what is served, the latest first, with the values before and after: the entries of such a headword carry `modified: true`. Empty for a headword served as its source has it.

Parameters

NameInTypeRequiredDescription
wordpathstringyesHeadword spelling, case-insensitive (spaces URL-encoded for phrases). An inflected form resolves to its base entry

Responses

Example

curl 'https://your-instance.example/api/v1/words/run/history'

Try it in the playground

GET/api/v1/words/{word}/datasets

A headword as every open dataset of the instance has it, grouped by dataset

One group per open dataset, never merged: the terms of the dataset (`license`, `attribution`, `license_text`, …) and the entries `GET /words/{word}` would answer if that dataset were the served one. The spelling is matched inside each dataset, so a group has its own `word` and `variants`; a dataset without the headword answers an empty `entries`, and the request fails with 404 when no dataset holds it. Entries taken from several groups are bound by the terms of each. One request against the rate limit.

Parameters

NameInTypeRequiredDescription
wordpathstringyesHeadword spelling, case-insensitive (spaces URL-encoded for phrases). An inflected form resolves to its base entry

Responses

Example

curl 'https://your-instance.example/api/v1/words/run/datasets'

Try it in the playground

GET/api/v1/words/{word}/datasets/{dataset}/history

What was changed or added on the instance in the entries of a headword, in one dataset

The answer of `GET /words/{word}/history` for a dataset named by its `dataset`: the edits behind `modified: true` of the entries of that group. 404 for a closed dataset or a dataset the instance does not hold.

Parameters

NameInTypeRequiredDescription
wordpathstringyesHeadword spelling, case-insensitive (spaces URL-encoded for phrases). An inflected form resolves to its base entry
datasetpathstringyesThe name of a dataset of the instance, as `dataset` of a group of `GET /words/{word}/datasets` says it

Responses

Example

curl 'https://your-instance.example/api/v1/words/run/datasets/default/history'

Try it in the playground

GET/api/v1/words/id/{id}

One dictionary entry by its numeric id

Parameters

NameInTypeRequiredDescription
idpathnumberyes

Responses

Example

curl 'https://your-instance.example/api/v1/words/id/1'

Try it in the playground

GET/api/v1/words

List dictionary entries by filters, cursor-paged and ordered by (word, id)

Every enum filter accepts a repeated key; values of one filter are OR-ed, filters are AND-ed. `search` keeps the headwords starting with the prefix (an autocomplete or an A–Z browser: cacheable, unlike the search). Pass `meta.next_cursor` back as `cursor` to read the next page.

Parameters

NameInTypeRequiredDescription
searchquerystringnoHeadword prefix, case-insensitive (`ru` lists run, rung, runner, …)
is_obsoletequerybooleannotrue: obsolete entries only, false: current ones only
part_of_speechquerystring[]
nounverbmodal_verbadjectiveadverbpronounnumeralnumeral_fractionaldeterminerinterjectionarticleprepositionconjunctionletterphrasegrammar_pattern
no
word_levelquerystring[]
A1A2B1B2C1C2
no
language_registerquerystring[]
formalinformalslang
no
categoryquerystring[]
scientifictechnicalmedicallegalbusinessITartpoliticalsportculinary
noWords tagged with any of the categories
area_variantquerystring[]
commonbritishamericanaustralian
no
form_of_wordquerystring[]
base_formplural_formpossessive_singular_formpossessive_plural_formpast_simplepast_participlepresent_participlethird_person_singularcomparative_formsuperlative_formobjectpossessive_adjectivepossessive_pronounreflexiveordinalmultiplicative
noDefaults to base forms only
default: ["base_form"]
cursorquerystringnoThe `meta.next_cursor` of the previous page; omit for the first page
limitqueryintegerno
default: 20
with_meaningsquerybooleannoJoin the meanings of every word
default: false
with_translationsquerybooleannoJoin the short translations of every word
default: false

Responses

  • 200OK — PublicWordsV1ResT
  • 400Invalid input: an unknown field, a value outside the allowed set, or a foreign cursor — PublicApiErrorT
  • 429Rate limit of the public prefix exceeded (PUBLIC_API_RATE_LIMIT); retry after the window — PublicApiErrorT

Example

curl 'https://your-instance.example/api/v1/words'

Try it in the playground

GET/api/v1/random

A random dictionary entry matching the filters (base forms unless form_of_word is given)

Parameters

NameInTypeRequiredDescription
searchquerystringnoHeadword prefix, case-insensitive (`ru` lists run, rung, runner, …)
is_obsoletequerybooleannotrue: obsolete entries only, false: current ones only
part_of_speechquerystring[]
nounverbmodal_verbadjectiveadverbpronounnumeralnumeral_fractionaldeterminerinterjectionarticleprepositionconjunctionletterphrasegrammar_pattern
no
word_levelquerystring[]
A1A2B1B2C1C2
no
language_registerquerystring[]
formalinformalslang
no
categoryquerystring[]
scientifictechnicalmedicallegalbusinessITartpoliticalsportculinary
noWords tagged with any of the categories
area_variantquerystring[]
commonbritishamericanaustralian
no
form_of_wordquerystring[]
base_formplural_formpossessive_singular_formpossessive_plural_formpast_simplepast_participlepresent_participlethird_person_singularcomparative_formsuperlative_formobjectpossessive_adjectivepossessive_pronounreflexiveordinalmultiplicative
noDefaults to base forms only
default: ["base_form"]

Responses

Example

curl 'https://your-instance.example/api/v1/random'

Try it in the playground

GET/api/v1/search/semantic/status

Whether the instance enables semantic search

Reflects only SEMANTIC_SEARCH_ENABLED. Performs no inference and does not promise model/vector availability. Never cached.

Parameters

No parameters.

Responses

Example

curl 'https://your-instance.example/api/v1/search/semantic/status'

Try it in the playground

GET/api/v1/search/semantic

Find existing meanings from a description

Separate from spelling search; no lexical fallback. Requires SEMANTIC_SEARCH_ENABLED, PostgreSQL/pgvector, imported current vectors and a matching Ollama model. Disabled = 404 semantic_search_disabled; missing infrastructure, busy service or incompatible model = 503. Returns up to 20 meanings, ordered by cosine similarity then meaning ID. Scores are not confidence probabilities; no calibrated no-answer threshold. No pagination or cross-dataset ranking. Uses the shared public rate budget. Responses are no-store.

Parameters

NameInTypeRequiredDescription
queryquerystringyesA description of the intended meaning, in English or another language supported by the model.
datasetquerystringnoOne public dataset; omitted = active dataset. Closed/unknown targets return 404.
limitqueryintegerno
default: 10

Responses

  • 200OK — PublicSemanticSearchV1ResT
  • 400Invalid input: an unknown field, a value outside the allowed set, or a foreign cursor — PublicApiErrorT
  • 404Nothing matches — PublicApiErrorT
  • 429Rate limit of the public prefix exceeded (PUBLIC_API_RATE_LIMIT); retry after the window — PublicApiErrorT
  • 503Not available: a selected dataset could not be read, the OpenAPI document is not ready, or the suggestion queue is full — PublicApiErrorT

Example

curl 'https://your-instance.example/api/v1/search/semantic'

Try it in the playground

GET/api/compat/dictionaryapi/v2/entries/{language}/{word}/datasets

dictionaryapi.dev v2 responses from every open dataset

One group per installed dataset with its terms, status and response in the adapter format. Missing words have status 404 and the adapter error in response. The outer request returns 200 even when no dataset matches. English only; the usual headword and inflection rules apply in each dataset. No query parameters. Does not activate any dataset. One public rate-limit unit; cached across all datasets.

Parameters

NameInTypeRequiredDescription
languagepathstring
enen_USen_GB
yes
wordpathstringyesHeadword spelling, case-insensitive (spaces URL-encoded for phrases). An inflected form resolves to its base entry

Responses

Example

curl 'https://your-instance.example/api/compat/dictionaryapi/v2/entries/en/run/datasets'

Try it in the playground

GET/api/compat/dictionaryapi/v1/entries/{language}/{word}/datasets

dictionaryapi.dev v1 responses from every open dataset

One group per installed dataset with its terms, status and response in the adapter format. Missing words have status 404 and the adapter error in response. The outer request returns 200 even when no dataset matches. English only; the usual headword and inflection rules apply in each dataset. No query parameters. Does not activate any dataset. One public rate-limit unit; cached across all datasets.

Parameters

NameInTypeRequiredDescription
languagepathstring
enen_USen_GB
yes
wordpathstringyesHeadword spelling, case-insensitive (spaces URL-encoded for phrases). An inflected form resolves to its base entry

Responses

Example

curl 'https://your-instance.example/api/compat/dictionaryapi/v1/entries/en/run/datasets'

Try it in the playground

GET/api/compat/freedictionaryapi/v1/entries/{language}/{word}/datasets

freedictionaryapi.com responses from every open dataset

One group per installed dataset with its terms, status 200 and the adapter object in response. Exact spelling; en and all read English. Missing words and other languages have empty response.entries. The outer request returns 200 even when no dataset matches. Does not activate any dataset. One public rate-limit unit; cached across all datasets. Empty source links point here rather than active-only /meta.

Parameters

NameInTypeRequiredDescription
languagepathstringyesen or all; other values return empty entries
wordpathstringyesExact case-sensitive spelling, encoded as one URL segment
prettyquerybooleannoIndent the whole response with two spaces; default false.
translationsquerybooleannoInclude supported translations; default false. Only true/false, first occurrence wins.

Responses

  • 200OK — FreeDictionaryDatasetsResT
  • 400Invalid input: an unknown field, a value outside the allowed set, or a foreign cursor
  • 429Rate limit of the public prefix exceeded (PUBLIC_API_RATE_LIMIT); retry after the window

Example

curl 'https://your-instance.example/api/compat/freedictionaryapi/v1/entries/example/run/datasets'

Try it in the playground

GET/api/compat/dictionaryapi/v2/entries/{language}/{word}

dictionaryapi.dev v2 lookup in the active dataset

Array response, with lossless provenance in vocabBloom. English only; native headword and inflection resolution. No dataset query parameter.

Parameters

NameInTypeRequiredDescription
languagepathstring
enen_USen_GB
yes
wordpathstringyesHeadword spelling, case-insensitive (spaces URL-encoded for phrases). An inflected form resolves to its base entry

Responses

Example

curl 'https://your-instance.example/api/compat/dictionaryapi/v2/entries/en/run'

Try it in the playground

GET/api/compat/dictionaryapi/v1/entries/{language}/{word}

dictionaryapi.dev legacy v1 lookup in the active dataset

Same entries and terms as v2, with a meaning object keyed by part of speech instead of meanings. English only.

Parameters

NameInTypeRequiredDescription
languagepathstring
enen_USen_GB
yes
wordpathstringyesHeadword spelling, case-insensitive (spaces URL-encoded for phrases). An inflected form resolves to its base entry

Responses

Example

curl 'https://your-instance.example/api/compat/dictionaryapi/v1/entries/en/run'

Try it in the playground

GET/api/compat/freedictionaryapi/v1/entries/{language}/{word}

freedictionaryapi.com lookup in the active dataset

Exact spelling. en and all read the English database; other languages and missing spellings return empty entries. Full terms in vocabBloom.

Parameters

NameInTypeRequiredDescription
languagepathstringyesen or all; other values return empty entries
wordpathstringyesExact case-sensitive spelling, encoded as one URL segment
prettyquerybooleannoIndent JSON with two spaces; default false.
translationsquerybooleannoInclude supported translations; default false. Only true/false, first occurrence wins.

Responses

  • 200OK — FreeDictionaryEntriesResT
  • 400Invalid input: an unknown field, a value outside the allowed set, or a foreign cursor
  • 429Rate limit of the public prefix exceeded (PUBLIC_API_RATE_LIMIT); retry after the window

Example

curl 'https://your-instance.example/api/compat/freedictionaryapi/v1/entries/example/run'

Try it in the playground

GET/api/compat/freedictionaryapi/v1/languages

Available headword languages and readable spelling counts

English only. Counts include phrases, inflections and alternative-only entry rows in the active dataset, once per readable spelling; unlinked placeholders are excluded.

Parameters

NameInTypeRequiredDescription
prettyquerybooleannoIndent JSON with two spaces; default false.

Responses

  • 200OK — FreeDictionaryLanguagesResT
  • 400Invalid input: an unknown field, a value outside the allowed set, or a foreign cursor
  • 429Rate limit of the public prefix exceeded (PUBLIC_API_RATE_LIMIT); retry after the window

Example

curl 'https://your-instance.example/api/compat/freedictionaryapi/v1/languages'

Try it in the playground

GET/api/v1/search/datasets

Search up to five public datasets, in separate groups

Repeat datasets for each target (1–5 unique names). Groups follow installation order. The detailed search filters, limit (1–20) and page (1–20) apply independently to every group. Relevance scores are local to each dataset. Empty matches have status ok and an empty data array; failed readers have status unavailable and no results/pagination. Unknown or closed targets reject the entire request with 404. Partial failures return 200 with meta.partial and Cache-Control: no-store. Each selected dataset costs one unit of the shared public rate budget, including failed reads. Selected searches revalidate their ETag on every use.

Parameters

NameInTypeRequiredDescription
searchquerystringyesThe term to search for
typequerystring
wordgrammar_patternphrase
noRestrict the answer to one entry type
limitqueryintegerno
default: 10
pagequeryintegerno
default: 1
with_meaningsquerybooleannoJoin the meanings (with translations, synonyms, antonyms) of every item
default: false
with_translationsquerybooleannoJoin the short translations of every item
default: false
translation_languagesquerystring[]
ruesfrdeptzhar
noKeep only these translation languages (a repeated key); omit the key for all of them
datasetsquerystring[]yesPublic dataset names as repeated keys. Groups follow installation order. Each selected dataset costs one unit of the shared public rate budget.

Responses

Example

curl 'https://your-instance.example/api/v1/search/datasets?search=run&datasets=default'

Try it in the playground

GET/api/v1/datasets

Publicly readable datasets and their terms, in installation order

Parameters

No parameters.

Responses

Example

curl 'https://your-instance.example/api/v1/datasets'

Try it in the playground

POST/api/v1/words/batch

Up to 50 headwords in one request

Every spelling is matched like `GET /words/{word}`; the answer keeps the request order, collapses duplicates, and lists the spellings without an entry under `meta.not_found` instead of failing. One request against the rate limit, whatever the size of the batch.

Request body · WordsBatchV1ReqDTO

NameTypeRequiredDescription
wordsstring[]yesHeadword spellings, 50 at most, each matched like GET /words/{word} (case-insensitively; an inflected form resolves to its base entry)

Responses

Example

curl -X POST 'https://your-instance.example/api/v1/words/batch' \
  -H 'Content-Type: application/json' \
  -d '{"words":["run","walk","nonexistentword"]}'

Try it in the playground

POST/api/v1/suggestions

Report a mistake in the dictionary data

Files a report for the instance admin to review: what is wrong with a headword (optionally one specific entry of it) and, ideally, what would be right. The headword must exist in the selected publicly open dataset. Pass dataset to target a viewed dataset; omitted means the active dataset. All IDs must belong to that dataset and headword. Closed, unknown or removed targets answer 404 without fallback. Rate limits are shared across datasets; a full target queue answers 503.

Request body · CreateSuggestionV1ReqDTO

NameTypeRequiredDescription
datasetstringnoInstalled, publicly open dataset containing the headword and all supplied IDs. Omit to use the active dataset.
headwordstringyesThe headword the report is about; must exist in the dictionary
word_idobjectnoId of the entry (part of speech) the report points at, from the word answers
kindstring
reportedit
no
default: "report"
messageobjectnoWhat is wrong and, ideally, what would be right. Required for a report; an optional comment on an edit
editsSuggestionEditV1DTO[]noEdit flow: every touched target of the word form with its proposed values
author_nameobjectnoThe name the sender wants to be credited by (issue #531). Kept only together with `author_consent: true`: once the correction is applied the name is shown next to it and travels with the copies of the data
author_consentobjectnoThe sender agrees that `author_name` is shown and exported; required when a name is given

Responses

Example

curl -X POST 'https://your-instance.example/api/v1/suggestions' \
  -H 'Content-Type: application/json' \
  -d '{"headword":"run","message":"Please check the definition of this word."}'

Try it in the playground

Schemas

SuggestionEditV1DTO

NameTypeRequiredDescription
target_typestring
wordmeaningmeaning_translationshort_translation
yes
target_idnumberyesId of the targeted row, from the word answers
changesobjectyesThe proposed field values, e.g. { "definition": "…" }. The accepted fields depend on target_type; unknown fields, empty values and values equal to the current ones are rejected

CreateSuggestionV1ReqDTO

NameTypeRequiredDescription
datasetstringnoInstalled, publicly open dataset containing the headword and all supplied IDs. Omit to use the active dataset.
headwordstringyesThe headword the report is about; must exist in the dictionary
word_idobjectnoId of the entry (part of speech) the report points at, from the word answers
kindstring
reportedit
no
default: "report"
messageobjectnoWhat is wrong and, ideally, what would be right. Required for a report; an optional comment on an edit
editsSuggestionEditV1DTO[]noEdit flow: every touched target of the word form with its proposed values
author_nameobjectnoThe name the sender wants to be credited by (issue #531). Kept only together with `author_consent: true`: once the correction is applied the name is shown next to it and travels with the copies of the data
author_consentobjectnoThe sender agrees that `author_name` is shown and exported; required when a name is given

WordsBatchV1ReqDTO

NameTypeRequiredDescription
wordsstring[]yesHeadword spellings, 50 at most, each matched like GET /words/{word} (case-insensitively; an inflected form resolves to its base entry)

PublicSearchV1MetaT

NameTypeRequiredDescription
datasetstringnoPresent only for an explicitly selected dataset.
countintegeryes
fuzzybooleanyes
short_termbooleanyes

PublicSearchV1ResT

NameTypeRequiredDescription
dataPublicSearchWordV1T[]yes
metaPublicSearchV1MetaTyes

PublicSearchWordV1T

NameTypeRequiredDescription
alternativesstring[]noAlternative spellings of this headword, shared by all its parts of speech.
originsOriginT[]no
contributionsOriginT[]noTerms of the datasets whose edits still contribute to this word.
licensesWordLicenseT[]no
idintegeryes
wordstringyes
part_of_speechEnPartOfSpeechEyes
form_of_wordEnWordFormsEyes
is_obsoletebooleanyes
is_abbreviationbooleanyes
word_levelWordLevelE | nullyes
area_variantEnAreaVariantsE | nullyes
categoriesCategoryE[]yes
language_registerLanguageRegisterE | nullyes
descriptionstring | nullyes
transcriptionstring | nullyes
pronunciationsPronunciationT[]noOrdered pronunciations, with legacy transcription and base-form fallback.
patternstring[] | nullyes
noun___irregular_pluralboolean | nullyes
noun___uncountableboolean | nullyes
noun___is_properboolean | nullyes
noun___always_pluralboolean | nullyes
verb___is_irregularboolean | nullyes
verb___transitivityEnVerbTransitivityE | nullyes
verb___is_phrasalboolean | nullyes
verb___phrasal_object_patternEnPhrasalObjectPatternE | nullyes
base_phrasalstring | nullyes
formsPublicWordV1FormT[]yes
similaritynumberno
sourcestringno
modifiedbooleanno

OriginT

NameTypeRequiredDescription
idstringyes
namestringyes
versionstring | nullyes
urlstringno
record_urlstringno
licensesOriginLicenseT[]yes
license_relationstring
allany
yesAll obligations apply, or the source explicitly offers a choice.
attributionstringyes
noticesstring[]yes
scopestring
worddataset
yesDataset means that distribution between individual words is unknown.
methodstring
datasetmanual
yes
recorded_atstring | nullyes
acquisitionsOriginAcquisitionT[]noCopy/fork events belonging to this source snapshot; absent before any acquisition.
inheritedbooleanyesAutomatically inherited terms cannot be removed by ordinary editing.

OriginLicenseT

A durable statement of terms, not a pointer to a mutable dataset registry.

NameTypeRequiredDescription
spdxstringno
namestringyes
urlstringyes
textstringnoRequired for custom licenses; preserved verbatim when supplied.

OriginAcquisitionT

An acquisition of a source snapshot, without repeating its license terms.

NameTypeRequiredDescription
idstringyes
methodstring
copyfork
yes
recorded_atstring | nullyes
revisionstringno
viaobjectnoThe intermediate dataset the material passed through; this adds no license obligations.

WordLicenseT

One license can occur more than once; origin_id refers to origins or contributions.

NameTypeRequiredDescription
origin_idstringyes
spdxstringno
namestringyes
urlstringyes
textstringnoRequired for custom licenses; preserved verbatim when supplied.

EnPartOfSpeechE

One of: noun, verb, modal_verb, adjective, adverb, pronoun, numeral, numeral_fractional, determiner, interjection, article, preposition, conjunction, letter, phrase, grammar_pattern

EnWordFormsE

One of: base_form, plural_form, possessive_singular_form, possessive_plural_form, past_simple, past_participle, present_participle, third_person_singular, comparative_form, superlative_form, object, possessive_adjective, possessive_pronoun, reflexive, ordinal, multiplicative

WordLevelE

One of: A1, A2, B1, B2, C1, C2

EnAreaVariantsE

One of: common, british, american, australian

CategoryE

One of: scientific, technical, medical, legal, business, IT, art, political, sport, culinary

LanguageRegisterE

One of: formal, informal, slang

PronunciationT

Portable pronunciation; database IDs never travel in datasets or public responses.

NameTypeRequiredDescription
audioPronunciationAudioT[]noRecordings carry their own terms, independent of the word's text.
typestring
ipaenpr
yes
textstring | nullyes
area_variantEnAreaVariantsEyes
sort_orderintegeryes

PronunciationAudioT

External recordings only; missing license metadata is an empty list, never the text license.

NameTypeRequiredDescription
urlstringyes
source_urlstring | nullno
attributionstring | nullno
licensesOriginLicenseT[]yes
sort_orderintegeryes

EnVerbTransitivityE

One of: transitive, intransitive, both

EnPhrasalObjectPatternE

One of: no_object, inseparable, separable, separable_pronoun_only

PublicWordV1FormT

NameTypeRequiredDescription
alternativesstring[]no
idintegeryes
wordstringyes
form_of_wordEnWordFormsEyes
area_variantEnAreaVariantsEyes
transcriptionstring | nullyes
pronunciationsPronunciationT[]noOrdered pronunciations, with legacy transcription and base-form fallback.

PublicSearchDetailedV1MetaT

NameTypeRequiredDescription
datasetstringnoPresent only for an explicitly selected dataset.
pageintegeryes
limitintegeryes
has_morebooleanyes
fuzzybooleanyes
short_termbooleanyes

PublicSearchDetailedV1ResT

NameTypeRequiredDescription
dataPublicWordV1T[]yes
metaPublicSearchDetailedV1MetaTyes

PublicWordV1T

NameTypeRequiredDescription
etymologiesobject[]no
meaningsPublicWordV1MeaningT[]yes
short_translationsPublicWordV1ShortTranslationT[]yes
phrasal_variantsstring[]no
alternativesstring[]noAlternative spellings of this headword, shared by all its parts of speech.
originsOriginT[]no
contributionsOriginT[]noTerms of the datasets whose edits still contribute to this word.
licensesWordLicenseT[]no
idintegeryes
wordstringyes
part_of_speechEnPartOfSpeechEyes
form_of_wordEnWordFormsEyes
is_obsoletebooleanyes
is_abbreviationbooleanyes
word_levelWordLevelE | nullyes
area_variantEnAreaVariantsE | nullyes
categoriesCategoryE[]yes
language_registerLanguageRegisterE | nullyes
descriptionstring | nullyes
transcriptionstring | nullyes
pronunciationsPronunciationT[]noOrdered pronunciations, with legacy transcription and base-form fallback.
patternstring[] | nullyes
noun___irregular_pluralboolean | nullyes
noun___uncountableboolean | nullyes
noun___is_properboolean | nullyes
noun___always_pluralboolean | nullyes
verb___is_irregularboolean | nullyes
verb___transitivityEnVerbTransitivityE | nullyes
verb___is_phrasalboolean | nullyes
verb___phrasal_object_patternEnPhrasalObjectPatternE | nullyes
base_phrasalstring | nullyes
formsPublicWordV1FormT[]yes
similaritynumberno
sourcestringno
modifiedbooleanno

PublicWordV1MeaningT

NameTypeRequiredDescription
etymology_numberinteger | nullnoLocal number of the owning word etymology; null when unknown.
idintegeryes
sort_orderintegeryes
titlestringyes
definitionstringyes
is_obsoletebooleanyes
examplesstring[]yes
quotesMeaningQuoteT[]no
categoriesCategoryE[]yes
meaning_levelWordLevelE | nullyes
area_variantEnAreaVariantsEyes
language_registerLanguageRegisterE | nullyes
translationsPublicWordV1MeaningTranslationT[]yes
synonymsstring[]yes
antonymsstring[]yes

MeaningQuoteT

A sourced quotation, in authored array order. Missing attribution is explicit.

NameTypeRequiredDescription
textstringyes
referencestring | nullyes
source_urlstring | nullno

PublicWordV1MeaningTranslationT

NameTypeRequiredDescription
idintegeryes
languageAvailableTranslationLanguagesEyes
titlestringyes
definitionstringyes
variants_of_wordsstring[]yes

AvailableTranslationLanguagesE

One of: ru, es, fr, de, pt, zh, ar

PublicWordV1ShortTranslationT

NameTypeRequiredDescription
idintegeryes
languageAvailableTranslationLanguagesEyes
descriptionstringyes
variants_of_wordsstring[]yes

PublicWordV1ResT

NameTypeRequiredDescription
dataPublicWordV1Tyes

PublicHeadwordV1MetaT

NameTypeRequiredDescription
wordstringyes
countintegeryes
variantsstring[]no

PublicHeadwordV1ResT

NameTypeRequiredDescription
dataPublicWordV1T[]yes
metaPublicHeadwordV1MetaTyes

PublicMeaningV1T

NameTypeRequiredDescription
originsOriginT[]no
contributionsOriginT[]no
licensesWordLicenseT[]no
word_idintegeryes
part_of_speechEnPartOfSpeechEyes
sourcestringno
modifiedbooleanno
etymology_numberinteger | nullnoLocal number of the owning word etymology; null when unknown.
idintegeryes
sort_orderintegeryes
titlestringyes
definitionstringyes
is_obsoletebooleanyes
examplesstring[]yes
quotesMeaningQuoteT[]no
categoriesCategoryE[]yes
meaning_levelWordLevelE | nullyes
area_variantEnAreaVariantsEyes
language_registerLanguageRegisterE | nullyes
translationsPublicWordV1MeaningTranslationT[]yes
synonymsstring[]yes
antonymsstring[]yes

PublicHeadwordMeaningsV1ResT

NameTypeRequiredDescription
dataPublicMeaningV1T[]yes
metaPublicHeadwordV1MetaTyes

PublicWordFormV1T

NameTypeRequiredDescription
originsOriginT[]no
contributionsOriginT[]no
licensesWordLicenseT[]no
word_idintegeryes
part_of_speechEnPartOfSpeechEyes
sourcestringno
modifiedbooleanno
alternativesstring[]no
idintegeryes
wordstringyes
form_of_wordEnWordFormsEyes
area_variantEnAreaVariantsEyes
transcriptionstring | nullyes
pronunciationsPronunciationT[]noOrdered pronunciations, with legacy transcription and base-form fallback.

PublicHeadwordFormsV1ResT

NameTypeRequiredDescription
dataPublicWordFormV1T[]yes
metaPublicHeadwordV1MetaTyes

PublicShortTranslationV1T

NameTypeRequiredDescription
originsOriginT[]no
contributionsOriginT[]no
licensesWordLicenseT[]no
word_idintegeryes
part_of_speechEnPartOfSpeechEyes
sourcestringno
modifiedbooleanno
idintegeryes
languageAvailableTranslationLanguagesEyes
descriptionstringyes
variants_of_wordsstring[]yes

PublicMeaningTranslationV1T

NameTypeRequiredDescription
meaning_idintegeryes
originsOriginT[]no
contributionsOriginT[]no
licensesWordLicenseT[]no
word_idintegeryes
part_of_speechEnPartOfSpeechEyes
sourcestringno
modifiedbooleanno
idintegeryes
languageAvailableTranslationLanguagesEyes
titlestringyes
definitionstringyes
variants_of_wordsstring[]yes

PublicWordLinkV1T

NameTypeRequiredDescription
meaning_idintegeryes
wordstringyes
originsOriginT[]no
contributionsOriginT[]no
licensesWordLicenseT[]no
word_idintegeryes
part_of_speechEnPartOfSpeechEyes
sourcestringno
modifiedbooleanno

PublicHeadwordLinksV1ResT

NameTypeRequiredDescription
dataPublicWordLinkV1T[]yes
metaPublicHeadwordV1MetaTyes

PublicChangeV1T

NameTypeRequiredDescription
inherited_fromOriginT | nullno
contributionOriginT | nullnoTerms captured when this edit was made, independent of later dataset changes.
reasonstring | nullno
created_atstringyes
wordstringyes
part_of_speechstring | nullyes
entityChangeEntityEyes
actionChangeActionEyes
recordChangeRecordT | nullyes
diffChangeDiffTyes
originChangeOriginEyes
authorstring | nullyes
sourcestringno

ChangeEntityE

What was edited

One of: word, word_form, meaning, meaning_translation, short_translation

ChangeActionE

One of: create, update, delete

ChangeRecordT

The record of an entry an edit is about, by what it says rather than by its id: ids change when a dataset is updated and differ between instances. Null for the word itself — the headword and the part of speech name it.

NameTypeRequiredDescription

ChangeFormRecordT

NameTypeRequiredDescription
wordstringyes
form_of_wordstringyes

ChangeMeaningRecordT

NameTypeRequiredDescription
titlestringyes
sort_orderintegeryes

ChangeTranslationRecordT

NameTypeRequiredDescription
meaningChangeMeaningRecordTyes
languagestringyes
titlestringyes

ChangeShortTranslationRecordT

NameTypeRequiredDescription
languagestringyes
descriptionstringyes

ChangeDiffT

The values an edit changed: `{ field: { before, after } }`; a creation has no `before`, a deletion no `after`

NameTypeRequiredDescription

ChangeOriginE

Where an edit came from

One of: admin, suggestion, revert

PublicHeadwordHistoryV1MetaT

NameTypeRequiredDescription
wordstringyes
countintegeryes
variantsstring[]no

PublicHeadwordHistoryV1ResT

NameTypeRequiredDescription
dataPublicChangeV1T[]yes
metaPublicHeadwordHistoryV1MetaTyes

PublicDatasetTermsV1T

NameTypeRequiredDescription
originsOriginT[]no
licensesWordLicenseT[]no
descriptionstring | nullno
datasetstringyes
titlestringno
activebooleanyes
sourcestringyes
dataset_versionstring | nullyes
licensestringyes
license_urlstringyes
attributionstringyes
attribution_urlstring | nullyes
noticestringyes
license_textstringyes

PublicWordDatasetV1T

NameTypeRequiredDescription
wordstringyes
variantsstring[]yes
countintegeryes
entriesPublicWordV1T[]yes
originsOriginT[]no
licensesWordLicenseT[]no
descriptionstring | nullno
datasetstringyes
titlestringno
activebooleanyes
sourcestringyes
dataset_versionstring | nullyes
licensestringyes
license_urlstringyes
attributionstringyes
attribution_urlstring | nullyes
noticestringyes
license_textstringyes

PublicWordDatasetsV1MetaT

NameTypeRequiredDescription
wordstringyes
datasetsintegeryes
foundintegeryes

PublicWordDatasetsV1ResT

NameTypeRequiredDescription
dataPublicWordDatasetV1T[]yes
metaPublicWordDatasetsV1MetaTyes

PublicHeadwordTranslationsV1T

NameTypeRequiredDescription
short_translationsPublicShortTranslationV1T[]yes
meaning_translationsPublicMeaningTranslationV1T[]yes

PublicHeadwordTranslationsV1ResT

NameTypeRequiredDescription
metaPublicHeadwordV1MetaTyes
dataPublicHeadwordTranslationsV1Tyes

PublicWordsBatchItemV1T

NameTypeRequiredDescription
wordstringyes
countintegeryes
entriesPublicWordV1T[]yes

PublicWordsBatchV1MetaT

NameTypeRequiredDescription
countintegeryes
not_foundstring[]yes

PublicWordsBatchV1ResT

NameTypeRequiredDescription
dataPublicWordsBatchItemV1T[]yes
metaPublicWordsBatchV1MetaTyes

PublicWordsV1MetaT

NameTypeRequiredDescription
limitintegeryes
has_morebooleanyes
next_cursorstring | nullyes

PublicWordsV1ResT

NameTypeRequiredDescription
dataPublicWordV1T[]yes
metaPublicWordsV1MetaTyes

PublicDatasetCountsV1T

NameTypeRequiredDescription
entriesintegeryes
wordsintegeryes
phrasesintegeryes
grammar_patternsintegeryes
word_formsintegeryes
meaningsintegeryes
meaning_translationsintegeryes
short_translationsintegeryes

PublicMetaV1T

NameTypeRequiredDescription
originsOriginT[]no
licensesWordLicenseT[]no
descriptionstring | nullno
api_versionstringyes
app_versionstringyes
dataset_versionstring | nullyes
licensestringyes
license_urlstringyes
attributionstringyes
noticestringyes
datasetstringno
titlestringno
sourcestringno
attribution_urlstring | nullno
license_textstringno
modified_entriesintegerno
countsPublicDatasetCountsV1Tyes
available_languagesPublicAvailableLanguagesV1Tyes

PublicAvailableLanguagesV1T

NameTypeRequiredDescription
sourcestring[]yes
translationsAvailableTranslationLanguagesE[]yes

PublicMetaV1ResT

NameTypeRequiredDescription
dataPublicMetaV1Tyes

PublicSuggestionCreatedV1T

NameTypeRequiredDescription
idintegeryes
statusstringyes

PublicSuggestionCreatedV1ResT

NameTypeRequiredDescription
dataPublicSuggestionCreatedV1Tyes

PublicApiErrorT

NameTypeRequiredDescription
statusCodenumberyes
messagestringyes
errorbooleanyes

DictionaryApiV1DatasetsResT

NameTypeRequiredDescription
dataobject[]yes
metaobjectyesfound counts datasets with entries, including for adapters whose misses are HTTP 200.

DictionaryApiV1ResT

NameTypeRequiredDescription

DictionaryApiDefinitionT

NameTypeRequiredDescription
definitionstringyes
examplestringno
synonymsstring[]yes
antonymsstring[]yes

DictionaryApiPhoneticT

NameTypeRequiredDescription
textstringno
audiostringyes
sourceUrlstringno
licenseDictionaryApiLicenseTno
vocabBloomobjectnoLossless recording terms; the upstream singular license cannot express all of these.

DictionaryApiLicenseT

NameTypeRequiredDescription
namestringyes
urlstringyes

DictionaryApiErrorT

NameTypeRequiredDescription
titlestringyes
messagestringyes
resolutionstringyes

DictionaryApiV2DatasetsResT

NameTypeRequiredDescription
dataobject[]yes
metaobjectyesfound counts datasets with entries, including for adapters whose misses are HTTP 200.

DictionaryApiV2ResT

NameTypeRequiredDescription

DictionaryApiMeaningT

NameTypeRequiredDescription
partOfSpeechstringyes
definitionsDictionaryApiDefinitionT[]yes
synonymsstring[]yes
antonymsstring[]yes

FreeDictionaryDatasetsResT

NameTypeRequiredDescription
dataobject[]yes
metaobjectyesfound counts datasets with entries, including for adapters whose misses are HTTP 200.

FreeDictionaryEntriesResT

NameTypeRequiredDescription
wordstringyes
entriesFreeDictionaryEntryT[]yes
sourceobjectyes
vocabBloomPublicDatasetTermsV1TyesTerms of the dataset read. Word-specific origins are retained on each entry.

FreeDictionaryEntryT

NameTypeRequiredDescription
languageFreeDictionaryLanguageTyes
partOfSpeechstringyes
pronunciationsobject[]yes
formsobject[]yes
sensesFreeDictionarySenseT[]yes
synonymsstring[]yes
antonymsstring[]yes
vocabBloomobjectyesNative entry identity and lossless terms; additive to the upstream format.

FreeDictionaryLanguageT

NameTypeRequiredDescription
codestringyes
namestringyes

FreeDictionarySenseT

NameTypeRequiredDescription
definitionstringyes
tagsstring[]yes
examplesstring[]yes
quotesobject[]yes
synonymsstring[]yes
antonymsstring[]yes
translationsobject[]no
subsensesFreeDictionarySenseT[]yes

FreeDictionaryErrorT

Upstream parameter errors are plain text, not the native error envelope.

NameTypeRequiredDescription

FreeDictionaryLanguagesResT

NameTypeRequiredDescription

PublicDatasetsV1ResT

Public selector inventory, in installation order; no dictionary connections or counts.

NameTypeRequiredDescription
dataPublicDatasetTermsV1T[]yes
metaobjectyes

PublicSearchDatasetResultV1T

NameTypeRequiredDescription
statusstring
ok
yes
dataPublicWordV1T[]yes
metaPublicSearchDetailedV1MetaTyes
originsOriginT[]no
licensesWordLicenseT[]no
descriptionstring | nullno
datasetstringyes
titlestringno
activebooleanyes
sourcestringyes
dataset_versionstring | nullyes
licensestringyes
license_urlstringyes
attributionstringyes
attribution_urlstring | nullyes
noticestringyes
license_textstringyes

PublicSearchDatasetUnavailableV1T

A failed reader has no result list or paging metadata; it is not an empty match.

NameTypeRequiredDescription
statusstring
unavailable
yes
errorstring
dataset_unavailable
yes
originsOriginT[]no
licensesWordLicenseT[]no
descriptionstring | nullno
datasetstringyes
titlestringno
activebooleanyes
sourcestringyes
dataset_versionstring | nullyes
licensestringyes
license_urlstringyes
attributionstringyes
attribution_urlstring | nullyes
noticestringyes
license_textstringyes

PublicSearchDatasetV1T

NameTypeRequiredDescription

PublicSearchDatasetsV1ResT

NameTypeRequiredDescription
dataPublicSearchDatasetV1T[]yes
metaobjectyes

PublicSemanticMatchV1T

A matching existing sense, with cosine similarity (not a confidence probability).

NameTypeRequiredDescription
wordPublicSearchWordV1Tyes
meaningobjectyes
scorenumberyesCosine similarity from -1 to 1; no calibrated no-answer threshold.

PublicSemanticSearchV1ResT

NameTypeRequiredDescription
dataPublicSemanticMatchV1T[]yes
metaobjectyes

PublicSemanticStatusV1ResT

NameTypeRequiredDescription
dataobjectyes