Transparent routing और flight breakdown
पारदर्शी GetVibe राउटर: :alias के माध्यम से स्पष्ट मार्ग या कुंजी की रणनीति के अनुसार स्वचालित मार्ग-चयन। सार्वजनिक उपनाम, विफलता पर वैकल्पिक मार्ग, जानकारी दिखाने/दोष जाँचने के लिए x-getvibe-route हेडर और इतिहास में route/address_as फ़ील्ड।
GetVibe एक transparent router है: आप या तो :alias suffix के ज़रिए स्पष्ट रूप से कोई public variant चुनते हैं, या model name को बिना suffix के छोड़ देते हैं — तब gateway आपकी account/key strategy के अनुसार route चुनता है और failures पर किसी अन्य available variant पर switch हो जाता है। Responses और history में केवल public route identifiers का उपयोग होता है।
दो modes: pin या auto
| Parameter | Type | विवरण |
|---|---|---|
Explicit pin | model:alias or model:N | Request हमेशा चुने गए variant से होकर जाता है। Cross-variant failover बंद है: 429/5xx पर error ज्यों का त्यों लौटाया जाता है (उसी variant पर retry की अनुमति है)। |
Auto (bare model) | केवल model name | Gateway variants को account या key settings के हिसाब से चुनता है। 429/5xx और खाली 200 पर यह उसी model के दूसरे variants आज़माता है, cost और input constraints के साथ। |
"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
हर model को अलग-अलग कीमतों पर कई channels serve करते हैं — एक ladder। ये दो request-body parameters बताते हैं कि उस ladder की कौन-सी rungs आपको serve कर सकती हैं। दोनों USD per 1M tokens में हैं — वही unit और वही numbers जो Models page पर दिखते हैं। इनकी तुलना हमारी कीमत से होती है — जो आपसे charge की जाती है — किसी ऐसे wholesale number से कभी नहीं जो आप देख ही नहीं सकते।
| Parameter | Type | विवरण |
|---|---|---|
max_price | number या object | Ceiling। एक number दोनों legs को bound करता है; एक object उन्हें अलग-अलग bound करता है: {"input": 0.5, "output": 2}। छोड़ा गया leg unbounded रहता है। Inclusive: published price के बराबर bound उस channel को admit करता है। |
min_price | number या object | Floor, वही shape। इससे नीचे कीमत वाले channels को अस्वीकार करता है — उन callers के लिए जो book पर सबसे गहरे discount से सर्व नहीं होना चाहते। यह request की लागत केवल बढ़ा सकता है, घटा नहीं सकता। |
{
"model": "deepseek-v4-flash-0731",
"messages": [{"role": "user", "content": "hi"}],
"max_price": 0.02,
"min_price": {"input": 0.001}
}दोनों legs फिट होने चाहिए, input और output — कभी भी दोनों का औसत नहीं। जो channel input पर सस्ता और output पर महंगा है, वह single-number bound को पूरा नहीं करता।
एक स्थायी सीमा, जो cabinet में एक बार सेट की जाती है
Ceiling को हर call पर दोहराना ज़रूरी नहीं है। Dashboard हर API key और हर model के लिए एक रखता है, साथ ही एक default जो उन सभी models को कवर करता है जिन्हें आपने स्पष्ट रूप से सेट नहीं किया, और API इसे हर request पर पढ़ता है। जो request max_price लेकर आती है वह उस एक call के लिए उसी value का उपयोग करती है; जो request कुछ नहीं लेकर आती वह आपका stored ceiling उपयोग करती है। Precedence, सबसे विशिष्ट पहले:
| Parameter | Type | विवरण |
|---|---|---|
max_price in the request | प्रति call | यह केवल इसी request के लिए stored ceiling को बदलता है — पूरी तरह से, न कि leg दर leg मिलाकर। |
key + model | stored | इस model के लिए इस API key की ceiling। |
account + model | stored | इस model के लिए आपके account का ceiling, जिसका उपयोग वे keys करती हैं जो कोई ceiling set नहीं करतीं। |
key / account default | stored | हर उस model के लिए catch-all ceiling जिसका अपना कोई ceiling नहीं है। |
जिन prices को आप bound कर रहे हैं, उन्हें कहाँ पढ़ें
GET /api/catalog हर model के लिए एक channels array प्रकाशित करता है: हर उस channel के लिए एक entry जिस पर कोई request पहुँच सकती है, सबसे सस्ता पहले, हर एक के साथ वह address जिससे आप उसे pin कर सकते हैं, उसका प्रति 1M tokens inputUsd / outputUsd price और क्या वह default है। यही वे exact numbers हैं जिनसे max_price और min_price की तुलना होती है, और यही वे exact numbers हैं जिन पर आपसे billing होती है — एक list, तीन नहीं।
curl -s https://getvibeapi.com/api/catalog | jq '.[] | select(.apiModel=="z-ai/glm-5.3") | .channels'आपसे किस बात का बिल लिया जाता है
आपको उस channel के लिए bill किया जाता है जिसने वास्तव में request serve की, साथ में हमारा fixed markup — उस ceiling के लिए नहीं जो आपने set किया, और कभी उससे ज़्यादा नहीं। अगर आप किसी price पर cap करते हैं और request किसी सस्ते rung पर fill हो जाती है, तो आप सस्ते वाले का भुगतान करते हैं। Model page पर ladder एक range दिखाता है, और “from” वाला figure सबसे सस्ता rung है जो मौजूद है — यह एक असली price है जो आपसे charge हो सकती है, यह वादा नहीं कि यह request उसी पर पड़ेगी। जब आपको guaranteed upper bound चाहिए तो max_price set करें।
जब कुछ भी फ़िट न हो
Request refused है: HTTP 422 के साथ "type": "price_bound_no_lane", जिसमें उस model के लिए सबसे सस्ते और सबसे महँगे channel की कीमतें और पूरी channels सूची दी जाती है, ताकि आप अनुमान लगाने के बजाय संख्याओं से bound चुन सकें। lowest_passing_usd_per_million वह सबसे छोटा bound है जो अभी किसी channel को स्वीकार करता है — एक ही channel की अपनी जोड़ी, इसलिए इसे भेजने पर पास हो जाता है (दोनों cheapest legs अलग-अलग channels से आ सकते हैं)। यही field तब भी दिखाई देता है जब exchange ने खुद आपका bound अस्वीकार कर दिया हो: तब यह अगला price level होता है जिसमें अब भी supply है, और यह कभी भी आपके भेजे गए bound से कम नहीं होता। जब आपका bound नहीं limit था — channel के लिए हमारी अपनी purchase ceiling थी, और उसके नीचे के offers busy या drained थे — तो जवाब इसके बजाय HTTP 503 "type": "no_seller_available" होता है, जिसमें Retry-After होता है और कोई suggested price नहीं: max_price बढ़ाने से मदद नहीं मिलेगी, थोड़ी देर बाद retry करने से मिल सकती है। सबसे सस्ती rung में अक्सर एक ही offer होता है जो busy होता है, इसलिए भरोसेमंद fills के लिए bound को model के priceTypical पर या उससे ऊपर सेट करें, जहाँ ज़्यादातर supply होती है। हम कभी चुपचाप कोई महँगा channel serve नहीं करते, और कभी किसी दूसरे model को substitute नहीं करते। Malformed value — कोई string, शून्य, ऋणात्मक संख्या, अज्ञात field — 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}
]
}
}वे pool नाम जिन्हें आप पिन कर सकते हैं
Vendor subscription pool से served channels नाम से addressable हैं। नाम को colon के बाद लिखें, बिल्कुल किसी अन्य alias की तरह:
"model": "gpt-6.1-sol:codex" // pin a subscription pool
"model": "claude-opus-5.5:claude-code" // pin the Claude Code pool| Parameter | Type | विवरण |
|---|---|---|
:codex | pool | इस pool को नाम से address करें। :openai-codex भी स्वीकार्य है। |
:qwencloud | pool | इस pool को नाम से address करें। :alibaba-qwencloud भी स्वीकार्य है। |
:zai | pool | इस pool को नाम से address करें। :z-ai-glm-coding-plan भी स्वीकार्य है। |
:claude-code | pool | इस pool को नाम से address करें। |
:antigravity | pool | इस pool को नाम से address करें। |
:grok | pool | इस pool को नाम से address करें। |
:codebuddy | pool | इस pool को नाम से address करें। |
:codebuddy-cn | pool | इस pool को नाम से address करें। |
:clinepass | pool | इस pool को नाम से address करें। |
:command-code | pool | इस pool को नाम से address करें। :commandcode भी स्वीकार्य है। |
:opencode | pool | इस pool को नाम से address करें। :opencode-go भी स्वीकार्य है। |
:mimo | pool | इस pool को नाम से address करें। |
:kiro-pool | pool | इस pool को नाम से address करें। |
:meta-ai | pool | इस pool को नाम से address करें। |
:minimax-cn | pool | इस pool को नाम से address करें। |
:qwencloud-alibaba-cn | pool | इस pool को नाम से address करें। |
:marketplace | pool | इस pool को नाम से address करें। :bare-marketplace-alias भी स्वीकार्य है। |
:nous | pool | इस pool को नाम से address करें। |
x-pv-deprecated-alias / x-pv-use-instead), लेकिन यहाँ कभी नहीं दिखाया जाता और नई integrations को नाम का ही उपयोग करना चाहिए। प्रत्येक pool एक channel है जिसकी अपनी price ladder है; अंक पर समाप्त होने वाली एक पुरानी band spelling (:claude-code-2) अब भी उसी pool पर resolve होती है।सार्वजनिक उपनाम (:alias)
Colon के बाद का suffix एक public route identifier है, कोई upstream नाम नहीं। किसी विशिष्ट model की पूरी सूची catalog में है (Models, «In API» column)। मुख्य aliases:
| Parameter | Type | विवरण |
|---|---|---|
:yellow | alias | कई मॉडलों के लिए उपलब्ध एक सार्वजनिक प्रकार; इसकी कीमत सूची में है। |
:codex / :claude-code / … | alias | सदस्यता पूल, जिनके नाम ऊपर “पूल के नाम जिन्हें आप पिन कर सकते हैं” में दिए गए हैं। |
:pixel / :flow | alias | Media routes (images/video), chat नहीं। |
कुंजी की सेटिंग्स
auto अनुरोधों (केवल मॉडल नाम) के लिए प्रत्येक API कुंजी पर निम्नलिखित सेट किए जाते हैं (डैशबोर्ड → API कुंजियाँ):
| Parameter | Type | विवरण |
|---|---|---|
routingStrategy | string | priority (default) — providerPriority का क्रम, अन्यथा catalog में पहला variant; price — हमारे लिए सबसे सस्ता variant; latency — हाल के measurements के अनुसार सबसे तेज़; default — सख़्ती से पहला eligible variant। |
providerPriority | list | आंतरिक प्रदाता टैग की प्राथमिकता (डैशबोर्ड में आसानी से पढ़े जा सकने वाले नाम)। strategy=priority के साथ उपयोग की जाती है। |
disabledProviders | list | प्रदाताओं को स्वचालित रूटिंग से बाहर रखें। यदि वैरिएंट मौजूद है, तो स्पष्ट रूप से दिए गए :alias को अब भी कॉल किया जा सकता है। |
cacheOnly | boolean | केवल prompt-cache support वाले variants — दोहराए जाने वाले prefix के लिए अच्छे। |
allowedModels और नीचे दी गई तालिका में सीमाएँ भी देखें।रूटिंग रणनीति
| Parameter | Type | विवरण |
|---|---|---|
priority (default) | strategy | सामान्य default route। |
price | strategy | मॉडल के लिए उपलब्ध वेरिएंट्स में से सबसे कम कीमत वाला चुनें। |
latency | strategy | हाल के मापों के आधार पर सबसे तेज़ variant चुनें। |
cacheOnly | boolean | केवल cache-enabled variants — दोहराए जाने वाले prompt prefix के लिए अच्छे। |
:yellow), तो उसे हमेशा मान्य रखा जाता है और रूटिंग उसे नहीं बदलती। इसे डैशबोर्ड → API कुंजियाँ में प्रत्येक कुंजी के लिए कॉन्फ़िगर किया जाता है।स्पष्ट provider चयन
Colon के बाद एक provider alias जोड़ें — routing strategy की परवाह किए बिना इसका पालन होता है। Aliases की पूरी सूची और उदाहरण — Models → Providers section में।
"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 channelKey सीमाएँ
प्रत्येक API key के लिए आप dashboard में सेट कर सकते हैं:
| Parameter | Type | विवरण |
|---|---|---|
allowedModels | मॉडल सूची | इस key से call किए जा सकने वाले models की whitelist। खाली — सभी allowed। सूची से बाहर के model का request 403 पाता है। |
routingStrategy / cacheOnly | override | इस कुंजी के लिए रणनीति और कैश फ़िल्टर। |
limitRub | खर्च सीमा | key के लिए spend limit। |
allowedIps | IP श्वेतसूची | IP restriction («Authentication» section देखें)। |
Failover (केवल auto)
bare model के साथ gateway उसी model के किसी अन्य public variant पर switch कर सकता है, अगर मौजूदा variant ने 429, 5xx या बिना content वाला खाली 200 लौटाया हो। Constraints:
- images/PDF वाली requests किसी अन्य provider पर switch नहीं की जातीं (vision compatibility)।
- Failover किसी काफ़ी महँगे variant पर नहीं जाता (strategy=price को छोड़कर)।
- प्रति client request attempts की संख्या पर एक upper bound है।
- pin (
:alias) के साथ cross-provider failover बंद है — आपको चुने गए route की error मिलती है।
429 पर exponential backoff के साथ retrying का वर्णन Errors and limits में किया गया है।
Flight breakdown — किस route ने request सर्व की
trusted reveal/debug clients के लिए, request पूरी होने के बाद (auto सहित) ऐसे headers उपलब्ध होते हैं जो बताते हैं कि वास्तव में कौन-सा public variant चला। सामान्य clients को यह डेटा नहीं दिया जाता।
विश्वसनीय प्रकटीकरण/डिबग क्लाइंट के लिए प्रतिक्रिया हेडर (चैट / संदेश / प्रतिक्रियाएँ)
| Parameter | Type | विवरण |
|---|---|---|
x-getvibe-route | string | सार्वजनिक मार्ग का उपनाम: yellow, codex, claude-code, … |
x-getvibe-model | string | फिर से पिन करने के लिए मॉडल का मान: base या base:alias (जैसे gpt-6.1-sol:yellow)। स्पष्ट रूप से पिन करने पर यह आपकी पसंद से मेल खाता है। |
x-pv-generation-id | string | History record id (non-stream)। Balance and history देखें। |
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 और dashboard में प्रत्येक record में ये fields होते हैं:
| Parameter | Type | विवरण |
|---|---|---|
model | string | base model name (बिना internal suffixes)। |
route | string | null | विजेता route का public :alias। |
address_as | string | Re-pinning के समय model field का ठीक value (जैसे catalog में addressAs)। |
cost_detail | object | शुल्क की गणना कैसे हुई: token lines उनकी rate per 1M (lines) के साथ, surcharges (adjustments) और कुल। कोई marketplace channel उस price tier (ladder rung) का बिल लगाता है जिसके seller ने request पूरी की, इसलिए जब वह list rate से भिन्न हो, तो rateBasis "tier" होता है, lines उस tier की rate पर दिखाई जाती हैं और charge तक जुड़ती हैं, और tier उस rate का नाम बताता है। realisedRate {input, output} वह price per 1M है जिस पर request का वास्तव में बिल लगा — इसे model के price ladder (/api/model-ladder) पर खोजें ताकि पता चले कि कौन-सी rung ने request पूरी की; minimumCharge true होता है (और realisedRate null) जब request पर per-request minimum का बिल लगा हो। rung को cap करने के लिए max_price भेजें। |
model और cost_usd में internal suffixes hidden रहते हैं (reveal exception वाले clients को छोड़कर)। Flight breakdown केवल headers और history में होता है, SDKs को तोड़े बिना।सीमाएँ
GetVibe request body में upstream providers की «raw» waterfall listing प्रदान नहीं करता। नियंत्रण public :alias, key strategy और model catalog के भीतर auto-failover से होता है। कोई अलग «ignore providers» API या routing ZDR flags नहीं हैं।