Plainly API
Plain-English word definitions, over HTTP. No accounts — just a key and a word.
Get a key
Instant, no email, no signup. Keys are capped at 3 new keys per IP per day, so don't lose it.
curl -X POST https://jxbepiilqzaggiuzqmrp.functions.supabase.co/api-key-request
{
"apiKey": "8a233d21a25fff35bf268196c6e00655",
"dailyLimit": 100,
"note": "Keep this key — there's no account or email tied to it, so it can't be recovered if lost."
}
There's no recovery flow for a lost key — that's a deliberate trade for staying accountless. Requesting a new one is free, just subject to the same daily cap on new keys.
Look up a word
GET https://jxbepiilqzaggiuzqmrp.functions.supabase.co/api-define?word=ubiquitous
Pass your key as a header (preferred) or a query param:
curl "https://jxbepiilqzaggiuzqmrp.functions.supabase.co/api-define?word=ubiquitous" \
-H "x-api-key: YOUR_KEY"
Parameters
| Name | Where | Required | Description |
|---|---|---|---|
word | query | yes | the word to define |
sense | query | no | which meaning of the word, 0-based (default 0). Words can have several — try bark with sense=1 |
x-api-key | header | yes* | your API key |
key | query | yes* | alternative to the header, if a header is awkward for your client |
* one of the two key methods is required
Response
{
"word": "ubiquitous",
"partOfSpeech": "adjective",
"phonetic": "/juːˈbɪkwɪtəs/",
"definition": "something that seems to be everywhere you look.",
"example": "Smartphones have become ubiquitous in daily life.",
"exampleSource": "dictionary",
"note": null,
"confusedWith": [],
"senseIndex": 0,
"senseCount": 1
}
| Field | Description |
|---|---|
definition | the plain-English rewrite — this is the whole point |
example | one natural sentence using the word |
exampleSource | "dictionary" if adapted from a real dictionary example, "generated" if written fresh because the source had none |
note | only present when the original dictionary definition itself used another genuinely hard word to explain this one |
confusedWith | an array of well-known confusable words (e.g. affect/effect), each with a one-line distinction. Usually empty — most words don't have one |
senseCount | how many total meanings this word has (capped at 4) |
Rate limits
Every response includes your current standing:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 97
Self-serve keys get 100 requests/day. Repeat lookups for the same word (and sense) are cached, so they don't count against Mistral usage — they're still fast either way.
Errors
| Status | Meaning |
|---|---|
| 400 | missing the word parameter |
| 401 | missing or invalid API key |
| 404 | no dictionary entry found for that word |
| 429 | daily rate limit reached — resets at midnight UTC |
| 502 | the dictionary or simplification step failed upstream — safe to retry |
A note on reliability
This is a small personal project, not a commercial product — there's no uptime guarantee or support SLA. It's free to use within the rate limits above. If you're building something that depends on it heavily, keep a fallback in mind.