با 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 هدر با استفاده از طرح حامل.
Authorization: Bearer wly_live_your_api_keyهرگز یک کلید زنده را در جاوا اسکریپت مرورگر، مخازن عمومی 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. |
| 5xx | server_error | خرابی غیرمنتظره سمت سرور. | سعی مجدد با عقب نشینی. در صورت تداوم با پشتیبانی تماس بگیرید. |
سیاست امتحان مجدد توصیه شده
دوباره امتحان نکنید 401, 402، یا 404 به صورت خودکار برای گذرا 5xx در پاسخها، از عقبنشینی نمایی با جیتر و یک کلاه برای تکرار مجدد استفاده کنید. هرگز یک حلقه تلاش مجدد نامحدود ایجاد نکنید زیرا هر درخواست تایید شده پذیرفته شده ممکن است اعتبار مصرف کند.
جاوا اسکریپت / 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']);
}چک لیست تولید
- Proxy Wordly از طریق یک Backend قابل اعتماد درخواست می کند.
- زمانبندی اتصال و پاسخ را تنظیم کنید.
- دسته
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].