words

A word-of-the-day API for word games.

Get a word

GET /?{mode}&{filters}

Selection mode (one required):

Param Description
?day Today's word (deterministic, same for everyone). Accepts a negative integer offset for past days: ?day=-1 for yesterday, ?day=-7 for a week ago, etc. Future days (positive offsets) are rejected.
?random Random word
?seed=X Seeded random (deterministic for a given seed)
?seed=X&day Seeded daily word (different seeds = different daily words)

Filters (optional):

Param Description
?theme=animal Filter by theme (use + for multiple: animal+plant). Defaults to all themes except nonsense.
?length=5 Exact letter count (3–12)
?minlength=3 Minimum letter count (3–12)
?maxlength=6 Maximum letter count (3–12)
?difficulty=2 Filter by difficulty (1–5, or range: 1-3)
?syllables=2 Filter by syllable count (or range: 1-3)
?etymology=latin Filter by root language (case-insensitive)

Response fields:

Field Description
word The selected word
day Day of the year (1–366). Present for ?day and ?seed=X&day modes only.
epoch_day Days since 2025-01-01 (stable counter used for selection). Present for ?day and ?seed=X&day modes only.
pool Number of candidate words matching the filters

Extras (optional, comma-separated or all):

Param Description
?extra=taxonomy Biological taxonomy (animal/plant)
?extra=definition Short dictionary definition
?extra=etymology Root language
?extra=ipa IPA pronunciation
?extra=syllables Syllable count
?extra=pos Part of speech
?extra=difficulty Difficulty rating (1–5)
?extra=all All of the above

Examples:

GET /?day&theme=general&length=5&difficulty=1-2
{"word":"about","day":93,"epoch_day":458,"pool":232}

GET /?day&theme=general&length=5&extra=all
{"word":"abide","day":93,"epoch_day":458,"pool":374,"definition":"to accept or tolerate","etymology":"Old English","ipa":"əˈbaɪd","syllables":2,"pos":"verb","difficulty":2}

GET /?day&theme=animal&maxlength=6
{"word":"crane","day":93,"epoch_day":458,"pool":312}

GET /?seed=myapp&day&theme=plant&extra=taxonomy
{"word":"daisy","day":93,"epoch_day":458,"pool":44,"taxonomy":["Plantae","Tracheophyta","Magnoliopsida","Asterales","Asteraceae","Bellis"]}

GET /?random&theme=animal&length=5
{"word":"eagle","pool":62}

GET /?seed=level-42&theme=general&length=5
{"word":"stern","pool":374}

Dictionary

GET /dictionary[?starts_with=a]

Returns all known English words as a JSON array of strings, sorted alphabetically. Intended for client-side word validation (e.g. checking if a guess is a real word).

Param Description
?starts_with=z Filter to words beginning with this prefix (case-insensitive)
GET /dictionary?starts_with=zz
["zzz"]

GET /dictionary?starts_with=cat
["cat","catachresis","cataclasm","cataclysm",...]

Look up a word

GET /lookup/{word}[?filters&extra=all]

Check if a word exists, which themes it belongs to, and get its metadata. Accepts the same filters as the main endpoint — returns 404 if the word is not in the filtered pool.

GET /lookup/eagle?extra=all
{"themes":["animal"],"definition":"a large bird of prey","etymology":"Old English","ipa":"ˈiː.ɡəl","syllables":2,"pos":"noun","difficulty":2,"taxonomy":["Animalia","Chordata","Aves","Accipitriformes","Accipitridae"]}

GET /lookup/eagle?theme=animal&length=5
{"themes":["animal"]}

GET /lookup/eagle?theme=plant
404 {"error":"word 'eagle' not in filtered pool"}

List words

GET /list[?theme=animal&length=5&difficulty=1-2]

Returns all words matching the given filters as a JSON array. Accepts the same filters as the main endpoint.

GET /list?theme=animal&length=5
["adder","bison","camel","cobra","crane","eagle","finch","gecko","goose",...]

List themes

GET /themes

Returns available themes with word counts and available lengths.

GET /themes
[{"theme":"general","count":3808,"lengths":[3,4,5,6,7,8,9,10,11,12]},...]

Themes

When no ?theme is specified, all themes except nonsense are included.

Theme Description
general Common English words
animal Animals (with taxonomy data)
plant Plants (with taxonomy data)
food Foods and ingredients
colour Colour names
place Geographic/landscape words
body Body parts
nonsense Convincing fake words (excluded from default pool)

Word curation

All words avoid regional spelling variants (no colour/color ambiguity) and are sourced from OED and Merriam-Webster definitions. The nonsense theme contains plausible-sounding words that do not exist in any dictionary.

A pool warning header (Warning: 299) is returned when the filtered candidate pool has fewer than 365 words, indicating that words will repeat within a year.