Bouw met Wordly API.
Gebruik een API-sleutel aan de serverzijde, voer HTTPS-verzoeken uit en volg elk gesprek via een voorspelbaar, op krediet gebaseerd factureringsmodel. Deze referentie documenteert de eindpunten die momenteel beschikbaar zijn in productie en markeert duidelijk de eindpunten die nog in voorbereiding zijn.
Snelstart
Maak een gratis account aan, verifieer uw e-mailadres met de zescijferige code en kopieer de API-sleutel die eenmaal in uw ontwikkelaarsdashboard wordt weergegeven.
- 1Maak een account aan
Registreer met alleen een e-mailadres en wachtwoord.
- 2Controleer uw e-mailadres
Voer de code in die is verzonden door
[email protected]. Verificatie levert 50 gratis credits op. - 3Bewaar uw API-sleutel
Kopieer het gegenereerde
wly_live_...sleutel en bewaar deze in een omgevingsvariabele aan de serverzijde. - 4Doe een testaanvraag
Roep het accounteindpunt aan om de authenticatie te verifiëren en het resterende saldo te bekijken.
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 en versiebeheer
Alle productie-eindpunten worden bediend vanaf de volgende basis-URL met versiebeheer:
https://api.wordlyenglish.com/v1Bij het breken van reacties of gedragsveranderingen wordt een nieuwe padversie gebruikt. Binnenin kunnen additieve velden worden geïntroduceerd v1, dus clients moeten responseigenschappen negeren die ze niet herkennen.
Authenticatie
Voor geverifieerde eindpunten is een API-sleutel in de HTTP vereist Authorization header met behulp van het Bearer-schema.
Authorization: Bearer wly_live_your_api_keyPlaats nooit een live sleutel in browser-JavaScript, openbare Git-opslagplaatsen, schermafbeeldingen, logs of een gedistribueerde mobiele applicatie. Roep Wordly API aan vanuit uw backend en laat uw eigen applicatie met die backend communiceren.
Gelokaliseerde API-berichten
Stel de antwoordtaal in met ?lang=tr of de standaard Accept-Language koptekst. Queryparameters hebben voorrang. Bij elk JSON-antwoord wordt de geselecteerde landinstelling gedeclareerd Content-Language en meta.lang. Foutcodes blijven stabiel in het Engels voor programmatische afhandeling; alleen het voor mensen leesbare bericht is gelokaliseerd.
curl "https://api.wordlyenglish.com/v1/account?lang=tr" \
-H "Authorization: Bearer $WORDLY_API_KEY" \
-H "Accept-Language: tr-TR"Ondersteunde taalcodes: 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.
Kredieten en facturering
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.
| Operatie | Kredietkosten | Beschikbaarheid |
|---|---|---|
GET /v1/status | 0 | Leef |
GET /v1/account | 0 | Leef |
GET /v1/words/{word} | 1–5 | Leef |
GET /v1/words/search | 1 | Leef |
GET /v1/words/random | 1 per woord | Leef |
POST /v1/words/batch | Gebaseerd op geretourneerde records | Leef |
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 en verwerkt de bewerking niet.
{
"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"
}
}Levenscyclus van API-sleutel
Maak afzonderlijke sleutels voor ontwikkeling, staging en productie. Wordly slaat slechts een cryptografische hash van elke sleutel op; de volledige waarde wordt bij het aanmaken één keer weergegeven.
- Geef sleutels een naam op omgeving of service.
- Gebruik omgevingsvariabelen of een beheerd geheim archief.
- Trek een sleutel onmiddellijk in als deze mogelijk is blootgelegd.
- Roteer sleutels zonder oude waarden te hergebruiken.
- Stuur geen sleutels in queryreeksen.
Antwoordformaat
Succesvolle reacties maken gebruik van een topniveau data object en kan een meta voorwerp. Fouten gebruiken altijd een topniveau error object met een stabiele machinaal leesbaar code en voor mensen leesbaar message.
{
"data": { ... },
"meta": {
"credits_used": 1,
"request_id": "..."
}
}{
"error": {
"code": "invalid_api_key",
"message": "..."
}
}Houd de request_id wanneer u contact opneemt met de ondersteuning over een succesvol gefactureerd verzoek. JSON is UTF-8-gecodeerd en clients moeten verzenden 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.
Productie-eindpunten
/v1/statusLeefRetourneert informatie over de status van de openbare dienst en de API-versie. Dit eindpunt vereist geen authenticatie en kost nul credits.
Voorbeeld verzoek
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.
Kopteksten
| Naam | Vereist | Beschrijving |
|---|---|---|
Authorization | Ja | Bearer wly_live_... |
Accept | Aanbevolen | application/json |
Reactiekopteksten
X-Credits-Remaining is returned only by this balance endpoint.
200 · Success
{
"data": { "message": "Authenticated", "credits_remaining": 1250 },
"meta": { "lang": "en" }
}Eindpunten van de woordenschat
Elk record rapporteert zijn completeness als catalog, translated, of enriched. Velden die niet beschikbaar zijn, worden geretourneerd als null of een leeg object in plaats van verzonnen gegevens.
GET /v1/words/{word}
Retourneert een exacte woordovereenkomst. Gebruik languages=tr,de,fr om alleen gevraagde vertalingen terug te sturen. Catalogus of vertaalde records kosten 1 credit; volledig verrijkte profielen kosten 5 credits.
curl "https://api.wordlyenglish.com/v1/words/water?languages=tr,de" \
-H "Authorization: Bearer $WORDLY_API_KEY"GET /v1/words/search
Zoek met q en optioneel level, part_of_speech, category, limit, en cursor. Limieten variëren van 1 tot 50. Pass meta.next_cursor naar het volgende verzoek.
curl "https://api.wordlyenglish.com/v1/words/search?q=app&level=advanced&limit=20" \
-H "Authorization: Bearer $WORDLY_API_KEY"GET /v1/words/random
Retourneert 1–20 willekeurige woorden. Filter op level, part_of_speech, of category. Elk geretourneerd slot kost één credit.
POST /v1/words/batch
Zoekt tussen de 1 en 50 unieke woorden op in één verzoek. Het antwoord behoudt de verzoekvolgorde en markeert elk item met 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
Retourneert alle 30 ondersteunde landinstellingen voor interfaces en API-berichten. Woordenschatvertalingen worden alleen geretourneerd als deze beschikbaar zijn. Dit eindpunt is openbaar en kost nul credits.
Tarieflimiet
Elke API-sleutel is beperkt tot 120 geaccepteerde verzoeken per voortschrijdende minuut. Reacties omvatten X-RateLimit-Limit en X-RateLimit-Remaining. EEN 429 rate_limit_exceeded reactie omvat 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
| Naam | Type | Vereist | Rules | Beschrijving |
|---|---|---|---|---|
lang | string | No | Supported locale code | Language for human-readable messages. |
Voorbeeld verzoek
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
| Naam | Location | Type | Vereist | 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. |
Voorbeeld verzoek
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 tegoedSearches active vocabulary in alphabetical order. Use the returned cursor for stable forward pagination.
Query parameters
| Naam | Type | Vereist | Default / limit | Beschrijving |
|---|---|---|---|---|
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. |
Voorbeeld verzoek
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
| Naam | Type | Vereist | Default / limit | Beschrijving |
|---|---|---|---|---|
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. |
Voorbeeld verzoek
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.
Kopteksten
| Naam | Vereist | Value |
|---|---|---|
Authorization | Ja | Bearer wly_live_... |
Content-Type | Ja | application/json |
Accept | Aanbevolen | application/json |
JSON body
| Field | Type | Vereist | Rules | Beschrijving |
|---|---|---|---|---|
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. |
Voorbeeld verzoek
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 | Beschrijving |
|---|---|---|---|
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, of enriched. |
Meta object
| Field | Type | When present | Beschrijving |
|---|---|---|---|
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 | Beschrijving |
|---|---|---|
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. |
Fouten
| HTTP | Codeer | Betekenis | Klant actie |
|---|---|---|---|
| 401 | invalid_api_key | Ontbrekende, verkeerd opgemaakte, ingetrokken of inactieve sleutel. | Controleer de Bearer-header of vervang de sleutel. |
| 402 | credits_exhausted | Het account heeft geen credits voor de bewerking. | Stop nieuwe pogingen en verwijs de klant naar facturering. |
| 404 | not_found | Het aangevraagde eindpunt is niet beschikbaar. | Controleer het pad en de API-versie. |
| 404 | word_not_found | Het gevraagde vocabulaire-item is niet beschikbaar. | Controleer de spelling of gebruik de zoekfunctie. |
| 422 | invalid_request | Een parameter of batchhoofdtekst is ongeldig. | Corrigeer het verzoek voordat u het opnieuw probeert. |
| 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 | De API-sleutel overschreed de 120 verzoeken per minuut. | Wacht op Retry-After. |
| 5xx | server_error | Een onverwachte serverfout. | Opnieuw proberen met uitstel; neem contact op met de ondersteuning als dit aanhoudt. |
Aanbevolen beleid voor opnieuw proberen
Probeer het niet opnieuw 401, 402, of 404 automatisch. Voor voorbijgaand 5xx reacties, gebruik exponentiële uitstel met jitter en een strikte limiet voor nieuwe pogingen. Maak nooit een onbegrensde herhalingslus, omdat elk geaccepteerd, geauthenticeerd verzoek credits kan verbruiken.
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);Darten/fladderen
Verzend de Wordly-sleutel niet in een Flutter-applicatie. Het voorbeeld hoort thuis in een vertrouwde Dart-backend of serverfunctie.
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']);
}Controlelijst voor productie
- Proxy Wordly-aanvragen via een vertrouwde backend.
- Stel verbindings- en reactietime-outs in.
- Handvat
401,402,404, en5xxafzonderlijk. - Query
GET /v1/accountwhen your application needs the current balance. - Eindpunt, status, latentie en logboekregistratie
request_idzonder de API-sleutel te loggen. - Gebruik afzonderlijke sleutels per omgeving en wissel deze periodiek.
- Cache stable vocabulary responses in your backend when appropriate.
Klaar om uw eerste verzoek in te dienen?
Maak een account aan, verifieer uw e-mailadres en ontvang 50 gratis credits.
Hulp nodig bij het integreren? E-mail [email protected].