Ir para o conteúdo
Visão geral

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.

Base URL
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 com 400.
  • 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.

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"
  }
}
  • Leia type e message. code e param estão presentes apenas em alguns erros: trate-os como opcionais. param é sempre null.
  • 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.

Tratamento de erros

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

Chat Completions

Vindo de um SDK da OpenAI

  • Defina a base URL como https://api.shannon-ai.com/v1 e 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 é.
  • model deve ser um id Shannon. O nome de modelo de outro provedor, como gpt-4o, é respondido com 400 e unknown model.
  • O raciocínio vem em um campo próprio: reasoning_content ao lado de content, na mensagem e nos deltas do stream.
  • Um stream sempre traz usage no seu último chunk, junto com finish_reason.
  • Uma chamada de ferramenta em um stream chega como um único chunk com a string arguments completa.
  • 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 com 404.

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 como x-api-key.
  • model deve 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, text e tool_use. O primeiro bloco nem sempre é o texto: escolha os blocos por type.
  • stop_reason é end_turn ou tool_use. Um stream de um modelo Shannon também pode terminar com max_tokens.
  • anthropic-version e anthropic-beta são aceitos, para que o SDK funcione sem alterações. Uma requisição não precisa deles.
  • Os erros em /v1/messages tê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