Erstellen Sie mit der Wordly-API.
Verwenden Sie einen serverseitigen API-Schlüssel, stellen Sie HTTPS-Anfragen und verfolgen Sie jeden Anruf über ein vorhersehbares, kreditbasiertes Abrechnungsmodell. Diese Referenz dokumentiert die derzeit in der Produktion verfügbaren Endpunkte und markiert deutlich Endpunkte, die sich noch in der Vorbereitung befinden.
Schnellstart
Erstellen Sie ein kostenloses Konto, bestätigen Sie Ihre E-Mail-Adresse mit dem sechsstelligen Code und kopieren Sie den API-Schlüssel, der einmal in Ihrem Entwickler-Dashboard angezeigt wird.
- 1Erstellen Sie ein Konto
Registrieren Sie sich nur mit einer E-Mail-Adresse und einem Passwort.
- 2Bestätigen Sie Ihre E-Mail
Geben Sie den von gesendeten Code ein
[email protected]. Durch die Verifizierung werden 50 kostenlose Credits gewährt. - 3Speichern Sie Ihren API-Schlüssel
Kopieren Sie das generierte
wly_live_...Schlüssel und bewahren Sie ihn in einer serverseitigen Umgebungsvariablen auf. - 4Stellen Sie eine Testanfrage
Rufen Sie den Kontoendpunkt an, um die Authentifizierung zu überprüfen und den Restbetrag anzuzeigen.
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 und Versionierung
Alle Produktionsendpunkte werden von der folgenden versionierten Basis-URL bedient:
https://api.wordlyenglish.com/v1Bei Unterbrechungsreaktionen oder Verhaltensänderungen wird eine neue Pfadversion verwendet. Additive Felder können darin eingeführt werden v1Daher sollten Clients Antworteigenschaften ignorieren, die sie nicht erkennen.
Authentifizierung
Authentifizierte Endpunkte erfordern einen API-Schlüssel im HTTP Authorization Header mithilfe des Bearer-Schemas.
Authorization: Bearer wly_live_your_api_keyPlatzieren Sie niemals einen Live-Schlüssel in Browser-JavaScript, öffentlichen Git-Repositorys, Screenshots, Protokollen oder einer verteilten mobilen Anwendung. Rufen Sie die Wordly-API von Ihrem Backend aus auf und lassen Sie Ihre eigene Anwendung mit diesem Backend kommunizieren.
Lokalisierte API-Nachrichten
Stellen Sie die Antwortsprache mit ein ?lang=tr oder der Standard Accept-Language Kopfzeile. Abfrageparameter haben Vorrang. Jede JSON-Antwort deklariert das ausgewählte Gebietsschema in Content-Language und meta.lang. Fehlercodes bleiben für die programmgesteuerte Behandlung in Englisch stabil; Nur die für Menschen lesbare Nachricht wird lokalisiert.
curl "https://api.wordlyenglish.com/v1/account?lang=tr" \
-H "Authorization: Bearer $WORDLY_API_KEY" \
-H "Accept-Language: tr-TR"Unterstützte Sprachcodes: 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.
Gutschriften und Abrechnung
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.
| Betrieb | Kreditkosten | Verfügbarkeit |
|---|---|---|
GET /v1/status | 0 | Lebe |
GET /v1/account | 0 | Lebe |
GET /v1/words/{word} | 1–5 | Lebe |
GET /v1/words/search | 1 | Lebe |
GET /v1/words/random | 1 pro Wort | Lebe |
POST /v1/words/batch | Basierend auf zurückgegebenen Datensätzen | Lebe |
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 und verarbeitet den Vorgang nicht.
{
"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"
}
}Lebenszyklus des API-Schlüssels
Erstellen Sie separate Schlüssel für Entwicklung, Staging und Produktion. Wordly speichert nur einen kryptografischen Hash jedes Schlüssels; Der vollständige Wert wird einmalig bei der Erstellung angezeigt.
- Benennen Sie Schlüssel nach Umgebung oder Dienst.
- Verwenden Sie Umgebungsvariablen oder einen verwalteten Secret Store.
- Ziehen Sie einen Schlüssel sofort zurück, wenn er möglicherweise offengelegt wurde.
- Schlüssel rotieren, ohne alte Werte wiederzuverwenden.
- Senden Sie keine Schlüssel in Abfragezeichenfolgen.
Antwortformat
Erfolgreiche Antworten verwenden eine oberste Ebene data Objekt und kann Folgendes umfassen: meta Objekt. Fehler verwenden immer eine oberste Ebene error Objekt mit einer stabilen maschinenlesbaren code und eine für Menschen lesbare message.
{
"data": { ... },
"meta": {
"credits_used": 1,
"request_id": "..."
}
}{
"error": {
"code": "invalid_api_key",
"message": "..."
}
}Behalten Sie die request_id wenn Sie den Support wegen einer erfolgreichen Rechnungsanfrage kontaktieren. JSON ist UTF-8-codiert und sollte von Clients gesendet werden 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.
Produktionsendpunkte
/v1/statusLebeGibt Informationen zum Zustand des öffentlichen Dienstes und zur API-Version zurück. Dieser Endpunkt erfordert keine Authentifizierung und kostet keine Credits.
Beispielanfrage
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.
Überschriften
| Name | Erforderlich | Beschreibung |
|---|---|---|
Authorization | Ja | Bearer wly_live_... |
Accept | Empfohlen | application/json |
Antwortheader
X-Credits-Remaining is returned only by this balance endpoint.
200 · Success
{
"data": { "message": "Authenticated", "credits_remaining": 1250 },
"meta": { "lang": "en" }
}Vokabelendpunkte
Jeder Datensatz meldet seine completeness als catalog, translated, oder enriched. Felder, die nicht verfügbar sind, werden als zurückgegeben null oder ein leeres Objekt anstelle erfundener Daten.
GET /v1/words/{word}
Gibt eine genaue Wortübereinstimmung zurück. Benutzen languages=tr,de,fr um nur angeforderte Übersetzungen zurückzugeben. Kataloge oder übersetzte Datensätze kosten 1 Credit; Vollständig angereicherte Profile kosten 5 Credits.
curl "https://api.wordlyenglish.com/v1/words/water?languages=tr,de" \
-H "Authorization: Bearer $WORDLY_API_KEY"GET /v1/words/search
Suchen mit q und optional level, part_of_speech, category, limit, und cursor. Die Limits liegen zwischen 1 und 50. Bestehen meta.next_cursor in die nächste Anfrage ein.
curl "https://api.wordlyenglish.com/v1/words/search?q=app&level=advanced&limit=20" \
-H "Authorization: Bearer $WORDLY_API_KEY"GET /v1/words/random
Gibt 1–20 zufällige Wörter zurück. Filtern nach level, part_of_speech, oder category. Jeder zurückgegebene Slot kostet ein Guthaben.
POST /v1/words/batch
Sucht zwischen 1 und 50 eindeutigen Wörtern in einer einzigen Anfrage. Die Antwort behält die Reihenfolge der Anfragen bei und markiert jedes Element mit 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
Gibt alle 30 unterstützten Schnittstellen- und API-Nachrichtengebietsschemas zurück. Vokabelübersetzungen werden nur zurückgegeben, wenn sie verfügbar sind. Dieser Endpunkt ist öffentlich und kostet keine Credits.
Ratenbegrenzung
Jeder API-Schlüssel ist auf 120 akzeptierte Anfragen pro laufender Minute begrenzt. Zu den Antworten gehören: X-RateLimit-Limit und X-RateLimit-Remaining. A 429 rate_limit_exceeded Antwort umfasst 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
| Name | Type | Erforderlich | Rules | Beschreibung |
|---|---|---|---|---|
lang | string | No | Supported locale code | Language for human-readable messages. |
Beispielanfrage
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
| Name | Location | Type | Erforderlich | 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. |
Beispielanfrage
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 CreditSearches active vocabulary in alphabetical order. Use the returned cursor for stable forward pagination.
Query parameters
| Name | Type | Erforderlich | Default / limit | Beschreibung |
|---|---|---|---|---|
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. |
Beispielanfrage
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
| Name | Type | Erforderlich | Default / limit | Beschreibung |
|---|---|---|---|---|
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. |
Beispielanfrage
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.
Überschriften
| Name | Erforderlich | Value |
|---|---|---|
Authorization | Ja | Bearer wly_live_... |
Content-Type | Ja | application/json |
Accept | Empfohlen | application/json |
JSON body
| Field | Type | Erforderlich | Rules | Beschreibung |
|---|---|---|---|---|
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. |
Beispielanfrage
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 | Beschreibung |
|---|---|---|---|
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, oder enriched. |
Meta object
| Field | Type | When present | Beschreibung |
|---|---|---|---|
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 | Beschreibung |
|---|---|---|
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. |
Fehler
| HTTP | Code | Bedeutung | Kundenaktion |
|---|---|---|---|
| 401 | invalid_api_key | Fehlender, fehlerhafter, widerrufener oder inaktiver Schlüssel. | Überprüfen Sie den Bearer-Header oder ersetzen Sie den Schlüssel. |
| 402 | credits_exhausted | Dem Konto fehlt das Guthaben für den Vorgang. | Stoppen Sie Wiederholungsversuche und leiten Sie den Kunden zur Abrechnung weiter. |
| 404 | not_found | Der angeforderte Endpunkt ist nicht verfügbar. | Überprüfen Sie den Pfad und die API-Version. |
| 404 | word_not_found | Der angeforderte Vokabeleintrag ist nicht verfügbar. | Überprüfen Sie die Rechtschreibung oder verwenden Sie die Suche. |
| 422 | invalid_request | Ein Parameter oder Batch-Körper ist ungültig. | Korrigieren Sie die Anfrage, bevor Sie es erneut versuchen. |
| 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 | Der API-Schlüssel hat 120 Anfragen pro Minute überschritten. | Warten Sie Retry-After. |
| 5xx | server_error | Ein unerwarteter serverseitiger Fehler. | Mit Backoff erneut versuchen; Wenden Sie sich an den Support, wenn das Problem weiterhin besteht. |
Empfohlene Wiederholungsrichtlinie
Versuchen Sie es nicht erneut 401, 402, oder 404 automatisch. Für Durchreisende 5xx Verwenden Sie für Antworten einen exponentiellen Backoff mit Jitter und eine strikte Wiederholungsobergrenze. Erstellen Sie niemals eine unbegrenzte Wiederholungsschleife, da jede akzeptierte authentifizierte Anfrage möglicherweise Credits verbraucht.
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 / Flattern
Versenden Sie den Wordly-Schlüssel nicht innerhalb einer Flutter-Anwendung. Das Beispiel gehört in eine vertrauenswürdige Dart-Backend- oder 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']);
}Checkliste für die Produktion
- Proxy-Wordly-Anfragen über ein vertrauenswürdiges Backend.
- Legen Sie Verbindungs- und Antwort-Timeouts fest.
- Griff
401,402,404, und5xxseparat. - Query
GET /v1/accountwhen your application needs the current balance. - Endpunkt, Status, Latenz usw. protokollieren
request_idohne den API-Schlüssel zu protokollieren. - Verwenden Sie separate Schlüssel pro Umgebung und wechseln Sie diese regelmäßig.
- Cache stable vocabulary responses in your backend when appropriate.
Sind Sie bereit, Ihre erste Anfrage zu stellen?
Erstellen Sie ein Konto, bestätigen Sie Ihre E-Mail-Adresse und erhalten Sie 50 kostenlose Credits.
Benötigen Sie Integrationshilfe? E-Mail [email protected].