Autentificare
Fiecare cerere poartă cheia ta API într-un header. O singură cheie pe cont funcționează pe fiecare endpoint și cu fiecare model, în oricare dintre cele două forme de header.
Header · SDK-uri OpenAI
Authorization: Bearer YOUR_API_KEY Header · SDK-uri Anthropic
x-api-key: YOUR_API_KEY Header-e acceptate
Ambele header-e sunt citite pe fiecare endpoint /v1, indiferent de formatul pe care îl vorbește endpoint-ul. Trimite unul dintre ele.
| Header | Descriere |
|---|---|
Authorization: Bearer <key> | Verificat primul. Scrie Bearer cu B majuscul și un singur spațiu înaintea cheii. SDK-urile OpenAI trimit acest header. |
x-api-key: <key> | Citit când cererea nu are header-ul Authorization: Bearer. SDK-urile Anthropic trimit acest header. |
Cu un SDK OpenAI, setează cheia și URL-ul de bază; SDK-ul trimite 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!"}
]
}' Cu un SDK Anthropic, setează cheia și URL-ul de bază fără /v1; SDK-ul trimite 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!"}
]
}' Ce endpoint-uri necesită o cheie
| Endpoint | Cheie |
|---|---|
POST /v1/chat/completions | Necesară |
POST /v1/messages | Necesară |
POST /v1/responses | Necesară |
POST /v1/tokenize | Necesară |
POST /v1/messages/count_tokens | Necesară |
GET /v1/models | Nu este necesară |
Cheia ta
- O cheie este
sk-urmat de 43 de caractere dinA–Z,a–z,0–9,-și_: 46 de caractere în total. - Fiecare cont are exact o cheie. Ea este creată prima dată când deschizi Chei și utilizare.
- Cheia oferă acces complet la API pentru contul tău: fiecare endpoint, fiecare model și întregul sold.
- O cheie nu are dată de expirare. Funcționează până când o rotești sau o revoci.
Rotire și revocare
Rotești și revoci cheia pe pagina Chei și utilizare. Chei și utilizare
| Acțiune | Ce se întâmplă |
|---|---|
| Rotește | Se emite o cheie nouă, iar cheia veche încetează să funcționeze. Cheia nouă funcționează imediat. |
| Revocă | Cheia încetează să funcționeze și nu se emite nicio cheie nouă. Rotește pentru a avea din nou o cheie funcțională. |
- Ambele acțiuni au efect imediat: următoarea cerere cu cheia veche primește răspuns
401. Consideră 60 de secunde drept limita superioară până când cheia veche este refuzată peste tot. - Toți clienții contului folosesc aceeași cheie, deci o rotire îi afectează pe toți. Pune noua cheie în clienții tăi imediat după rotire.
- Soldul, utilizarea și protecția anti-flood aparțin contului, nu cheii. O cheie nouă continuă cu același sold și cu același număr de cereri pentru minutul curent.
Erori
Fiecare eroare de autentificare are starea 401 și tipul authentication_error. Mesajul deosebește cazurile.
| Stare | Tip | Mesaj | Când |
|---|---|---|---|
401 | authentication_error | Missing authentication | Cererea nu are nici header-ul Authorization: Bearer, nici un header x-api-key care începe cu sk-. Acesta este și răspunsul pentru bearer cu litere mici și pentru o valoare Authorization fără Bearer. |
401 | authentication_error | Invalid API key | Cheia nu este cheia curentă a unui cont: este scrisă greșit, a fost revocată sau a fost înlocuită printr-o rotire. |
{
"error": {
"type": "authentication_error",
"message": "Invalid API key",
"code": "invalid_api_key",
"param": null
}
} {
"type": "error",
"error": {
"type": "authentication_error",
"message": "Invalid API key"
}
} - Pe orice cale în afară de
/v1/messages, obiectulerrorconține șicode: "invalid_api_key", inclusiv pentru o cheie lipsă, șiparam: null. - Cheia este verificată înainte de citirea corpului. O cerere fără o cheie validă primește
401chiar dacă are corpul invalid sau prea mare. - O valoare
Authorization: Bearercare nu începe cusk-nu este tratată ca o cheie API. Primește401cu un mesaj că token-ul este invalid sau expirat.
Browsere și CORS
- API-ul răspunde la cereri cross-origin din browser doar pentru o listă fixă de origini. JavaScript de pe o pagină cu altă origine nu poate citi răspunsurile
/v1. - Apelează API-ul de pe serverul tău și lasă pagina să comunice cu serverul tău. Astfel cheia rămâne și în afara sursei paginii.
- Codul de pe server și instrumentele din linia de comandă nu sunt afectate: această regulă este aplicată doar de browsere.
- O autentificare pe shannon-ai.com nu autentifică cererile
/v1. Cookie-urile nu sunt citite acolo; cheia este singura credențială. - Pentru o origine permisă, un browser poate trimite
content-type,authorization,x-api-key,anthropic-version,anthropic-beta,openai-betașix-request-idși poate citi header-ul de răspunsx-request-id.
Cum păstrezi cheia în siguranță
- Păstrează cheia pe un server. Nu o pune în pagini web, aplicații mobile sau depozite publice: oricine o deține îți poate cheltui tot soldul.
- Încarcă cheia dintr-o variabilă de mediu sau dintr-un depozit de secrete, în loc să o scrii în cod.
- Dacă cheia s-ar putea să fi fost expusă, rotește-o în Chei și utilizare. Cheia veche încetează să funcționeze imediat.
- După o scurgere, citește lista de cereri din Chei și utilizare. Aceasta arată fiecare cerere făcută cu cheia în ultimele 30 de zile.