جاري فحص الخدمة مباشرة…

المرجع الكامل لـ AI API — للبشر وللآلة

بوابة واحدة متوافقة مع OpenAI لعشرات النماذج: استدعِ POST /api/v1/chat بمفتاح sk_ وادفع بالتوكنات من باقة رصيد — لا اشتراك شهري، والرصيد يمتد حتى استهلاكه كاملاً. و أسعار التوكن لكل مليون تُجلب من المزود وتُحدَّث مع كل مزامنة. ومرجع واتساب في صفحة مستقلة.

30 عملية موثّقةواجهة نماذج AI + إدارتها
محادثة متوافقة مع OpenAI‏POST /api/v1/chat — سطر واحد للتبديل
باقات رصيد تُستهلك بالاستخداملا تنتهي بالزمن — تنتهي عند الاستنفاد

1. نظرة عامة

هذه الصفحة هي المرجع الكامل لواجهة نماذج AI — بوابة متوافقة مع OpenAI تتيح استدعاء عشرات النماذج (GPT وDeepSeek والتمثيلات…) باسمك. هي منصة مستقلة عن واتساب API، لها توثيقها وصفحة أسعارها وصفحة أسئلتها الخاصة: وكل ما في هذه الصفحة يخص AI وحدها.

يستدعي تطبيقك POST /api/v1/chat بمفتاح sk_؛ ومفتاح المزود الخارجي لا يغادر المنصة أبداً، وكل استدعاء يُحتسب بالتوكنات على رصيد المستدعي. أما مرجع واتساب (الجلسات والإرسال وإشعارات التسليم) ففي صفحته الخاصة /docs.

بيانا الدخول اللذان ستواجههما

البيانالصيغةأين يُستخدم
مفتاح AIsk_…استدعاءات المحادثة: عبر X-API-Key أو Bearer أو api_key — فوترة بالتوكنات
جلسة المستخدم (JWT)Authorization: Bearer …مسارات اللوحة: المفاتيح والباقات والاشتراك والاستهلاك
كيف تقرأ هذه الصفحة: أسطر المسارات وأمثلة الكود لغتها محايدة — بدّل لغة الواجهة من الشريط العلوي في أي صفحة. والمواصفة الآلية على GET /openapi.json تضم كل عمليات المنصة الـ212 بما فيها AI.

2. البدء السريع

الرابط الأساسي: https://masarroute.com. كل طلب ورد بـ JSON وUTF-8. ثلاث خطوات: اقرأ الكتالوج العام، أنشئ مفتاح sk_، ثم نفّذ أول استدعاء محادثة.

GET/api/v1/ai/models
cURL
# Public catalog — model ids with final input/output prices per 1M tokens
curl https://masarroute.com/api/v1/ai/models
  1. أنشئ مفتاح sk_ من لوحة العميل ← AI ← المفاتيح (POST /api/v1/ai/keys). يُعرض مرة واحدة ويُخزَّن مُجزّأاً.
  2. اختر باقة رصيد: الباقة المجانية تتفعّل فوراً (POST /api/v1/ai/subscription/subscribe)، والمدفوعة تعود بـ PAYMENT_REQUIRED حتى يتأكد الدفع.
  3. استدعِ النموذج — والبوابتان (الباقة الفعّالة والرصيد المتبقي) تعودان بـ 402 أو 429 عند نفاد أيٍّ منهما.
POST/api/v1/chat
cURL
# OpenAI-compatible chat — your sk_ key, our metering in tokens
curl -X POST "https://masarroute.com/api/v1/chat" \
  -H "X-API-Key: sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"Hello"}]}'
JSON — response
{
  "success": true,
  "model": "gpt-4o-mini",
  "response": "Hello! How can I help you today?",
  "usage": { "prompt_tokens": 12, "completion_tokens": 30, "total_tokens": 42 },
  "cost": { "sale_price": 0.0001 }
}

من opencode أو أي مكتبة OpenAI

