Створення за допомогою 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 об'єкт і може включати 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.
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 | Ключ відсутній, неправильно сформований, відкликаний або неактивний. | Перевірте заголовок Bearer або замініть ключ. |
| 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);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/accountwhen your application needs the current balance. - Журнал кінцевої точки, статусу, затримки та
request_idбез реєстрації ключа API. - Використовуйте окремі ключі для кожного середовища та періодично змінюйте їх.
- Cache stable vocabulary responses in your backend when appropriate.
Готові зробити свій перший запит?
Створіть обліковий запис, підтвердьте свою електронну адресу та отримайте 50 безкоштовних кредитів.
Потрібна допомога з інтеграцією? Електронна пошта [email protected].