אימות
כל בקשה נושאת את מפתח ה-API שלכם בכותרת. מפתח אחד לחשבון עובד בכל endpoint ובכל מודל, באחת משתי צורות הכותרת.
כותרת · ה-SDK של OpenAI
Authorization: Bearer YOUR_API_KEY כותרת · ה-SDK של Anthropic
x-api-key: YOUR_API_KEY כותרות מתקבלות
שתי הכותרות נקראות בכל endpoint של /v1, בכל פורמט שה-endpoint מדבר. שלחו אחת מהן.
| כותרת | תיאור |
|---|---|
Authorization: Bearer <key> | נבדקת ראשונה. כתבו Bearer עם B גדולה ורווח אחד לפני המפתח. ה-SDK של OpenAI שולחים את הכותרת הזו. |
x-api-key: <key> | נקראת כשבבקשה אין כותרת Authorization: Bearer. ה-SDK של Anthropic שולחים את הכותרת הזו. |
עם OpenAI SDK, הגדירו את המפתח ואת כתובת הבסיס; ה-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, הגדירו את המפתח ואת כתובת הבסיס בלי /v1; ה-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 צריכים מפתח
| Endpoint | מפתח |
|---|---|
POST /v1/chat/completions | נדרש |
POST /v1/messages | נדרש |
POST /v1/responses | נדרש |
POST /v1/tokenize | נדרש |
POST /v1/messages/count_tokens | נדרש |
GET /v1/models | לא נדרש |
המפתח שלכם
- מפתח הוא
sk-ואחריו 43 תווים מתוךA–Z,a–z,0–9,-ו-_: 46 תווים בסך הכול. - לכל חשבון יש מפתח אחד בדיוק. הוא נוצר בפעם הראשונה שאתם פותחים את מפתחות ושימוש.
- המפתח נותן גישה מלאה ל-API עבור החשבון שלכם: כל endpoint, כל מודל וכל היתרה.
- למפתח אין תאריך תפוגה. הוא עובד עד שתחליפו או תבטלו אותו.
החלפה וביטול
מחליפים ומבטלים את המפתח בדף מפתחות ושימוש. מפתחות ושימוש
| פעולה | מה קורה |
|---|---|
| החלפה | מונפק מפתח חדש והמפתח הישן מפסיק לעבוד. המפתח החדש עובד מיד. |
| ביטול | המפתח מפסיק לעבוד ולא מונפק מפתח חדש. בצעו החלפה כדי לקבל שוב מפתח עובד. |
- שתיהן נכנסות לתוקף מיד: הבקשה הבאה עם המפתח הישן נענית ב-
401. התייחסו ל-60 שניות כגבול העליון עד שהמפתח הישן נדחה בכל מקום. - כל לקוח של החשבון משתמש באותו מפתח, ולכן החלפה משפיעה על כולם. הכניסו את המפתח החדש ללקוחות שלכם מיד אחרי ההחלפה.
- היתרה, השימוש והגנת ההצפה שייכים לחשבון, לא למפתח. מפתח חדש ממשיך עם אותה יתרה ואותו מספר בקשות לדקה הנוכחית.
שגיאות
לכל כשל אימות יש סטטוס 401 וסוג authentication_error. ההודעה מבדילה בין המקרים.
| סטטוס | סוג | הודעה | מתי |
|---|---|---|---|
401 | authentication_error | Missing authentication | בבקשה אין כותרת Authorization: Bearer ואין כותרת x-api-key שמתחילה ב-sk-. זו גם התשובה ל-bearer באותיות קטנות ולערך Authorization בלי Bearer. |
401 | authentication_error | Invalid API 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. - המפתח נבדק לפני שהגוף נקרא. בקשה בלי מפתח תקף מקבלת
401גם כשהגוף שלה לא תקין או גדול מדי. - ערך
Authorization: Bearerשלא מתחיל ב-sk-אינו נחשב מפתח API. הוא מקבל401עם הודעה שהטוקן לא תקין או שפג תוקפו.
דפדפנים ו-CORS
- ה-API עונה לבקשות דפדפן cross-origin רק עבור רשימה קבועה של origins. JavaScript בדף של origin אחר אינו יכול לקרוא תשובות
/v1. - קראו ל-API מהשרת שלכם ותנו לדף שלכם לדבר עם השרת. כך המפתח גם נשאר מחוץ לקוד המקור של הדף.
- קוד בצד השרת וכלי שורת פקודה אינם מושפעים: הכלל הזה נאכף רק בדפדפנים.
- התחברות ב-shannon-ai.com אינה מאמתת בקשות
/v1. עוגיות אינן נקראות שם; המפתח הוא האישור היחיד. - עבור origin מותר, דפדפן רשאי לשלוח
content-type,authorization,x-api-key,anthropic-version,anthropic-beta,openai-betaו-x-request-id, ולקרוא את כותרת התשובהx-request-id.
שמירה על המפתח
- שמרו את המפתח בשרת. אל תכניסו אותו לדפי אינטרנט, לאפליקציות מובייל או למאגרים ציבוריים: מי שמחזיק בו יכול להוציא את כל היתרה שלכם.
- טענו את המפתח ממשתנה סביבה או ממאגר סודות במקום לכתוב אותו בקוד.
- אם ייתכן שהמפתח דלף, החליפו אותו בדף מפתחות ושימוש. המפתח הישן מפסיק לעבוד מיד.
- אחרי דליפה, עיינו ברשימת הבקשות בדף מפתחות ושימוש. היא מראה כל בקשה שהמפתח ביצע ב-30 הימים האחרונים.