‏POST /api/v1/chat/completions يتكلّم OpenAI خالصاً: جسم الطلب يمرّ كما هو دون تحويل (‏tools وtool_choice وtemperature وmax_tokens…)، وstream:true يُجاب ببث SSE، والأخطاء بصيغة OpenAI ‏(error.message). وGET /api/v1/models يدرج النماذج بصيغة OpenAI — وكلاهما يُفوَّت بالطريقة نفسها تماماً مثل POST /api/v1/chat. والنماذج المجانية (سعر بيع صفري) تعمل بمفتاح sk_ فقط — دون اشتراك أو رصيد؛ والمدفوعة تتطلب باقة فعّالة بحصة أو رصيداً دولارياً.

cURL — stream:true
# SSE streaming — usage arrives in the final chunk before [DONE]
curl -N -X POST "https://masarroute.com/api/v1/chat/completions" \
  -H "X-API-Key: sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-6-sol","messages":[{"role":"user","content":"Hello"}],"stream":true}'
JSON — opencode.json
{
  "provider": {
    "rawi": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Rawi AI",
      "options": { "baseURL": "https://masarroute.com/api/v1" },
      "models": { "gpt-6-sol": {}, "claude-sonnet-5.5": {} }
    }
  }
}

أضف المفتاح من شاشة /connect ← Other ← معرّف المزوّد rawi (يُخزَّن في options.apiKey)، ثم اختر أي معرّف نموذج يعيده GET /api/v1/models.

أمثلة بلغتك

PHP
$ch = curl_init("https://masarroute.com/api/v1/chat");
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_POST          => true,
  CURLOPT_HTTPHEADER    => ["X-API-Key: sk_live_...", "Content-Type: application/json"],
  CURLOPT_POSTFIELDS    => json_encode([
    "model"    => "gpt-4o-mini",
    "messages" => [["role" => "user", "content" => "Hello"]],
  ]),
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
echo $data["response"];
Laravel
use Illuminate\Support\Facades\Http;

$res = Http::withHeaders(["X-API-Key" => config("services.ai.key")])
    ->post("https://masarroute.com/api/v1/chat", [
        "model"    => "gpt-4o-mini",
        "messages" => [["role" => "user", "content" => "Hello"]],
    ])
    ->throw()
    ->json();

return response()->json(["reply" => $res["response"]]);
Node.js
const r = await fetch("https://masarroute.com/api/v1/chat", {
  method: "POST",
  headers: { "X-API-Key": "sk_live_...", "Content-Type": "application/json" },
  body: JSON.stringify({
    model: "gpt-4o-mini",
    messages: [{ role: "user", content: "Hello" }],
  }),
});
const data = await r.json();
if (!r.ok) throw new Error(data.code || "request failed");
console.log(data.response, data.usage.total_tokens);
Python
import requests

r = requests.post(
    "https://masarroute.com/api/v1/chat",
    headers={"X-API-Key": "sk_live_..."},
    json={"model": "gpt-4o-mini",
          "messages": [{"role": "user", "content": "Hello"}]},
    timeout=60,
)
r.raise_for_status()
data = r.json()
print(data["response"], data["usage"]["total_tokens"])

3. المصادقة

الترويسة أو المعاملالقيمةالمستخدم
X-API-Keysk_live_…‏POST /api/v1/chat و POST /api/v1/chat/completions و GET /api/v1/chat/models و GET /api/v1/models
AuthorizationBearer sk_live_…نفس المسارات الأربعة — أي من الترويستين يعمل
api_keysk_live_…معامل في الرابط — للمحاولات السريعة فقط
AuthorizationBearer JWTمسارات المفاتيح والاستهلاك والاشتراك من اللوحة

بوابتان تفتحان كل استدعاء: باقة رصيد فعّالة (وإلا 402 ‏NO_AI_PLAN) وحصة متبقية (وإلا 429 ‏AI_QUOTA_EXHAUSTED). المفاتيح تُخزَّن مُجزّأة — أنشئ واحداً وانسخه مرة واحدة، ثم دوّر بدل استرجاعه.

