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

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

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

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

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

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

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

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

2. ثبّت SDK

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

npm install kalimalab
pnpm add kalimalab
yarn add kalimalab
bun add kalimalab

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

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

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

KALIMALAB_API_KEY=klmt_live_your_key_here
import { KalimaLab } from 'kalimalab'const client = new KalimaLab({ apiKey: process.env.KALIMALAB_API_KEY! })// Get today's word of the day (0 DP if cached)const word = await client.words.daily()console.log(word.lemma)        // كَتَبَconsole.log(word.primaryGloss) // "to write"console.log(word.primaryPos)   // "verb"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} lemmas`)results.data.forEach((w) => console.log(w.lemma))

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

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

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

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

{  "data": {    "lemma": "كَتَبَ",    "primaryPos": "verb",    "primaryGloss": "to write",    "root": "كتب",    "pattern": "فَعَلَ",    "transliteration": "kataba",    "frequencyRank": 143  },  "error": null,  "meta": {    "requestId": "req_01j9xyz...",    "responseTimeMs": 8  }}
lemmaالكلمة بتشكيل كامل.
primaryPosتصنيف الكلام: فعل، اسم، صفة، أو حرف.
rootالجذر العربي — الأساس الثلاثي أو الرباعي.
patternالوزن الصرفي (وزن) بصيغة فعل.
transliterationالتحويل الصوتي وفق ALA-LC.
frequencyRankرتبة تردد الاستخدام (1 = الأكثر تردداً).

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

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

{  "data": [    {      "lemma": "كَتَبَ",      "primaryPos": "verb",      "primaryGloss": "to write",      "root": "كتب",      "pattern": "فَعَلَ",      "transliteration": "kataba",      "frequencyRank": 47    }  ],  "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 (استنفاد ميزانية النقاط).

import { KalimaLab, AuthError, RateLimitError } from 'kalimalab'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. الخطوات التالية

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