المظهر
اللغة

توجيه شفاف وتفصيل الرحلة

موجّه GetVibe الشفاف: مسار صريح عبر :alias أو تحديد تلقائي للمسار وفقًا لاستراتيجية المفتاح. الأسماء المستعارة العامة، والتحويل عند التعذّر، ورأسا x-getvibe-route للتوضيح/تصحيح الأخطاء، وحقلا route/address_as في السجل.

GetVibe هو موجِّه شفّاف: إما أن تختار صراحةً متغيرًا عامًا عبر لاحقة :alias، أو تترك اسم النموذج دون لاحقة — وعندها يختار البوابة المسار وفق استراتيجية حسابك/مفتاحك، وعند الفشل ينتقل إلى متغير آخر متاح. لا تُستخدم في الاستجابات والسجل سوى معرّفات المسارات العامة.

وضعان: التثبيت أو التلقائي

المعلمةالنوعالوصف
Explicit pinmodel:alias or model:Nيمر الطلب دائمًا عبر المتغيّر المختار. التحويل التلقائي بين المتغيّرات معطّل: عند 429/5xx يُعاد الخطأ كما هو (ويُسمح بإعادة المحاولة على المتغيّر نفسه).
Auto (bare model)اسم النموذج فقطتختار البوابة المتغيّر حسب إعدادات الحساب أو المفتاح. عند استجابة 429/5xx أو استجابة 200 فارغة تحاول متغيّرات أخرى للطُراز نفسه، مع قيود التكلفة والمدخلات.
"model": "claude-opus-4.8"          // auto — key strategy
"model": "claude-opus-4.8:yellow"   // pin — :yellow only, no switching to other channels
"model": "claude-opus-4.8:2"        // pin — catalog variant #2 (legacy :N syntax)

حدود السعر: max_price و min_price

يُخدَم كل نموذج عبر عدة قنوات بأسعار مختلفة — سلّم. هذان المعاملان في جسم الطلب يحدّدان أي درجات من ذلك السلّم يجوز أن تخدمك. كلاهما بالدولار الأمريكي لكل مليون رمز، بالوحدة نفسها والأرقام نفسها التي تعرضها صفحة النماذج. ويُقارنان بـسعرنا — وهو ما تُحتسب به عليك — لا برقم بيع بالجملة لا يمكنك رؤيته.

المعلمةالنوعالوصف
max_priceرقم أو كائنالحد الأقصى. الرقم يحدّ الشقّين معًا؛ أما الكائن فيحدّهما كلًا على حدة: {"input": 0.5, "output": 2}. الشقّ المحذوف غير محدود. شامل: الحد المساوي لسعر منشور يقبل تلك القناة.
min_priceرقم أو كائنحد أدنى، بالشكل نفسه. يرفض القنوات المسعّرة دون هذا الحد — للمتصلين الذين يفضّلون ألا يخدمهم أعمق خصم في السجل. ولا يمكنه إلا أن يزيد تكلفة الطلب، لا أن يخفضها.
{
  "model": "deepseek-v4-flash-0731",
  "messages": [{"role": "user", "content": "hi"}],
  "max_price": 0.02,
  "min_price": {"input": 0.001}
}

يجب أن يستوفي الشقّان معًا، الإدخال والإخراج — لا متوسط بينهما أبدًا. فالقناة الرخيصة في الإدخال والمكلفة في الإخراج لا تحقق حدًّا برقم واحد.

حد أقصى دائم يُضبط مرة واحدة في لوحة التحكم

لا يلزم تكرار السقف في كل استدعاء. تخزّن لوحة التحكم سقفًا واحدًا لكل مفتاح API ولكل نموذج، إضافة إلى سقف افتراضي يغطي كل نموذج لم تضبطه صراحةً، ويقرؤه الـ API في كل طلب. والطلب الذي يحمل max_price يستخدم تلك القيمة بدلًا منه لذلك الاستدعاء الواحد؛ والطلب الذي لا يحمل شيئًا يستخدم سقفك المخزَّن. الترتيب بالأولوية، من الأكثر تحديدًا إلى الأقل:

