Saltar al contenido
Resumen

Resumen

El mapa de la API: cada endpoint, cómo se ven una solicitud y un error, cómo se pagan las llamadas y qué conviene saber si vienes de un SDK de OpenAI o Anthropic.

Endpoints

Todos los endpoints viven bajo una única URL base y se sirven por HTTPS.

URL base
https://api.shannon-ai.com
Endpoint Formato Para qué sirve
POST /v1/chat/completions OpenAI Chat Completions Envía una conversación, recibe la siguiente respuesta. Con o sin streaming.
POST /v1/messages Anthropic Messages Lo mismo, con las formas de solicitud y respuesta de los SDK de Anthropic.
POST /v1/responses OpenAI Responses Lo mismo, con las formas de Responses. El endpoint no guarda estado: envía la conversación en cada solicitud.
GET /v1/models Lista de modelos de OpenAI Lista los modelos con ventana de contexto, precios y capacidades. No necesita clave.
POST /v1/tokenize API de Shannon Cuenta los tokens de un texto o de una solicitud de chat para un modelo de pesos abiertos alojado. Gratis.
POST /v1/messages/count_tokens Conteo de tokens de Anthropic Cuenta los tokens de entrada de una solicitud de Messages para un modelo de pesos abiertos alojado. Gratis.

Los tres endpoints que producen texto llegan a los mismos modelos. Elige aquel cuyo formato ya usa tu código.

Conceptos básicos de las solicitudes

Header Descripción
Authorization: Bearer <key> Tu clave API. Obligatorio en todos los endpoints excepto GET /v1/models, salvo que envíes x-api-key.
x-api-key: <key> La misma clave en el header que envían los SDK de Anthropic. Se lee en todos los endpoints.
Content-Type: application/json Obligatorio en cada POST. Sin él la respuesta es 415.
x-request-id: <your id> Opcional. Tu propio id para la solicitud; vuelve en el header de respuesta x-request-id. Sin él, la API crea uno de 12 caracteres hexadecimales.
  • El cuerpo de cada POST es un objeto JSON, de hasta 32 MiB.
  • Un campo que la API no conoce no causa ningún error y no tiene efecto. Una solicitud escrita para otro proveedor no falla por un campo adicional.
  • Un campo conocido con un tipo JSON incorrecto, o un campo obligatorio que falta, se responde con 422. Un cuerpo que no es JSON válido se responde con 400.
  • model es uno de los ids de Modelos y precios. No importan las mayúsculas ni las minúsculas.

Una respuesta es JSON, o un stream de server-sent events cuando la solicitud establece stream en true. Cada endpoint responde en su propio formato. Toda respuesta tiene el header x-request-id.

Qué comprobaciones pasa una solicitud

Una solicitud se comprueba en un orden fijo antes de que se ejecute un modelo. Responde la primera comprobación que falla, así que un 401 aún no te dice nada sobre el cuerpo.

Forma de los errores

Un error es un objeto JSON con un error que contiene type y message. /v1/messages lo envuelve como esperan los SDK de Anthropic; todas las demás rutas usan la forma de OpenAI.

{
  "error": {
    "type": "invalid_request_error",
    "message": "unknown model: gpt-4o"
  }
}
  • Lee type y message. code y param están presentes solo en algunos errores: trátalos como opcionales. param es siempre null.
  • Una vez iniciado un stream, el estado ya es 200. Un fallo llega entonces como una trama de error dentro del stream.
  • Toda respuesta de error lleva el header x-request-id.
Estado Tipo Cuándo
400 invalid_request_error El cuerpo no es JSON válido, el id del modelo es desconocido, o el modelo no acepta un tipo de entrada que enviaste.
401 authentication_error La clave falta o no es válida.
404 not_found_error La ruta no existe.
405 api_error La ruta existe, el método es incorrecto.
413 invalid_request_error El cuerpo es mayor que 32 MiB.
415 invalid_request_error Content-Type no es application/json.
422 invalid_request_error Un campo tiene un tipo JSON incorrecto o falta un campo obligatorio.
429 rate_limit_error El saldo no cubre la solicitud, llegaron más de 120 solicitudes en un minuto, se agotaron las llamadas de Shannon Coder de la ventana, o el modelo está ocupado. El mensaje indica cuál.
5xx api_error Estado 500, 502, 503 o 504: la solicitud era válida y no se pudo responder. Envíala de nuevo. Un 500 puede llevar el tipo server_error.

