Godkendelse
Hver anmodning bærer din API-nøgle i en header. Én nøgle per konto virker på alle endpoints og alle modeller i en af to header-former.
Header · OpenAI SDK'er
Authorization: Bearer YOUR_API_KEY Header · Anthropic SDK'er
x-api-key: YOUR_API_KEY Accepterede headers
Begge headers læses på hvert /v1-endpoint, uanset hvilket format endpointet taler. Send en af dem.
| Header | Beskrivelse |
|---|---|
Authorization: Bearer <key> | Kontrolleres først. Skriv Bearer med stort B og ét mellemrum før nøglen. OpenAI SDK'er sender denne header. |
x-api-key: <key> | Læses, når anmodningen ikke har nogen Authorization: Bearer-header. Anthropic SDK'er sender denne header. |
Med en OpenAI SDK angiver du nøglen og base-URL'en; SDK'en sender 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 angiver du nøglen og base-URL'en uden /v1; SDK'en sender 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!"}
]
}' Hvilke endpoints der kræver en nøgle
| Endpoint | Nøgle |
|---|---|
POST /v1/chat/completions | Påkrævet |
POST /v1/messages | Påkrævet |
POST /v1/responses | Påkrævet |
POST /v1/tokenize | Påkrævet |
POST /v1/messages/count_tokens | Påkrævet |
GET /v1/models | Ikke nødvendig |
Din nøgle
- En nøgle er
sk-efterfulgt af 43 tegn fraA–Z,a–z,0–9,-og_: 46 tegn i alt. - Hver konto har præcis én nøgle. Den oprettes første gang, du åbner Nøgler og forbrug.
- Nøglen giver fuld adgang til API'et for din konto: alle endpoints, alle modeller og hele saldoen.
- En nøgle har ingen udløbsdato. Den virker, indtil du roterer eller tilbagekalder den.
Rotér og tilbagekald
Du roterer og tilbagekalder nøglen på siden Nøgler og forbrug. Nøgler og forbrug
| Handling | Hvad der sker |
|---|---|
| Rotér | Der udstedes en ny nøgle, og den gamle holder op med at virke. Den nye nøgle virker med det samme. |
| Tilbagekald | Nøglen holder op med at virke, og der udstedes ingen ny nøgle. Rotér for at få en fungerende nøgle igen. |
- Begge træder i kraft med det samme: den næste anmodning med den gamle nøgle besvares med
401. Regn med 60 sekunder som øvre grænse, før den gamle nøgle afvises overalt. - Alle kontoens klienter bruger samme nøgle, så en rotation rammer dem alle. Læg den nye nøgle ind i dine klienter lige efter, du har roteret.
- Saldo, forbrug og flood protection hører til kontoen, ikke til nøglen. En ny nøgle fortsætter med samme saldo og samme antal anmodninger for det aktuelle minut.
Fejl
Hver godkendelsesfejl har status 401 og typen authentication_error. Beskeden skelner mellem tilfældene.
| Status | Type | Besked | Hvornår |
|---|---|---|---|
401 | authentication_error | Missing authentication | Anmodningen har hverken en Authorization: Bearer-header eller en x-api-key-header, der begynder med sk-. Det er også svaret på bearer med små bogstaver og på en Authorization-værdi uden Bearer. |
401 | authentication_error | Invalid API key | Nøglen er ikke en kontos nuværende nøgle: den er indtastet forkert, den blev tilbagekaldt, eller den blev erstattet ved 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å alle stier undtagen
/v1/messagesindeholder objekteterrordesudencode: "invalid_api_key", også ved manglende nøgle, ogparam: null. - Nøglen kontrolleres, før body'en læses. En anmodning uden gyldig nøgle får
401, selv når dens body er ugyldig eller for stor. - En
Authorization: Bearer-værdi, der ikke begynder medsk-, behandles ikke som en API-nøgle. Den får401med en besked om, at tokenet er ugyldigt eller udløbet.
Browsere og CORS
- API'et svarer kun på cross-origin-anmodninger fra browsere for en fast liste af origins. JavaScript på en side fra en anden origin kan ikke læse
/v1-svar. - Kald API'et fra din server, og lad din side tale med din server. Så holdes nøglen også ude af sidens kildekode.
- Kode på serversiden og kommandolinjeværktøjer er ikke berørt: denne regel anvendes kun af browsere.
- Et login på shannon-ai.com godkender ikke
/v1-anmodninger. Cookies læses ikke dér; nøglen er den eneste legitimation. - For en tilladt origin må en browser sende
content-type,authorization,x-api-key,anthropic-version,anthropic-beta,openai-betaogx-request-idog må læse svarheaderenx-request-id.
Sådan holder du nøglen sikker
- Opbevar nøglen på en server. Læg den ikke i websider, mobilapps eller offentlige repositories: den, der har den, kan bruge hele din saldo.
- Indlæs nøglen fra en miljøvariabel eller et secret store i stedet for at skrive den ind i koden.
- Hvis nøglen kan være lækket, så rotér den under Nøgler og forbrug. Den gamle nøgle holder op med at virke med det samme.
- Efter et lækage skal du læse anmodningslisten under Nøgler og forbrug. Den viser alle anmodninger, nøglen har foretaget de seneste 30 dage.