المعلمةالنوعالوصف
max_price in the requestلكل استدعاءيستبدل السقف المخزَّن لهذا الطلب فقط — استبدالًا كاملًا، لا دمجًا جزءًا بجزء.
key + modelstoredالحد الأقصى لهذا المفتاح البرمجي لهذا الموديل.
account + modelstoredسقف حسابك لهذا النموذج، وتستخدمه المفاتيح التي لا تحدّد سقفًا.
key / account defaultstoredالسقف الشامل لكل طُراز لا يملك سقفًا خاصًا به.
السقف ومرشّح القنوات أداتان مختلفتان وتعملان معًا. يحدّد ترتيب القنوات والاستثناءات أي القنوات يمكنها خدمتك؛ ويحدّد السقف أي درجة سعرية داخلها يمكنها تلبية الطلب. اضبط أحدهما أو كليهما أو لا تضبط شيئًا. لا يمكن لمرشّح القنوات وحده أن يحدّ سعرك: فالقناة الواحدة قد تقدّم النموذج نفسه بأسعار كثيرة في الوقت ذاته، لذا فإن استثناء القنوات لا يضع حدًا أقصى لما تنتهي إليه القناة الأرخص.

أين تقرأ الأسعار التي تحدّدها كسقف

ينشر GET /api/catalog مصفوفة channels لكل نموذج: عنصر واحد لكل قناة قد يهبط عليها الطلب، من الأرخص إلى الأغلى، ويضم كل عنصر العنوان الذي يمكنك تثبيته به، وسعره inputUsd / outputUsd لكل مليون رمز، وما إذا كانت هي القناة الافتراضية. وهذه هي الأرقام نفسها التي يُقارَن بها max_price و min_price، والأرقام نفسها التي تُحتسب بها فاتورتك — قائمة واحدة، لا ثلاث.

curl -s https://getvibeapi.com/api/catalog   | jq '.[] | select(.apiModel=="z-ai/glm-5.3") | .channels'

ما الذي تُحتسب عليه التكلفة

يُحتسب عليك المسار الذي خدم الطلب فعليًا، مضافًا إليه هامش ربحي الثابت — لا سقف السعر الذي وضعته، ولا يزيد أبدًا عليه. إذا حدّدت سقفًا بسعر وامتلأ الطلب عند درجة أرخص، تدفع الأرخص. يُظهر سلّم الأسعار في صفحة النموذج نطاقًا، ورقم «from» هو أرخص درجة موجودة — وهو سعر حقيقي يمكن أن يُحتسب عليك، لا وعدًا بأن طلبك سيستقر عند تلك الدرجة. اضبط max_price حين تحتاج إلى حدٍّ أعلى مضمون.

عندما لا يناسب أي شيء

يُرفض الطلب refused: HTTP 422 مع "type": "price_bound_no_lane"، مع ذكر أرخص وأغلى سعر قناة لذلك النموذج وقائمة channels الكاملة، لتتمكن من اختيار حدّ من الأرقام بدل تخمينه. lowest_passing_usd_per_million هو أصغر حدّ يقبل قناة الآن — زوج قناة واحدة، لذا فإن إرساله يمرّ (وقد يأتي طرفا cheapest من قناتين مختلفتين). ويظهر الحقل نفسه عندما يرفض التبادل نفسه حدّك: حينها يكون مستوى السعر التالي الذي لا يزال لديه معروض، وهو لا يقل أبدًا عن الحدّ الذي أرسلته. أما عندما لم يكن حدّك هو القيد — بل سقف الشراء الخاص بنا للقناة، وكانت العروض تحته مشغولة أو مستنفدة — فالرد يكون بدلًا من ذلك HTTP 503 "type": "no_seller_available" مع Retry-After ودون سعر مقترح: فرفع max_price لن يفيد، وقد تفيد إعادة المحاولة بعد قليل. كثيرًا ما تحمل أرخص درجة عرضًا واحدًا مشغولًا، لذا لعمليات التعبئة الموثوقة ضع الحدّ عند priceTypical النموذج أو أعلى منه، حيث يوجد معظم المعروض. نحن لا نخدم قناة أغلى بصمت أبدًا، ولا نستبدل نموذجًا آخر. أما القيمة المشوَّهة — نص أو صفر أو قيمة سالبة أو حقل غير معروف — فهي 400 invalid_request_error، ولا تُتجاهل بصمت أبدًا.

