Visão geral
O mapa da API: todos os endpoints, como são uma requisição e um erro, como as chamadas são pagas e o que saber ao vir de um SDK da OpenAI ou da Anthropic.
Endpoints
Todos os endpoints ficam sob uma única base URL e são servidos por HTTPS.
https://api.shannon-ai.com | Endpoint | Formato | Para que serve |
|---|---|---|
POST /v1/chat/completions | OpenAI Chat Completions | Envie uma conversa e receba a próxima resposta. Com ou sem streaming. |
POST /v1/messages | Anthropic Messages | O mesmo, nos formatos de requisição e resposta dos SDKs da Anthropic. |
POST /v1/responses | OpenAI Responses | O mesmo, nos formatos de Responses. O endpoint não guarda estado: envie a conversa a cada requisição. |
GET /v1/models | Lista de modelos da OpenAI | Liste os modelos com janela de contexto, preços e capacidades. Não exige chave. |
POST /v1/tokenize | API Shannon | Conte os tokens de um texto ou de uma requisição de chat para um modelo open-weight hospedado. Gratuito. |
POST /v1/messages/count_tokens | Contagem de tokens da Anthropic | Conte os tokens de entrada de uma requisição Messages para um modelo open-weight hospedado. Gratuito. |
Os três endpoints que produzem texto chegam aos mesmos modelos. Escolha aquele cujo formato o seu código já usa.
Noções básicas de requisição
| Header | Descrição |
|---|---|
Authorization: Bearer <key> | Sua chave de API. Obrigatório em todos os endpoints, exceto GET /v1/models, a menos que você envie x-api-key. |
x-api-key: <key> | A mesma chave no header que os SDKs da Anthropic enviam. Lido em todos os endpoints. |
Content-Type: application/json | Obrigatório em todo POST. Sem ele, a resposta é 415. |
x-request-id: <your id> | Opcional. Seu próprio id para a requisição; ele volta no header de resposta x-request-id. Sem ele, a API cria um de 12 caracteres hexadecimais. |
- O corpo de todo
POSTé um objeto JSON, de até 32 MiB. - Um campo que a API não conhece não causa erro e não tem efeito. Uma requisição escrita para outro provedor não falha por causa de um campo extra.
- Um campo conhecido com o tipo JSON errado, ou um campo obrigatório ausente, é respondido com
422. Um corpo que não é um JSON válido é respondido com400. modelé um dos ids em Modelos e preços. Maiúsculas e minúsculas não importam.
Uma resposta é JSON, ou um stream de server-sent events quando a requisição define stream como true. Cada endpoint responde no seu próprio formato. Toda resposta tem o header x-request-id.
O que uma requisição atravessa
Uma requisição é verificada em uma ordem fixa antes de um modelo ser executado. A primeira verificação que falha responde, então um 401 ainda não diz nada sobre o corpo.
| Verificado, nesta ordem | Status quando falha |
|---|---|
| Chave de API | 401 |
| Corpo: tamanho, tipo de conteúdo, JSON, tipos dos campos | 413 · 415 · 400 · 422 |
| Id do modelo | 400 |
| Proteção contra flood: 120 requisições por minuto por conta | 429 |
| Saldo: o orçamento de saída da requisição precisa caber | 429 |
Formato do erro
Um erro é um objeto JSON com um error que contém type e message. /v1/messages o embrulha do modo que os SDKs da Anthropic esperam; todos os outros caminhos usam o formato OpenAI.
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: gpt-4o"
}
} {
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "unknown model: gpt-4o"
}
} - Leia
typeemessage.codeeparamestão presentes apenas em alguns erros: trate-os como opcionais.paramé semprenull. - Depois que um stream começou, o status já é
200. Uma falha então chega como um frame de erro dentro do stream. - Toda resposta de erro traz o header
x-request-id.
| Status | Tipo | Quando |
|---|---|---|
400 | invalid_request_error | O corpo não é um JSON válido, o id do modelo é desconhecido ou o modelo não aceita um tipo de entrada que você enviou. |
401 | authentication_error | A chave está ausente ou não é válida. |
404 | not_found_error | O caminho não existe. |
405 | api_error | O caminho existe, mas o método está errado. |
413 | invalid_request_error | O corpo é maior que 32 MiB. |
415 | invalid_request_error | Content-Type não é application/json. |
422 | invalid_request_error | Um campo tem o tipo JSON errado ou falta um campo obrigatório. |
429 | rate_limit_error | O saldo não cobre a requisição, mais de 120 requisições chegaram em um minuto, as chamadas do Shannon Coder da janela se esgotaram ou o modelo está ocupado. A mensagem informa qual é o caso. |
5xx | api_error | Status 500, 502, 503 ou 504: a requisição era válida e não pôde ser respondida. Envie-a novamente. Um 500 pode trazer o tipo server_error. |
Faturamento e saldo
- Há um saldo por conta, e o chat e a API o compartilham: primeiro a cota do plano de hoje, depois os créditos comprados. A API não tem uma cota própria.
- Uma requisição reserva o seu orçamento de saída (
max_tokens, padrão 4,096) e depois é cobrada pelos tokens que realmente usou, ao preço do modelo. - Cada resposta informa suas contagens de tokens em
usage. A página Chaves e uso mostra o saldo e quanto cada requisição custou. - Todas as requisições são atendidas igualmente. O único limite de taxa de requisições é a proteção contra flood: 120 requisições por minuto por conta. As requisições enviadas em paralelo esperam em fila.
Limites e saldo Modelos e preços Chaves e uso
Campos que dependem do modelo
Todos os modelos aceitam a mesma requisição. Alguns campos só têm efeito em certos modelos; a tabela indica onde. As páginas dos endpoints listam todos os campos.
| Campo | Descrição | Aplicado por |
|---|---|---|
system | Instruções para o modelo: uma mensagem system em Chat Completions, system em Messages, instructions em Responses. | Modelos open-weight hospedados, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
temperature | Temperatura de amostragem. | Modelos open-weight hospedados, shannon-1.6-*, shannon-coder-1 |
top_p | Amostragem nucleus. | Modelos open-weight hospedados |
seed | Uma seed fixa para a amostragem. | Modelos open-weight hospedados |
stop | Até 4 sequências de parada. | Modelos open-weight hospedados |
reasoning_effort | Quanto o modelo raciocina antes de responder. reasoning.effort em Responses, thinking em Messages. | Modelos open-weight hospedados |
web_search | true permite que o modelo pesquise na web para esta requisição. Um campo desta API, em Chat Completions e Messages. | Modelos Shannon, exceto shannon-coder-1 |
max_tokens | O orçamento de saída. Em todos os modelos, define a quantia reservada do seu saldo. | Como limite do tamanho da resposta: modelos open-weight hospedados, shannon-1.6-*, shannon-coder-1 |
Vindo de um SDK da OpenAI
- Defina a base URL como
https://api.shannon-ai.com/v1e a chave como a sua chave da Shannon. As chamadas de Chat Completions e Responses passam então a funcionar com o SDK como ele é. modeldeve ser um id Shannon. O nome de modelo de outro provedor, comogpt-4o, é respondido com400eunknown model.- O raciocínio vem em um campo próprio:
reasoning_contentao lado decontent, na mensagem e nos deltas do stream. - Um stream sempre traz
usageno seu último chunk, junto comfinish_reason. - Uma chamada de ferramenta em um stream chega como um único chunk com a string
argumentscompleta. - Uma resposta tem uma única choice.
- Caminhos da API da OpenAI que não estão na tabela acima, como
/v1/embeddings, são respondidos com404.
Vindo de um SDK da Anthropic
- Defina a base URL como
https://api.shannon-ai.com, sem/v1, e a chave como a sua chave da Shannon. O SDK a envia comox-api-key. modeldeve ser um id Shannon.max_tokensé opcional nesta API. O padrão é 4,096.- Uma resposta contém blocos de conteúdo do tipo
thinking,textetool_use. O primeiro bloco nem sempre é o texto: escolha os blocos portype. stop_reasonéend_turnoutool_use. Um stream de um modelo Shannon também pode terminar commax_tokens.anthropic-versioneanthropic-betasão aceitos, para que o SDK funcione sem alterações. Uma requisição não precisa deles.- Os erros em
/v1/messagestêm o formato da Anthropic:{"type": "error", "error": {…}}.
As ferramentas de código que falam esses formatos são configuradas da mesma forma: base URL, chave e um id Shannon como modelo. Ferramentas de código em CLI