Esc to close · ⌘K / Ctrl-K opens search anywhere
हर एंडपॉइंट पर हर त्रुटि, एक ही JSON एनवेलप का उपयोग करती है:
{
"error": {
"message": "Human-readable explanation",
"type": "rate_limit_error",
"code": "daily_limit_reached"
}
}code पर ब्रांच करें (स्थिर, मशीन-ओरिएंटेड); message को मनुष्यों को दिखाएँ। 429 प्रतिक्रियाओं में एक retry-after हेडर (सेकंड में) भी होता है।
| HTTP | Code | कब | क्या करें |
|---|---|---|---|
| 401 | invalid_api_key | गुम, खराब, रद्द की गई या समाप्त हो चुकी key। | Authorization: Bearer br-… हेडर जाँचें; dashboard पर एक नई key बनाएँ। |
| 404 | model_not_found | Model id कैटलॉग में नहीं है और BYOK-डिस्कवर्ड मॉडल भी नहीं है। | GET /v1/models पर वैध ids की सूची देखें; BYOK मॉडल के लिए provider/model-id फॉर्म का उपयोग करें। |
| 400 | no_route | मॉडल मौजूद है लेकिन कोई रूट आपकी बाधाओं को पूरा नहीं करता (आमतौर पर data_policy: india_only, या एक पिन किया गया provider जो डाउन/अनकॉन्फ़िगर्ड है)। | बाधा को ढीला करें, कैटलॉग से एक इंडिया-रेज़िडेंट मॉडल चुनें, या आउटेज का इंतज़ार करें (GET /health)। |
| 402 | insufficient_credits | स्टैंडर्ड key, बैलेंस शून्य या नकारात्मक है। | टॉप अप करें। ऐसा करने तक दोबारा प्रयास संभव नहीं। |
| 429 | rate_limit_exceeded | प्रति-मिनट की सीमा पार हो गई (key का rpm_limit या 120/min गेटवे कैप)। | retry-after के अनुसार पीछे हटें; यदि स्वयं-लगाई गई हो तो key की सीमा बढ़ाएँ। |
| 429 | daily_limit_reached | Key की दैनिक अनुरोध कैप खर्च हो गई। | मध्यरात्रि IST पर रीसेट होता है। कैप बढ़ाएँ, या ट्रायल key से अपग्रेड करें। |
| 429 | budget_exceeded | Key का या उसके workspace का मासिक ₹ बजट खर्च हो गया है। | dashboard पर बजट बढ़ाएँ, या नए महीने (IST) की प्रतीक्षा करें। |
| 502 | all_routes_failed | प्रत्येक योग्य रूट में त्रुटि हुई; संदेश में अंतिम अपस्ट्रीम त्रुटि शामिल है। | बैकऑफ के साथ पुनः प्रयास करें — सर्किट ~30 s में ठीक हो जाते हैं। घटनाओं के लिए status जाँचें। |
| HTTP | Code | कब |
|---|---|---|
| 401 | no_session | साइन इन किए बिना किसी /me/* एंडपॉइंट को कॉल करना। |
| 400 | duplicate_key_name | उस नाम वाली एक सक्रिय key आपके org में पहले से मौजूद है। |
| 400 | trial_ceiling | एक ट्रायल key को 60 req/min या 200 req/day से आगे बढ़ाने का प्रयास। |
| 503 | provider_not_configured | वह OAuth साइन-इन विधि इस डिप्लॉयमेंट पर कॉन्फ़िगर नहीं की गई है। |
| HTTP | Code | कब |
|---|---|---|
| 400 | address_required | बिलिंग पता जोड़ने से पहले ऑर्डर बनाना। |
| 400 | bad_address | बिलिंग पता सत्यापन में विफल रहा (संदेश में फ़ील्ड का नाम बताया गया है)। |
| 400 | promo_invalid | प्रोमो कोड मौजूद नहीं है, समाप्त हो गया है, या खत्म हो चुका है। |
| 400 | promo_redeemed | आपके org ने पहले ही यह कोड भुना लिया है। |
| 503 | billing_disabled | इस डिप्लॉयमेंट पर बिलिंग कॉन्फ़िगर नहीं की गई है। |
| HTTP | Code | कब |
|---|---|---|
| 400 | bad_key | सबमिट की गई key उस provider के लिए वैध नहीं दिखती। |
| 400 | unknown_provider | ऐसा कोई BYOK provider id नहीं है। |
| 503 | byok_disabled | इस डिप्लॉयमेंट पर BYOK कॉन्फ़िगर नहीं किया गया है। |
मैनेजमेंट एंडपॉइंट्स सत्यापन कोड का एक छोटा सेट साझा करते हैं:
| HTTP | Code | कब |
|---|---|---|
| 403 | forbidden | कार्रवाई के लिए ऐसी भूमिका चाहिए जो आपके पास नहीं है (अधिकांश राइट्स केवल owner/admin के लिए हैं)। |
| 404 | not_found | आपके org में ऐसा कोई collection, endpoint, chain, member या invitation नहीं है। |
| 400 | bad_steps / bad_model | किसी chain या collection में अमान्य steps हैं, या यह ऐसे मॉडल को टारगेट करता है जो कैटलॉग id नहीं है। |
| 400 | bad_name / bad_readme | नाम या README सत्यापन में विफल रहता है (लंबाई या वर्ण)। |
| 400 | cap / team_cap / member_cap | एक प्रति-org सीमा पहुँच गई है (collections, team orgs, या members)। |
| 400 | bad_request / unavailable | BYOE कॉन्फ़िग अमान्य है (उदा. SSRF-ब्लॉक किया गया URL) या यह सुविधा कॉन्फ़िगर नहीं है। |
| 400 | bad_email / bad_role / already_member / already_invited / last_owner / personal_org | सदस्यता त्रुटियाँ — Teams देखें (आप अंतिम owner को पदावनत नहीं कर सकते, या किसी personal org में members नहीं जोड़ सकते)। |
| 400 | duplicate_workspace | उस नाम वाला एक workspace org में पहले से मौजूद है। |
OpenAI SDKs के साथ, BharatRouter त्रुटियाँ SDK के मानक exceptions के रूप में सामने आती हैं — एनवेलप उसी के भीतर रहता है। एक रिट्राई पॉलिसी जो ऊपर की हर चीज़ को कवर करती है:
# Python
import time, openai
def chat(client, **kw):
for attempt in range(4):
try:
return client.chat.completions.create(**kw)
except openai.RateLimitError as e: # 429: rate/daily/budget
code = (getattr(e, "body", None) or {}).get("error", {}).get("code")
if code in ("daily_limit_reached", "budget_exceeded"):
raise # waiting seconds won't help
time.sleep(2 ** attempt)
except openai.APIStatusError as e:
if e.status_code == 502: # all_routes_failed
time.sleep(2 ** attempt) # circuits recover in ~30s
else:
raise # 400/401/402: fix, don't retry
raise RuntimeError("retries exhausted")// Node
try {
await client.chat.completions.create({ model: "gemma-4-e4b-it", messages });
} catch (err) {
const code = err?.error?.code ?? err?.code;
if (code === "insufficient_credits") notifyOwnerToTopUp();
else if (err.status === 429) scheduleRetry(err.headers?.["retry-after"]);
else if (err.status === 502) scheduleRetry(30); // all_routes_failed
else throw err;
}मोटा नियम: 429 (सिवाय daily_limit_reached /budget_exceeded के) और 502 को बैकऑफ के साथ रिट्राई करें; 400/401/402 को कभी आँख मूँदकर रिट्राई न करें — उन्हें धैर्य की नहीं, सुधार की ज़रूरत होती है।