{
  "error": {
    "message": "No channel of model "deepseek-v4-flash-0731" is priced within your max_price $0.0001 in / $0.0001 out...",
    "type": "price_bound_no_lane",
    "code": 422,
    "param": "max_price",
    "cheapest_usd_per_million": {"input": 0.0065, "output": 0.013},
    "dearest_usd_per_million": {"input": 0.0528, "output": 0.1584},
    "lowest_passing_usd_per_million": {"input": 0.0205, "output": 0.0613},
    "channels": [
      {"address": "deepseek/deepseek-v4-flash-0731:codebuddy-cn", "label": "codebuddy-cn", "inputUsd": 0.0205, "outputUsd": 0.0613, "isDefault": true},
      {"address": "deepseek/deepseek-v4-flash-0731:qwencloud", "label": "qwencloud", "inputUsd": 0.0378, "outputUsd": 0.1132, "isDefault": false}
    ]
  }
}
تنطبق حدود السعر على نموذج مجرّد وعلى التثبيت الصريح على حد سواء. وعند تثبيت يقع هو نفسه خارج الحد، تحصل على الخطأ 422 نفسه مع ذكر التثبيت — ولا يُنقل التثبيت تلقائيًا إلى قناة أخرى نيابةً عنك.

أسماء المجموعات التي يمكنك تثبيتها

القنوات المخدومة من مجمّع اشتراك مورّد يمكن استدعاؤها بالاسم. اكتب الاسم بعد نقطتين، تمامًا كأي اسم مستعار آخر:

"model": "gpt-6.1-sol:codex"         // pin a subscription pool
"model": "claude-opus-5.5:claude-code"  // pin the Claude Code pool
المجموعات القابلة للعنونة
المعلمةالنوعالوصف
:codexpoolخاطب هذه المجموعة بالاسم. يُقبل أيضًا: :openai-codex.
:qwencloudpoolخاطب هذه المجموعة بالاسم. يُقبل أيضًا: :alibaba-qwencloud.
:zaipoolخاطب هذه المجموعة بالاسم. يُقبل أيضًا: :z-ai-glm-coding-plan.
:claude-codepoolخاطب هذه المجموعة بالاسم.
:antigravitypoolخاطب هذه المجموعة بالاسم.
:grokpoolخاطب هذه المجموعة بالاسم.
:codebuddypoolخاطب هذه المجموعة بالاسم.
:codebuddy-cnpoolخاطب هذه المجموعة بالاسم.
:clinepasspoolخاطب هذه المجموعة بالاسم.
:command-codepoolخاطب هذه المجموعة بالاسم. يُقبل أيضًا: :commandcode.
:opencodepoolخاطب هذه المجموعة بالاسم. يُقبل أيضًا: :opencode-go.
:mimopoolخاطب هذه المجموعة بالاسم.
:kiro-poolpoolخاطب هذه المجموعة بالاسم.
:meta-aipoolخاطب هذه المجموعة بالاسم.
:minimax-cnpoolخاطب هذه المجموعة بالاسم.
:qwencloud-alibaba-cnpoolخاطب هذه المجموعة بالاسم.
:marketplacepoolخاطب هذه المجموعة بالاسم. يُقبل أيضًا: :bare-marketplace-alias.
:nouspoolخاطب هذه المجموعة بالاسم.
هذه الأسماء المقروءة هي التهجئات الوحيدة التي يعلنها هذا النشر. لا يزال هناك شكل حرفي قصير أقدم يُحَلّ خلال نافذة الترحيل ويُعلَن في كل استجابة (x-pv-deprecated-alias / x-pv-use-instead)، لكنه لا يظهر هنا أبدًا وينبغي للتكاملات الجديدة استخدام الاسم. كل مجموعة هي قناة واحدة بسلم أسعار خاص بها؛ ولا يزال تهجئة نطاق أقدم تنتهي برقم (:claude-code-2) تُحَلّ إلى تلك المجموعة.

الأسماء المستعارة العامة (:alias)

اللاحقة بعد النقطتين هي معرّف مسار عام، وليست اسمًا لدى المزوّد. والقائمة الكاملة لنموذج بعينه موجودة في الكتالوج (Models، عمود «In API»). الأسماء المستعارة الرئيسية:

