FreeWord Intelligence API
Resolve word
GET/words/resolveNo key
Turns what a caller typed into the catalog word it names, or up to five candidates.
Tries the spelling as typed, its lowercase, accents stripped, spaces and hyphens removed, one inflection suffix stripped, then the lookalike spelling. A miss answers 200 with candidates (words starting with the query), never 404. Words with a deny class are never a match nor a candidate.
AccessNo key. Limited per address; a key adds the paid fields.
BillingOne call.
FormatsJSON
Request
qstringRequiredQueryWhat the caller typed, 1 to 255 characters.
fieldsstringOptionalQueryComma-separated top-level keys to keep; an unknown key answers 400 unsupported_field.
curl -X GET "https://api.unique.domains/v1/words/resolve?q=harbors"
const response = await fetch("https://api.unique.domains/v1/words/resolve?q=harbors", {
method: "GET",
});
const data = await response.json();
console.log(data);import requests
response = requests.get(
"https://api.unique.domains/v1/words/resolve?q=harbors",
)
print(response.json())req, err := http.NewRequest("GET", "https://api.unique.domains/v1/words/resolve?q=harbors", nil)
if err != nil {
panic(err)
}
res, err := http.DefaultClient.Do(req)$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => "https://api.unique.domains/v1/words/resolve?q=harbors",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($ch);uri = URI("https://api.unique.domains/v1/words/resolve?q=harbors")
request = Net::HTTP::Get.new(uri)
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(request) }Response
matchobjectcandidatesobject[]Errors
{
"data": {
"match": {
"id": "wrd_48213",
"slug": "harbor",
"word": "harbor",
"shape": "single",
"origin": "dictionary",
"via": "inflected"
}
},
"meta": {
"asOf": "2026-11-05T08:00:00Z",
"cursor": null,
"limit": null
},
"links": {
"self": "https://api.unique.domains/v1/words/resolve?q=harbors",
"next": null,
"register": null,
"product": null,
"dataset": null
}
}