Authentifikatioun
All Ufro enthält Ären API-Schlëssel an engem Header. Ee Schlëssel pro Kont funktionéiert op all Endpoint an all Modell, a zwou méigleche Header-Forme.
Header · OpenAI-SDKen
Authorization: Bearer YOUR_API_KEY Header · Anthropic-SDKen
x-api-key: YOUR_API_KEY Akzeptéiert Headers
Béid Headers ginn op all /v1-Endpoint gelies, egal a wéi engem Format den Endpoint schwätzt. Schéckt een dovun.
| Header | Beschreiwung |
|---|---|
Authorization: Bearer <key> | Gëtt als éischt gepréift. Schreift Bearer mat engem grousse B an engem Leerzeechen virum Schlëssel. OpenAI-SDKe schécken dësen Header. |
x-api-key: <key> | Gëtt gelies, wann d'Ufro keen Authorization: Bearer-Header huet. Anthropic-SDKe schécken dësen Header. |
Bei enger OpenAI-SDK stellt de Schlëssel an d'Basis-URL an; d'SDK schéckt 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!"}
]
}' Bei enger Anthropic-SDK stellt de Schlëssel an d'Basis-URL ouni /v1 an; d'SDK schéckt 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!"}
]
}' Wéi eng Endpoints e Schlëssel brauchen
| Endpoint | Schlëssel |
|---|---|
POST /v1/chat/completions | Erfuerderlech |
POST /v1/messages | Erfuerderlech |
POST /v1/responses | Erfuerderlech |
POST /v1/tokenize | Erfuerderlech |
POST /v1/messages/count_tokens | Erfuerderlech |
GET /v1/models | Net néideg |
Äre Schlëssel
- E Schlëssel ass
sk-gefollegt vun 43 Zeechen ausA–Z,a–z,0–9,-an_: insgesamt 46 Zeechen. - All Kont huet genee ee Schlëssel. Hie gëtt erstallt, wann Dir Schlësselen & Notzung fir d'éischt opmaacht.
- De Schlëssel gëtt vollen Zougang zur API fir Äre Kont: all Endpoint, all Modell an de ganze Solde.
- E Schlëssel huet kee Verfallsdatum. Hie funktionéiert, bis Dir en erneiert oder widderruff.
Erneieren a widderruffen
Dir erneiert an widderruff de Schlëssel op der Säit Schlësselen & Notzung. Schlësselen & Notzung
| Aktioun | Wat geschitt |
|---|---|
| Erneieren | E neie Schlëssel gëtt ausgestallt an den ale Schlëssel hält op ze funktionéieren. Deen neie Schlëssel funktionéiert direkt. |
| Widderruffen | De Schlëssel hält op ze funktionéieren a et gëtt kee neie Schlëssel ausgestallt. Erneiert, fir erëm e funktionéierende Schlëssel ze kréien. |
- Béid gëllen direkt: déi nächst Ufro mam ale Schlëssel gëtt mat
401beäntwert. Rechent mat 60 Sekonnen als Uewergrenz, bis den ale Schlëssel iwwerall ofgeleent gëtt. - All Client vum Kont benotzt deeselwechte Schlëssel, sou erreecht eng Erneierung se all. Setzt de neie Schlëssel direkt nom Erneieren an Är Clienten.
- Solde, Notzung a Flood-Schutz gehéieren zum Kont, net zum Schlëssel. E neie Schlëssel mécht mam selwechte Solde an dem selwechte Ufroenzieler fir déi aktuell Minutt weider.
Feeler
All Authentifikatiounsfeeler huet de Status 401 an den Typ authentication_error. D'Message ënnerscheet d'Fäll.
| Status | Typ | Message | Wéini |
|---|---|---|---|
401 | authentication_error | Missing authentication | D'Ufro huet weder en Authorization: Bearer-Header nach en x-api-key-Header, deen mat sk- ufänkt. Dat ass och d'Äntwert op bearer a klenge Buschstawen an op en Authorization-Wäert ouni Bearer. |
401 | authentication_error | Invalid API key | De Schlëssel ass net deen aktuelle Schlëssel vun engem Kont: en ass falsch getippt, en gouf widderruff, oder en gouf duerch eng Erneierung ersat. |
{
"error": {
"type": "authentication_error",
"message": "Invalid API key",
"code": "invalid_api_key",
"param": null
}
} {
"type": "error",
"error": {
"type": "authentication_error",
"message": "Invalid API key"
}
} - Op all Pad ausser
/v1/messagesenthält d'error-Objet ochcode: "invalid_api_key", och bei engem feelende Schlëssel, anparam: null. - De Schlëssel gëtt gepréift, éier de Body gelies gëtt. Eng Ufro ouni gültege Schlëssel kritt
401, och wann hire Body ongülteg oder ze grouss ass. - E
Authorization: Bearer-Wäert, deen net matsk-ufänkt, gëtt net als API-Schlëssel behandelt. Hie kritt401mat enger Message, datt den Token ongülteg oder ofgelaf ass.
Browsere a CORS
- D'API äntwert op Cross-Origin-Browser-Ufroen nëmme fir eng fix Lëscht vun Origins. JavaScript op enger Säit vun engem anen Origin kann
/v1-Äntwerten net liesen. - Rufft d'API vun Ärem Server aus op a loosst Är Säit mat Ärem Server schwätzen. Esou bleift de Schlëssel och aus dem Säitequellcode eraus.
- Server-säitege Code a Kommandozeil-Tools sinn net betraff: dës Regel gëtt nëmmen vu Browser ugewannt.
- Eng Umeldung op shannon-ai.com authentifizéiert keng
/v1-Ufroen. Cookie ginn do net gelies; de Schlëssel ass déi eenzeg Credential. - Fir en erlaabten Origin däerf e Browser
content-type,authorization,x-api-key,anthropic-version,anthropic-beta,openai-betaanx-request-idschécken an däerf den Äntwert-Headerx-request-idliesen.
De Schlëssel sécher halen
- Haalt de Schlëssel op engem Server. Setzt en net a Websäiten, Mobil-Apps oder ëffentlech Repositories: wien en huet, kann Äre ganze Solde verbrauchen.
- Luet de Schlëssel aus enger Ëmgebungsvariabel oder engem Secret-Store, amplaz en an de Code ze schreiwen.
- Wann de Schlëssel eventuell geleakt gouf, erneiert en ënner Schlësselen & Notzung. Den ale Schlëssel hält direkt op ze funktionéieren.
- No engem Leak liest d'Ufroenlëscht ënner Schlësselen & Notzung. Si weist all Ufro, déi de Schlëssel an de leschten 30 Deeg gemaach huet.