البداية السريعة

قدّم طلبك الأول إلى واجهة برمجة الكلمات العربية في أقل من 5 دقائق.

1أنشئ حساباً في كلمات واحصل على مفتاح API الخاص بك
2ثبّت TypeScript SDK
3قدّم طلبك الأول
4استكشف الاستجابة
5الخطوات التالية
1

أنشئ حساباً واحصل على مفتاح API الخاص بك

توجّه إلى لوحة تحكم كلمات وأنشئ حساباً مجانياً. بعد تسجيل الدخول، انتقل إلى لوحة التحكم ← مفاتيح API وانقر على "إنشاء مفتاح API".

انسخ مفتاحك فوراً

يُعرض مفتاح API مرة واحدة فقط. خزّنه في مدير كلمات المرور أو ملف .env فوراً.

سيبدو مفتاحك هكذا: klmt_live_••••••••••••••••••••

2

ثبّت SDK

ثبّت حزمة @kalimalab/sdk الرسمية. تعمل في Node.js وDeno وBun وأي بيئة تشغيل JavaScript حديثة.

bash
npm install @kalimalab/sdk
bash
pnpm add @kalimalab/sdk
bash
yarn add @kalimalab/sdk
bash
bun add @kalimalab/sdk

يتطلب SDK استخدام Node.js 18+ أو أي بيئة تشغيل تدعم fetch نشطاً.

3

قدّم طلبك الأول

أضف مفتاح API إلى متغيرات البيئة، ثم اكتب سكريبتك الأولى:

.env
KALIMALAB_API_KEY=klmt_live_your_key_here
first-request.ts
import { KalimaLab } from '@kalimalab/sdk'const client = new KalimaLab({ apiKey: process.env.KALIMALAB_API_KEY! })// Get a random Arabic wordconst word = await client.words.random()console.log(word.arabic)     // e.g. "كَتَبَ"console.log(word.meaning_en) // "to write"console.log(word.root)       // "كتب"console.log(word.pattern)    // "فَعَلَ"// Search for 5-letter nounsconst results = await client.words.search({ letters: 5, pos: 'noun', limit: 10 })console.log(`Found ${results.meta.total} words`)results.data.forEach((w) => console.log(w.arabic))

تستخدم REST API مباشرةً؟

يمكنك أيضاً استدعاء API دون SDK باستخدام أي عميل HTTP. راجع دليل المصادقة للاطلاع على أمثلة الترويسات مع cURL وPython والمزيد.دليل المصادقة
4

استكشف الاستجابة

هكذا تبدو استجابة الكلمة النموذجية. كل كائن كلمة يتضمن بيانات لغوية وصفية:

response.json
{  "data": {    "id": "word_01j9abc123",    "arabic": "كَتَبَ",    "root": "كتب",    "pattern": "فَعَلَ",    "pos": "verb",    "meaning_en": "to write",    "meaning_ar": "قام بالكتابة",    "transliteration": "kataba",    "frequency_rank": 143,    "example_sentence": "كَتَبَ الطالبُ الدرسَ"  },  "error": null,  "meta": {    "requestId": "req_01j9xyz...",    "responseTimeMs": 8  }}
arabicالكلمة بتشكيل كامل.
rootالجذر العربي — الأساس الثلاثي أو الرباعي.
patternالوزن الصرفي (وزن) بصيغة فعل.
posتصنيف الكلام: فعل، اسم، صفة، أو حرف.
transliterationالتحويل الصوتي وفق ALA-LC.
frequency_rankرتبة تردد الاستخدام (1 = الأكثر تردداً).

استجابة البحث المُصفّى

عند تصفية الكلمات — مثلاً بعدد الأحرف أو الجذر — يُعيد API قائمة مرقّمة. هذا هو الشكل الكامل لاستجابة GET /v1/words?letters=3&root=كتب:

response.json
{  "data": [    {      "id": "wrd_001",      "word": "كَتَبَ",      "meaning_en": "to write",      "meaning_ar": "قام بفعل الكتابة",      "part_of_speech": "verb",      "letter_count": 3,      "root": "كتب",      "pattern": "فَعَلَ",      "frequency_rank": 47,      "is_verb": true    }  ],  "error": null,  "meta": {    "requestId": "req_abc123",    "responseTimeMs": 12,    "page": 1,    "limit": 20,    "total": 47,    "totalPages": 3  }}
meta.pageرقم الصفحة الحالية (يبدأ من 1).
meta.limitعدد النتائج في الصفحة (حتى 100).
meta.totalإجمالي عدد الكلمات المطابقة عبر جميع الصفحات.
meta.totalPagesإجمالي الصفحات المتاحة لهذا الاستعلام.
meta.responseTimeMsوقت المعالجة من جانب الخادم بالمللي ثانية.

معالجة الأخطاء

تحقق دائماً من نجاح الاستجابة قبل استخدام البيانات. أكثر خطأين شائعين هما 401 Unauthorized (مفتاح خاطئ أو مفقود) و429 Too Many Requests (تجاوز حد الطلبات).

with-error-handling.ts
import { KalimaLab, AuthError, RateLimitError } from '@kalimalab/sdk'const client = new KalimaLab({ apiKey: process.env.KALIMALAB_API_KEY! })async function safeSearch(letters: number, root: string) {  try {    const results = await client.words.search({ letters, root, limit: 20 })    return results.data  } catch (err) {    if (err instanceof AuthError) {      // 401 — key is missing, invalid, or revoked      console.error('Check your KALIMALAB_API_KEY environment variable.')      throw err    }    if (err instanceof RateLimitError) {      // 429 — too many requests; wait until the limit resets      const waitMs = err.resetAt.getTime() - Date.now()      console.warn(`Rate limited. Retrying in ${Math.ceil(waitMs / 1000)}s.`)      await new Promise((r) => setTimeout(r, waitMs))      return safeSearch(letters, root) // retry once    }    throw err // unexpected error — let it bubble up  }}const words = await safeSearch(3, 'كتب')console.log(words)

مرجع الأخطاء الكامل

للاطلاع على قائمة كاملة برموز الأخطاء ورموز حالة HTTP وإرشادات إعادة المحاولة، راجع صفحة معالجة الأخطاء.معالجة الأخطاء
5

الخطوات التالية

أنت مستعد! إذا واجهت أي مشاكل، تواصل مع الدعم.