क्विक स्टार्ट
पहला अनुरोध करें: अपनी key लें, एक संदेश भेजें और उत्तर पढ़ें। API OpenAI और Anthropic फ़ॉर्मेट बोलती है, इसलिए आप जो SDK पहले से इस्तेमाल करते हैं वह बेस URL और key बदलने के बाद काम करता है।
1. अपनी key लें
हर अकाउंट की एक API key होती है। साइन इन करें, Keys & usage खोलें और उसे कॉपी करें। key हर endpoint और हर मॉडल पर काम करती है। Keys और उपयोग
2. अपने क्लाइंट को API की ओर करें
सभी endpoints एक बेस URL के नीचे हैं। OpenAI SDK इसे अंत में /v1 के साथ लेता है; Anthropic SDK इसके बिना लेता है, क्योंकि वह /v1/messages खुद जोड़ता है।
| क्लाइंट | बेस URL |
|---|---|
| OpenAI SDK और OpenAI-संगत क्लाइंट | https://api.shannon-ai.com/v1 |
| Anthropic SDK | https://api.shannon-ai.com |
तीन endpoints टेक्स्ट बनाते हैं। वे एक ही मॉडल तक पहुँचते हैं; वह चुनें जिसका फ़ॉर्मेट आपका कोड पहले से इस्तेमाल करता है।
| एंडपॉइंट | फ़ॉर्मेट |
|---|---|
POST /v1/chat/completions | OpenAI Chat Completions |
POST /v1/messages | Anthropic Messages |
POST /v1/responses | OpenAI Responses |
3. पहला अनुरोध भेजें
Chat Completions endpoint पर shannon-3 को एक user संदेश भेजें। YOUR_API_KEY की जगह अपनी key लगाएँ।
POST https://api.shannon-ai.com/v1/chat/completions
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!"}
],
max_tokens=1024
)
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!' }
],
max_tokens: 1024
});
console.log(response.choices[0].message.content); package main
import (
"context"
"fmt"
openai "github.com/sashabaranov/go-openai"
)
func main() {
config := openai.DefaultConfig("YOUR_API_KEY")
config.BaseURL = "https://api.shannon-ai.com/v1"
client := openai.NewClientWithConfig(config)
resp, err := client.CreateChatCompletion(
context.Background(),
openai.ChatCompletionRequest{
Model: "shannon-3",
Messages: []openai.ChatCompletionMessage{
{Role: "user", Content: "Hello, Shannon!"},
},
MaxTokens: 1024,
},
)
if err != nil {
panic(err)
}
fmt.Println(resp.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!"}
],
"max_tokens": 1024
}' | फ़ील्ड | प्रकार | डिफ़ॉल्ट | विवरण |
|---|---|---|---|
model | string | उत्तर देने वाले मॉडल का id। id Models & pricing पर सूचीबद्ध हैं। | |
messages | array | अब तक की बातचीत: role और content वाले ऑब्जेक्ट। आख़िरी user संदेश प्रॉम्प्ट है। ज़रूरी। | |
max_tokens | integer | 4096 | अनुरोध का आउटपुट बजट, 1 से 65,536 तक। अनुरोध यह मात्रा आपके बैलेंस से रिज़र्व करता है और जितना सच में इस्तेमाल हुआ उसका शुल्क लगता है। |
stream | boolean | false | true उत्तर को लिखे जाते समय टुकड़ों में भेजता है। |
अनुरोध की बॉडी JSON है और उसे हेडर Content-Type: application/json चाहिए। फ़ील्ड की पूरी सूची endpoint पेज पर है। Chat Completions
उत्तर
stream के बिना कॉल, उत्तर पूरा होने पर एक JSON ऑब्जेक्ट लौटाती है। नीचे के टेक्स्ट और संख्याएँ उदाहरण हैं।
{
"id": "chatcmpl-9b2f6c1e4a7d4f0f8a3c5d2e1b6a7c90",
"object": "chat.completion",
"created": 1791590400,
"model": "shannon-3",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello! What would you like to work on?",
"reasoning_content": "A greeting. A short, friendly reply fits."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 1386,
"completion_tokens": 74,
"total_tokens": 1460
}
} | फ़ील्ड | प्रकार | विवरण |
|---|---|---|
id | string | chatcmpl- और उसके बाद 32 हेक्साडेसिमल अक्षर। |
object | string | हमेशा chat.completion। |
created | integer | Unix सेकंड में उत्तर का समय। |
model | string | उत्तर देने वाले मॉडल का प्रकाशित id, तब भी जब आपने alias या दूसरी वर्तनी भेजी हो। |
choices | array | हमेशा एक प्रविष्टि, index 0 के साथ। |
choices[0].message.role | string | हमेशा assistant। |
choices[0].message.content | string | null | उत्तर। जब उत्तर में tool_calls हों तो यह null हो सकता है। |
choices[0].message.reasoning_content | string | null | उत्तर से पहले मॉडल की रीज़निंग, या कुछ न होने पर null। |
choices[0].message.tool_calls | array | केवल तब होता है जब मॉडल आपके घोषित किए टूल में से किसी को कॉल करे। |
choices[0].finish_reason | string | उत्तर के लिए stop, जब मॉडल टूल कॉल करे तब tool_calls। |
usage.prompt_tokens | integer | मॉडल ने इस उत्तर के लिए जो टोकन पढ़े। shannon-2-* और Shannon 3 परिवार पर यह आपके भेजे टेक्स्ट से ज़्यादा हो सकता है। |
usage.completion_tokens | integer | मॉडल ने जो टोकन लिखे। |
usage.total_tokens | integer | कुल। Shannon मॉडल का शुल्क इसी संख्या से निकाला जाता है। |
-
usageमें टोकन गिनती होती है, पैसे नहीं। कॉल ने आपके बैलेंस से क्या लिया, यह Keys & usage पर हर अनुरोध के लिए दिखता है; यह कैसे निकलता है, यह सीमाएँ और बैलेंस पर है। सीमाएँ और बैलेंस - हर उत्तर में, एरर और स्ट्रीम में भी, हेडर
x-request-idहोता है। अगर आपके अनुरोध मेंx-request-idहेडर है, तो उसका मान लौट आता है; नहीं तो मान 12 हेक्साडेसिमल अक्षरों का होता है। इसे अपने लॉग में रखें: यह इसी एक अनुरोध का नाम है।
वही कॉल स्ट्रीम के रूप में
उत्तर को लिखे जाते समय पढ़ने के लिए stream को true पर सेट करें। अनुरोध में बाकी सब वैसा ही रहता है।
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com/v1"
)
stream = client.chat.completions.create(
model="shannon-3",
messages=[
{"role": "user", "content": "Hello, Shannon!"}
],
max_tokens=1024,
stream=True
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True) import OpenAI from 'openai';
const client = new OpenAI({
apiKey: 'YOUR_API_KEY',
baseURL: 'https://api.shannon-ai.com/v1'
});
const stream = await client.chat.completions.create({
model: 'shannon-3',
messages: [
{ role: 'user', content: 'Hello, Shannon!' }
],
max_tokens: 1024,
stream: true
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? '');
} curl -N -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!"}
],
"max_tokens": 1024,
"stream": true
}' स्ट्रीम का हर फ़्रेम data: से शुरू होने वाली एक पंक्ति है और उसमें एक JSON ऑब्जेक्ट होता है। एक फ़्रेम, कई पंक्तियों में छपा हुआ:
{
"id": "chatcmpl-9b2f6c1e4a7d4f0f8a3c5d2e1b6a7c90",
"object": "chat.completion.chunk",
"created": 1791590400,
"model": "shannon-3",
"choices": [
{
"index": 0,
"delta": {
"content": "Hello! "
},
"finish_reason": null
}
]
} | फ़्रेम, क्रम में | delta | finish_reason |
|---|---|---|
| जब मॉडल रीज़निंग करता है। शून्य या अधिक फ़्रेम। | {"reasoning_content": "…"} | null |
| उत्तर, टुकड़ा-टुकड़ा। शून्य या अधिक फ़्रेम। | {"content": "…"} | null |
आख़िरी JSON फ़्रेम। इसमें usage भी होता है; इसे माँगना नहीं पड़ता। | {} | "stop" |
स्ट्रीम का अंत: पंक्ति data: [DONE]। |
- उत्तर का स्टेटस
200औरcontent-type: text/event-streamहै। हर फ़्रेमdata: <json>वाली एक पंक्ति है, जिसके बाद एक खाली पंक्ति आती है। - हर 15 सेकंड पर पंक्ति
: pingआती है। यह एक कमेंट है जो कनेक्शन खुला रखता है; SSE क्लाइंट इसे छोड़ देते हैं। - स्ट्रीम खुलने के बाद की विफलता
data: {"error": {…}}फ़्रेम के रूप में आती है। स्टेटस200ही रहता है, इसलिए फ़्रेम जाँचें।
अगर कॉल विफल हो
एरर एक JSON ऑब्जेक्ट है जिसमें error होता है, जिसके भीतर type और message होते हैं। पहली कॉल को सबसे ज़्यादा यही उत्तर मिलते हैं।
| स्टेटस | प्रकार | संदेश | इसका मतलब |
|---|---|---|---|
401 | authentication_error | Missing authentication | API तक कोई key नहीं पहुँची। Authorization: Bearer और उसके बाद अपनी key भेजें। |
401 | authentication_error | Invalid API key | key किसी अकाउंट की मौजूदा key नहीं है। उसे Keys & usage से फिर कॉपी करें। |
400 | invalid_request_error | unknown model: <id> | model प्रकाशित id नहीं है। Models & pricing से कोई id इस्तेमाल करें। |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type… | किसी फ़ील्ड का JSON प्रकार गलत है, या messages नहीं है। |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | अनुरोध का आउटपुट बजट आपके बैलेंस में नहीं समाता। |
आगे कहाँ जाएँ
- मॉडल और कीमतें — मॉडल चुनें: id, कॉन्टेक्स्ट विंडो और कीमतें।
- Chat Completions — आपके कॉल किए endpoint का हर अनुरोध फ़ील्ड, उत्तर फ़ील्ड और स्ट्रीम इवेंट।
- स्ट्रीमिंग — स्ट्रीम के फ़्रेम, keep-alive लाइनें और स्ट्रीम के भीतर के एरर।
- फ़ंक्शन कॉलिंग — मॉडल को अपने फ़ंक्शन कॉल करने दें।
- सीमाएँ और बैलेंस — अनुरोध क्या रिज़र्व करता है और उसकी लागत क्या है, और आप कितने अनुरोध भेज सकते हैं।
- API प्लेग्राउंड — अपनी key से ब्राउज़र में अनुरोध आज़माएँ।