حدّ الاستدعاءات: التزم بـ Retry-After في ردود 429 (وأيضاً retry_after) قبل إعادة المحاولة. والبث stream:true مدعوم على POST /api/v1/chat/completions بصيغة SSE — أمّا POST /api/v1/chat البسيط فيقبل stream:false فقط.

4. النماذج والأسعار live

الأسعار بالدولار لكل مليون توكن، تُجلب من المزود الخارجي مع كل مزامنة وتُحوَّل إلى عملة المنصة. السعر النهائي يحمل عمولة المنصة وهامش الربح معاً — ما تراه هو ما يُخصم من المستدعي، للدخل والخرج على حدة.

‏GET /api/v1/ai/models عام (بلا مفتاح)، وGET /api/v1/chat/models يتطلب مفتاح sk_ ويعيد النماذج التي يسمح لمفتاحك باستدعائها — وGET /api/v1/models نفس القائمة بصيغة OpenAI.
فحص صحي تلقائي يختبر كل نموذج كل بضع ساعات: 3 إخفاقات متتالية تعطّله (ميت)، والنموذج المجاني الذي يصبح مدفوعاً عند المزود يُعطَّل أيضاً — ويختفي الاثنان من كل القوائم حتى إعادة تفعيلهما من لوحة الإدارة.

5. باقات الرصيد live

باقات AI هي باقات رصيد لا اشتراكات شهرية: تشتري حزمة من التوكنات والطلبات، فتُستهلك مع استدعاءاتك — وتمتد حتى تُستهلك كاملاً، ولا تنتهي بمرور التقويم. وعند نفاد حصة التوكنات أو الطلبات تتوقف الاستدعاءات بـ AI_QUOTA_EXHAUSTED حتى التفعة التالية.

GET/api/v1/ai/plans
POST/api/v1/ai/subscription/subscribe
GET/api/v1/ai/payment-methods
GET/api/v1/ai/usage
  • الباقات المجانية تتفعّل فوراً؛ والمدفوعة تعود بـ PAYMENT_REQUIRED حتى يتأكد الدفع.
  • ‏GET /api/v1/ai/subscription تعيد الباقة الفعّالة مع tokens_used / tokens_limit وrequests_used / requests_limit.
  • تبديل الباقة يبدأ رصيداً جديداً — وحصة الباقة الجديدة تحل محلها فوراً.
  • قائمة الباقات كاملة بأسعارها في صفحة أسعار AI.

6. المفاتيح والاستهلاك

MethodPathالمصادقةالغرض
GET/api/v1/ai/keysJWTقائمة مفاتيحك بادئة sk_ مع آخر استخدام
POST/api/v1/ai/keysJWTإنشاء مفتاح sk_ — يُعرض مرة واحدة ويُخزَّن مُجزّأاً
POST/api/v1/ai/keys/{id}/rotateJWTتدوير المفتاح بعد تسريب مشتبه به
DELETE/api/v1/ai/keys/{id}JWTإبطال المفتاح فوراً
GET/api/v1/ai/usageJWTاستهلاك التوكنات والتكلفة وسعر البيع لكل استدعاء
GET/api/v1/ai/subscriptionJWTالباقة الفعّالة والرصيد المتبقي
GET/api/v1/chat/modelsAI keyالنماذج المتاحة لمفتاحك مع أسعارها النهائية
GET/api/v1/modelsAI keyنفس القائمة بصيغة OpenAI ‏(لمكتبات مثل opencode)

7. رموز الأخطاء

