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

Создайте с помощью 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 объект и может включать в себя 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Ключ отсутствует, имеет неверную форму, отозван или неактивен.Проверьте заголовок носителя или замените ключ.
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);

Питон

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

Дротик / Флаттер

Не отправляйте ключ Wordly внутри приложения Flutter. Пример относится к доверенному серверу 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']);
}

Контрольный список производства

  • Прокси-запросы Wordly через доверенный сервер.
  • Установите таймауты соединения и ответа.
  • Ручка 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].