Документація розробника

Створення за допомогою Wordly API.

Використовуйте ключ API на стороні сервера, надсилайте запити HTTPS і відстежуйте кожен дзвінок за допомогою передбачуваної моделі виставлення рахунків на основі кредиту. Цей довідник документує кінцеві точки, які зараз доступні у виробництві, і чітко позначає кінцеві точки, які ще готуються.

Версія API v1Формат JSONТранспорт Лише HTTPSВільний баланс 50 кредитівOpenAPI Завантажити схемуPostman CollectionPostman Environment

Швидкий старт

Створіть безкоштовний обліковий запис, підтвердьте свою електронну пошту за допомогою шестизначного коду та скопіюйте ключ API, який один раз відображається на панелі інструментів розробника.

  1. 1
    Створіть обліковий запис

    Зареєструйтесь, використовуючи лише адресу електронної пошти та пароль.

  2. 2
    Підтвердьте свою електронну адресу

    Введіть надісланий код [email protected]. Перевірка надає 50 безкоштовних кредитів.

  3. 3
    Зберігайте свій ключ API

    Скопіюйте створене wly_live_... ключ і зберігайте його у змінній середовища на стороні сервера.

  4. 4
    Зробіть тестовий запит

    Зателефонуйте до кінцевої точки облікового запису, щоб перевірити автентифікацію та переглянути залишок балансу.

оболонка
curl "https://api.wordlyenglish.com/v1/account" \
  -H "Authorization: Bearer $WORDLY_API_KEY" \
  -H "Accept: application/json"
200 відповідей
{
  "data": {
    "message": "Authenticated",
    "credits_remaining": 50
  },
  "meta": { "lang": "en" }
}

Базова URL-адреса та версії

Усі робочі кінцеві точки обслуговуються з такої версії базової URL-адреси:

Базовий URLhttps://api.wordlyenglish.com/v1

Порушення відповіді або зміни поведінки використовуватиме нову версію шляху. Додаткові поля можуть бути введені всередині v1, тому клієнти повинні ігнорувати властивості відповіді, які вони не розпізнають.

Аутентифікація

Для автентифікованих кінцевих точок потрібен ключ API у HTTP Authorization заголовок за схемою Bearer.

Authorization: Bearer wly_live_your_api_key
Не розкривайте ключі API.

Ніколи не розміщуйте активний ключ у JavaScript браузера, загальнодоступних сховищах Git, знімках екрана, журналах або розподіленій мобільній програмі. Викличте Wordly API зі свого серверного модуля та дозвольте своїй програмі спілкуватися з цим серверним модулем.

Локалізовані повідомлення API

Установіть мову відповіді за допомогою ?lang=tr або стандарт Accept-Language заголовок. Параметри запиту мають пріоритет. Кожна відповідь JSON оголошує вибрану мову Content-Language і meta.lang. Коди помилок залишаються стабільними англійською мовою для програмної обробки; локалізовано лише повідомлення, яке читається людиною.

curl "https://api.wordlyenglish.com/v1/account?lang=tr" \
  -H "Authorization: Bearer $WORDLY_API_KEY" \
  -H "Accept-Language: tr-TR"

Підтримувані мовні коди: 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.

Кредити та виставлення рахунків

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.

ОпераціяВартість кредитуДоступність
GET /v1/status0Жити
GET /v1/account0Жити
GET /v1/words/{word}1–5Жити
GET /v1/words/search1Жити
GET /v1/words/random1 на словоЖити
POST /v1/words/batchНа основі повернутих записівЖити

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 і не обробляє операцію.

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"
  }
}

Життєвий цикл ключа API

Створіть окремі ключі для розробки, постановки та виробництва. Wordly зберігає лише криптографічний хеш кожного ключа; повне значення відображається один раз під час створення.

  • Назвіть ключі за середовищем або послугою.
  • Використовуйте змінні середовища або кероване секретне сховище.
  • Негайно анулюйте ключ, якщо він міг бути розкритий.
  • Обертайте ключі без повторного використання старих значень.
  • Не надсилайте ключі в рядках запиту.

Формат відповіді

Успішні відповіді використовують верхній рівень data об'єкт і може включати a meta об'єкт. Помилки завжди використовують верхній рівень error об'єкт зі стабільним машинозчитуваним code і зрозумілий для людини message.

Успішний запит
{
  "data": { ... },
  "meta": {
    "credits_used": 1,
    "request_id": "..."
  }
}
Невдалий запит
{
  "error": {
    "code": "invalid_api_key",
    "message": "..."
  }
}

Тримайте request_id під час звернення до служби підтримки щодо успішного запиту на оплату. JSON має кодування UTF-8, і клієнти повинні надсилати його 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.

Посилання на кінцеву точку

Кінцеві точки виробництва

ОТРИМАТИ/v1/statusЖити

Повертає інформацію про стан загальнодоступної служби та версію API. Ця кінцева точка не потребує автентифікації та коштує нуль кредитів.

Приклад запиту

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.
ОТРИМАТИ/v1/accountLive · 0 credits

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

Заголовки

Ім'яОбов'язковийопис
AuthorizationтакBearer wly_live_...
AcceptРекомендованоapplication/json

Заголовки відповідей

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.

Кінцеві точки словникового запасу

20 000+ записів каталогу доступні.

Кожен запис повідомляє про своє completeness як catalog, translated, або enriched. Недоступні поля повертаються як null або порожній об'єкт замість вигаданих даних.

GET /v1/words/{word}

