Autentikacija
Svaki zahtev nosi vaš API ključ u zaglavlju. Jedan ključ po nalogu radi na svakom endpointu i svakom modelu, u jednom od dva oblika zaglavlja.
Zaglavlje · OpenAI SDK-ovi
Authorization: Bearer YOUR_API_KEY Zaglavlje · Anthropic SDK-ovi
x-api-key: YOUR_API_KEY Prihvaćena zaglavlja
Oba zaglavlja se čitaju na svakom /v1 endpointu, bez obzira na format koji endpoint govori. Pošaljite jedno od njih.
| Zaglavlje | Opis |
|---|---|
Authorization: Bearer <key> | Proverava se prvo. Napišite Bearer velikim slovom B i jednim razmakom pre ključa. OpenAI SDK-ovi šalju ovo zaglavlje. |
x-api-key: <key> | Čita se kada zahtev nema zaglavlje Authorization: Bearer. Anthropic SDK-ovi šalju ovo zaglavlje. |
Sa OpenAI SDK-om podesite ključ i osnovni URL; SDK šalje 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!"}
]
}' Sa Anthropic SDK-om podesite ključ i osnovni URL bez /v1; SDK šalje 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!"}
]
}' Koji endpointi traže ključ
| Endpoint | Ključ |
|---|---|
POST /v1/chat/completions | Obavezan |
POST /v1/messages | Obavezan |
POST /v1/responses | Obavezan |
POST /v1/tokenize | Obavezan |
POST /v1/messages/count_tokens | Obavezan |
GET /v1/models | Nije potreban |
Vaš ključ
- Ključ je
sk-iza kog sledi 43 znaka izA–Z,a–z,0–9,-i_: ukupno 46 znakova. - Svaki nalog ima tačno jedan ključ. Pravi se kada prvi put otvorite Ključevi i upotreba.
- Ključ daje pun pristup API-ju za vaš nalog: svaki endpoint, svaki model i celo stanje.
- Ključ nema datum isteka. Radi dok ga ne rotirate ili opozovete.
Rotacija i opoziv
Ključ rotirate i opozivate na stranici Ključevi i upotreba. Ključevi i upotreba
| Radnja | Šta se dešava |
|---|---|
| Rotiraj | Izdaje se novi ključ, a stari prestaje da radi. Novi ključ radi odmah. |
| Opozovi | Ključ prestaje da radi i novi se ne izdaje. Rotirajte da biste ponovo dobili ključ koji radi. |
- Oba važe odmah: sledeći zahtev sa starim ključem dobija odgovor
401. Računajte 60 sekundi kao gornju granicu pre nego što se stari ključ odbije svuda. - Svi klijenti naloga koriste isti ključ, pa rotacija pogađa sve njih. Stavite novi ključ u svoje klijente odmah nakon rotacije.
- Stanje, upotreba i zaštita od flooda pripadaju nalogu, a ne ključu. Novi ključ nastavlja sa istim stanjem i istim brojem zahteva za tekući minut.
Greške
Svaki neuspeh autentikacije ima status 401 i tip authentication_error. Poruka razlikuje slučajeve.
| Status | Tip | Poruka | Kada |
|---|---|---|---|
401 | authentication_error | Missing authentication | Zahtev nema ni zaglavlje Authorization: Bearer ni zaglavlje x-api-key koje počinje sa sk-. Ovo je i odgovor na bearer malim slovima i na vrednost Authorization bez Bearer. |
401 | authentication_error | Invalid API key | Ključ nije trenutni ključ nijednog naloga: pogrešno je ukucan, opozvan je ili je zamenjen rotacijom. |
{
"error": {
"type": "authentication_error",
"message": "Invalid API key",
"code": "invalid_api_key",
"param": null
}
} {
"type": "error",
"error": {
"type": "authentication_error",
"message": "Invalid API key"
}
} - Na svakoj putanji osim
/v1/messagesobjekaterrorsadrži icode: "invalid_api_key", takođe za ključ koji nedostaje, iparam: null. - Ključ se proverava pre čitanja tela. Zahtev bez važećeg ključa dobija
401čak i kada je njegovo telo nevažeće ili preveliko. - Vrednost
Authorization: Bearerkoja ne počinje sask-ne tretira se kao API ključ. Dobija401sa porukom da je token nevažeći ili istekao.
Pregledači i CORS
- API odgovara na cross-origin zahteve pregledača samo za fiksnu listu origina. JavaScript na stranici drugog origina ne može da čita
/v1odgovore. - Pozivajte API sa svog servera i pustite da vaša stranica komunicira sa vašim serverom. Tako ključ ostaje van izvornog koda stranice.
- Kod na strani servera i alati komandne linije nisu pogođeni: ovo pravilo primenjuju samo pregledači.
- Prijava na shannon-ai.com ne autentifikuje
/v1zahteve. Kolačići se tamo ne čitaju; ključ je jedini kredencijal. - Za dozvoljeni origin, pregledač može da pošalje
content-type,authorization,x-api-key,anthropic-version,anthropic-beta,openai-betaix-request-id, i može da pročita zaglavlje odgovorax-request-id.
Čuvanje ključa
- Držite ključ na serveru. Ne stavljajte ga u veb stranice, mobilne aplikacije ili javne repozitorijume: ko ga ima, može da potroši celo vaše stanje.
- Učitajte ključ iz promenljive okruženja ili skladišta tajni umesto da ga upisujete u kod.
- Ako je ključ možda procureo, rotirajte ga u Ključevi i upotreba. Stari ključ odmah prestaje da radi.
- Nakon curenja pročitajte listu zahteva u Ključevi i upotreba. Prikazuje svaki zahtev koji je ključ uputio u poslednjih 30 dana.