المعلمةالنوعالوصف
:yellowaliasخيار عام متاح لكثير من النماذج؛ سعره مدرج في الكتالوج.
:codex / :claude-code / …aliasمجموعات الاشتراك، المدرجة بالاسم في قسم «أسماء المجموعات التي يمكنك تثبيتها» أعلاه.
:pixel / :flowaliasمسارات الوسائط (صور/فيديو)، لا المحادثة.
المزيد عن متغيّرات نموذج واحد — في قسم النماذج → الموفّرون. إذا كانت اللاحقة غير متاحة لنموذج ما، يُرجع الطلب رمز 400.

إعدادات المفتاح

بالنسبة إلى طلبات auto (اسم النموذج دون لاحقة)، تُضبط الإعدادات التالية لكل مفتاح API (لوحة التحكم ← مفاتيح API):

المعلمةالنوعالوصف
routingStrategystringpriority (الافتراضي) — وفق ترتيب providerPriority، وإلا فأول متغير في الكتالوج؛ price — المتغير الأرخص لنا؛ latency — الأسرع حسب القياسات الحديثة؛ default — أول متغير مؤهل بشكل صارم.
providerPrioritylistأولوية وسوم المزوّدين الداخلية (أسماء مقروءة في لوحة التحكم). تُستخدم مع strategy=priority.
disabledProviderslistاستبعاد المزوّدين من التوجيه التلقائي. يظل بالإمكان استدعاء :alias صريح إذا كان المتغير موجودًا.
cacheOnlybooleanالمتغيّرات الداعمة لتخزين الطلبات مؤقتًا فقط — مناسبة لبادئة متكررة.
تنطبق الإعدادات فقط على الطلبات التي لا تتضمن لاحقة صريحة. يعني ترك حقل المفتاح فارغًا استخدام القيمة الافتراضية. راجع أيضًا allowedModels والحدود في الجدول أدناه.

استراتيجية التوجيه

المعلمةالنوعالوصف
priority (default)strategyالمسار الافتراضي المعتاد.
pricestrategyاختر النسخة ذات السعر الأدنى من بين المتاحة للنموذج.
latencystrategyاختر أسرع نسخة وفقًا لأحدث القياسات.
cacheOnlybooleanالمتغيّرات المفعَّل فيها التخزين المؤقت فقط — مناسبة لبادئة موحّدة متكررة.
تنطبق الاستراتيجية فقط على الطلبات الافتراضية. إذا حدّدت متغيرًا صراحةً باستخدام لاحقة (مثل :yellow)، فيُلتزم به دائمًا ولا يتجاوزه التوجيه. تُضبط لكل مفتاح في لوحة التحكم ← مفاتيح API.

اختيار المزوّد صراحةً

أضف اسمًا مستعارًا للمزوّد بعد النقطتين الرأسيتين — يُحترم بغض النظر عن استراتيجية التوجيه. القائمة الكاملة للأسماء المستعارة والأمثلة — في قسم Models → Providers.

"model": "claude-opus-4.8"        // auto — key strategy
"model": "claude-opus-4.8:yellow"     // explicitly pin the :yellow channel
"model": "claude-opus-4.8:kiro-pool"  // explicitly pin the :kiro-pool channel

حدود المفتاح

لكل مفتاح API يمكنك ضبط ما يلي في لوحة التحكم:

المعلمةالنوعالوصف
allowedModelsقائمة النماذجقائمة بيضاء بالنماذج التي يجوز لهذا المفتاح استدعاؤها. فارغة — الكل مسموح. الطلب على نموذج خارج القائمة يعيد 403.
routingStrategy / cacheOnlyoverrideالاستراتيجية ومرشّح التخزين المؤقت لهذا المفتاح.
limitRubحد الإنفاقحد الإنفاق للمفتاح.
allowedIpsالقائمة البيضاء لعناوين IPتقييد IP (انظر قسم «Authentication»).
هذا مفيد لتسليم المفاتيح إلى الفرق والتكاملات: مفتاح واحد للموديلات الرخيصة فقط، وآخر بحد إنفاق، وثالث باستراتيجيته الخاصة. كل ذلك يُضبط من لوحة التحكم.

التجاوز عند الفشل (تلقائي فقط)

