Saltar al contenido
Autenticación

Autenticación

Cada solicitud lleva tu clave API en un header. Una clave por cuenta funciona en todos los endpoints y todos los modelos, en cualquiera de dos formas de header.

Header · SDK de OpenAI
Authorization: Bearer YOUR_API_KEY
Header · SDK de Anthropic
x-api-key: YOUR_API_KEY

Headers aceptados

Ambos headers se leen en cada endpoint /v1, sea cual sea el formato que hable el endpoint. Envía uno de ellos.

Header Descripción
Authorization: Bearer <key> Se comprueba primero. Escribe Bearer con B mayúscula y un espacio antes de la clave. Los SDK de OpenAI envían este header.
x-api-key: <key> Se lee cuando la solicitud no tiene header Authorization: Bearer. Los SDK de Anthropic envían este header.

Con un SDK de OpenAI, configura la clave y la URL base; el 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)

Con un SDK de Anthropic, configura la clave y la URL base sin /v1; el 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"))

Qué endpoints necesitan clave

Endpoint Clave
POST /v1/chat/completions Obligatoria
POST /v1/messages Obligatoria
POST /v1/responses Obligatoria
POST /v1/tokenize Obligatoria
POST /v1/messages/count_tokens Obligatoria
GET /v1/models No hace falta

Tu clave

  • Una clave es sk- seguido de 43 caracteres de A–Z, a–z, 0–9, - y _: 46 caracteres en total.
  • Cada cuenta tiene exactamente una clave. Se crea la primera vez que abres Claves y uso.
  • La clave da acceso completo a la API para tu cuenta: todos los endpoints, todos los modelos y todo el saldo.
  • Una clave no tiene fecha de caducidad. Funciona hasta que la rotes o la revoques.

Rotar y revocar

Rotas y revocas la clave en la página Claves y uso. Claves y uso

Acción Qué ocurre
Rotar Se emite una clave nueva y la antigua deja de funcionar. La clave nueva funciona de inmediato.
Revocar La clave deja de funcionar y no se emite ninguna clave nueva. Rota para volver a tener una clave que funcione.
  • Ambas acciones surten efecto de inmediato: la siguiente solicitud con la clave antigua recibe 401. Considera 60 segundos como el límite máximo antes de que la clave antigua sea rechazada en todas partes.
  • Todos los clientes de la cuenta usan la misma clave, así que una rotación los alcanza a todos. Pon la clave nueva en tus clientes justo después de rotar.
  • El saldo, el uso y la protección contra flood pertenecen a la cuenta, no a la clave. Una clave nueva continúa con el mismo saldo y el mismo recuento de solicitudes del minuto actual.

Errores

Todo fallo de autenticación tiene el estado 401 y el tipo authentication_error. El mensaje distingue los casos.

Estado Tipo Mensaje Cuándo
401 authentication_error Missing authentication La solicitud no tiene ni un header Authorization: Bearer ni un header x-api-key que empiece por sk-. Es también la respuesta a bearer en minúsculas y a un valor de Authorization sin Bearer.
401 authentication_error Invalid API key La clave no es la clave actual de una cuenta: está mal escrita, fue revocada o fue reemplazada por una rotación.
{
  "error": {
    "type": "authentication_error",
    "message": "Invalid API key",
    "code": "invalid_api_key",
    "param": null
  }
}
  • En todas las rutas excepto /v1/messages, el objeto error también contiene code: "invalid_api_key", incluso cuando falta la clave, y param: null.
  • La clave se comprueba antes de leer el cuerpo. Una solicitud sin una clave válida recibe 401 aunque su cuerpo no sea válido o sea demasiado grande.
  • Un valor de Authorization: Bearer que no empieza por sk- no se trata como clave API. Recibe 401 con un mensaje de que el token no es válido o ha caducado.

Navegadores y CORS

  • La API responde a solicitudes de navegador entre orígenes (cross-origin) solo para una lista fija de orígenes. El JavaScript de una página de otro origen no puede leer las respuestas de /v1.
  • Llama a la API desde tu servidor y haz que tu página se comunique con tu servidor. Así además la clave queda fuera del código fuente de la página.
  • El código del lado del servidor y las herramientas de línea de comandos no se ven afectados: esta regla solo la aplican los navegadores.
  • Iniciar sesión en shannon-ai.com no autentica las solicitudes a /v1. Allí no se leen las cookies; la clave es la única credencial.
  • Para un origen permitido, un navegador puede enviar content-type, authorization, x-api-key, anthropic-version, anthropic-beta, openai-beta y x-request-id, y puede leer el header de respuesta x-request-id.

Cómo proteger la clave

  • Mantén la clave en un servidor. No la pongas en páginas web, apps móviles ni repositorios públicos: quien la tenga puede gastar todo tu saldo.
  • Carga la clave desde una variable de entorno o un almacén de secretos en lugar de escribirla en el código.
  • Si la clave pudo haberse filtrado, rótala en Claves y uso. La clave antigua deja de funcionar de inmediato.
  • Tras una filtración, lee la lista de solicitudes en Claves y uso. Muestra todas las solicitudes que la clave hizo en los últimos 30 días.