Byg med Wordly API.
Brug en API-nøgle på serversiden, lav HTTPS-anmodninger, og spor hvert opkald gennem en forudsigelig kreditbaseret faktureringsmodel. Denne reference dokumenterer de endepunkter, der i øjeblikket er tilgængelige i produktionen og markerer tydeligt endepunkter, der stadig er under udarbejdelse.
Quickstart
Opret en gratis konto, bekræft din e-mail ved hjælp af den sekscifrede kode, og kopier API-nøglen, der vises én gang i dit udvikler-dashboard.
- 1Opret en konto
Tilmeld dig kun med en e-mailadresse og adgangskode.
- 2Bekræft din e-mail
Indtast koden sendt af
[email protected]. Verification grants 50 free credits. - 3Gem din API-nøgle
Kopier den genererede
wly_live_...nøgle og hold den i en miljøvariabel på serversiden. - 4Lav en testanmodning
Ring til kontoslutpunktet for at bekræfte godkendelsen og se den resterende saldo.
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" }
}Basis URL og versionering
Alle produktionsendepunkter betjenes fra følgende versionerede basis-URL:
https://api.wordlyenglish.com/v1Brydende svar eller adfærdsændringer vil bruge en ny stiversion. Additive felter kan indføres inden for v1, so clients should ignore response properties they do not recognize.
Autentificering
Godkendte slutpunkter kræver en API-nøgle i HTTP Authorization header ved hjælp af Bærer-skemaet.
Authorization: Bearer wly_live_your_api_keyPlacer aldrig en live-nøgle i browserens JavaScript, offentlige Git-lagre, skærmbilleder, logfiler eller en distribueret mobilapplikation. Kald Wordly API fra din backend og lad din egen applikation kommunikere med den backend.
Lokaliserede API-meddelelser
Indstil svarsproget med ?lang=tr eller standarden Accept-Language overskrift. Forespørgselsparametre har forrang. Hvert JSON-svar erklærer den valgte lokalitet i Content-Language og 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"Understøttede sprogkoder: 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.
Kreditering og 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.
| Betjening | Kreditomkostninger | Tilgængelighed |
|---|---|---|
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 | Baseret på returnerede optegnelser | 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 og behandler ikke 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
Opret separate nøgler til udvikling, iscenesættelse og produktion. Wordly gemmer kun en kryptografisk hash af hver nøgle; den fulde værdi vises én gang ved oprettelsen.
- Navngiv nøgler efter miljø eller tjeneste.
- Brug miljøvariabler eller en administreret hemmelig butik.
- Tilbagekald straks en nøgle, hvis den kan være blevet blotlagt.
- Roter nøgler uden at genbruge gamle værdier.
- Send ikke nøgler i forespørgselsstrenge.
Svarformat
Succesfulde svar bruger et topniveau data genstand og kan omfatte en meta objekt. Fejl bruger altid et topniveau error objekt med en stabil maskinlæsbar code og en menneskelig læsbar message.
{
"data": { ... },
"meta": {
"credits_used": 1,
"request_id": "..."
}
}{
"error": {
"code": "invalid_api_key",
"message": "..."
}
}Behold request_id når du kontakter support om en vellykket faktureret anmodning. JSON er UTF-8-kodet, og klienter skal sende 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.
Produktions slutpunkter
/v1/statusLiveReturnerer oplysninger om public service-sundhed og API-version. Dette slutpunkt kræver ikke godkendelse og koster nul kreditter.
Eksempel på anmodning
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.
Overskrifter
| Navn | Påkrævet | Beskrivelse |
|---|---|---|
Authorization | Ja | Bearer wly_live_... |
Accept | Anbefales | application/json |
Svaroverskrifter
X-Credits-Remaining is returned only by this balance endpoint.
200 · Success
{
"data": { "message": "Authenticated", "credits_remaining": 1250 },
"meta": { "lang": "en" }
}Ordforråds endepunkter
Hver post rapporterer sin completeness som catalog, translated, or enriched. Fields that are not available are returned as null eller et tomt objekt i stedet for opfundne data.
GET /v1/words/{word}
Returnerer et nøjagtigt ordmatch. Brug languages=tr,de,fr kun at returnere ønskede oversættelser. Katalog eller oversatte poster koster 1 kredit; fuldt berigede profiler koster 5 kreditter.
curl "https://api.wordlyenglish.com/v1/words/water?languages=tr,de" \
-H "Authorization: Bearer $WORDLY_API_KEY"GET /v1/words/search
Søg med q og valgfrit level, part_of_speech, category, limit, and cursor. Limits range from 1 to 50. Pass meta.next_cursor til næste anmodning.
curl "https://api.wordlyenglish.com/v1/words/search?q=app&level=advanced&limit=20" \
-H "Authorization: Bearer $WORDLY_API_KEY"GET /v1/words/random
Returnerer 1-20 tilfældige ord. Filtrer efter level, part_of_speech, or category. Each returned slot costs one credit.
POST /v1/words/batch
Slår op mellem 1 og 50 unikke ord i en enkelt anmodning. Svaret bevarer anmodningsrækkefølgen og markerer hver vare 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
Returnerer alle 30 understøttede grænseflader og API-meddelelseslokaliteter. Ordforrådsoversættelser returneres kun, når de er tilgængelige. Dette endepunkt er offentligt og koster nul kreditter.
Satsgrænse
Hver API-nøgle er begrænset til 120 accepterede anmodninger pr. rullende minut. Svar inkluderer X-RateLimit-Limit og X-RateLimit-Remaining. A 429 rate_limit_exceeded svar omfatter 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
| Navn | Type | Påkrævet | Rules | Beskrivelse |
|---|---|---|---|---|
lang | string | No | Supported locale code | Language for human-readable messages. |
Eksempel på anmodning
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
| Navn | Location | Type | Påkrævet | 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. |
Eksempel på anmodning
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 kreditSearches active vocabulary in alphabetical order. Use the returned cursor for stable forward pagination.
Query parameters
| Navn | Type | Påkrævet | Default / limit | Beskrivelse |
|---|---|---|---|---|
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. |
Eksempel på anmodning
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
| Navn | Type | Påkrævet | Default / limit | Beskrivelse |
|---|---|---|---|---|
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. |
Eksempel på anmodning
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.
Overskrifter
| Navn | Påkrævet | Value |
|---|---|---|
Authorization | Ja | Bearer wly_live_... |
Content-Type | Ja | application/json |
Accept | Anbefales | application/json |
JSON body
| Field | Type | Påkrævet | Rules | Beskrivelse |
|---|---|---|---|---|
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. |
Eksempel på anmodning
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 | Beskrivelse |
|---|---|---|---|
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 | Beskrivelse |
|---|---|---|---|
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 | Beskrivelse |
|---|---|---|
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. |
Fejl
| HTTP | Kode | Betydning | Klienthandling |
|---|---|---|---|
| 401 | invalid_api_key | Manglende, forkert udformet, tilbagekaldt eller inaktiv nøgle. | Tjek bærehovedet, eller udskift nøglen. |
| 402 | credits_exhausted | Kontoen mangler kreditter til operationen. | Stop genforsøg, og led kunden til fakturering. |
| 404 | not_found | Det anmodede slutpunkt er ikke tilgængeligt. | Tjek stien og API-versionen. |
| 404 | word_not_found | Den anmodede ordforrådspost er ikke tilgængelig. | Kontroller stavning eller brug søgning. |
| 422 | invalid_request | En parameter eller batchtekst er ugyldig. | Ret anmodningen, før du prøver 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-nøglen oversteg 120 anmodninger i minuttet. | Wait for Retry-After. |
| 5xx | server_error | En uventet fejl på serversiden. | Prøv igen med backoff; kontakt support, hvis det fortsætter. |
Anbefalet politik for genforsøg
Forsøg ikke igen 401, 402, or 404 automatisk. Til forbigående 5xx svar, brug eksponentiel backoff med jitter og en streng genforsøgsgrænse. Opret aldrig en ubegrænset genforsøgsløkke, fordi hver accepteret godkendt anmodning kan forbruge kreditter.
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
Send ikke Wordly-nøglen i en Flutter-applikation. Eksemplet hører hjemme i en pålidelig 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']);
}Produktionstjekliste
- Proxy Wordly-anmodninger via en betroet backend.
- Indstil forbindelse og svar timeouts.
- Håndtag
401,402,404, and5xxseparat. - Query
GET /v1/accountwhen your application needs the current balance. - Log slutpunkt, status, latens og
request_iduden at logge API-nøglen. - Brug separate nøgler pr. miljø og roter dem med jævne mellemrum.
- Cache stable vocabulary responses in your backend when appropriate.
Klar til at fremsætte din første anmodning?
Opret en konto, bekræft din e-mail, og modtag 50 gratis kreditter.
Har du brug for integrationshjælp? E-mail [email protected].