Повертає точний збіг слова. використання languages=tr,de,fr щоб повернути лише запитувані переклади. Каталог або перекладені записи коштують 1 кредит; повністю збагачені профілі коштують 5 кредитів.

curl "https://api.wordlyenglish.com/v1/words/water?languages=tr,de" \
  -H "Authorization: Bearer $WORDLY_API_KEY"

GET /v1/words/search

Пошук за допомогою q і необов'язковий level, part_of_speech, category, limit, і cursor. Ліміти варіюються від 1 до 50. Пас meta.next_cursor у наступний запит.

curl "https://api.wordlyenglish.com/v1/words/search?q=app&level=advanced&limit=20" \
  -H "Authorization: Bearer $WORDLY_API_KEY"

GET /v1/words/random

Повертає 1–20 випадкових слів. Фільтрувати за level, part_of_speech, або category. Кожен повернутий слот коштує один кредит.

POST /v1/words/batch

Шукає від 1 до 50 унікальних слів в одному запиті. Відповідь зберігає порядок запитів і позначає кожен елемент 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

Повертає всі 30 підтримуваних локалей інтерфейсу та API-повідомлень. Переклади словника повертаються лише за наявності. Ця кінцева точка є загальнодоступною та не коштує нульових кредитів.

Ліміт тарифу

Кожен ключ API обмежено 120 прийнятими запитами на хвилину. Відповіді включають X-RateLimit-Limit і X-RateLimit-Remaining. А 429 rate_limit_exceeded відповідь включає Retry-After: 60.

ОТРИМАТИ/v1/languagesLive · 0 credits

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

Query parameters

Ім'яTypeОбов'язковийRulesопис
langstringNoSupported locale codeLanguage for human-readable messages.

Приклад запиту

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.
ОТРИМАТИ/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

Ім'яLocationTypeОбов'язковийRules and meaning
wordPathstringтакExact 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.

Приклад запиту

оболонка
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.
ОТРИМАТИ/v1/words/randomLive · 1 credit per requested slot

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

Query parameters

Ім'яTypeОбов'язковийDefault / limitопис
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.

Приклад запиту

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.

Заголовки

Ім'яОбов'язковийValue
AuthorizationтакBearer wly_live_...
Content-Typeтакapplication/json
AcceptРекомендованоapplication/json

JSON body

FieldTypeОбов'язковийRulesопис
wordsstring[]так1–50 items; each max 120 charsWords to resolve; duplicates are normalized and removed.
languagesstring[]NoSupported locale codesTranslations to include.

Приклад запиту

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

FieldTypeNullableопис
idstringNoStable URL-safe slug.
wordstringNoCanonical English word.
part_of_speechstringтакGrammatical class.
levelstringтакLearning difficulty or catalog level.
definitionstringтакConcise English definition.
examplestringтакNatural example sentence.
phoneticstringтакPronunciation 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 stringтакLearning image URL.
media.audio_urlURL stringтакPronunciation audio URL.
media.attributionobjectNoRequired media attribution metadata.
completenessenumNocatalog, translated, або enriched.

Meta object

FieldTypeWhen presentопис
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

FieldTypeопис
error.codestringStable machine-readable code.
error.messagestringLocalized human-readable explanation.
error.upgrade_urlstringRelative billing URL on a 402 result.
meta.langstringError-message locale.

Помилки

HTTPКодЗначенняДії клієнта
401invalid_api_keyКлюч відсутній, неправильно сформований, відкликаний або неактивний.Перевірте заголовок Bearer або замініть ключ.
402credits_exhaustedНа рахунку немає кредитів для операції.Зупиніть повторні спроби та спрямуйте клієнта до виставлення рахунків.
404not_foundЗапитана кінцева точка недоступна.Перевірте шлях і версію API.
404word_not_foundПотрібний словниковий запис недоступний.Перевірте правопис або скористайтеся пошуком.
422invalid_requestПараметр або тіло пакета недійсні.Виправте запит перед повторною спробою.
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_exceededКлюч API перевищив 120 запитів на хвилину.Зачекайте Retry-After.
5ххserver_errorНеочікувана помилка на стороні сервера.Повторити з відстрочкою; зв’яжіться зі службою підтримки, якщо це не зникне.

Рекомендована політика повторних спроб

Не повторюйте 401, 402, або 404 автоматично. Для тимчасових 5xx відповіді, використовуйте експоненціальне відставання з тремтінням і суворим обмеженням повторних спроб. Ніколи не створюйте необмежений цикл повторних спроб, оскільки кожен прийнятий автентифікований запит може споживати кредити.

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);

Дарт / Флаттер

Не надсилайте ключ Worldly у програму Flutter. Приклад належить до надійної функції Dart backend або сервера.

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']);
}

Контрольний лист виробництва

  • Проксі-сервер запитує Worldly через надійну серверну частину.
  • Встановіть тайм-аути підключення та відповіді.
  • Ручка 401, 402, 404, і 5xx окремо.
  • Query GET /v1/account when your application needs the current balance.
  • Журнал кінцевої точки, статусу, затримки та request_id без реєстрації ключа API.
  • Використовуйте окремі ключі для кожного середовища та періодично змінюйте їх.
  • Cache stable vocabulary responses in your backend when appropriate.

Готові зробити свій перший запит?

Створіть обліковий запис, підтвердьте свою електронну адресу та отримайте 50 безкоштовних кредитів.

Створіть безкоштовний обліковий запис

Потрібна допомога з інтеграцією? Електронна пошта [email protected].