Создайте с помощью Wordly API.
Используйте ключ API на стороне сервера, отправляйте HTTPS-запросы и отслеживайте каждый вызов с помощью модели прогнозируемого выставления счетов на основе кредитов. В этом справочнике документированы конечные точки, доступные в настоящее время в производстве, и четко обозначены конечные точки, которые все еще находятся в стадии подготовки.
Быстрый старт
Создайте бесплатную учетную запись, подтвердите свою электронную почту, используя шестизначный код, и скопируйте ключ API, показанный один раз на панели инструментов разработчика.
- 1Создать учетную запись
Зарегистрируйтесь, указав только адрес электронной почты и пароль.
- 2Подтвердите свой адрес электронной почты
Введите код, отправленный
[email protected]. Проверка дает 50 бесплатных кредитов. - 3Сохраните свой ключ API
Скопируйте созданный
wly_live_...ключ и сохраните его в переменной среды на стороне сервера. - 4Сделать тестовый запрос
Вызовите конечную точку учетной записи, чтобы подтвердить аутентификацию и просмотреть оставшийся баланс.
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" }
}Базовый URL и управление версиями
Все рабочие конечные точки обслуживаются по следующему базовому URL-адресу с версионированием:
https://api.wordlyenglish.com/v1При нарушении реакции или изменения поведения будет использоваться новая версия пути. Аддитивные поля могут быть введены внутри v1, поэтому клиентам следует игнорировать свойства ответа, которые они не распознают.
Аутентификация
Конечным точкам, прошедшим проверку подлинности, требуется ключ API в протоколе HTTP. Authorization заголовок с использованием схемы Bearer.
Authorization: Bearer wly_live_your_api_keyНикогда не размещайте активный ключ в 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/status | 0 | Живи |
GET /v1/account | 0 | Живи |
GET /v1/words/{word} | 1–5 | Живи |
GET /v1/words/search | 1 | Живи |
GET /v1/words/random | 1 за слово | Живи |
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 и не обрабатывает операцию.
{
"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.
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" }
}/v1/accountLive · 0 creditsValidates 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" }
}Конечные точки словаря
Каждая запись сообщает о своем 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 creditsLists all supported interface and API-message locales. Vocabulary translations are returned only when a record contains them.
Query parameters
| Имя | Type | Требуется | Rules | Описание |
|---|---|---|---|---|
lang | string | No | Supported locale code | Language 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" }
}/v1/words/{word}Live · 1–5 creditsReturns one exact vocabulary record. Catalog and translated records cost 1 credit; enriched records cost 5 credits.
Parameters
| Имя | Location | Type | Требуется | Rules and meaning |
|---|---|---|---|---|
word | Path | string | Да | 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. |
Пример запроса
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/searchВ прямом эфире · 1 кредитSearches active vocabulary in alphabetical order. Use the returned cursor for stable forward pagination.
Query parameters
| Имя | Type | Требуется | Default / limit | Описание |
|---|---|---|---|---|
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. |
Пример запроса
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
| Имя | Type | Требуется | Default / limit | Описание |
|---|---|---|---|---|
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. |
Пример запроса
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.
Заголовки
| Имя | Требуется | Value |
|---|---|---|
Authorization | Да | Bearer wly_live_... |
Content-Type | Да | application/json |
Accept | Рекомендуется | application/json |
JSON body
| Field | Type | Требуется | Rules | Описание |
|---|---|---|---|---|
words | string[] | Да | 1–50 items; each max 120 chars | Words to resolve; duplicates are normalized and removed. |
languages | string[] | No | Supported locale codes | Translations 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" }
}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 | Описание |
|---|---|---|---|
id | string | No | Stable URL-safe slug. |
word | string | No | Canonical English word. |
part_of_speech | string | Да | Grammatical class. |
level | string | Да | Learning difficulty or catalog level. |
definition | string | Да | Concise English definition. |
example | string | Да | Natural example sentence. |
phonetic | string | Да | 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 | Да | Learning image URL. |
media.audio_url | URL string | Да | Pronunciation audio URL. |
media.attribution | object | No | Required media attribution metadata. |
completeness | enum | No | catalog, translated, или enriched. |
Meta object
| Field | Type | When present | Описание |
|---|---|---|---|
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 | Описание |
|---|---|---|
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. |
Ошибки
| HTTP | Код | Значение | Действия клиента |
|---|---|---|---|
| 401 | invalid_api_key | Ключ отсутствует, имеет неверную форму, отозван или неактивен. | Проверьте заголовок носителя или замените ключ. |
| 402 | credits_exhausted | На счету не хватает средств для проведения операции. | Прекратите повторные попытки и направьте клиента к выставлению счетов. |
| 404 | not_found | Запрошенная конечная точка недоступна. | Проверьте путь и версию API. |
| 404 | word_not_found | Запрошенная словарная статья недоступна. | Проверьте орфографию или воспользуйтесь поиском. |
| 422 | invalid_request | Недопустимый параметр или тело пакета. | Исправьте запрос перед повторной попыткой. |
| 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 | Ключ 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/accountwhen your application needs the current balance. - Записывать конечную точку, состояние, задержку и
request_idбез регистрации ключа API. - Используйте отдельные ключи для каждой среды и периодически меняйте их.
- Cache stable vocabulary responses in your backend when appropriate.
Готовы сделать свой первый запрос?
Создайте учетную запись, подтвердите свою электронную почту и получите 50 бесплатных кредитов.
Нужна помощь в интеграции? электронная почта [email protected].