Developer API
The Word Index offers a free, versioned JSON API over its compiled lexicon: constrained word search, definitions, rhyme families, anagrams, and random words. No key is required, and every response names the exact data version it was computed from. Definitions are the exception to full coverage: the compiled glosses are machine-generated, so only editorially reviewed words return one.
Quickstart
No signup, no key. One GET request:
curl "https://thewordindex.com/api/v1/query?pattern=c_t"
Response (abridged):
{
"data": {
"words": [{"word": "cat", "length": 3, "tier": 1, "syllables": 1}],
"total": 1,
"returned": 1,
"offset": 0,
"has_more": false
},
"meta": {
"api_version": "v1",
"source": "The Word Index compiled lexicon (source-bounded membership facts)",
"data_version": "…",
"build_id": "…",
"attribution": "…",
"docs_url": "…/developers",
"terms_url": "…/terms"
}
}
Base URL and versioning
All endpoints live under
https://thewordindex.com/api/v1/. The v1
path segment is a compatibility promise: fields documented here are
not renamed or removed within v1; new optional fields may be added.
Breaking changes would ship as /api/v2/ with v1 kept
running through a documented sunset window.
Results come from one compiled, versioned lexicon release.
meta.data_version and meta.build_id
identify it exactly; the source catalogue at
/about/data records every source
artifact, licence state, and limitation. Commonness
tier values (1–5) are build-specific ranking bands for
that release, not universal usage claims, and membership never
implies validity in any specific word game.
By default all endpoints exclude spellings on the release's
offensive-word list; pass safe=false to include them.
Endpoints
GET /api/v1/query
Ranked matches for one constrained search
At least one constraint parameter is required.
| Parameter | Type | Meaning |
|---|---|---|
pattern | string | Positional pattern; _ is an unknown letter (for example c_t). |
letters | string | Letters the word must include (repeat a letter to require it twice). |
length, min_length, max_length | int 1–45 | Exact or bounded word length. |
prefix, suffix, contains | string | Required start, end, or in-order substring. |
max_tier | int 1–5 (default 5) | Restrict to build-specific commonness bands 1..max_tier. |
limit | int 1–100 (default 25) | Page size. |
offset | int 0–1000 | Page start. |
safe | bool (default true) | Exclude offensive-list spellings. |
curl "https://thewordindex.com/api/v1/query?letters=aeg&length=7&max_tier=3"
GET /api/v1/define
Published, human-reviewed glosses for one spelling
Published definition glosses for one spelling. This is not a universal dictionary, and coverage is deliberately narrow: the glosses compiled into the release are machine-generated, and we do not serve them until a human editor has reviewed that word for the exact release you are querying.
An empty definitions list therefore means either that
the release compiled no gloss for the spelling or that its gloss is
not published yet — never that the spelling has no meaning. The
response carries a note field whenever the list is
empty, and the record itself (word, length, tier, syllables) is
still returned with status 200.
{
"data": {
"word": "listen",
"length": 6,
"tier": 1,
"syllables": 2,
"definitions": [],
"note": "No definition is published for this spelling. …"
},
"meta": {…}
}
| Parameter | Type | Meaning |
|---|---|---|
word | string (required) | 1–45 letters a–z. |
safe | bool (default true) | Offensive-list spellings return 404 while true. |
curl "https://thewordindex.com/api/v1/define?word=listen"
GET /api/v1/rhymes
Perfect, near, and vowel rhyme families
Three rhyme families for one word — perfect,
near (a limited coda comparison), and
vowel — computed from retained CMUdict-derived
pronunciation variants. Words without a retained pronunciation
return empty families and a null rhyme_key.
| Parameter | Type | Meaning |
|---|---|---|
word | string (required) | 1–45 letters a–z. |
max_tier | int 1–5 (default 5) | Commonness band cap. |
limit | int 1–100 (default 25) | Per-family result cap. |
safe | bool (default true) | Exclude offensive-list spellings. |
curl "https://thewordindex.com/api/v1/rhymes?word=light&limit=10"
GET /api/v1/anagrams
Exact letter-multiset matches
Words that use exactly the submitted letter multiset. The submitted spelling itself is excluded from results.
| Parameter | Type | Meaning |
|---|---|---|
letters | string (required) | 1–45 letters a–z. |
max_tier | int 1–5 (default 5) | Commonness band cap. |
limit | int 1–100 (default 25) | Result cap. |
safe | bool (default true) | Exclude offensive-list spellings. |
curl "https://thewordindex.com/api/v1/anagrams?letters=listen"
GET /api/v1/random
Uniform samples from a constrained pool
A uniform random sample from the pool of words matching the
constraints. Each request is independently random (this is not a
word-of-the-day endpoint). matching_count reports how
many words matched in total.
| Parameter | Type | Meaning |
|---|---|---|
length, min_length, max_length | int 1–45 | Exact or bounded word length. |
prefix | string | Required starting letters. |
count | int 1–20 (default 5) | Words per response. |
max_tier | int 1–5 (default 3) | Commonness band cap. |
safe | bool (default true) | Exclude offensive-list spellings. |
curl "https://thewordindex.com/api/v1/random?length=6&count=3"
Response envelope
Every successful response is {"data": …, "meta": …}.
The meta block is identical across endpoints:
| Field | Meaning |
|---|---|
api_version | Always "v1" for this surface. |
source | What the data is: compiled, source-bounded membership facts. |
data_version / build_id | The exact lexicon release the response was computed from. |
attribution | The attribution line we ask you to keep with republished results. |
docs_url / terms_url | This page and the site terms. |
Word records are the same everywhere:
{"word", "length", "tier", "syllables"}.
syllables is null when the release retains no
pronunciation for the word. tier is a build-specific
commonness band (1 = most commonly observed in the pinned frequency
artifact), documented at /about/data.
Errors
Errors use one envelope, always served with
Cache-Control: no-store:
{
"error": {"code": "invalid_parameter", "message": "…", "status": 400},
"meta": {"api_version": "v1", "docs_url": "…/developers"}
}
| Status | Code | Meaning |
|---|---|---|
| 400 | missing_parameter | A required parameter (or any constraint) was not supplied. |
| 400 | invalid_parameter | A parameter failed validation; the message names it. |
| 404 | not_found | The spelling is not available in this lexicon release. |
| 429 | rate_limited | Token bucket exhausted; honour Retry-After. |
| 503 | engine_busy | All shared engine execution slots are in use; honour Retry-After. |
Requests with undeclared query parameter names terminate with a plain 404 before reaching the API (part of this site's URL contract), so check parameter spelling first when debugging.
Rate limits and fair use
Per-IP token bucket: sustained 5 requests/second with a burst of 20, shared across all v1 endpoints. That is deliberately generous for interactive applications; if you need sustained bulk throughput, please contact us instead of distributing load across IPs.
- Cache responses on your side where you can; results are stable within one
data_version. - Identify your application with a descriptive
User-Agent. - Do not use the API to reconstruct and redistribute the full compiled lexicon; source licence review for bulk redistribution is not complete (see /about/data).
- No SLA is offered; the API serves the same infrastructure as the site.
CORS and caching
All v1 GET responses include
Access-Control-Allow-Origin: *, so browser clients on
any origin can call the API directly with fetch. Only
simple GET requests are supported — no preflighted methods, no
credentials, no custom request headers required.
Successful responses are publicly cacheable for a short window
(Cache-Control: public, max-age=60); error responses
are never stored. The X-Data-Version response header
mirrors meta.data_version.
Attribution
The API is free without a key. In return we ask that public
applications showing our data include the
meta.attribution line, or a link back to
The Word Index, near the displayed results. The
underlying source artifacts, their licences, and their current
legal review states are catalogued at
/about/data — please do not present
membership in this lexicon as proof of universal English usage or
of validity in any specific word game.
Try it