Autenticação
Toda requisição leva sua chave de API em um header. Uma chave por conta funciona em todos os endpoints e em todos os modelos, em qualquer uma de duas formas de header.
Header · SDKs da OpenAI
Authorization: Bearer YOUR_API_KEY Header · SDKs da Anthropic
x-api-key: YOUR_API_KEY Headers aceitos
Os dois headers são lidos em todos os endpoints /v1, qualquer que seja o formato que o endpoint fale. Envie um deles.
| Header | Descrição |
|---|---|
Authorization: Bearer <key> | Verificado primeiro. Escreva Bearer com B maiúsculo e um espaço antes da chave. Os SDKs da OpenAI enviam este header. |
x-api-key: <key> | Lido quando a requisição não tem um header Authorization: Bearer. Os SDKs da Anthropic enviam este header. |
Com um SDK da OpenAI, defina a chave e a base URL; o 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!"}
]
}' Com um SDK da Anthropic, defina a chave e a base URL sem /v1; o 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!"}
]
}' Quais endpoints exigem uma chave
| Endpoint | Chave |
|---|---|
POST /v1/chat/completions | Obrigatória |
POST /v1/messages | Obrigatória |
POST /v1/responses | Obrigatória |
POST /v1/tokenize | Obrigatória |
POST /v1/messages/count_tokens | Obrigatória |
GET /v1/models | Não necessária |
Sua chave
- Uma chave é
sk-seguido de 43 caracteres entreA–Z,a–z,0–9,-e_: 46 caracteres no total. - Cada conta tem exatamente uma chave. Ela é criada na primeira vez que você abre Chaves e uso.
- A chave dá acesso total à API para a sua conta: todos os endpoints, todos os modelos e todo o saldo.
- Uma chave não tem data de expiração. Ela funciona até você rotacioná-la ou revogá-la.
Rotacionar e revogar
Você rotaciona e revoga a chave na página Chaves e uso. Chaves e uso
| Ação | O que acontece |
|---|---|
| Rotacionar | Uma nova chave é emitida e a chave antiga para de funcionar. A nova chave funciona imediatamente. |
| Revogar | A chave para de funcionar e nenhuma nova chave é emitida. Rotacione para obter uma chave que funcione de novo. |
- Ambas têm efeito imediato: a próxima requisição com a chave antiga é respondida com
401. Considere 60 segundos como o limite máximo até a chave antiga ser recusada em todos os lugares. - Todos os clientes da conta usam a mesma chave, então uma rotação atinge todos eles. Coloque a nova chave nos seus clientes logo depois de rotacionar.
- Saldo, uso e proteção contra flood pertencem à conta, não à chave. Uma nova chave continua com o mesmo saldo e a mesma contagem de requisições do minuto atual.
Erros
Toda falha de autenticação tem status 401 e tipo authentication_error. A mensagem distingue os casos.
| Status | Tipo | Mensagem | Quando |
|---|---|---|---|
401 | authentication_error | Missing authentication | A requisição não tem nem um header Authorization: Bearer nem um header x-api-key que comece com sk-. Esta também é a resposta para bearer em minúsculas e para um valor de Authorization sem Bearer. |
401 | authentication_error | Invalid API key | A chave não é a chave atual de uma conta: foi digitada errado, foi revogada ou foi substituída por uma rotação. |
{
"error": {
"type": "authentication_error",
"message": "Invalid API key",
"code": "invalid_api_key",
"param": null
}
} {
"type": "error",
"error": {
"type": "authentication_error",
"message": "Invalid API key"
}
} - Em todos os caminhos, exceto
/v1/messages, o objetoerrortambém contémcode: "invalid_api_key", inclusive quando a chave está ausente, eparam: null. - A chave é verificada antes de o corpo ser lido. Uma requisição sem uma chave válida recebe
401mesmo quando o corpo é inválido ou grande demais. - Um valor
Authorization: Bearerque não começa comsk-não é tratado como chave de API. Ele recebe401com uma mensagem de que o token é inválido ou expirou.
Navegadores e CORS
- A API responde a requisições de navegador entre origens (cross-origin) apenas para uma lista fixa de origens. O JavaScript de uma página de outra origem não consegue ler respostas de
/v1. - Chame a API a partir do seu servidor e deixe sua página falar com o seu servidor. Isso também mantém a chave fora do código-fonte da página.
- Código do lado do servidor e ferramentas de linha de comando não são afetados: esta regra é aplicada apenas pelos navegadores.
- Um login em shannon-ai.com não autentica requisições
/v1. Os cookies não são lidos ali; a chave é a única credencial. - Para uma origem permitida, um navegador pode enviar
content-type,authorization,x-api-key,anthropic-version,anthropic-beta,openai-betaex-request-id, e pode ler o header de respostax-request-id.
Como manter a chave segura
- Mantenha a chave em um servidor. Não a coloque em páginas web, apps móveis ou repositórios públicos: quem a tiver pode gastar todo o seu saldo.
- Carregue a chave de uma variável de ambiente ou de um cofre de segredos em vez de escrevê-la no código.
- Se a chave pode ter vazado, rotacione-a em Chaves e uso. A chave antiga para de funcionar imediatamente.
- Depois de um vazamento, consulte a lista de requisições em Chaves e uso. Ela mostra todas as requisições que a chave fez nos últimos 30 dias.