Dokumentacja deweloperska

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.

Wersja API v1Sformatuj JSONTransportu Tylko HTTPSWolne saldo 50 kredytówOtwórzAPI Pobierz schematPostman CollectionPostman Environment

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.

  1. 1
    Utwórz konto

    Zarejestruj się, podając jedynie adres e-mail i hasło.

  2. 2
    Zweryfikuj swój adres e-mail

    Wpisz kod przesłany przez [email protected]. Weryfikacja zapewnia 50 darmowych kredytów.

  3. 3
    Przechowuj swój klucz API

    Skopiuj wygenerowany wly_live_... key i przechowuj go w zmiennej środowiskowej po stronie serwera.

  4. 4
    Złóż wniosek testowy

    Zadzwoń do punktu końcowego konta, aby zweryfikować uwierzytelnienie i sprawdzić pozostałe saldo.

Powłoka
curl "https://api.wordlyenglish.com/v1/account" \
  -H "Authorization: Bearer $WORDLY_API_KEY" \
  -H "Accept: application/json"
200 odpowiedzi
{
  "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ą:

Bazowy adres URLhttps://api.wordlyenglish.com/v1

Zmiana 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_key
Nie ujawniaj kluczy API.

Nigdy 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.

OperacjaKoszt kredytuDostępność
GET /v1/status0Na żywo
GET /v1/account0Na żywo
GET /v1/words/{word}1–5Na żywo
GET /v1/words/search1Na żywo
GET /v1/words/random1 za słowoNa żywo
POST /v1/words/batchNa podstawie zwróconych zapisówNa ż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.

Odpowiedź 402
{
  "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.

Pomyślne żądanie
{
  "data": { ... },
  "meta": {
    "credits_used": 1,
    "request_id": "..."
  }
}
Nieudane żądanie
{
  "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.

Cache behavior

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.

Odniesienie do punktu końcowego

Punkty końcowe produkcji

DOBIERZ/v1/statusNa żywo

Zwraca 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" }
}
Possible results200 Service is reachable.405 Method is not GET.429 IP request limit exceeded.
DOBIERZ/v1/accountLive · 0 credits

Validates the supplied key and returns the current account balance without charging a credit.

Nagłówki

ImięWymaganeOpis
AuthorizationTakBearer wly_live_...
AcceptZalecaneapplication/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" }
}
Possible results200 Key accepted and balance returned.401 Missing, invalid, revoked, or suspended key.429 Rate limit exceeded.

Punkty końcowe słownictwa

Aktywnych jest ponad 20 000 wpisów w katalogu.

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.

DOBIERZ/v1/languagesLive · 0 credits

Lists all supported interface and API-message locales. Vocabulary translations are returned only when a record contains them.

Query parameters

ImięTypeWymaganeRulesOpis
langstringNoSupported locale codeLanguage 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" }
}
Possible results200 Locale list returned.405 Method is not GET.429 IP request limit exceeded.
DOBIERZ/v1/words/{word}Live · 1–5 credits

Returns one exact vocabulary record. Catalog and translated records cost 1 credit; enriched records cost 5 credits.

Parameters

ImięLocationTypeWymaganeRules and meaning
wordPathstringTakExact word or slug; maximum 120 characters. URL-encode special characters.
languagesQuerystringNoComma-separated translation codes, for example tr,de,fr.
langQuerystringNoHuman-readable message language; not a vocabulary filter.

Przykładowe żądanie

Powłoka
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" }
}
Possible results200 Exact record returned.401 Invalid API key.402 Insufficient credits.404 Word not found.422 Word too long.429 Rate limit exceeded.
DOBIERZ/v1/words/randomLive · 1 credit per requested slot

Returns random active words for quizzes, discovery feeds, and practice sessions.

Query parameters

ImięTypeWymaganeDefault / limitOpis
countintegerNo1; min 1, max 20Requested slots and credit cost.
levelstringNoExact valueLevel filter.
part_of_speech / posstringNoExact valueGrammatical-class filter.
categorystringNoExact valueCategory filter.
languagesstringNoComma-separatedTranslations 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 }
}
Possible results200 Random array returned.401 Invalid API key.402 Balance below requested count.429 Rate limit exceeded.
POST/v1/words/batchLive · calculated

Looks 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ęWymaganeValue
AuthorizationTakBearer wly_live_...
Content-TypeTakapplication/json
AcceptZalecaneapplication/json

JSON body

FieldTypeWymaganeRulesOpis
wordsstring[]Tak1–50 items; each max 120 charsWords to resolve; duplicates are normalized and removed.
languagesstring[]NoSupported locale codesTranslations 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" }
}
Possible results200 Ordered results.401 Invalid API key.402 Insufficient credits.413 Body over 64 KB.415 Content-Type is not JSON.422 Invalid words array.429 Rate limit exceeded.

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

FieldTypeNullableOpis
idstringNoStable URL-safe slug.
wordstringNoCanonical English word.
part_of_speechstringTakGrammatical class.
levelstringTakLearning difficulty or catalog level.
definitionstringTakConcise English definition.
examplestringTakNatural example sentence.
phoneticstringTakPronunciation transcription when available.
translationsobject<string,string>NoLocale codes mapped to translations; may be empty.
synonymsstring[]NoAvailable synonyms.
antonymsstring[]NoAvailable antonyms.
categoriesstring[]NoLearning or semantic categories.
media.image_urlURL stringTakLearning image URL.
media.audio_urlURL stringTakPronunciation audio URL.
media.attributionobjectNoRequired media attribution metadata.
completenessenumNocatalog, translatedlub enriched.

Meta object

FieldTypeWhen presentOpis
credits_usedintegerMetered responsesCredits charged by this request.
request_idUUID stringMetered successSupport and billing trace ID.
langstringAlwaysSelected message locale.
countintegerList responsesNumber of response items.
next_cursorstring or nullSearchNext page cursor; null means final page.

Error object

FieldTypeOpis
error.codestringStable machine-readable code.
error.messagestringLocalized human-readable explanation.
error.upgrade_urlstringRelative billing URL on a 402 result.
meta.langstringError-message locale.

Błędy

HTTPKodZnaczenieAkcja klienta
401invalid_api_keyBrakujący, zniekształcony, unieważniony lub nieaktywny klucz.Sprawdź nagłówek nośnika lub wymień klucz.
402credits_exhaustedNa koncie brakuje środków na operację.Zatrzymaj ponowne próby i skieruj klienta do płatności.
404not_foundŻądany punkt końcowy jest niedostępny.Sprawdź ścieżkę i wersję API.
404word_not_foundŻądany wpis słownictwa jest niedostępny.Sprawdź pisownię lub użyj wyszukiwania.
422invalid_requestParametr lub treść partii jest nieprawidłowa.Popraw żądanie przed ponowną próbą.
405method_not_allowedThe endpoint does not accept the HTTP method.Use the documented GET or POST method.
413payload_too_largeThe JSON request body exceeds 64 KB.Reduce the batch body.
415unsupported_media_typeThe batch request is not JSON.Send Content-Type: application/json.
429rate_limit_exceededKlucz API przekroczył 120 żądań na minutę.Poczekaj Retry-After.
5xxserver_errorNieoczekiwana 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, i 5xx osobno.
  • Query GET /v1/account when your application needs the current balance.
  • Rejestruj punkt końcowy, stan, opóźnienie i request_id bez 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.

Utwórz darmowe konto

Potrzebujesz pomocy w integracji? E-mail [email protected].