مستندات توسعه دهنده

با 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 پایه نسخه شده زیر ارائه می شوند:

URL پایهhttps://api.wordlyenglish.com/v1

شکستن پاسخ یا تغییر رفتار از یک نسخه مسیر جدید استفاده می کند. فیلدهای افزودنی ممکن است در داخل معرفی شوند v1، بنابراین مشتریان باید ویژگی های پاسخی را که نمی شناسند نادیده بگیرند.

احراز هویت

نقاط پایانی تأیید شده به یک کلید API در HTTP نیاز دارند Authorization هدر با استفاده از طرح حامل.

Authorization: Bearer wly_live_your_api_key
کلیدهای API را در معرض دید قرار ندهید.

هرگز یک کلید زنده را در جاوا اسکریپت مرورگر، مخازن عمومی 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.

نقاط پایانی واژگان

بیش از 20000 ورودی کاتالوگ به صورت زنده هستند.

هر رکورد خود را گزارش می کند 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.
5xxserver_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/account when your application needs the current balance.
  • ورود به سیستم نقطه پایانی، وضعیت، تأخیر و request_id بدون ورود به سیستم کلید API.
  • از کلیدهای جداگانه در هر محیط استفاده کنید و آنها را به صورت دوره ای بچرخانید.
  • Cache stable vocabulary responses in your backend when appropriate.

برای ارائه اولین درخواست خود آماده اید؟

یک حساب کاربری ایجاد کنید، ایمیل خود را تأیید کنید و 50 اعتبار رایگان دریافت کنید.

ایجاد حساب کاربری رایگان

آیا به کمک ادغام نیاز دارید؟ ایمیل [email protected].