1. نظرة عامة
هذه الصفحة هي المرجع الكامل لواجهة نماذج AI — بوابة متوافقة مع OpenAI تتيح استدعاء عشرات النماذج (GPT وDeepSeek والتمثيلات…) باسمك. هي منصة مستقلة عن واتساب API، لها توثيقها وصفحة أسعارها وصفحة أسئلتها الخاصة: وكل ما في هذه الصفحة يخص AI وحدها.
يستدعي تطبيقك POST /api/v1/chat بمفتاح sk_؛ ومفتاح المزود الخارجي لا يغادر المنصة أبداً، وكل استدعاء يُحتسب بالتوكنات على رصيد المستدعي. أما مرجع واتساب (الجلسات والإرسال وإشعارات التسليم) ففي صفحته الخاصة /docs.
بيانا الدخول اللذان ستواجههما
| البيان | الصيغة | أين يُستخدم |
|---|---|---|
| مفتاح AI | sk_… | استدعاءات المحادثة: عبر X-API-Key أو Bearer أو api_key — فوترة بالتوكنات |
| جلسة المستخدم (JWT) | Authorization: Bearer … | مسارات اللوحة: المفاتيح والباقات والاشتراك والاستهلاك |
GET /openapi.json تضم كل عمليات المنصة الـ212 بما فيها AI.2. البدء السريع
الرابط الأساسي: https://masarroute.com. كل طلب ورد بـ JSON وUTF-8. ثلاث خطوات: اقرأ الكتالوج العام، أنشئ مفتاح sk_، ثم نفّذ أول استدعاء محادثة.
# Public catalog — model ids with final input/output prices per 1M tokens curl https://masarroute.com/api/v1/ai/models
- أنشئ مفتاح sk_ من لوحة العميل ← AI ← المفاتيح (
POST /api/v1/ai/keys). يُعرض مرة واحدة ويُخزَّن مُجزّأاً. - اختر باقة رصيد: الباقة المجانية تتفعّل فوراً (
POST /api/v1/ai/subscription/subscribe)، والمدفوعة تعود بـPAYMENT_REQUIREDحتى يتأكد الدفع. - استدعِ النموذج — والبوابتان (الباقة الفعّالة والرصيد المتبقي) تعودان بـ 402 أو 429 عند نفاد أيٍّ منهما.
# 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"}]}'{
"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_ فقط — دون اشتراك أو رصيد؛ والمدفوعة تتطلب باقة فعّالة بحصة أو رصيداً دولارياً.
# 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}'{
"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.
أمثلة بلغتك
$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"];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"]]);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);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-Key | sk_live_… | POST /api/v1/chat و POST /api/v1/chat/completions و GET /api/v1/chat/models و GET /api/v1/models |
Authorization | Bearer sk_live_… | نفس المسارات الأربعة — أي من الترويستين يعمل |
api_key | sk_live_… | معامل في الرابط — للمحاولات السريعة فقط |
Authorization | Bearer JWT | مسارات المفاتيح والاستهلاك والاشتراك من اللوحة |
بوابتان تفتحان كل استدعاء: باقة رصيد فعّالة (وإلا 402 NO_AI_PLAN) وحصة متبقية (وإلا 429 AI_QUOTA_EXHAUSTED). المفاتيح تُخزَّن مُجزّأة — أنشئ واحداً وانسخه مرة واحدة، ثم دوّر بدل استرجاعه.
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.5. باقات الرصيد live
باقات AI هي باقات رصيد لا اشتراكات شهرية: تشتري حزمة من التوكنات والطلبات، فتُستهلك مع استدعاءاتك — وتمتد حتى تُستهلك كاملاً، ولا تنتهي بمرور التقويم. وعند نفاد حصة التوكنات أو الطلبات تتوقف الاستدعاءات بـ AI_QUOTA_EXHAUSTED حتى التفعة التالية.
- الباقات المجانية تتفعّل فوراً؛ والمدفوعة تعود بـ
PAYMENT_REQUIREDحتى يتأكد الدفع. -
GET /api/v1/ai/subscriptionتعيد الباقة الفعّالة معtokens_used / tokens_limitوrequests_used / requests_limit. - تبديل الباقة يبدأ رصيداً جديداً — وحصة الباقة الجديدة تحل محلها فوراً.
- قائمة الباقات كاملة بأسعارها في صفحة أسعار AI.
6. المفاتيح والاستهلاك
| Method | Path | المصادقة | الغرض |
|---|---|---|---|
| GET | /api/v1/ai/keys | JWT | قائمة مفاتيحك بادئة sk_ مع آخر استخدام |
| POST | /api/v1/ai/keys | JWT | إنشاء مفتاح sk_ — يُعرض مرة واحدة ويُخزَّن مُجزّأاً |
| POST | /api/v1/ai/keys/{id}/rotate | JWT | تدوير المفتاح بعد تسريب مشتبه به |
| DELETE | /api/v1/ai/keys/{id} | JWT | إبطال المفتاح فوراً |
| GET | /api/v1/ai/usage | JWT | استهلاك التوكنات والتكلفة وسعر البيع لكل استدعاء |
| GET | /api/v1/ai/subscription | JWT | الباقة الفعّالة والرصيد المتبقي |
| GET | /api/v1/chat/models | AI key | النماذج المتاحة لمفتاحك مع أسعارها النهائية |
| GET | /api/v1/models | AI key | نفس القائمة بصيغة OpenAI (لمكتبات مثل opencode) |
7. رموز الأخطاء
| Code | HTTP | المعنى |
|---|---|---|
NO_AI_PLAN | 402 | لا توجد باقة رصيد فعّالة — اشترك أولاً |
AI_QUOTA_EXHAUSTED | 429 | انتهت حصة التوكنات أو الطلبات في الباقة |
MODEL_NOT_FOUND | 404 | النموذج غير موجود أو معطّل — اسحب /api/v1/chat/models |
PROVIDER_ERROR | 502 | المزود الخارجي رفض الطلب |
PROVIDER_RATE_LIMITED | 429 | المزود الخارجي يطبّق حدّاً — انتظر ثم أعد بتدرّج |
PROVIDER_UNREACHABLE | 502 | تعذّر الوصول إلى المزود — أعد المحاولة بتدرّج |
body.code لا على الحالة HTTP. كتالوج الأخطاء الـ78 كاملاً (المشترك بين واتساب وAI) في القسم 14 من توثيق واتساب. ومفتاح المزود الخارجي نفسه لا يظهر في أي رد أبداً.8. فهرس المسارات الكامل 31
كل عملية AI تُسجّل فعلاً في البوابة. الصفوف لغتها محايدة عن قصد: الطريقة والمسار وبيان الدخول المطلوب.
/docs.واجهة نماذج AI 14
| Method | Path | المصادقة |
|---|---|---|
| GET | /api/v1/ai/keys | JWT |
| POST | /api/v1/ai/keys | JWT |
| DELETE | /api/v1/ai/keys/{id} | JWT |
| POST | /api/v1/ai/keys/{id}/rotate | JWT |
| GET | /api/v1/ai/models | عام |
| GET | /api/v1/ai/payment-methods | عام |
| GET | /api/v1/ai/plans | عام |
| GET | /api/v1/ai/subscription | JWT |
| POST | /api/v1/ai/subscription/subscribe | JWT |
| GET | /api/v1/ai/usage | JWT |
| GET | /api/v1/reports/ai | JWT |
| POST | /api/v1/chat | AI key |
| POST | /api/v1/chat/completions | AI key |
| GET | /api/v1/chat/models | AI key |
| GET | /api/v1/models | AI key |
الإدارة — AI 16
| Method | Path | المصادقة |
|---|---|---|
| GET | /api/v1/admin/ai/providers | JWT إداري |
| POST | /api/v1/admin/ai/providers | JWT إداري |
| PUT | /api/v1/admin/ai/providers/{id} | JWT إداري |
| DELETE | /api/v1/admin/ai/providers/{id} | JWT إداري |
| POST | /api/v1/admin/ai/providers/{id}/sync | JWT إداري |
| POST | /api/v1/admin/ai/sync | JWT إداري |
| GET | /api/v1/admin/ai/models | JWT إداري |
| PUT | /api/v1/admin/ai/models/{id} | JWT إداري |
| GET | /api/v1/admin/ai/plans | JWT إداري |
| POST | /api/v1/admin/ai/plans | JWT إداري |
| PUT | /api/v1/admin/ai/plans/{id} | JWT إداري |
| DELETE | /api/v1/admin/ai/plans/{id} | JWT إداري |
| GET | /api/v1/admin/ai/subscriptions | JWT إداري |
| POST | /api/v1/admin/ai/subscriptions/activate | JWT إداري |
| GET | /api/v1/admin/ai/stats | JWT إداري |
| GET | /api/v1/admin/ai/logs | JWT إداري |
9. قواعد الأمان
- خزّن مفاتيح sk_ في Secret Manager أو متغير بيئة على الخادم — لا في المستودع أبداً ولا في حزمة متصفح.
- مفتاح sk_ واحد لكل بيئة أو مستأجر — تعزل المستدعرين حتى لا يستهلك تسريب واحد رصيدك كله.
- دوّر فور أي تسريب مشتبه به (
POST /api/v1/ai/keys/{id}/rotate) — المفتاح القديم يموت فوراً. - راقب
last_used_atلكل مفتاح؛ منطقة أو حجم غير متوقع هو أول إشارة تسريب. - مفتاح المزود الخارجي لا يغادر المنصة ولا يظهر في أي رد — ولا تطلبه من مستخدميك أبداً.
- تفرّع على
body.codeوالتزم بـ Retry-After في 429؛ ولا تُعد المحاولة بعد المهلة عشوائياً — الاستهلاك يُحتسب لكل استدعاء. - الدعم يطلب
request_idورمز الخطأ — ولا يطلب مفتاحاً أبداً. ومن يطلب مفتاحاً بأي قناة فهو مهاجم.