Conversa

Anthropic Messages e Claude Code

Os modelos Claude também são compatíveis com a Messages API da Anthropic, pelo que os SDKs da Anthropic, o Claude Code e tudo o que foi criado para eles funcionam com um novo URL base e uma nova chave.

POST/v1/messages

URL base https://api.zurelay.com (os SDKs acrescentam /v1/messages). Envie a chave como x-api-key ou Authorization: Bearer, com anthropic-version: 2023-06-01. Aqui só estão disponíveis modelos Claude; os restantes modelos usam /v1/chat/completions.

Com os SDKs da Anthropic

import os
import anthropic
client = anthropic.Anthropic(
base_url="https://api.zurelay.com",
api_key=os.environ["ZURELAY_API_KEY"],
)
message = client.messages.create(
model="claude-opus-5-5",
max_tokens=1024,
system="You are a careful code reviewer.",
messages=[{"role": "user", "content": "Review this function: def add(a, b): return a - b"}],
)
print(message.content[0].text)

Tudo na Messages API da Anthropic passa diretamente (exceto metadata, que fica connosco): system como string ou blocos (com cache_control para cache de prompts), tools, thinking, output_config, stop_sequences, temperature, streaming com os mesmos eventos e cabeçalhos anthropic-beta. As imagens e os PDFs são enviados em blocos image e document: consulte Imagens, PDFs, áudio e vídeo. A Anthropic rejeita temperature, top_p e top_k no Claude a partir do Opus 4.7, pelo que, nesses modelos, os omitimos do pedido em vez de devolver um erro.

Raciocínio

O Claude raciocina de forma adaptativa: decide quanto raciocínio é necessário para cada pedido, e output_config.effort define o nível de esforço: low, medium, high, xhigh (muito elevado) ou max. Adicione display: "summarized" a thinking para receber um resumo do raciocínio em blocos thinking.

import os
import anthropic
client = anthropic.Anthropic(
base_url="https://api.zurelay.com",
api_key=os.environ["ZURELAY_API_KEY"],
)
message = client.messages.create(
model="claude-opus-5-5",
max_tokens=32000,
thinking={"type": "adaptive", "display": "summarized"},
output_config={"effort": "xhigh"},
messages=[{"role": "user", "content": "How many primes are there below 1,000?"}],
)
for block in message.content:
print(block.thinking if block.type == "thinking" else block.text)
  • O Claude Opus 5.5 e os modelos Fable raciocinam sempre: o Opus 5.5 em medium, a menos que defina um nível, e o Fable em high. Se lhes pedir para não raciocinar, funcionam em low.
  • O Claude Sonnet 5.5 e o Opus 5 raciocinam em high por predefinição, e o Claude Haiku 5.5 em medium. Do Opus 4.6 ao 4.8, só raciocinam quando envia thinking. O Opus 4.6 não tem xhigh, pelo que funciona em high.
  • A forma anterior, thinking: { type: "enabled", budget_tokens }, funciona em todos os modelos Claude: os que não a aceitam usam raciocínio adaptativo no nível mais próximo. O Claude Haiku 4.5 só aceita essa forma e recebe um orçamento de raciocínio quando envia raciocínio adaptativo.
  • O raciocínio é faturado como tokens de saída, por isso reserve espaço para ele em max_tokens nos níveis xhigh e max, e use streaming para respostas longas. Quando define um nível, o cabeçalho x-zurelay-reasoning-effort indica qual foi utilizado.

Cache de prompts

A cache funciona como na Anthropic: coloque cache_control nos blocos a guardar em cache, ou no pedido completo, para os manter durante cinco minutos, ou adicione "ttl": "1h" para os manter durante uma hora. Cada parte da entrada é faturada da mesma forma que na Anthropic:

EntradaFaturado aNa utilização
Lido da cacheO preço de cache do modelocache_read_input_tokens
Escrito na cache durante cinco minutos1.25 vezes o preço de entradaephemeral_5m_input_tokens
Escrito na cache durante uma hora2 vezes o preço de entradaephemeral_1h_input_tokens
Tudo o restoO preço de entradainput_tokens

Os dois tipos de escrita estão em usage.cache_creation, e cache_creation_input_tokens é a soma de ambos. A página de cada modelo mostra os respetivos preços de cache. Só o que pede para guardar em cache é faturado como escrita: num pedido sem cache_control, tudo o que não for lido da cache é cobrado ao preço de entrada, e a entrada que pediu para manter durante cinco minutos nunca é faturada como se fosse de uma hora.

Claude Code

Configure o Claude Code para usar a Zurelay com cinco variáveis de ambiente (o URL base, a sua chave e os três aliases de modelos) e, depois, execute-o como habitualmente:

Shell
export ANTHROPIC_BASE_URL="https://api.zurelay.com"
export ANTHROPIC_AUTH_TOKEN="$ZURELAY_API_KEY"
export ANTHROPIC_DEFAULT_OPUS_MODEL="claude-opus-5-5"
export ANTHROPIC_DEFAULT_SONNET_MODEL="claude-sonnet-5-5"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="claude-haiku-5-5"
claude

Para manter esta configuração, coloque os mesmos valores no bloco env de ~/.claude/settings.json. O guia completo e os guias para Cursor, Cline e outros estão em Integrações.

Os níveis de /effort do Claude Code chegam ao modelo como output_config.effort, pelo que xhigh e max funcionam como na Anthropic. Ultracode é uma definição do Claude Code, não um nível de esforço: usa o nível da sessão (xhigh quando inicia o Claude Code com --effort ultracode).

Contagem de tokens

POST/v1/messages/count_tokens

Aceita o mesmo corpo que /v1/messages e devolve { "input_tokens": 1234 }, uma estimativa do número de tokens do pedido. Gratuito.

Erros

Os erros são devolvidos no formato da Anthropic ({ "type": "error", "error": { "type", "message" } }), com os mesmos significados indicados na página de erros. Não incluem code: use o estado HTTP e error.type.

Alguns modelos Claude só leem PDFs através de /v1/chat/completions. Se enviar um para /v1/messages, o erro indica que endpoint deve usar. A tabela em Imagens, PDFs, áudio e vídeo mostra o que cada modelo consegue ler.
  • Dica: O contador de tokens da Anthropic e o nosso podem apresentar pequenas diferenças; a utilização indicada na resposta é a que é faturada.

Tem dúvidas ou falta alguma coisa? Contacte a nossa equipa de apoio e responderemos por email, normalmente num minuto.