Ταυτοποίηση
Κάθε αίτημα φέρει το κλειδί API σας σε μια κεφαλίδα. Ένα κλειδί ανά λογαριασμό λειτουργεί σε κάθε endpoint και κάθε μοντέλο, με δύο μορφές κεφαλίδας.
Κεφαλίδα · OpenAI SDKs
Authorization: Bearer YOUR_API_KEY Κεφαλίδα · Anthropic SDKs
x-api-key: YOUR_API_KEY Κεφαλίδες που γίνονται δεκτές
Και οι δύο κεφαλίδες διαβάζονται σε κάθε endpoint /v1, όποια μορφή κι αν μιλά το endpoint. Στείλτε τη μία από αυτές.
| Κεφαλίδα | Περιγραφή |
|---|---|
Authorization: Bearer <key> | Ελέγχεται πρώτη. Γράψτε το Bearer με κεφαλαίο B και ένα κενό πριν από το κλειδί. Τα OpenAI SDKs στέλνουν αυτή την κεφαλίδα. |
x-api-key: <key> | Διαβάζεται όταν το αίτημα δεν έχει κεφαλίδα Authorization: Bearer. Τα Anthropic SDKs στέλνουν αυτή την κεφαλίδα. |
Με OpenAI SDK, ορίστε το κλειδί και το base 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, ορίστε το κλειδί και το base URL χωρίς /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 δευτερόλεπτα ως το ανώτατο όριο μέχρι το παλιό κλειδί να απορρίπτεται παντού. - Όλοι οι clients του λογαριασμού χρησιμοποιούν το ίδιο κλειδί, οπότε μια αναδημιουργία τους επηρεάζει όλους. Βάλτε το νέο κλειδί στους clients σας αμέσως μετά την αναδημιουργία.
- Το υπόλοιπο, η χρήση και η προστασία από υπερφόρτωση ανήκουν στον λογαριασμό, όχι στο κλειδί. Ένα νέο κλειδί συνεχίζει με το ίδιο υπόλοιπο και τον ίδιο αριθμό αιτημάτων για το τρέχον λεπτό.
Σφάλματα
Κάθε αποτυχία ταυτοποίησης έχει κατάσταση 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με μήνυμα ότι το token είναι άκυρο ή έχει λήξει.
Browsers και CORS
- Το API απαντά σε αιτήματα browser από άλλη προέλευση (cross-origin) μόνο για μια σταθερή λίστα προελεύσεων. Η JavaScript σε σελίδα άλλης προέλευσης δεν μπορεί να διαβάσει απαντήσεις
/v1. - Καλέστε το API από τον διακομιστή σας και αφήστε τη σελίδα σας να μιλά με τον διακομιστή σας. Έτσι το κλειδί μένει και εκτός του πηγαίου κώδικα της σελίδας.
- Ο κώδικας από την πλευρά του διακομιστή και τα εργαλεία γραμμής εντολών δεν επηρεάζονται: αυτόν τον κανόνα τον εφαρμόζουν μόνο οι browsers.
- Μια σύνδεση στο shannon-ai.com δεν ταυτοποιεί αιτήματα
/v1. Τα cookies δεν διαβάζονται εκεί· το κλειδί είναι το μόνο διαπιστευτήριο. - Για μια επιτρεπόμενη προέλευση, ένας browser μπορεί να στείλει τα
content-type,authorization,x-api-key,anthropic-version,anthropic-beta,openai-betaκαιx-request-id, και μπορεί να διαβάσει την κεφαλίδα απάντησηςx-request-id.
Ασφαλής φύλαξη του κλειδιού
- Κρατήστε το κλειδί σε διακομιστή. Μην το βάζετε σε ιστοσελίδες, εφαρμογές για κινητά ή δημόσια αποθετήρια: όποιος το έχει μπορεί να ξοδέψει ολόκληρο το υπόλοιπό σας.
- Φορτώστε το κλειδί από μεταβλητή περιβάλλοντος ή από αποθήκη μυστικών αντί να το γράφετε στον κώδικα.
- Αν το κλειδί μπορεί να διέρρευσε, αναδημιουργήστε το στο Κλειδιά & χρήση. Το παλιό κλειδί παύει να λειτουργεί αμέσως.
- Μετά από διαρροή, διαβάστε τη λίστα αιτημάτων στο Κλειδιά & χρήση. Δείχνει κάθε αίτημα που έκανε το κλειδί τις τελευταίες 30 ημέρες.