Manejo de errores

Facturación y saldo

  • Hay un saldo por cuenta, y el chat y la API lo comparten: primero la cuota del plan de hoy y después el crédito comprado. La API no tiene una cuota propia.
  • Una solicitud reserva su presupuesto de salida (max_tokens, 4,096 por defecto) y luego se cobra por los tokens que realmente usó, al precio del modelo.
  • Cada respuesta informa de sus recuentos de tokens en usage. La página Claves y uso muestra el saldo y lo que costó cada solicitud.
  • Todas las solicitudes se atienden por igual. El único límite de tasa de solicitudes es la protección contra flood: 120 solicitudes por minuto por cuenta. Las solicitudes enviadas en paralelo esperan en cola.

Límites y saldo Modelos y precios Claves y uso

Campos que dependen del modelo

Todos los modelos aceptan la misma solicitud. Algunos campos surten efecto solo en ciertos modelos; la tabla indica dónde. Las páginas de cada endpoint listan todos los campos.

Campo Descripción Aplicado por
system Instrucciones para el modelo: un mensaje system en Chat Completions, system en Messages, instructions en Responses. Modelos de pesos abiertos alojados, shannon-1.6-*, shannon-2-*, shannon-coder-1
temperature Temperatura de muestreo. Modelos de pesos abiertos alojados, shannon-1.6-*, shannon-coder-1
top_p Muestreo por núcleo (nucleus sampling). Modelos de pesos abiertos alojados
seed Una semilla fija para el muestreo. Modelos de pesos abiertos alojados
stop Hasta 4 secuencias de parada. Modelos de pesos abiertos alojados
reasoning_effort Cuánto razona el modelo antes de responder. reasoning.effort en Responses, thinking en Messages. Modelos de pesos abiertos alojados
web_search true permite que el modelo busque en la web para esta solicitud. Un campo de esta API, en Chat Completions y Messages. Modelos Shannon excepto shannon-coder-1
max_tokens El presupuesto de salida. En todos los modelos fija la cantidad reservada de tu saldo. Como límite de la longitud de la respuesta: modelos de pesos abiertos alojados, shannon-1.6-*, shannon-coder-1

Chat Completions

Si vienes de un SDK de OpenAI

  • Establece la URL base en https://api.shannon-ai.com/v1 y la clave en tu clave de Shannon. Las llamadas a Chat Completions y Responses funcionan entonces con el SDK tal como está.
  • model debe ser un id de Shannon. Un nombre de modelo de otro proveedor, como gpt-4o, se responde con 400 y unknown model.
  • El razonamiento llega en un campo propio: reasoning_content junto a content, en el mensaje y en los deltas del stream.
  • Un stream siempre lleva usage en su último fragmento, junto con finish_reason.
  • Una llamada a herramienta en un stream llega como un solo fragmento con la cadena arguments completa.
  • Una respuesta tiene una choice.
  • Las rutas de la API de OpenAI que no están en la tabla anterior, como /v1/embeddings, se responden con 404.

Si vienes de un SDK de Anthropic

  • Establece la URL base en https://api.shannon-ai.com, sin /v1, y la clave en tu clave de Shannon. El SDK la envía como x-api-key.
  • model debe ser un id de Shannon.
  • max_tokens es opcional en esta API. Su valor predeterminado es 4,096.
  • Una respuesta contiene bloques de contenido de tipo thinking, text y tool_use. El primer bloque no siempre es el texto: elige los bloques por type.
  • stop_reason es end_turn o tool_use. Un stream de un modelo Shannon también puede terminar con max_tokens.
  • Se aceptan anthropic-version y anthropic-beta, de modo que el SDK funciona sin cambios. Una solicitud no los necesita.
  • Los errores en /v1/messages tienen la forma de Anthropic: {"type": "error", "error": {…}}.

Las herramientas de programación que hablan estos formatos se configuran igual: URL base, clave y un id de Shannon como modelo. Herramientas CLI de programación