Autentisering
Varje begäran bär din API-nyckel i en header. En nyckel per konto fungerar på varje endpoint och varje modell, i någon av två headerformer.
Header · OpenAI SDK:er
Authorization: Bearer YOUR_API_KEY Header · Anthropic SDK:er
x-api-key: YOUR_API_KEY Accepterade headers
Båda headrarna läses på varje /v1-endpoint, oavsett vilket format endpointen talar. Skicka en av dem.
| Header | Beskrivning |
|---|---|
Authorization: Bearer <key> | Kontrolleras först. Skriv Bearer med stort B och ett mellanslag före nyckeln. OpenAI SDK:er skickar den här headern. |
x-api-key: <key> | Läses när begäran saknar Authorization: Bearer-header. Anthropic SDK:er skickar den här headern. |
Med en OpenAI SDK anger du nyckeln och bas-URL:en; SDK:n skickar 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!"}
]
}' Med en Anthropic SDK anger du nyckeln och bas-URL:en utan /v1; SDK:n skickar 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!"}
]
}' Vilka endpoints som kräver en nyckel
| Endpoint | Nyckel |
|---|---|
POST /v1/chat/completions | Krävs |
POST /v1/messages | Krävs |
POST /v1/responses | Krävs |
POST /v1/tokenize | Krävs |
POST /v1/messages/count_tokens | Krävs |
GET /v1/models | Behövs inte |
Din nyckel
- En nyckel är
sk-följt av 43 tecken frånA–Z,a–z,0–9,-och_: 46 tecken totalt. - Varje konto har exakt en nyckel. Den skapas första gången du öppnar Nycklar och användning.
- Nyckeln ger full åtkomst till API:et för ditt konto: varje endpoint, varje modell och hela balansen.
- En nyckel har inget utgångsdatum. Den fungerar tills du roterar eller återkallar den.
Rotera och återkalla
Du roterar och återkallar nyckeln på sidan Nycklar och användning. Nycklar och användning
| Åtgärd | Vad som händer |
|---|---|
| Rotera | En ny nyckel utfärdas och den gamla nyckeln slutar fungera. Den nya nyckeln fungerar direkt. |
| Återkalla | Nyckeln slutar fungera och ingen ny nyckel utfärdas. Rotera för att få en fungerande nyckel igen. |
- Båda träder i kraft direkt: nästa begäran med den gamla nyckeln besvaras med
401. Räkna med 60 sekunder som övre gräns innan den gamla nyckeln nekas överallt. - Alla klienter för kontot använder samma nyckel, så en rotation når dem alla. Lägg in den nya nyckeln i dina klienter direkt efter att du har roterat.
- Balans, användning och flood protection hör till kontot, inte till nyckeln. En ny nyckel fortsätter med samma balans och samma antal begäranden för den aktuella minuten.
Fel
Varje autentiseringsfel har status 401 och typen authentication_error. Meddelandet skiljer fallen åt.
| Status | Typ | Meddelande | När |
|---|---|---|---|
401 | authentication_error | Missing authentication | Begäran har varken en Authorization: Bearer-header eller en x-api-key-header som börjar med sk-. Det är också svaret på bearer med små bokstäver och på ett Authorization-värde utan Bearer. |
401 | authentication_error | Invalid API key | Nyckeln är inte kontots nuvarande nyckel: den är felskriven, återkallad eller ersatt genom en rotation. |
{
"error": {
"type": "authentication_error",
"message": "Invalid API key",
"code": "invalid_api_key",
"param": null
}
} {
"type": "error",
"error": {
"type": "authentication_error",
"message": "Invalid API key"
}
} - På varje sökväg utom
/v1/messagesinnehållererror-objektet ocksåcode: "invalid_api_key", även för en saknad nyckel, ochparam: null. - Nyckeln kontrolleras innan kroppen läses. En begäran utan giltig nyckel får
401även när dess kropp är ogiltig eller för stor. - Ett
Authorization: Bearer-värde som inte börjar medsk-behandlas inte som en API-nyckel. Det får401med ett meddelande om att token är ogiltig eller har gått ut.
Webbläsare och CORS
- API:et svarar på cross-origin-begäranden från webbläsare endast för en fast lista med origins. JavaScript på en sida från ett annat origin kan inte läsa
/v1-svar. - Anropa API:et från din server och låt din sida prata med din server. Då hålls nyckeln också utanför sidans källkod.
- Kod på serversidan och kommandoradsverktyg påverkas inte: den här regeln tillämpas bara av webbläsare.
- En inloggning på shannon-ai.com autentiserar inte
/v1-begäranden. Cookies läses inte där; nyckeln är den enda inloggningsuppgiften. - För ett tillåtet origin får en webbläsare skicka
content-type,authorization,x-api-key,anthropic-version,anthropic-beta,openai-betaochx-request-id, och får läsa svarsheadernx-request-id.
Så skyddar du nyckeln
- Förvara nyckeln på en server. Lägg den inte på webbsidor, i mobilappar eller i offentliga repon: den som har den kan förbruka hela din balans.
- Läs in nyckeln från en miljövariabel eller ett hemlighetsförråd i stället för att skriva in den i koden.
- Om nyckeln kan ha läckt, rotera den under Nycklar och användning. Den gamla nyckeln slutar fungera direkt.
- Efter ett läckage: läs begäranlistan under Nycklar och användning. Den visar varje begäran som nyckeln har gjort under de senaste 30 dagarna.