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.
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
POSTes 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 con400. modeles 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.
| Se comprueba, en este orden | Estado si falla |
|---|---|
| Clave API | 401 |
| Cuerpo: tamaño, tipo de contenido, JSON, tipos de campo | 413 · 415 · 400 · 422 |
| Id del modelo | 400 |
| Protección contra flood: 120 solicitudes por minuto por cuenta | 429 |
| Saldo: el presupuesto de salida de la solicitud debe caber | 429 |
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"
}
} {
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "unknown model: gpt-4o"
}
} - Lee
typeymessage.codeyparamestán presentes solo en algunos errores: trátalos como opcionales.parames siemprenull. - 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. |
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 |
Si vienes de un SDK de OpenAI
- Establece la URL base en
https://api.shannon-ai.com/v1y la clave en tu clave de Shannon. Las llamadas a Chat Completions y Responses funcionan entonces con el SDK tal como está. modeldebe ser un id de Shannon. Un nombre de modelo de otro proveedor, comogpt-4o, se responde con400yunknown model.- El razonamiento llega en un campo propio:
reasoning_contentjunto acontent, en el mensaje y en los deltas del stream. - Un stream siempre lleva
usageen su último fragmento, junto confinish_reason. - Una llamada a herramienta en un stream llega como un solo fragmento con la cadena
argumentscompleta. - 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 con404.
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 comox-api-key. modeldebe ser un id de Shannon.max_tokenses opcional en esta API. Su valor predeterminado es 4,096.- Una respuesta contiene bloques de contenido de tipo
thinking,textytool_use. El primer bloque no siempre es el texto: elige los bloques portype. stop_reasonesend_turnotool_use. Un stream de un modelo Shannon también puede terminar conmax_tokens.- Se aceptan
anthropic-versionyanthropic-beta, de modo que el SDK funciona sin cambios. Una solicitud no los necesita. - Los errores en
/v1/messagestienen 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