প্রমাণীকরণ
প্রতিটি রিকোয়েস্ট আপনার API key একটি হেডারে বহন করে। অ্যাকাউন্ট প্রতি একটি key প্রতিটি এন্ডপয়েন্ট ও প্রতিটি মডেলে কাজ করে, দুটি হেডার ফর্মের যেকোনো একটিতে।
হেডার · OpenAI SDK
Authorization: Bearer YOUR_API_KEY হেডার · Anthropic SDK
x-api-key: YOUR_API_KEY গ্রহণযোগ্য হেডার
দুটি হেডারই প্রতিটি /v1 এন্ডপয়েন্টে পড়া হয়, এন্ডপয়েন্ট যে ফরম্যাটেই কথা বলুক। এর একটি পাঠান।
| হেডার | বিবরণ |
|---|---|
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!"}
]
}' কোন এন্ডপয়েন্টে 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-তে পূর্ণ অ্যাক্সেস দেয়: প্রতিটি এন্ডপয়েন্ট, প্রতিটি মডেল এবং পুরো ব্যালেন্স।
- key-র কোনো মেয়াদ শেষের তারিখ নেই। আপনি রোটেট বা বাতিল না করা পর্যন্ত এটি কাজ করে।
রোটেট ও বাতিল
আপনি Keys & usage পেজে key রোটেট ও বাতিল করেন। Keys & usage
| কাজ | কী ঘটে |
|---|---|
| রোটেট করুন | একটি নতুন key দেওয়া হয় এবং পুরনো key কাজ করা বন্ধ করে। নতুন key সঙ্গে সঙ্গে কাজ করে। |
| বাতিল করুন | key কাজ করা বন্ধ করে এবং কোনো নতুন key দেওয়া হয় না। আবার কার্যকর key পেতে রোটেট করুন। |
- দুটিই সঙ্গে সঙ্গে কার্যকর হয়: পুরনো key দিয়ে পরের রিকোয়েস্টের উত্তর হয়
401। পুরনো key সব জায়গায় প্রত্যাখ্যাত হওয়ার ঊর্ধ্বসীমা হিসেবে 60 সেকেন্ড ধরুন। - অ্যাকাউন্টের প্রতিটি ক্লায়েন্ট একই key ব্যবহার করে, তাই রোটেশন সবার ওপর প্রভাব ফেলে। রোটেট করার পরপরই নতুন key আপনার ক্লায়েন্টগুলোতে দিন।
- ব্যালেন্স, ব্যবহার এবং ফ্লাড প্রোটেকশন অ্যাকাউন্টের, 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 কোডে লেখার বদলে এনভায়রনমেন্ট ভ্যারিয়েবল বা সিক্রেট স্টোর থেকে লোড করুন।
- key লিক হয়ে থাকতে পারে মনে হলে Keys & usage-এ এটি রোটেট করুন। পুরনো key সঙ্গে সঙ্গে কাজ করা বন্ধ করে।
- লিক হওয়ার পর Keys & usage-এর রিকোয়েস্ট তালিকা পড়ুন। এতে গত 30 দিনে key দিয়ে করা প্রতিটি রিকোয়েস্ট দেখা যায়।