CodeHTTPالمعنى
NO_AI_PLAN402لا توجد باقة رصيد فعّالة — اشترك أولاً
AI_QUOTA_EXHAUSTED429انتهت حصة التوكنات أو الطلبات في الباقة
MODEL_NOT_FOUND404النموذج غير موجود أو معطّل — اسحب /api/v1/chat/models
PROVIDER_ERROR502المزود الخارجي رفض الطلب
PROVIDER_RATE_LIMITED429المزود الخارجي يطبّق حدّاً — انتظر ثم أعد بتدرّج
PROVIDER_UNREACHABLE502تعذّر الوصول إلى المزود — أعد المحاولة بتدرّج
تفرّع على body.code لا على الحالة HTTP. كتالوج الأخطاء الـ78 كاملاً (المشترك بين واتساب وAI) في القسم 14 من توثيق واتساب. ومفتاح المزود الخارجي نفسه لا يظهر في أي رد أبداً.

8. فهرس المسارات الكامل 31

كل عملية AI تُسجّل فعلاً في البوابة. الصفوف لغتها محايدة عن قصد: الطريقة والمسار وبيان الدخول المطلوب.

المفتاح: JWT = ترويسة Bearer من اللوحة · AI key = Bearer sk_… · عام = بلا بيانات. ومجموعات واتساب (178 عملية) في فهرس /docs.

واجهة نماذج AI 14

MethodPathالمصادقة
GET/api/v1/ai/keysJWT
POST/api/v1/ai/keysJWT
DELETE/api/v1/ai/keys/{id}JWT
POST/api/v1/ai/keys/{id}/rotateJWT
GET/api/v1/ai/modelsعام
GET/api/v1/ai/payment-methodsعام
GET/api/v1/ai/plansعام
GET/api/v1/ai/subscriptionJWT
POST/api/v1/ai/subscription/subscribeJWT
GET/api/v1/ai/usageJWT
GET/api/v1/reports/aiJWT
POST/api/v1/chatAI key
POST/api/v1/chat/completionsAI key
GET/api/v1/chat/modelsAI key
GET/api/v1/modelsAI key

الإدارة — AI 16

MethodPathالمصادقة
GET/api/v1/admin/ai/providersJWT إداري
POST/api/v1/admin/ai/providersJWT إداري
PUT/api/v1/admin/ai/providers/{id}JWT إداري
DELETE/api/v1/admin/ai/providers/{id}JWT إداري
POST/api/v1/admin/ai/providers/{id}/syncJWT إداري
POST/api/v1/admin/ai/syncJWT إداري
GET/api/v1/admin/ai/modelsJWT إداري
PUT/api/v1/admin/ai/models/{id}JWT إداري
GET/api/v1/admin/ai/plansJWT إداري
POST/api/v1/admin/ai/plansJWT إداري
PUT/api/v1/admin/ai/plans/{id}JWT إداري
DELETE/api/v1/admin/ai/plans/{id}JWT إداري
GET/api/v1/admin/ai/subscriptionsJWT إداري
POST/api/v1/admin/ai/subscriptions/activateJWT إداري
GET/api/v1/admin/ai/statsJWT إداري
GET/api/v1/admin/ai/logsJWT إداري

9. قواعد الأمان

  1. خزّن مفاتيح sk_ في Secret Manager أو متغير بيئة على الخادم — لا في المستودع أبداً ولا في حزمة متصفح.
  2. مفتاح sk_ واحد لكل بيئة أو مستأجر — تعزل المستدعرين حتى لا يستهلك تسريب واحد رصيدك كله.
  3. دوّر فور أي تسريب مشتبه به (POST /api/v1/ai/keys/{id}/rotate) — المفتاح القديم يموت فوراً.
  4. راقب last_used_at لكل مفتاح؛ منطقة أو حجم غير متوقع هو أول إشارة تسريب.
  5. مفتاح المزود الخارجي لا يغادر المنصة ولا يظهر في أي رد — ولا تطلبه من مستخدميك أبداً.
  6. تفرّع على body.code والتزم بـ Retry-After في 429؛ ولا تُعد المحاولة بعد المهلة عشوائياً — الاستهلاك يُحتسب لكل استدعاء.
  7. الدعم يطلب request_id ورمز الخطأ — ولا يطلب مفتاحاً أبداً. ومن يطلب مفتاحاً بأي قناة فهو مهاجم.