प्लेटफ़ॉर्म API
कैटलॉग, कीमतें, अपना बैलेंस और अपना उपयोग कोड से पढ़ें।
प्रॉम्प्ट भेजने के अलावा यहाँ सब कुछ है: कौन से मॉडल मौजूद हैं, हर प्रदाता कितना शुल्क लेता है, आपने कितना खर्च किया है, और आपके पास कौन सी कुंजियाँ हैं। ये सभी उसी api होस्ट पर JSON में उत्तर देते हैं जिस पर आप कम्पलीशन भेजते हैं।
कैटलॉग और कीमत वाले एंडपॉइंट सार्वजनिक हैं और उन्हें किसी क्रेडेंशियल की ज़रूरत नहीं होती। आपके अपने खाते से जुड़ी हर चीज़ के लिए क्रेडेंशियल चाहिए, और इसके दो प्रकार हैं।
ये आपस में बदले नहीं जा सकते। API कुंजी आपका बैलेंस नहीं पढ़ सकती, और एक्सेस टोकन कम्पलीशन नहीं भेज सकता।
| क्रेडेंशियल | दिखने में | किस तक पहुँच देता है |
|---|---|---|
| API कुंजी | sk-... | इन्फ़रेंस, मॉडल सूची, और केवल उसी कुंजी का उपयोग काउंटर। |
| एक्सेस टोकन | 29 से 32 अक्षर, कोई उपसर्ग नहीं | आपका खाता: बैलेंस, कुंजी प्रबंधन, उपयोग लॉग। |
दोनों एक ही हेडर में जाते हैं, Authorization: Bearer और उसके बाद मान। इसके अलावा कुछ नहीं पढ़ा जाता। पुराने उदाहरणों में New-Api-User हेडर जोड़ा जाता है, जिसे अनदेखा किया जाता है, और कुकी आधारित कोई विकल्प नहीं है।
यह हेडर वहाँ भी भेजें जहाँ एंडपॉइंट इसके बिना भी उत्तर दे देता। खाते वाले रूट पर बिना क्रेडेंशियल भेजे गए अनुरोध को हम तक पहुँचने से पहले ही चुनौती मिल सकती है, और चुनौती JSON के बजाय HTML लौटाती है।
सबसे पहले सेटिंग्स खोलें, सुरक्षा के अंतर्गत API एक्सेस ढूँढें और एक टोकन बनाएँ। यह केवल एक बार दिखाया जाता है। इसे तभी बनाया जा सकता है जब आप साइन इन हों, इसलिए कोई स्क्रिप्ट अपना टोकन खुद नहीं बना सकती।
एक समय में आपके पास केवल एक ही एक्सेस टोकन रहता है। नया टोकन बनाते ही पुराना चुपचाप अमान्य हो जाता है, और जो कुछ भी उसका उपयोग कर रहा हो वह काम करना बंद कर देता है।
इसे पासवर्ड की तरह सुरक्षित रखें। यह पैसे खर्च कर सकता है, कुंजियाँ बना सकता है और आपका इतिहास पढ़ सकता है। जब किसी स्क्रिप्ट को इसकी ज़रूरत न रहे तो उसी स्क्रीन से इसे रद्द कर दें।
एक सार्वजनिक अनुरोध हर मॉडल लौटाता है, जिसमें कीमतें पहले से ही प्रति दस लाख टोकन डॉलर में बदली हुई होती हैं। न कुंजी चाहिए, न पंजीकरण।
curl https://api.unorouter.com/api/pricing/catalog{
"counts": { "models": 239, "free": 134, "paid": 105, "vendors": 50 },
"first_free_model": "glm-5.3:free",
"vendors": [{ "vendor_id": 4, "vendor_name": "Zhipu", "icon": "Zhipu.Color" }],
"models": [
{
"model_name": "glm-5.3",
"vendor": "Zhipu",
"type": "text",
"is_free": false,
"online": true,
"input_price": 0.05103,
"output_price": 0.160382187,
"original_input_price": 1.26,
"original_output_price": 3.960054,
"tags": "Text,Reasoning,Tools,Cache",
"supported_endpoint_types": ["openai", "anthropic"],
"uptime_24h": 99.965,
"success_rate": 95,
"avg_latency_ms": 11062
}
]
}input_price और output_price वह हैं जो आप आज वास्तव में चुकाएँगे, उस मॉडल को इस समय सबसे सस्ते में देने वाले प्रदाता पर। original_input_price और original_output_price विक्रेता की अपनी सूची कीमत हैं, इसलिए दोनों का अंतर ही छूट है। is_free उन मॉडलों को चिह्नित करता है जो कभी शुल्क नहीं लेते, और online उन्हें चिह्नित करता है जिनके पास इस समय सक्रिय प्रदाता है।
दो छोटे सहयोगी एंडपॉइंट: /api/pricing/counts केवल कुल संख्याएँ लौटाता है और इतना हल्का है कि उसे बार बार पोल किया जा सके, और /api/pricing/vendors विक्रेता सूची लौटाता है। पुराना /api/pricing एंडपॉइंट डॉलर के बजाय कच्चे अनुपात लौटाता है और आकार में कई गुना बड़ा है।
अधिकांश मॉडल कई प्रदाताओं द्वारा अलग अलग दरों पर दिए जाते हैं। इन सभी को देखने के लिए किसी एक मॉडल की जानकारी माँगें।
curl "https://api.unorouter.com/api/pricing/catalog/model?model=glm-5.3"{
"model_name": "glm-5.3",
"model_ratio": 0.63,
"completion_ratio": 3.1429,
"cache_ratio": 0.1857,
"input_price": 0.05103,
"output_price": 0.160382187,
"grid_min_ratio": 0.0405,
"auto_chain": ["a7-bbgt-2846-glm-5.3", "a7-kkl-3731-glm-5.3", "a7-4069-glm-5.3"],
"group_ratio": {
"a7-bbgt-2846-glm-5.3": 0.0405,
"a7-kkl-3731-glm-5.3": 0.0911,
"a7-4069-glm-5.3": 0.1214
},
"enable_groups": ["a7-bbgt-2846-glm-5.3", "a7-kkl-3731-glm-5.3"]
}auto_chain वह क्रम है जिसमें रूटिंग उन्हें आज़माती है, पहले सबसे सस्ता। group_ratio हर प्रदाता का गुणक देता है, और कीमत उसी से निकलती है:
input $/1M = model_ratio * 2 * group_ratio
output $/1M = input * completion_ratio
cached $/1M = input * cache_ratio
glm-5.3 on a7-bbgt-2846: 0.63 * 2 * 0.0405 = $0.05103 / 1M in
0.05103 * 3.1429 = $0.16038 / 1M outये समूह नाम वही हैं जिनसे आप कुंजी को जोड़ते हैं, देखें समूह पिनिंग
OpenAI के अनुरूप सूची वही है जिसे अधिकांश क्लाइंट कनेक्ट दबाने पर कॉल करते हैं। इसके लिए API कुंजी चाहिए।
curl https://api.unorouter.com/v1/models \
-H "Authorization: Bearer $UNOROUTER_API_KEY"यह केवल वही लौटाती है जिसका उपयोग वह कुंजी वास्तव में कर सकती है, इसलिए मुफ़्त श्रेणी की कुंजी को सशुल्क कुंजी से कम मॉडल दिखते हैं। हर प्रविष्टि में context_length और max_output_tokens भी होते हैं, जो सामान्य OpenAI नहीं देता।
पथ /v1/models है। /v1 हटा देने पर आप API के बजाय एक वेब पेज पर पहुँच जाते हैं, जिसे क्लाइंट अप्रत्याशित doctype वाली JSON पार्स त्रुटि के रूप में बताते हैं।
एक कॉल आपका खाता लौटाती है, जिसमें यह भी शामिल है कि खर्च करने के लिए कितना बचा है।
curl https://api.unorouter.com/api/user/self \
-H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN"{
"success": true,
"message": "",
"data": {
"id": 12345,
"username": "you",
"group": "default",
"quota": 265000,
"used_quota": 4231900,
"request_count": 1884,
"aff_code": "ABC123"
}
}राशियाँ quota इकाइयों में हैं, डॉलर में नहीं। 500,000 इकाइयाँ एक अमेरिकी डॉलर के बराबर हैं, इसलिए ऊपर दिखाया गया बैलेंस $0.53 है। पैसे के रूप में दिखाने के लिए 500,000 से भाग दें।
quota वह है जो आप अभी भी खर्च कर सकते हैं। used_quota और request_count आजीवन कुल हैं जो केवल बढ़ते हैं, इसलिए used_quota किसी चीज़ और आपके बैलेंस के बीच का अंतर नहीं है।
अपनी कुंजियाँ सूचीबद्ध करें, फिर किसी एक को उसकी आईडी से प्रकट करें।
curl "https://api.unorouter.com/api/token/?p=1&page_size=20" \
-H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN"
curl -X POST https://api.unorouter.com/api/token/42/key \
-H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN"सूची में हर कुंजी का मान छिपा रहता है, इसीलिए प्रकट करना एक अलग कॉल है। उस कॉल की दर सीमित है और वह आपके ऑडिट लॉग में दर्ज होती है।
कुंजी बनाने पर success मिलता है, कुंजी नहीं। पहले बनाएँ, फिर सूची से उसका id खोजें, और उसके बाद उसे प्रकट करें। कुंजी अपडेट करने पर अपडेट किया गया ऑब्जेक्ट लौटता है, लेकिन पूरा ऑब्जेक्ट भेजें: छोड़ देने पर केवल cross_group_retry, group_mapping और auto_groups ही बचे रहते हैं, और आपके छोड़े गए बाकी सभी फ़ील्ड खाली लिख दिए जाते हैं।
आपका अपना अनुरोध इतिहास पृष्ठों में बँटा है और उस पर फ़िल्टर लगाए जा सकते हैं।
curl -G https://api.unorouter.com/api/log/self \
-H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN" \
-d p=1 \
-d page_size=100 \
-d type=2 \
-d start_timestamp=1789344000 \
-d model_name=glm-5.3| पैरामीटर | अर्थ |
|---|---|
type | 1 टॉपअप, 2 खपत, 3 प्रबंधन, 5 त्रुटि, 6 धनवापसी, 7 लॉगिन। सब कुछ पाने के लिए इसे छोड़ दें। |
start_timestamp, end_timestamp | यूनिक्स सेकंड। दोनों के बीच का अंतराल दस साल से अधिक नहीं हो सकता। |
model_name, token_name, group | किसी एक मॉडल, एक कुंजी या एक प्रदाता समूह तक सीमित करें। |
request_id, upstream_request_id | हमारी आईडी या प्रदाता की आईडी से कोई एक अनुरोध खोजें। |
पेजिंग के लिए p और page_size जोड़ें, जहाँ पृष्ठ का आकार अधिकतम 100 है। एक सहयोगी एंडपॉइंट, /api/log/self/stat, उन्हीं फ़िल्टरों के लिए केवल कुल आँकड़े लौटाता है: खर्च, प्रति मिनट अनुरोध और प्रति मिनट टोकन।
एक्सेस टोकन के बिना किसी एक कुंजी का बचा हुआ बैलेंस पढ़ने के लिए, उसी कुंजी से प्रमाणीकरण करें:
curl https://api.unorouter.com/api/usage/token/ \
-H "Authorization: Bearer $UNOROUTER_API_KEY"{
"object": "token_usage",
"name": "SillyTavern",
"total_granted": 500000,
"total_used": 231900,
"total_available": 268100,
"unlimited_quota": false,
"model_limits_enabled": false,
"expires_at": 0
}खाते वाले एंडपॉइंट अपने पेलोड को लपेटते हैं। पृष्ठों में बँटे एंडपॉइंट उसे दो बार लपेटते हैं।
{ "success": true, "message": "", "data": { ... } }
{ "success": true, "message": "", "data": {
"page": 1, "page_size": 20, "total": 137, "items": [ ... ]
} }सार्वजनिक कैटलॉग एंडपॉइंट इसका अपवाद हैं और अपना ऑब्जेक्ट बिना किसी आवरण के सीधे लौटाते हैं।
अधिकांश विफलताएँ फिर भी HTTP 200 के साथ उत्तर देती हैं, जिसमें success को false किया जाता है और कारण बताने वाला एक संदेश होता है। स्टेटस कोड के बजाय उसी फ़ील्ड की जाँच करें।
प्रमाणीकरण इसका अपवाद है और असली स्टेटस लौटाता है: ग़लत क्रेडेंशियल पर AUTH_UNAUTHORIZED के साथ 401, पुराने पड़ चुके क्रेडेंशियल पर AUTH_TOKEN_EXPIRED, लॉगआउट के बाद AUTH_SESSION_REVOKED, और जब खाता उस रूट को कॉल करने का अधिकार न रखता हो तो 403 AUTH_INSUFFICIENT_PRIVILEGE।