مع نموذج مجرّد قد تنتقل البوابة إلى متغيّر عام آخر للنموذج نفسه إذا أعاد المتغيّر الحالي 429 أو 5xx أو 200 فارغًا بلا محتوى. القيود:

  • لا تُحوَّل الطلبات التي تحتوي على صور/PDF إلى مزوّد آخر (توافق الرؤية).
  • التجاوز عند الفشل لا ينتقل إلى متغيّر أعلى سعراً بشكل ملحوظ (عدا استراتيجية price).
  • يوجد حدّ أعلى لعدد المحاولات لكل طلب عميل.
  • مع pin (:alias) يكون التحوّل الاحتياطي بين المورّدين معطّلًا — فتحصل على خطأ المسار المختار.

تُوصف إعادة المحاولة مع التراجع الأسي عند 429 في الأخطاء والحدود.

تفصيل المسار — أي مسار خدم الطلب

بالنسبة إلى عملاء الكشف/التنقيح الموثوقين، تتوفر بعد اكتمال الطلب (بما في ذلك الوضع التلقائي) ترويسات تُظهر أيّ public متغير نُفّذ فعليًا. ولا تُمنح هذه البيانات للعملاء العاديين.

ترويسات الاستجابة لعملاء الكشف/التنقيح الموثوقين (chat / messages / responses)

المعلمةالنوعالوصف
x-getvibe-routestringالاسم المستعار للمسار العام: yellow، codex، claude-code، …
x-getvibe-modelstringقيمة model لإعادة التثبيت: base أو base:alias (مثل gpt-6.1-sol:yellow). عند التثبيت الصريح، تطابق اختيارك.
x-pv-generation-idstringمعرّف سجل العملية (غير متدفق). انظر الرصيد والسجل.
curl -sD - https://getvibeapi.com/v1/chat/completions \
  -H "Authorization: Bearer $GETVIBE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-6.1-sol","messages":[{"role":"user","content":"ping"}],"max_tokens":8}' \
  -o /dev/null | grep -i getvibe

# x-getvibe-route: yellow
# x-getvibe-model: gpt-6.1-sol:yellow

سجلّ الاستخدام

في GET /v1/generations وGET /v1/usage ولوحة التحكّم، يتضمّن كل سجل الحقول التالية:

المعلمةالنوعالوصف
modelstringاسم النموذج الأساسي (دون اللواحق الداخلية).
routestring | nullالاسم المستعار العام :alias للمسار الفائز.
address_asstringالقيمة الدقيقة لحقل الطُراز عند إعادة التثبيت (مثل addressAs في القائمة).
cost_detailobjectكيف حُسبت التكلفة: أسطر الرموز بمعدلها لكل 1M (الأسطر)، والرسوم الإضافية (التعديلات) والإجمالي. تحاسب قناة السوق بسعر الفئة (درجة السلّم) التي نفّذها البائع، لذا عندما يختلف ذلك عن سعر القائمة، تكون rateBasis هي "tier" وتُعرض الأسطر بسعر تلك الفئة وتجمَع إلى التكلفة، ويسمّي tier المعدل. realisedRate {input, output} هو السعر لكل 1M الذي حوسب الطلب به فعليًا — اعثر عليه في سلّم أسعار النموذج (/api/model-ladder) لمعرفة أي درجة نفّذت الطلب؛ وتكون minimumCharge صحيحة (وrealisedRate فارغة) عندما يُحاسب الطلب بالحد الأدنى لكل طلب بدلًا من ذلك. أرسل max_price لتحديد سقف الدرجة.
في جسم استجابة نقاط النهاية المتوافقة مع OpenAI لدى العلامات التجارية upstream، تبقى اللواحق الداخلية في model وcost_usd مخفية (فيما عدا العملاء ذوي استثناء الكشف). ولا يظهر تفصيل الرحلة إلا في الترويسات والسجل، دون كسر حِزم SDKs.

القيود

لا يوفّر GetVibe قائمة «شلال خام» تُدرج المزوّدين upstream في جسم الطلب. تتم التحكّم عبر :alias العام واستراتيجية المفتاح والتحوّل التلقائي عند الفشل ضمن كتالوج النماذج. لا توجد واجهة برمجية منفصلة «تجاهل المزوّدين» ولا أعلام توجيه ZDR.

توجيه GetVibe — :alias والتوجيه التلقائي والتحوّل عند الفشل وتفصيل الرحلات | GetVibe API