Kompiluj za pomocą Wordly API.
Korzystaj z klucza API po stronie serwera, twórz żądania HTTPS i śledź każde połączenie za pomocą przewidywalnego modelu rozliczeń opartego na kredytach. To odniesienie dokumentuje punkty końcowe dostępne obecnie w środowisku produkcyjnym i wyraźnie oznacza punkty końcowe, które są wciąż w przygotowaniu.
Szybki start
Utwórz bezpłatne konto, zweryfikuj swój adres e-mail za pomocą sześciocyfrowego kodu i skopiuj klucz API wyświetlony raz w panelu programisty.
- 1Utwórz konto
Zarejestruj się, podając jedynie adres e-mail i hasło.
- 2Zweryfikuj swój adres e-mail
Wpisz kod przesłany przez
[email protected]. Weryfikacja zapewnia 50 darmowych kredytów. - 3Przechowuj swój klucz API
Skopiuj wygenerowany
wly_live_...key i przechowuj go w zmiennej środowiskowej po stronie serwera. - 4Złóż wniosek testowy
Zadzwoń do punktu końcowego konta, aby zweryfikować uwierzytelnienie i sprawdzić pozostałe 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" }
}Podstawowy adres URL i wersja
Wszystkie produkcyjne punkty końcowe są obsługiwane z następującego podstawowego adresu URL z wersją:
https://api.wordlyenglish.com/v1Zmiana odpowiedzi lub zachowania na przerwanie spowoduje użycie nowej wersji ścieżki. W obrębie można wprowadzić pola addytywne v1, dlatego klienci powinni ignorować właściwości odpowiedzi, których nie rozpoznają.
Uwierzytelnianie
Uwierzytelnione punkty końcowe wymagają klucza API w pliku HTTP Authorization nagłówek przy użyciu schematu Bearer.
Authorization: Bearer wly_live_your_api_keyNigdy nie umieszczaj aktywnego klucza w JavaScript przeglądarki, publicznych repozytoriach Git, zrzutach ekranu, logach lub rozproszonej aplikacji mobilnej. Wywołaj Wordly API ze swojego backendu i pozwól swojej aplikacji komunikować się z tym backendem.
Zlokalizowane komunikaty API
Ustaw język odpowiedzi za pomocą ?lang=tr lub standardowy Accept-Language nagłówek. Parametry zapytania mają pierwszeństwo. Każda odpowiedź JSON deklaruje wybrane ustawienia regionalne Content-Language i meta.lang. Kody błędów pozostają stabilne w języku angielskim w celu obsługi programowej; lokalizowana jest tylko wiadomość czytelna dla człowieka.
curl "https://api.wordlyenglish.com/v1/account?lang=tr" \
-H "Authorization: Bearer $WORDLY_API_KEY" \
-H "Accept-Language: tr-TR"Obsługiwane kody języków: 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.
Kredyty i rozliczenia
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.
| Operacja | Koszt kredytu | Dostępność |
|---|---|---|
GET /v1/status | 0 | Na żywo |
GET /v1/account | 0 | Na żywo |
GET /v1/words/{word} | 1–5 | Na żywo |
GET /v1/words/search | 1 | Na żywo |
GET /v1/words/random | 1 za słowo | Na żywo |
POST /v1/words/batch | Na podstawie zwróconych zapisów | Na żywo |
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 i nie przetwarza operacji.
{
"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"
}
}Cykl życia klucza API
Utwórz osobne klucze do programowania, przemieszczania i produkcji. Wordly przechowuje tylko kryptograficzny skrót każdego klucza; pełna wartość jest wyświetlana raz podczas tworzenia.
- Nazwij klucze według środowiska lub usługi.
- Użyj zmiennych środowiskowych lub zarządzanego magazynu tajnego.
- Natychmiast unieważnij klucz, jeśli mógł zostać ujawniony.
- Obracaj klucze bez ponownego używania starych wartości.
- Nie wysyłaj kluczy w ciągach zapytań.
Format odpowiedzi
Skuteczne odpowiedzi wykorzystują najwyższy poziom data obiekt i może zawierać: meta obiekt. Błędy zawsze korzystają z najwyższego poziomu error obiekt ze stabilnym odczytem maszynowym code i czytelny dla człowieka message.
{
"data": { ... },
"meta": {
"credits_used": 1,
"request_id": "..."
}
}{
"error": {
"code": "invalid_api_key",
"message": "..."
}
}Zachowaj request_id podczas kontaktowania się z pomocą techniczną w sprawie pomyślnie rozliczonego żądania. JSON jest zakodowany w formacie UTF-8 i klienci powinni wysyłać 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.
Punkty końcowe produkcji
/v1/statusNa żywoZwraca informacje o kondycji usług publicznych i wersji interfejsu API. Ten punkt końcowy nie wymaga uwierzytelniania i kosztuje zero kredytów.
Przykładowe żądanie
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.
Nagłówki
| Imię | Wymagane | Opis |
|---|---|---|
Authorization | Tak | Bearer wly_live_... |
Accept | Zalecane | application/json |
Nagłówki odpowiedzi
X-Credits-Remaining is returned only by this balance endpoint.
200 · Success
{
"data": { "message": "Authenticated", "credits_remaining": 1250 },
"meta": { "lang": "en" }
}Punkty końcowe słownictwa
Każdy zapis to zgłasza completeness jako catalog, translatedlub enriched. Pola, które nie są dostępne, są zwracane jako null lub pusty obiekt zamiast wymyślonych danych.
GET /v1/words/{word}
Zwraca dokładne dopasowanie słowa. Użyj languages=tr,de,fr aby zwrócić tylko zamówione tłumaczenia. Katalog lub przetłumaczone rekordy kosztują 1 punkt; w pełni wzbogacone profile kosztują 5 kredytów.
curl "https://api.wordlyenglish.com/v1/words/water?languages=tr,de" \
-H "Authorization: Bearer $WORDLY_API_KEY"GET /v1/words/search
Szukaj za pomocą q i opcjonalne level, part_of_speech, category, limit, i cursor. Limity wahają się od 1 do 50. Pass meta.next_cursor w kolejnym żądaniu.
curl "https://api.wordlyenglish.com/v1/words/search?q=app&level=advanced&limit=20" \
-H "Authorization: Bearer $WORDLY_API_KEY"GET /v1/words/random
Zwraca 1–20 losowych słów. Filtruj według level, part_of_speechlub category. Każde zwrócone miejsce kosztuje jeden kredyt.
POST /v1/words/batch
Wyszukuje od 1 do 50 unikalnych słów w jednym żądaniu. Odpowiedź zachowuje kolejność żądań i oznacza każdy element znakiem 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
Zwraca wszystkie 30 obsługiwanych ustawień regionalnych interfejsu i komunikatów API. Tłumaczenia słownictwa są zwracane tylko wtedy, gdy są dostępne. Ten punkt końcowy jest publiczny i kosztuje zero kredytów.
Limit stawki
Każdy klucz API jest ograniczony do 120 zaakceptowanych żądań na minutę. Odpowiedzi obejmują X-RateLimit-Limit i X-RateLimit-Remaining. A 429 rate_limit_exceeded odpowiedź zawiera 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
| Imię | Type | Wymagane | Rules | Opis |
|---|---|---|---|---|
lang | string | No | Supported locale code | Language for human-readable messages. |
Przykładowe żądanie
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
| Imię | Location | Type | Wymagane | Rules and meaning |
|---|---|---|---|---|
word | Path | string | Tak | 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. |
Przykładowe żądanie
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/searchNa żywo · 1 kredytSearches active vocabulary in alphabetical order. Use the returned cursor for stable forward pagination.
Query parameters
| Imię | Type | Wymagane | Default / limit | Opis |
|---|---|---|---|---|
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. |
Przykładowe żądanie
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
| Imię | Type | Wymagane | Default / limit | Opis |
|---|---|---|---|---|
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. |
Przykładowe żądanie
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.
Nagłówki
| Imię | Wymagane | Value |
|---|---|---|
Authorization | Tak | Bearer wly_live_... |
Content-Type | Tak | application/json |
Accept | Zalecane | application/json |
JSON body
| Field | Type | Wymagane | Rules | Opis |
|---|---|---|---|---|
words | string[] | Tak | 1–50 items; each max 120 chars | Words to resolve; duplicates are normalized and removed. |
languages | string[] | No | Supported locale codes | Translations to include. |
Przykładowe żądanie
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 | Opis |
|---|---|---|---|
id | string | No | Stable URL-safe slug. |
word | string | No | Canonical English word. |
part_of_speech | string | Tak | Grammatical class. |
level | string | Tak | Learning difficulty or catalog level. |
definition | string | Tak | Concise English definition. |
example | string | Tak | Natural example sentence. |
phonetic | string | Tak | 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 | Tak | Learning image URL. |
media.audio_url | URL string | Tak | Pronunciation audio URL. |
media.attribution | object | No | Required media attribution metadata. |
completeness | enum | No | catalog, translatedlub enriched. |
Meta object
| Field | Type | When present | Opis |
|---|---|---|---|
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 | Opis |
|---|---|---|
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. |
Błędy
| HTTP | Kod | Znaczenie | Akcja klienta |
|---|---|---|---|
| 401 | invalid_api_key | Brakujący, zniekształcony, unieważniony lub nieaktywny klucz. | Sprawdź nagłówek nośnika lub wymień klucz. |
| 402 | credits_exhausted | Na koncie brakuje środków na operację. | Zatrzymaj ponowne próby i skieruj klienta do płatności. |
| 404 | not_found | Żądany punkt końcowy jest niedostępny. | Sprawdź ścieżkę i wersję API. |
| 404 | word_not_found | Żądany wpis słownictwa jest niedostępny. | Sprawdź pisownię lub użyj wyszukiwania. |
| 422 | invalid_request | Parametr lub treść partii jest nieprawidłowa. | Popraw żądanie przed ponowną próbą. |
| 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 | Klucz API przekroczył 120 żądań na minutę. | Poczekaj Retry-After. |
| 5xx | server_error | Nieoczekiwana awaria po stronie serwera. | Ponów próbę z wycofaniem; skontaktuj się z pomocą techniczną, jeśli problem będzie się utrzymywać. |
Zalecane zasady ponawiania prób
Nie próbuj ponownie 401, 402lub 404 automatycznie. Dla przejściowego 5xx odpowiedzi, użyj wykładniczego wycofywania z jitterem i ścisłym limitem ponownych prób. Nigdy nie twórz nieograniczonej pętli ponawiania prób, ponieważ każde zaakceptowane uwierzytelnione żądanie może spowodować zużycie kredytów.
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);Pyton
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
Nie wysyłaj klucza Wordly wewnątrz aplikacji Flutter. Przykład dotyczy zaufanego backendu lub funkcji serwera Dart.
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']);
}Lista kontrolna produkcji
- Proxy Wordly żąda za pośrednictwem zaufanego backendu.
- Ustaw limity czasu połączenia i odpowiedzi.
- Uchwyt
401,402,404, i5xxosobno. - Query
GET /v1/accountwhen your application needs the current balance. - Rejestruj punkt końcowy, stan, opóźnienie i
request_idbez logowania klucza API. - Używaj oddzielnych kluczy dla każdego środowiska i okresowo je zmieniaj.
- Cache stable vocabulary responses in your backend when appropriate.
Gotowy do złożenia pierwszej prośby?
Utwórz konto, zweryfikuj swój adres e-mail i otrzymaj 50 darmowych kredytów.
Potrzebujesz pomocy w integracji? E-mail [email protected].