وثائق المطور

البناء باستخدام Wordly API.

استخدم مفتاح واجهة برمجة التطبيقات (API) من جانب الخادم، وقم بإجراء طلبات HTTPS، وتتبع كل مكالمة من خلال نموذج فوترة قائم على الائتمان يمكن التنبؤ به. يوثق هذا المرجع نقاط النهاية المتوفرة حاليًا في الإنتاج ويحدد بوضوح نقاط النهاية التي لا تزال قيد الإعداد.

نسخة API الإصدار 1التنسيق JSONالنقل HTTPS فقطرصيد مجاني 50 ساعة معتمدةواجهة برمجة التطبيقات المفتوحة تنزيل المخططPostman CollectionPostman Environment

بداية سريعة

أنشئ حسابًا مجانيًا، وتحقق من بريدك الإلكتروني باستخدام الرمز المكون من ستة أرقام، وانسخ مفتاح واجهة برمجة التطبيقات الذي يظهر مرة واحدة في لوحة تحكم المطور.

  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 رأس باستخدام مخطط Bearer.

Authorization: Bearer wly_live_your_api_key
لا تكشف عن مفاتيح API.

لا تضع أبدًا مفتاحًا مباشرًا في متصفح JavaScript أو مستودعات Git العامة أو لقطات الشاشة أو السجلات أو تطبيقات الهاتف المحمول الموزعة. اتصل بـ Wordly API من الواجهة الخلفية لديك واسمح لتطبيقك بالتواصل مع تلك الواجهة الخلفية.

رسائل API المترجمة

اضبط لغة الرد باستخدام ?lang=tr أو المعيار Accept-Language header. معلمات الاستعلام لها الأسبقية. تعلن كل استجابة 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.

نقاط نهاية المفردات

أكثر من 20.000 إدخال في الكتالوج مباشر.

كل سجل تقاريره completeness كما catalog, translatedأو enriched. يتم إرجاع الحقول غير المتوفرة كـ null أو كائن فارغ بدلاً من البيانات المخترعة.

GET /v1/words/{word}

إرجاع مطابقة تامة للكلمة. استخدم languages=tr,de,fr لإرجاع الترجمات المطلوبة فقط. تكلفة الكتالوج أو السجلات المترجمة هي رصيد واحد؛ تكلف الملفات الشخصية المخصبة بالكامل 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

إرجاع كافة اللغات المدعومة للواجهة والرسائل 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مفتاح مفقود أو مشوه أو ملغى أو غير نشط.تحقق من رأس Bearer أو استبدل المفتاح.
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 من خلال واجهة خلفية موثوقة.
  • ضبط مهلة الاتصال والاستجابة.
  • مقبض 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].