Visión xeral
O mapa da API: todos os endpoints, como son unha solicitude e un erro, como se pagan as chamadas e o que convén saber cando vés dun SDK de OpenAI ou Anthropic.
Endpoints
Todos os endpoints están baixo unha URL base e serven por HTTPS.
https://api.shannon-ai.com | Endpoint | Formato | Para que serve |
|---|---|---|
POST /v1/chat/completions | OpenAI Chat Completions | Envía unha conversa e obtén a seguinte resposta. Con ou sen streaming. |
POST /v1/messages | Anthropic Messages | O mesmo, coas formas de solicitude e resposta dos SDK de Anthropic. |
POST /v1/responses | OpenAI Responses | O mesmo, coas formas de Responses. O endpoint non garda estado: envía a conversa en cada solicitude. |
GET /v1/models | Lista de modelos de OpenAI | Lista os modelos coa ventá de contexto, os prezos e as capacidades. Non necesita clave. |
POST /v1/tokenize | API de Shannon | Conta os tokens dun texto ou dunha solicitude de chat para un modelo open-weight alojado. Gratuíto. |
POST /v1/messages/count_tokens | Reconto de tokens de Anthropic | Conta os tokens de entrada dunha solicitude de Messages para un modelo open-weight alojado. Gratuíto. |
Os tres endpoints que producen texto chegan aos mesmos modelos. Escolle aquel cuxo formato xa usa o teu código.
Conceptos básicos da solicitude
| Cabeceira | Descrición |
|---|---|
Authorization: Bearer <key> | A túa clave API. Obrigatoria en todos os endpoints excepto GET /v1/models, a menos que envíes x-api-key. |
x-api-key: <key> | A mesma clave na cabeceira que envían os SDK de Anthropic. Lese en todos os endpoints. |
Content-Type: application/json | Obrigatoria en todos os POST. Sen ela, a resposta é 415. |
x-request-id: <your id> | Opcional. O teu propio id para a solicitude; volve na cabeceira de resposta x-request-id. Sen el, a API crea un de 12 caracteres hexadecimais. |
- O corpo de cada
POSTé un obxecto JSON, de ata 32 MiB. - Un campo que a API non coñece non causa ningún erro nin ten efecto. Unha solicitude escrita para outro provedor non falla por un campo adicional.
- Un campo coñecido co tipo JSON incorrecto, ou un campo obrigatorio ausente, recibe
422. Un corpo que non é JSON válido recibe400. modelé un dos ids de Modelos e prezos. Non importan as maiúsculas e minúsculas.
Unha resposta é JSON, ou un stream de server-sent events cando a solicitude define stream como true. Cada endpoint responde no seu propio formato. Todas as respostas teñen a cabeceira x-request-id.
O que pasa unha solicitude
Unha solicitude comprobase nunha orde fixa antes de que se execute un modelo. Responde a primeira comprobación que falla, así que un 401 aínda non che di nada sobre o corpo.
| Comprobado, nesta orde | Estado se falla |
|---|---|
| Clave API | 401 |
| Corpo: tamaño, tipo de contido, JSON, tipos dos campos | 413 · 415 · 400 · 422 |
| Id do modelo | 400 |
| Protección contra inundación: 120 solicitudes por minuto e conta | 429 |
| Saldo: o orzamento de saída da solicitude debe caber | 429 |
Forma dos erros
Un erro é un obxecto JSON cun error que contén type e message. /v1/messages envólveo como esperan os SDK de Anthropic; todas as demais rutas usan a 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"
}
} - Le
typeemessage.codeeparamsó están presentes nalgúns erros: trátaos como opcionais.paramé semprenull. - Despois de que comece un stream, o estado xa é
200. Un fallo chega entón como un frame de erro dentro do stream. - Todas as respostas de erro levan a cabeceira
x-request-id.
| Estado | Tipo | Cando |
|---|---|---|
400 | invalid_request_error | O corpo non é JSON válido, o id do modelo é descoñecido, ou o modelo non acepta un tipo de entrada que enviaches. |
401 | authentication_error | A clave falta ou non é válida. |
404 | not_found_error | A ruta non existe. |
405 | api_error | A ruta existe, pero o método é incorrecto. |
413 | invalid_request_error | O corpo é maior de 32 MiB. |
415 | invalid_request_error | Content-Type non é application/json. |
422 | invalid_request_error | Un campo ten o tipo JSON incorrecto ou falta un campo obrigatorio. |
429 | rate_limit_error | O saldo non cobre a solicitude, chegaron máis de 120 solicitudes nun minuto, esgotáronse as chamadas de Shannon Coder da xanela ou o modelo está ocupado. A mensaxe indica cal é o caso. |
5xx | api_error | Estado 500, 502, 503 ou 504: a solicitude era válida e non se puido responder. Envíaa de novo. Un 500 pode levar o tipo server_error. |
Facturación e saldo
- Hai un saldo por conta, e o chat e a API compártenno: primeiro a cota do plan de hoxe e despois o crédito adquirido. A API non ten cota propia.
- Unha solicitude reserva o seu orzamento de saída (
max_tokens, 4,096 por defecto) e despois cóbrase polos tokens que realmente usou, ao prezo do modelo. - Todas as respostas informan dos seus recontos de tokens en
usage. A páxina Claves e uso mostra o saldo e o que custou cada solicitude. - Todas as solicitudes se atenden por igual. O único límite á taxa de solicitudes é a protección contra inundación: 120 solicitudes por minuto e conta. As solicitudes enviadas en paralelo agardan na cola.
Límites e saldo Modelos e prezos Claves e uso
Campos que dependen do modelo
Todos os modelos aceptan a mesma solicitude. Uns poucos campos teñen efecto só nalgúns modelos; a táboa indica onde. As páxinas dos endpoints listan todos os campos.
| Campo | Descrición | Aplicado por |
|---|---|---|
system | Instrucións para o modelo: unha mensaxe system en Chat Completions, system en Messages, instructions en Responses. | Modelos open-weight alojados, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
temperature | Temperatura de mostraxe. | Modelos open-weight alojados, shannon-1.6-*, shannon-coder-1 |
top_p | Mostraxe por núcleo (nucleus sampling). | Modelos open-weight alojados |
seed | Unha semente fixa para a mostraxe. | Modelos open-weight alojados |
stop | Ata 4 secuencias de parada. | Modelos open-weight alojados |
reasoning_effort | Canto razoa o modelo antes de responder. reasoning.effort en Responses, thinking en Messages. | Modelos open-weight alojados |
web_search | true permite que o modelo busque na web para esta solicitude. Un campo desta API, en Chat Completions e Messages. | Modelos Shannon excepto shannon-coder-1 |
max_tokens | O orzamento de saída. En todos os modelos define a cantidade reservada do teu saldo. | Como límite da lonxitude da resposta: modelos open-weight alojados, shannon-1.6-*, shannon-coder-1 |
Se vés dun SDK de OpenAI
- Define a URL base como
https://api.shannon-ai.com/v1e a clave como a túa clave de Shannon. As chamadas a Chat Completions e Responses funcionan entón co SDK tal como está. modeldebe ser un id de Shannon. Un nome de modelo doutro provedor, comogpt-4o, recibe400eunknown model.- O razoamento vén nun campo propio:
reasoning_contentxunto acontent, na mensaxe e nos deltas do stream. - Un stream leva sempre
usageno seu último chunk, xunto confinish_reason. - Unha chamada a unha ferramenta nun stream chega como un chunk coa cadea
argumentscompleta. - Unha resposta ten unha soa opción (choice).
- As rutas da API de OpenAI que non están na táboa anterior, como
/v1/embeddings, reciben404.
Se vés dun SDK de Anthropic
- Define a URL base como
https://api.shannon-ai.com, sen/v1, e a clave como a túa clave de Shannon. O SDK envíaa comox-api-key. modeldebe ser un id de Shannon.max_tokensé opcional nesta API. O seu valor predeterminado é 4,096.- Unha resposta contén bloques de contido de tipo
thinking,textetool_use. O primeiro bloque non sempre é o texto: escolle os bloques portype. stop_reasonéend_turnoutool_use. Un stream dun modelo Shannon tamén pode rematar conmax_tokens.- Acéptanse
anthropic-versioneanthropic-beta, así que o SDK funciona sen cambios. Unha solicitude non os necesita. - Os erros en
/v1/messagesteñen a forma de Anthropic:{"type": "error", "error": {…}}.
As ferramentas de programación que falan estes formatos configúranse da mesma maneira: URL base, clave e un id de Shannon como modelo. Ferramentas de código CLI