Bygg med Wordly API.
Använd en API-nyckel på serversidan, gör HTTPS-förfrågningar och spåra varje samtal genom en förutsägbar kreditbaserad faktureringsmodell. Denna referens dokumenterar de ändpunkter som för närvarande är tillgängliga i produktionen och markerar tydligt ändpunkter som fortfarande håller på att förberedas.
Snabbstart
Skapa ett gratis konto, verifiera din e-post med den sexsiffriga koden och kopiera API-nyckeln som visas en gång i din utvecklarpanel.
- 1Skapa ett konto
Registrera dig med endast en e-postadress och lösenord.
- 2Verifiera din e-post
Ange koden skickad av
[email protected]. Verification grants 50 free credits. - 3Lagra din API-nyckel
Kopiera det genererade
wly_live_...nyckel och behåll den i en miljövariabel på serversidan. - 4Gör en testförfrågan
Ring kontoslutpunkten för att verifiera autentiseringen och se det återstående saldot.
curl "https://api.wordlyenglish.com/v1/account" \
-H "Authorization: Bearer $WORDLY_API_KEY" \
-H "Accept: application/json"{
"data": {
"message": "Authenticated",
"credits_remaining": 50
},
"meta": { "lang": "en" }
}Bas-URL och versionshantering
Alla produktionsslutpunkter betjänas från följande versionsbaserade bas-URL:
https://api.wordlyenglish.com/v1Brytande svar eller beteendeförändringar kommer att använda en ny sökvägsversion. Additiva fält kan införas inom v1, so clients should ignore response properties they do not recognize.
Autentisering
Autentiserade slutpunkter kräver en API-nyckel i HTTP Authorization header med hjälp av bärarschemat.
Authorization: Bearer wly_live_your_api_keyPlacera aldrig en livenyckel i webbläsarens JavaScript, offentliga Git-arkiv, skärmdumpar, loggar eller en distribuerad mobilapplikation. Ring Wordly API från din backend och låt din egen applikation kommunicera med den backend.
Lokaliserade API-meddelanden
Ställ in svarsspråket med ?lang=tr eller standarden Accept-Language sidhuvud. Frågeparametrar har företräde. Varje JSON-svar deklarerar den valda lokalen i Content-Language och meta.lang. Error codes remain stable in English for programmatic handling; only the human-readable message is localized.
curl "https://api.wordlyenglish.com/v1/account?lang=tr" \
-H "Authorization: Bearer $WORDLY_API_KEY" \
-H "Accept-Language: tr-TR"Språkkoder som stöds: en, tr, de, fr, es, it, pt, nl, pl, ru, uk, ar, fa, he, hi, bn, ur, zh, ja, ko, id, ms, vi, th, sv, no, da, fi, cs, ro.
Krediter och fakturering
Each successful metered request consumes the documented number of credits. Email-verified accounts receive 50 free credits once. Credits are deducted atomically, so concurrent requests cannot spend the same balance twice. Balance lookup through GET /v1/account is free.
| Operation | Kreditkostnad | Tillgänglighet |
|---|---|---|
GET /v1/status | 0 | Live |
GET /v1/account | 0 | Live |
GET /v1/words/{word} | 1–5 | Live |
GET /v1/words/search | 1 | Live |
GET /v1/words/random | 1 per word | Live |
POST /v1/words/batch | Baserat på returnerade poster | Live |
Use GET /v1/account when you need the current balance. Other endpoint responses include the operation charge but omit the remaining balance. When the balance is insufficient, the API returns HTTP 402 och bearbetar inte operationen.
{
"error": {
"code": "credits_exhausted",
"message": "Your credit balance is exhausted. Add a package or enable pay-as-you-go to continue.",
"upgrade_url": "/app.php?page=billing"
}
}API key lifecycle
Skapa separata nycklar för utveckling, iscensättning och produktion. Wordly lagrar endast en kryptografisk hash för varje nyckel; hela värdet visas en gång vid skapandet.
- Namnge nycklar efter miljö eller tjänst.
- Använd miljövariabler eller en hanterad hemlig butik.
- Återkalla en nyckel omedelbart om den kan ha blivit utsatt.
- Rotera nycklar utan att återanvända gamla värden.
- Skicka inte nycklar i frågesträngar.
Svarsformat
Framgångsrika svar använder en toppnivå data objekt och kan innefatta en meta objekt. Fel använder alltid en toppnivå error objekt med en stabil maskinläsbar code och en läsbar för människor message.
{
"data": { ... },
"meta": {
"credits_used": 1,
"request_id": "..."
}
}{
"error": {
"code": "invalid_api_key",
"message": "..."
}
}Behåll request_id när du kontaktar support om en lyckad faktureringsförfrågan. JSON är UTF-8-kodad och klienter bör skicka Accept: application/json.
Wordly caches shared vocabulary data on the server, never API keys, account identities, balances, rate-limit state, or request identifiers. Public status and language responses advertise shared-cache lifetimes. Authenticated responses remain private, no-store; applications may cache the stable data value in their own trusted backend when appropriate.
Produktionsslutpunkter
/v1/statusLiveReturnerar information om public service-tillstånd och API-version. Denna slutpunkt kräver ingen autentisering och kostar noll krediter.
Exempelbegäran
curl "https://api.wordlyenglish.com/v1/status" \
-H "Accept: application/json"200 · Success
{
"data": { "status": "ok", "version": "v1" },
"meta": { "lang": "en" }
}/v1/accountLive · 0 creditsValidates the supplied key and returns the current account balance without charging a credit.
Rubriker
| Namn | Obligatoriskt | Beskrivning |
|---|---|---|
Authorization | Ja | Bearer wly_live_... |
Accept | Rekommenderas | application/json |
Svarsrubriker
X-Credits-Remaining is returned only by this balance endpoint.
200 · Success
{
"data": { "message": "Authenticated", "credits_remaining": 1250 },
"meta": { "lang": "en" }
}Ordförrådens slutpunkter
Varje rekord rapporterar sin completeness som catalog, translated, or enriched. Fields that are not available are returned as null eller ett tomt objekt istället för påhittad data.
GET /v1/words/{word}
Returnerar en exakt ordmatchning. Använd languages=tr,de,fr för att endast returnera begärda översättningar. Katalog eller översatta poster kostar 1 poäng; helt berikade profiler kostar 5 poäng.
curl "https://api.wordlyenglish.com/v1/words/water?languages=tr,de" \
-H "Authorization: Bearer $WORDLY_API_KEY"GET /v1/words/search
Sök med q och valfritt level, part_of_speech, category, limit, and cursor. Limits range from 1 to 50. Pass meta.next_cursor till nästa begäran.
curl "https://api.wordlyenglish.com/v1/words/search?q=app&level=advanced&limit=20" \
-H "Authorization: Bearer $WORDLY_API_KEY"GET /v1/words/random
Returnerar 1–20 slumpmässiga ord. Filtrera efter level, part_of_speech, or category. Each returned slot costs one credit.
POST /v1/words/batch
Slår upp mellan 1 och 50 unika ord i en enda begäran. Svaret bevarar beställningsordningen och markerar varje artikel med found.
curl -X POST "https://api.wordlyenglish.com/v1/words/batch?lang=tr" \
-H "Authorization: Bearer $WORDLY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"words":["water","opportunity"],"languages":["tr","de"]}'GET /v1/languages
Returnerar alla 30 gränssnitt och API-meddelanden som stöds. Ordförrådsöversättningar returneras endast när de är tillgängliga. Denna slutpunkt är offentlig och kostar noll poäng.
Prisgräns
Varje API-nyckel är begränsad till 120 accepterade förfrågningar per rullande minut. Svaren inkluderar X-RateLimit-Limit och X-RateLimit-Remaining. A 429 rate_limit_exceeded svar inkluderar Retry-After: 60.
/v1/languagesLive · 0 creditsLists all supported interface and API-message locales. Vocabulary translations are returned only when a record contains them.
Query parameters
| Namn | Type | Obligatoriskt | Rules | Beskrivning |
|---|---|---|---|---|
lang | string | No | Supported locale code | Language for human-readable messages. |
Exempelbegäran
curl "https://api.wordlyenglish.com/v1/languages?lang=tr"200 · Success
{
"data": [{
"code": "tr",
"name": "Türkçe",
"message_localization": true,
"vocabulary_translation": "when_available"
}],
"meta": { "count": 30, "lang": "tr" }
}/v1/words/{word}Live · 1–5 creditsReturns one exact vocabulary record. Catalog and translated records cost 1 credit; enriched records cost 5 credits.
Parameters
| Namn | Location | Type | Obligatoriskt | Rules and meaning |
|---|---|---|---|---|
word | Path | string | Ja | Exact word or slug; maximum 120 characters. URL-encode special characters. |
languages | Query | string | No | Comma-separated translation codes, for example tr,de,fr. |
lang | Query | string | No | Human-readable message language; not a vocabulary filter. |
Exempelbegäran
curl "https://api.wordlyenglish.com/v1/words/water?languages=tr,de" \
-H "Authorization: Bearer $WORDLY_API_KEY" \
-H "Accept: application/json"200 · Success
{
"data": {
"id": "water",
"word": "water",
"part_of_speech": "noun",
"level": "basic",
"definition": "A clear liquid essential for life.",
"example": "Please drink enough water every day.",
"translations": { "tr": "su", "de": "Wasser" },
"categories": ["nature", "daily-life"],
"media": {
"image_url": "https://media.example/water.webp",
"audio_url": "https://media.example/water.mp3",
"attribution": {}
},
"completeness": "enriched"
},
"meta": {
"credits_used": 5,
"request_id": "5ebac760-cdc5-4a73-a87b-22463d81483c",
"lang": "en"
}
}404 · Word unavailable
{
"error": { "code": "word_not_found", "message": "The requested word was not found." },
"meta": { "lang": "en" }
}/v1/words/searchLive · 1 poängSearches active vocabulary in alphabetical order. Use the returned cursor for stable forward pagination.
Query parameters
| Namn | Type | Obligatoriskt | Default / limit | Beskrivning |
|---|---|---|---|---|
q | string | No | Max 120 chars | Case-insensitive contained text. |
level | string | No | Max 30 chars | Exact level filter. |
part_of_speech / pos | string | No | Max 40 chars | Exact grammatical-class filter. |
category | string | No | Max 80 chars | Category-array filter. |
limit | integer | No | 20; min 1, max 50 | Maximum returned records. |
cursor | string | No | Max 120 chars | Previous meta.next_cursor. |
languages | string | No | Comma-separated | Translations to include. |
Exempelbegäran
curl "https://api.wordlyenglish.com/v1/words/search?q=app&level=advanced&languages=tr&limit=2" \
-H "Authorization: Bearer $WORDLY_API_KEY"200 · Success
{
"data": [{
"id": "application",
"word": "application",
"part_of_speech": "noun",
"level": "advanced",
"definition": null,
"example": null,
"translations": { "tr": "uygulama" },
"categories": [],
"media": { "image_url": null, "audio_url": null, "attribution": {} },
"completeness": "translated"
}],
"meta": { "credits_used": 1, "request_id": "...", "lang": "en", "count": 1, "next_cursor": null }
}/v1/words/randomLive · 1 credit per requested slotReturns random active words for quizzes, discovery feeds, and practice sessions.
Query parameters
| Namn | Type | Obligatoriskt | Default / limit | Beskrivning |
|---|---|---|---|---|
count | integer | No | 1; min 1, max 20 | Requested slots and credit cost. |
level | string | No | Exact value | Level filter. |
part_of_speech / pos | string | No | Exact value | Grammatical-class filter. |
category | string | No | Exact value | Category filter. |
languages | string | No | Comma-separated | Translations to include. |
Exempelbegäran
curl "https://api.wordlyenglish.com/v1/words/random?count=3&level=basic&languages=tr" \
-H "Authorization: Bearer $WORDLY_API_KEY"200 · Success
{
"data": [{ "id": "water", "word": "water", "part_of_speech": "noun", "level": "basic", "definition": null, "example": null, "translations": { "tr": "su" }, "categories": [], "media": { "image_url": null, "audio_url": null, "attribution": {} }, "completeness": "translated" }],
"meta": { "credits_used": 3, "request_id": "...", "lang": "en", "count": 1 }
}/v1/words/batchLive · calculatedLooks up 1–50 unique words while preserving request order. Each enriched result costs 5 credits, another found result costs 1, and the minimum request charge is 1.
Rubriker
| Namn | Obligatoriskt | Value |
|---|---|---|
Authorization | Ja | Bearer wly_live_... |
Content-Type | Ja | application/json |
Accept | Rekommenderas | application/json |
JSON body
| Field | Type | Obligatoriskt | Rules | Beskrivning |
|---|---|---|---|---|
words | string[] | Ja | 1–50 items; each max 120 chars | Words to resolve; duplicates are normalized and removed. |
languages | string[] | No | Supported locale codes | Translations to include. |
Exempelbegäran
curl -X POST "https://api.wordlyenglish.com/v1/words/batch?lang=tr" \
-H "Authorization: Bearer $WORDLY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"words":["water","not-a-word"],"languages":["tr","de"]}'200 · Success
{
"data": [
{ "query": "water", "found": true, "word": { "id": "water", "word": "water", "part_of_speech": "noun", "level": "basic", "definition": null, "example": null, "translations": { "tr": "su", "de": "Wasser" }, "categories": [], "media": { "image_url": null, "audio_url": null, "attribution": {} }, "completeness": "translated" } },
{ "query": "not-a-word", "found": false, "word": null }
],
"meta": { "credits_used": 1, "request_id": "...", "lang": "tr", "count": 2 }
}422 · Invalid body
{
"error": { "code": "invalid_request", "message": "Provide between 1 and 50 words." },
"meta": { "lang": "en" }
}Response field reference
Every stable response variable is described below. Additive fields may appear later, so clients should ignore fields they do not recognize.
Vocabulary object
| Field | Type | Nullable | Beskrivning |
|---|---|---|---|
id | string | No | Stable URL-safe slug. |
word | string | No | Canonical English word. |
part_of_speech | string | Ja | Grammatical class. |
level | string | Ja | Learning difficulty or catalog level. |
definition | string | Ja | Concise English definition. |
example | string | Ja | Natural example sentence. |
phonetic | string | Ja | Pronunciation transcription when available. |
translations | object<string,string> | No | Locale codes mapped to translations; may be empty. |
synonyms | string[] | No | Available synonyms. |
antonyms | string[] | No | Available antonyms. |
categories | string[] | No | Learning or semantic categories. |
media.image_url | URL string | Ja | Learning image URL. |
media.audio_url | URL string | Ja | Pronunciation audio URL. |
media.attribution | object | No | Required media attribution metadata. |
completeness | enum | No | catalog, translated, or enriched. |
Meta object
| Field | Type | When present | Beskrivning |
|---|---|---|---|
credits_used | integer | Metered responses | Credits charged by this request. |
request_id | UUID string | Metered success | Support and billing trace ID. |
lang | string | Always | Selected message locale. |
count | integer | List responses | Number of response items. |
next_cursor | string or null | Search | Next page cursor; null means final page. |
Error object
| Field | Type | Beskrivning |
|---|---|---|
error.code | string | Stable machine-readable code. |
error.message | string | Localized human-readable explanation. |
error.upgrade_url | string | Relative billing URL on a 402 result. |
meta.lang | string | Error-message locale. |
Fel
| HTTP | Kod | Mening | Klientåtgärd |
|---|---|---|---|
| 401 | invalid_api_key | Nyckel saknas, är felaktig, återkallad eller inaktiv. | Kontrollera bärarhuvudet eller byt ut nyckeln. |
| 402 | credits_exhausted | Kontot saknar krediter för operationen. | Stoppa försök och hänvisa kunden till fakturering. |
| 404 | not_found | Den begärda slutpunkten är inte tillgänglig. | Kontrollera sökvägen och API-versionen. |
| 404 | word_not_found | Den begärda vokabulärposten är inte tillgänglig. | Kontrollera stavningen eller använd sökning. |
| 422 | invalid_request | En parameter eller batchtext är ogiltig. | Korrigera begäran innan du försöker igen. |
| 405 | method_not_allowed | The endpoint does not accept the HTTP method. | Use the documented GET or POST method. |
| 413 | payload_too_large | The JSON request body exceeds 64 KB. | Reduce the batch body. |
| 415 | unsupported_media_type | The batch request is not JSON. | Send Content-Type: application/json. |
| 429 | rate_limit_exceeded | API-nyckeln överskred 120 förfrågningar per minut. | Wait for Retry-After. |
| 5xx | server_error | Ett oväntat fel på serversidan. | Försök igen med backoff; kontakta supporten om det är ihållande. |
Rekommenderad policy för ett nytt försök
Försök inte igen 401, 402, or 404 automatiskt. För övergående 5xx svar, använd exponentiell backoff med jitter och ett strikt tak för försök igen. Skapa aldrig en obegränsad återförsöksslinga eftersom varje godkänd autentiserad begäran kan förbruka krediter.
JavaScript / Node.js
const response = await fetch('https://api.wordlyenglish.com/v1/account', {
headers: {
Authorization: `Bearer ${process.env.WORDLY_API_KEY}`,
Accept: 'application/json'
}
});
const body = await response.json();
if (!response.ok) {
throw new Error(`${body.error.code}: ${body.error.message}`);
}
console.log(body.data.credits_remaining);Python
import os
import requests
response = requests.get(
'https://api.wordlyenglish.com/v1/account',
headers={
'Authorization': f'Bearer {os.environ["WORDLY_API_KEY"]}',
'Accept': 'application/json',
},
timeout=15,
)
response.raise_for_status()
print(response.json()['data']['credits_remaining'])PHP
$curl = curl_init('https://api.wordlyenglish.com/v1/account');
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('WORDLY_API_KEY'),
'Accept: application/json',
],
]);
$body = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_RESPONSE_CODE);
curl_close($curl);
if ($status >= 400) {
throw new RuntimeException('Wordly API request failed');
}
$data = json_decode($body, true, flags: JSON_THROW_ON_ERROR);Dart / Flutter
Skicka inte Wordly-nyckeln i en Flutter-applikation. Exemplet hör hemma i en pålitlig Dart-backend eller serverfunktion.
final response = await http.get(
Uri.parse('https://api.wordlyenglish.com/v1/account'),
headers: {
'Authorization': 'Bearer ${Platform.environment['WORDLY_API_KEY']}',
'Accept': 'application/json',
},
);
final body = jsonDecode(response.body) as Map<String, dynamic>;
if (response.statusCode >= 400) {
throw Exception((body['error'] as Map)['code']);
}Produktionschecklista
- Proxy Wordly-förfrågningar via en pålitlig backend.
- Ställ in anslutnings- och svarstidsgränser.
- Handtag
401,402,404, and5xxseparat. - Query
GET /v1/accountwhen your application needs the current balance. - Logga slutpunkt, status, latens och
request_idutan att logga API-nyckeln. - Använd separata nycklar per miljö och rotera dem med jämna mellanrum.
- Cache stable vocabulary responses in your backend when appropriate.
Är du redo att göra din första förfrågan?
Skapa ett konto, verifiera din e-post och få 50 gratis krediter.
Behöver du integrationshjälp? E-post [email protected].