Autenticació
Cada sol·licitud porta la teva clau API en una capçalera. Una clau per compte funciona a tots els endpoints i models, en qualsevol de les dues formes de capçalera.
Capçalera · SDK d'OpenAI
Authorization: Bearer YOUR_API_KEY Capçalera · SDK d'Anthropic
x-api-key: YOUR_API_KEY Capçaleres acceptades
Les dues capçaleres es llegeixen a cada endpoint de /v1, sigui quin sigui el format que parla l'endpoint. Envia'n una.
| Capçalera | Descripció |
|---|---|
Authorization: Bearer <key> | Es comprova primer. Escriu Bearer amb B majúscula i un espai abans de la clau. Els SDK d'OpenAI envien aquesta capçalera. |
x-api-key: <key> | Es llegeix quan la sol·licitud no té cap capçalera Authorization: Bearer. Els SDK d'Anthropic envien aquesta capçalera. |
Amb un SDK d'OpenAI, defineix la clau i la URL base; l'SDK envia 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!"}
]
}' Amb un SDK d'Anthropic, defineix la clau i la URL base sense /v1; l'SDK envia 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!"}
]
}' Quins endpoints necessiten una clau
| Endpoint | Clau |
|---|---|
POST /v1/chat/completions | Obligatòria |
POST /v1/messages | Obligatòria |
POST /v1/responses | Obligatòria |
POST /v1/tokenize | Obligatòria |
POST /v1/messages/count_tokens | Obligatòria |
GET /v1/models | No cal |
La teva clau
- Una clau és
sk-seguit de 43 caràcters deA–Z,a–z,0–9,-i_: 46 caràcters en total. - Cada compte té exactament una clau. Es crea la primera vegada que obres Keys & usage.
- La clau dona accés complet a l'API per al teu compte: tots els endpoints, tots els models i tot el saldo.
- Una clau no té data de caducitat. Funciona fins que en fas la rotació o la revoques.
Rotació i revocació
Fas la rotació i revoques la clau a la pàgina Keys & usage. Keys & usage
| Acció | Què passa |
|---|---|
| Rotació | Es genera una clau nova i la clau antiga deixa de funcionar. La clau nova funciona a l'instant. |
| Revocar | La clau deixa de funcionar i no se'n genera cap de nova. Fes la rotació per tornar a tenir una clau que funcioni. |
- Totes dues tenen efecte a l'instant: la propera sol·licitud amb la clau antiga es respon amb
401. Considera 60 segons com a límit superior abans que la clau antiga sigui rebutjada arreu. - Tots els clients del compte fan servir la mateixa clau, de manera que una rotació els arriba tots. Posa la clau nova als teus clients just després de fer la rotació.
- El saldo, l'ús i la protecció contra inundació pertanyen al compte, no a la clau. Una clau nova continua amb el mateix saldo i el mateix recompte de sol·licituds del minut actual.
Errors
Tots els errors d'autenticació tenen l'estat 401 i el tipus authentication_error. El missatge distingeix els casos.
| Estat | Tipus | Missatge | Quan |
|---|---|---|---|
401 | authentication_error | Missing authentication | La sol·licitud no té ni una capçalera Authorization: Bearer ni una capçalera x-api-key que comenci per sk-. Aquesta també és la resposta a bearer en minúscules i a un valor d'Authorization sense Bearer. |
401 | authentication_error | Invalid API key | La clau no és la clau actual d'un compte: està mal escrita, s'ha revocat o s'ha substituït per una rotació. |
{
"error": {
"type": "authentication_error",
"message": "Invalid API key",
"code": "invalid_api_key",
"param": null
}
} {
"type": "error",
"error": {
"type": "authentication_error",
"message": "Invalid API key"
}
} - A tots els camins excepte
/v1/messages, l'objecteerrortambé contécode: "invalid_api_key", també quan falta la clau, iparam: null. - La clau es comprova abans de llegir el cos. Una sol·licitud sense una clau vàlida rep
401encara que el seu cos sigui invàlid o massa gran. - Un valor d'
Authorization: Bearerque no comença persk-no es tracta com a clau API. Rep401amb un missatge que el token no és vàlid o ha caducat.
Navegadors i CORS
- L'API respon a sol·licituds de navegador d'origen creuat només per a una llista fixa d'orígens. El JavaScript d'una pàgina d'un altre origen no pot llegir les respostes de
/v1. - Crida l'API des del teu servidor i deixa que la teva pàgina parli amb el teu servidor. Així també la clau queda fora del codi font de la pàgina.
- El codi del costat del servidor i les eines de línia d'ordres no es veuen afectats: aquesta regla només l'apliquen els navegadors.
- Iniciar sessió a shannon-ai.com no autentica les sol·licituds a
/v1. Allà no es llegeixen les cookies; la clau és l'única credencial. - Per a un origen permès, un navegador pot enviar
content-type,authorization,x-api-key,anthropic-version,anthropic-beta,openai-betaix-request-id, i pot llegir la capçalera de respostax-request-id.
Com mantenir la clau segura
- Mantén la clau en un servidor. No la posis en pàgines web, aplicacions mòbils ni repositoris públics: qui la tingui pot gastar tot el teu saldo.
- Carrega la clau des d'una variable d'entorn o un magatzem de secrets en lloc d'escriure-la al codi.
- Si la clau pot haver-se filtrat, fes-ne la rotació a Keys & usage. La clau antiga deixa de funcionar a l'instant.
- Després d'una fuita, llegeix la llista de sol·licituds a Keys & usage. Mostra totes les sol·licituds que la clau ha fet en els darrers 30 dies.