प्रमाणीकरण
हर अनुरोध अपनी API key हेडर में ले जाता है। अकाउंट की एक key हर endpoint और हर मॉडल पर काम करती है, दो हेडर रूपों में से किसी एक में।
हेडर · OpenAI SDK
Authorization: Bearer YOUR_API_KEY हेडर · Anthropic SDK
x-api-key: YOUR_API_KEY स्वीकार किए जाने वाले हेडर
दोनों हेडर हर /v1 endpoint पर पढ़े जाते हैं, endpoint जिस भी फ़ॉर्मेट में बोलता हो। इनमें से एक भेजें।
| हेडर | विवरण |
|---|---|
Authorization: Bearer <key> | सबसे पहले जाँचा जाता है। Bearer को बड़े B के साथ और key से पहले एक स्पेस के साथ लिखें। OpenAI SDK यह हेडर भेजते हैं। |
x-api-key: <key> | तब पढ़ा जाता है जब अनुरोध में Authorization: Bearer हेडर न हो। Anthropic SDK यह हेडर भेजते हैं। |
OpenAI SDK के साथ key और बेस URL सेट करें; SDK Authorization: Bearer भेजता है।
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com/v1"
)
response = client.chat.completions.create(
model="shannon-3",
messages=[
{"role": "user", "content": "Hello, Shannon!"}
]
)
print(response.choices[0].message.content) import OpenAI from 'openai';
const client = new OpenAI({
apiKey: 'YOUR_API_KEY',
baseURL: 'https://api.shannon-ai.com/v1'
});
const response = await client.chat.completions.create({
model: 'shannon-3',
messages: [
{ role: 'user', content: 'Hello, Shannon!' }
]
});
console.log(response.choices[0].message.content); curl -X POST "https://api.shannon-ai.com/v1/chat/completions" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "shannon-3",
"messages": [
{"role": "user", "content": "Hello, Shannon!"}
]
}' Anthropic SDK के साथ key और /v1 के बिना बेस URL सेट करें; SDK x-api-key भेजता है।
import anthropic
client = anthropic.Anthropic(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com"
)
message = client.messages.create(
model="shannon-3",
max_tokens=1024,
messages=[
{"role": "user", "content": "Hello, Shannon!"}
]
)
print("".join(block.text for block in message.content if block.type == "text")) import Anthropic from '@anthropic-ai/sdk';
const client = new Anthropic({
apiKey: 'YOUR_API_KEY',
baseURL: 'https://api.shannon-ai.com'
});
const message = await client.messages.create({
model: 'shannon-3',
max_tokens: 1024,
messages: [
{ role: 'user', content: 'Hello, Shannon!' }
]
});
console.log(message.content.filter((block) => block.type === 'text').map((block) => block.text).join('')); curl -X POST "https://api.shannon-ai.com/v1/messages" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "shannon-3",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "Hello, Shannon!"}
]
}' किन endpoints को key चाहिए
| एंडपॉइंट | Key |
|---|---|
POST /v1/chat/completions | आवश्यक |
POST /v1/messages | आवश्यक |
POST /v1/responses | आवश्यक |
POST /v1/tokenize | आवश्यक |
POST /v1/messages/count_tokens | आवश्यक |
GET /v1/models | आवश्यक नहीं |
आपकी key
- Key
sk-होती है जिसके बादA–Z,a–z,0–9,-और_के 43 अक्षर आते हैं: कुल 46 अक्षर। - हर अकाउंट के पास ठीक एक key होती है। यह तब बनती है जब आप पहली बार Keys & usage खोलते हैं।
- Key आपके अकाउंट के लिए API की पूरी पहुँच देती है: हर endpoint, हर मॉडल और पूरा बैलेंस।
- Key की कोई समाप्ति तिथि नहीं होती। यह तब तक काम करती है जब तक आप इसे रोटेट या रद्द न करें।
रोटेट और रद्द करें
आप key को Keys & usage पेज पर रोटेट और रद्द करते हैं। Keys और उपयोग
| कार्रवाई | क्या होता है |
|---|---|
| रोटेट करना | नई key जारी होती है और पुरानी key काम करना बंद कर देती है। नई key तुरंत काम करती है। |
| रद्द करना | Key काम करना बंद कर देती है और कोई नई key जारी नहीं होती। फिर से चालू key पाने के लिए रोटेट करें। |
- दोनों तुरंत प्रभावी होते हैं: पुरानी key वाले अगले अनुरोध का उत्तर
401होता है। पुरानी key के हर जगह अस्वीकार होने की ऊपरी सीमा 60 सेकंड मानें। - अकाउंट का हर क्लाइंट वही key उपयोग करता है, इसलिए रोटेशन सब पर असर डालता है। रोटेट करने के तुरंत बाद नई key अपने क्लाइंट में डालें।
- बैलेंस, उपयोग और flood protection अकाउंट के होते हैं, key के नहीं। नई key उसी बैलेंस और मौजूदा मिनट की उसी अनुरोध गिनती के साथ जारी रहती है।
त्रुटियाँ
हर प्रमाणीकरण विफलता का स्टेटस 401 और प्रकार authentication_error होता है। संदेश से मामलों में अंतर पता चलता है।
| स्टेटस | प्रकार | संदेश | कब |
|---|---|---|---|
401 | authentication_error | Missing authentication | अनुरोध में न तो Authorization: Bearer हेडर है और न sk- से शुरू होने वाला x-api-key हेडर। यही उत्तर छोटे अक्षरों वाले bearer और बिना Bearer वाले Authorization मान पर भी मिलता है। |
401 | authentication_error | Invalid API key | यह key किसी अकाउंट की मौजूदा key नहीं है: गलत टाइप हुई है, रद्द की जा चुकी है, या रोटेशन से बदल दी गई है। |
{
"error": {
"type": "authentication_error",
"message": "Invalid API key",
"code": "invalid_api_key",
"param": null
}
} {
"type": "error",
"error": {
"type": "authentication_error",
"message": "Invalid API key"
}
} /v1/messagesको छोड़कर हर पाथ परerrorऑब्जेक्ट मेंcode: "invalid_api_key"औरparam: nullभी होते हैं, गायब key के लिए भी।- key की जाँच बॉडी पढ़ने से पहले होती है। वैध key के बिना अनुरोध को
401मिलता है, भले ही उसकी बॉडी अवैध या बहुत बड़ी हो। sk-से शुरू न होने वालेAuthorization: Bearerमान को API key नहीं माना जाता। उसे401मिलता है और संदेश बताता है कि टोकन अवैध या समाप्त है।
ब्राउज़र और CORS
- API क्रॉस-ऑरिजिन ब्राउज़र अनुरोधों का उत्तर केवल origin की एक तय सूची के लिए देता है। किसी दूसरे origin के पेज का JavaScript
/v1के उत्तर नहीं पढ़ सकता। - API को अपने सर्वर से कॉल करें और अपने पेज को अपने सर्वर से बात करने दें। इससे key पेज के सोर्स से बाहर भी रहती है।
- सर्वर-साइड कोड और कमांड-लाइन टूल प्रभावित नहीं होते: यह नियम केवल ब्राउज़र लागू करते हैं।
- shannon-ai.com पर साइन-इन
/v1अनुरोधों को प्रमाणित नहीं करता। वहाँ कुकीज़ नहीं पढ़ी जातीं; key ही एकमात्र क्रेडेंशियल है। - अनुमत origin के लिए ब्राउज़र
content-type,authorization,x-api-key,anthropic-version,anthropic-beta,openai-betaऔरx-request-idभेज सकता है, और उत्तर हेडरx-request-idपढ़ सकता है।
Key को सुरक्षित रखना
- Key को सर्वर पर रखें। उसे वेब पेज, मोबाइल ऐप या सार्वजनिक रिपॉज़िटरी में न डालें: जिसके पास भी वह होगी वह आपका पूरा बैलेंस खर्च कर सकता है।
- Key को कोड में लिखने के बजाय environment variable या सीक्रेट स्टोर से लोड करें।
- यदि key लीक हुई हो सकती है, तो उसे Keys & usage पर रोटेट करें। पुरानी key तुरंत काम करना बंद कर देती है।
- लीक के बाद Keys & usage पर अनुरोध सूची पढ़ें। वह पिछले 30 दिनों में key से किया गया हर अनुरोध दिखाती है।