Xây dựng với API Wordly.
Sử dụng khóa API phía máy chủ, thực hiện các yêu cầu HTTPS và theo dõi mọi cuộc gọi thông qua mô hình thanh toán dựa trên tín dụng có thể dự đoán được. Tài liệu tham khảo này ghi lại các điểm cuối hiện có sẵn trong sản xuất và đánh dấu rõ ràng các điểm cuối vẫn đang được chuẩn bị.
Bắt đầu nhanh
Tạo một tài khoản miễn phí, xác minh email của bạn bằng mã gồm sáu chữ số và sao chép khóa API được hiển thị một lần trong trang tổng quan dành cho nhà phát triển của bạn.
- 1Tạo một tài khoản
Đăng ký chỉ với một địa chỉ email và mật khẩu.
- 2Xác minh email của bạn
Nhập mã được gửi bởi
[email protected]. Verification grants 50 free credits. - 3Lưu trữ khóa API của bạn
Sao chép được tạo
wly_live_...key và giữ nó trong biến môi trường phía máy chủ. - 4Đưa ra yêu cầu kiểm tra
Gọi tới điểm cuối tài khoản để xác minh xác thực và xem số dư còn lại.
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 cơ sở và phiên bản
Tất cả các điểm cuối sản xuất đều được phân phối từ URL cơ sở được phiên bản sau:
https://api.wordlyenglish.com/v1Các thay đổi về phản hồi hoặc hành vi sẽ sử dụng phiên bản đường dẫn mới. Các trường bổ sung có thể được giới thiệu trong v1, so clients should ignore response properties they do not recognize.
Xác thực
Điểm cuối được xác thực yêu cầu khóa API trong HTTP Authorization tiêu đề bằng cách sử dụng lược đồ Bearer.
Authorization: Bearer wly_live_your_api_keyKhông bao giờ đặt khóa trực tiếp trong JavaScript của trình duyệt, kho lưu trữ Git công khai, ảnh chụp màn hình, nhật ký hoặc ứng dụng di động được phân phối. Gọi API Wordly từ chương trình phụ trợ của bạn và để ứng dụng của riêng bạn giao tiếp với chương trình phụ trợ đó.
Thông báo API được bản địa hóa
Đặt ngôn ngữ phản hồi với ?lang=tr hoặc tiêu chuẩn Accept-Language tiêu đề. Các tham số truy vấn được ưu tiên. Mọi phản hồi JSON đều khai báo ngôn ngữ đã chọn trong Content-Language và meta.lang. Error codes remain stable in English for programmatic handling; only the human-readable message is localized.
curl "https://api.wordlyenglish.com/v1/account?lang=tr" \
-H "Authorization: Bearer $WORDLY_API_KEY" \
-H "Accept-Language: tr-TR"Mã ngôn ngữ được hỗ 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.
Tín dụng và thanh toán
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.
| hoạt động | Chi phí tín dụng | sẵn có |
|---|---|---|
GET /v1/status | 0 | Trực tiếp |
GET /v1/account | 0 | Trực tiếp |
GET /v1/words/{word} | 1–5 | Trực tiếp |
GET /v1/words/search | 1 | Trực tiếp |
GET /v1/words/random | 1 per word | Trực tiếp |
POST /v1/words/batch | Căn cứ vào hồ sơ trả về | Trực tiếp |
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 và không xử lý hoạt động.
{
"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 key lifecycle
Tạo các khóa riêng biệt để phát triển, dàn dựng và sản xuất. Wordly chỉ lưu trữ hàm băm mật mã của mỗi khóa; giá trị hoàn chỉnh được hiển thị một lần khi tạo.
- Đặt tên cho các khóa theo môi trường hoặc dịch vụ.
- Sử dụng các biến môi trường hoặc một kho lưu trữ bí mật được quản lý.
- Thu hồi chìa khóa ngay lập tức nếu nó có thể bị lộ.
- Xoay phím mà không sử dụng lại giá trị cũ.
- Không gửi khóa trong chuỗi truy vấn.
Định dạng phản hồi
Phản hồi thành công sử dụng cấp cao nhất data đối tượng và có thể bao gồm một meta đối tượng. Lỗi luôn sử dụng mức cao nhất error đối tượng có thể đọc được bằng máy ổn định code và con người có thể đọc được message.
{
"data": { ... },
"meta": {
"credits_used": 1,
"request_id": "..."
}
}{
"error": {
"code": "invalid_api_key",
"message": "..."
}
}Giữ request_id khi liên hệ với bộ phận hỗ trợ về yêu cầu thanh toán thành công. JSON được mã hóa UTF-8 và khách hàng nên gửi 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.
Điểm cuối sản xuất
/v1/statusTrực tiếpTrả về thông tin phiên bản API và trạng thái dịch vụ công cộng. Điểm cuối này không yêu cầu xác thực và không tốn tín dụng.
Yêu cầu mẫu
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.
Tiêu đề
| Tên | Bắt buộc | Mô tả |
|---|---|---|
Authorization | Có | Bearer wly_live_... |
Accept | Được đề xuất | application/json |
Tiêu đề phản hồi
X-Credits-Remaining is returned only by this balance endpoint.
200 · Success
{
"data": { "message": "Authenticated", "credits_remaining": 1250 },
"meta": { "lang": "en" }
}Điểm cuối từ vựng
Mọi hồ sơ đều báo cáo completeness như catalog, translated, or enriched. Fields that are not available are returned as null hoặc một đối tượng trống rỗng thay vì dữ liệu được phát minh.
GET /v1/words/{word}
Trả về một từ khớp chính xác. sử dụng languages=tr,de,fr chỉ trả lại các bản dịch được yêu cầu. Danh mục hoặc bản dịch có giá 1 tín chỉ; hồ sơ được làm giàu đầy đủ có giá 5 tín chỉ.
curl "https://api.wordlyenglish.com/v1/words/water?languages=tr,de" \
-H "Authorization: Bearer $WORDLY_API_KEY"GET /v1/words/search
Tìm kiếm với q và tùy chọn level, part_of_speech, category, limit, and cursor. Limits range from 1 to 50. Pass meta.next_cursor vào yêu cầu tiếp theo.
curl "https://api.wordlyenglish.com/v1/words/search?q=app&level=advanced&limit=20" \
-H "Authorization: Bearer $WORDLY_API_KEY"GET /v1/words/random
Trả về 1–20 từ ngẫu nhiên. Lọc theo level, part_of_speech, or category. Each returned slot costs one credit.
POST /v1/words/batch
Tra cứu từ 1 đến 50 từ duy nhất trong một yêu cầu. Phản hồi duy trì thứ tự yêu cầu và đánh dấu mọi mục bằng 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
Trả về tất cả 30 ngôn ngữ giao diện và thông báo API được hỗ trợ. Bản dịch từ vựng chỉ được trả lại khi có sẵn. Điểm cuối này là công khai và không tốn tín dụng.
Giới hạn tỷ lệ
Mỗi khóa API được giới hạn ở 120 yêu cầu được chấp nhận mỗi phút. Phản hồi bao gồm X-RateLimit-Limit và X-RateLimit-Remaining. A 429 rate_limit_exceeded phản ứng bao gồm 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
| Tên | Type | Bắt buộc | Rules | Mô tả |
|---|---|---|---|---|
lang | string | No | Supported locale code | Language for human-readable messages. |
Yêu cầu mẫu
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
| Tên | Location | Type | Bắt buộc | Rules and meaning |
|---|---|---|---|---|
word | Path | string | Có | 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. |
Yêu cầu mẫu
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/searchTrực tiếp · 1 tín chỉSearches active vocabulary in alphabetical order. Use the returned cursor for stable forward pagination.
Query parameters
| Tên | Type | Bắt buộc | Default / limit | Mô tả |
|---|---|---|---|---|
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. |
Yêu cầu mẫu
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
| Tên | Type | Bắt buộc | Default / limit | Mô tả |
|---|---|---|---|---|
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. |
Yêu cầu mẫu
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.
Tiêu đề
| Tên | Bắt buộc | Value |
|---|---|---|
Authorization | Có | Bearer wly_live_... |
Content-Type | Có | application/json |
Accept | Được đề xuất | application/json |
JSON body
| Field | Type | Bắt buộc | Rules | Mô tả |
|---|---|---|---|---|
words | string[] | Có | 1–50 items; each max 120 chars | Words to resolve; duplicates are normalized and removed. |
languages | string[] | No | Supported locale codes | Translations to include. |
Yêu cầu mẫu
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 | Mô tả |
|---|---|---|---|
id | string | No | Stable URL-safe slug. |
word | string | No | Canonical English word. |
part_of_speech | string | Có | Grammatical class. |
level | string | Có | Learning difficulty or catalog level. |
definition | string | Có | Concise English definition. |
example | string | Có | Natural example sentence. |
phonetic | string | Có | 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 | Có | Learning image URL. |
media.audio_url | URL string | Có | Pronunciation audio URL. |
media.attribution | object | No | Required media attribution metadata. |
completeness | enum | No | catalog, translated, or enriched. |
Meta object
| Field | Type | When present | Mô tả |
|---|---|---|---|
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 | Mô tả |
|---|---|---|
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. |
Lỗi
| HTTP | Mã | Ý nghĩa | Hành động của khách hàng |
|---|---|---|---|
| 401 | invalid_api_key | Khóa bị thiếu, không đúng định dạng, bị thu hồi hoặc không hoạt động. | Kiểm tra tiêu đề Bearer hoặc thay thế khóa. |
| 402 | credits_exhausted | Tài khoản thiếu tín dụng cho hoạt động. | Dừng thử lại và hướng dẫn khách hàng thanh toán. |
| 404 | not_found | Điểm cuối được yêu cầu không có sẵn. | Kiểm tra đường dẫn và phiên bản API. |
| 404 | word_not_found | Mục nhập từ vựng được yêu cầu không có sẵn. | Kiểm tra chính tả hoặc sử dụng tìm kiếm. |
| 422 | invalid_request | Một tham số hoặc nội dung lô không hợp lệ. | Hãy sửa yêu cầu trước khi thử lại. |
| 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 | Khóa API đã vượt quá 120 yêu cầu mỗi phút. | Wait for Retry-After. |
| 5xx | server_error | Một lỗi phía máy chủ không mong muốn. | Thử lại với thời gian chờ; liên hệ với bộ phận hỗ trợ nếu vẫn tiếp tục. |
Chính sách thử lại được đề xuất
Đừng thử lại 401, 402, or 404 tự động. Dành cho thoáng qua 5xx phản hồi, hãy sử dụng thời gian chờ theo cấp số nhân với jitter và giới hạn thử lại nghiêm ngặt. Không bao giờ tạo vòng thử lại không giới hạn vì mỗi yêu cầu được xác thực được chấp nhận có thể tiêu tốn tín dụng.
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);Phi tiêu / rung
Không gửi khóa Wordly bên trong ứng dụng Flutter. Ví dụ này thuộc về chức năng máy chủ hoặc chương trình phụ trợ Dart đáng tin cậy.
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']);
}Danh sách kiểm tra sản xuất
- Proxy Wordly yêu cầu thông qua một chương trình phụ trợ đáng tin cậy.
- Đặt thời gian chờ kết nối và phản hồi.
- xử lý
401,402,404, and5xxriêng biệt. - Query
GET /v1/accountwhen your application needs the current balance. - Ghi nhật ký điểm cuối, trạng thái, độ trễ và
request_idmà không cần đăng nhập khóa API. - Sử dụng các khóa riêng biệt cho mỗi môi trường và xoay chúng theo định kỳ.
- Cache stable vocabulary responses in your backend when appropriate.
Sẵn sàng thực hiện yêu cầu đầu tiên của bạn?
Tạo một tài khoản, xác minh email của bạn và nhận 50 tín dụng miễn phí.
Cần trợ giúp tích hợp? Email [email protected].