Autenticación
Cada solicitude leva a túa clave API nunha cabeceira. Unha clave por conta funciona en todos os endpoints e todos os modelos, en calquera das dúas formas de cabeceira.
Cabeceira · SDK de OpenAI
Authorization: Bearer YOUR_API_KEY Cabeceira · SDK de Anthropic
x-api-key: YOUR_API_KEY Cabeceiras aceptadas
As dúas cabeceiras lense en todos os endpoints de /v1, sexa cal sexa o formato que fale o endpoint. Envía unha delas.
| Cabeceira | Descrición |
|---|---|
Authorization: Bearer <key> | Compróbase primeiro. Escribe Bearer con B maiúscula e un espazo antes da clave. Os SDK de OpenAI envían esta cabeceira. |
x-api-key: <key> | Lese cando a solicitude non ten cabeceira Authorization: Bearer. Os SDK de Anthropic envían esta cabeceira. |
Cun SDK de OpenAI, define a clave e a URL base; o SDK envía 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!"}
]
}' Cun SDK de Anthropic, define a clave e a URL base sen /v1; o SDK envía 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!"}
]
}' Que endpoints precisan unha clave
| Endpoint | Clave |
|---|---|
POST /v1/chat/completions | Obrigatoria |
POST /v1/messages | Obrigatoria |
POST /v1/responses | Obrigatoria |
POST /v1/tokenize | Obrigatoria |
POST /v1/messages/count_tokens | Obrigatoria |
GET /v1/models | Non fai falta |
A túa clave
- Unha clave é
sk-seguido de 43 caracteres deA–Z,a–z,0–9,-e_: 46 caracteres en total. - Cada conta ten exactamente unha clave. Créase a primeira vez que abres Claves e uso.
- A clave dá acceso completo á API para a túa conta: todos os endpoints, todos os modelos e todo o saldo.
- Unha clave non ten data de caducidade. Funciona ata que a rotes ou a revogues.
Rotar e revogar
Rotas e revogas a clave na páxina Claves e uso. Claves e uso
| Acción | Que pasa |
|---|---|
| Rotar | Emítese unha clave nova e a antiga deixa de funcionar. A clave nova funciona de inmediato. |
| Revogar | A clave deixa de funcionar e non se emite ningunha clave nova. Rota para obter de novo unha clave que funcione. |
- Ambas as accións teñen efecto de inmediato: a seguinte solicitude coa clave antiga recibe
401. Considera 60 segundos como o límite máximo ata que a clave antiga se rexeite en todas partes. - Todos os clientes da conta usan a mesma clave, así que unha rotación chega a todos. Pon a clave nova nos teus clientes xusto despois de rotar.
- O saldo, o uso e a protección contra inundación pertencen á conta, non á clave. Unha clave nova continúa co mesmo saldo e co mesmo reconto de solicitudes do minuto actual.
Erros
Todo fallo de autenticación ten o estado 401 e o tipo authentication_error. A mensaxe distingue os casos.
| Estado | Tipo | Mensaxe | Cando |
|---|---|---|---|
401 | authentication_error | Missing authentication | A solicitude non ten nin cabeceira Authorization: Bearer nin cabeceira x-api-key que comece por sk-. Tamén é a resposta para bearer en minúsculas e para un valor de Authorization sen Bearer. |
401 | authentication_error | Invalid API key | A clave non é a clave actual dunha conta: está mal escrita, foi revogada ou substituíuse por unha rotación. |
{
"error": {
"type": "authentication_error",
"message": "Invalid API key",
"code": "invalid_api_key",
"param": null
}
} {
"type": "error",
"error": {
"type": "authentication_error",
"message": "Invalid API key"
}
} - En todas as rutas excepto
/v1/messages, o obxectoerrorcontén ademaiscode: "invalid_api_key", tamén cando falta a clave, eparam: null. - A clave comprógase antes de ler o corpo. Unha solicitude sen unha clave válida recibe
401aínda que o seu corpo sexa inválido ou demasiado grande. - Un valor de
Authorization: Bearerque non comeza porsk-non se trata como clave API. Recibe401cunha mensaxe de que o token é inválido ou caducou.
Navegadores e CORS
- A API só responde a solicitudes de navegador de orixe cruzada para unha lista fixa de orixes. O JavaScript dunha páxina doutra orixe non pode ler as respostas de
/v1. - Chama á API desde o teu servidor e fai que a túa páxina fale co teu servidor. Así tamén a clave queda fóra do código fonte da páxina.
- O código do lado do servidor e as ferramentas de liña de comandos non se ven afectados: esta regra só a aplican os navegadores.
- Iniciar sesión en shannon-ai.com non autentica as solicitudes a
/v1. Alí non se len as cookies; a clave é a única credencial. - Para unha orixe permitida, un navegador pode enviar
content-type,authorization,x-api-key,anthropic-version,anthropic-beta,openai-betaex-request-id, e pode ler a cabeceira de respostax-request-id.
Manter a clave segura
- Garda a clave nun servidor. Non a metas en páxinas web, aplicacións móbiles nin repositorios públicos: quen a teña pode gastar todo o teu saldo.
- Carga a clave desde unha variable de contorna ou un almacén de segredos en lugar de escribila no código.
- Se a clave puido filtrarse, rótaa en Claves e uso. A clave antiga deixa de funcionar de inmediato.
- Despois dunha filtración, le a lista de solicitudes en Claves e uso. Mostra todas as solicitudes que fixo a clave nos últimos 30 días.