Chat

Anthropic Messages e Claude Code

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

POST/v1/messages

URL base https://api.zurelay.com (os SDKs adicionam /v1/messages). Envie a chave como x-api-key ou Authorization: Bearer, com anthropic-version: 2023-06-01. Só os modelos Claude são atendidos aqui; os demais 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 é repassado (exceto metadata, que fica conosco): system como string ou blocos (com cache_control para cache de prompt), tools, thinking, output_config, stop_sequences, temperature, streaming com os mesmos eventos e cabeçalhos anthropic-beta. Imagens e PDFs são enviados como blocos image e document: veja Imagens, PDFs, áudio e vídeo. A Anthropic rejeita temperature, top_p e top_k no Claude a partir do Opus 4.7, então, para esses modelos, removemos esses campos da requisição em vez de retornar um erro.

Raciocínio

O Claude raciocina de forma adaptativa: ele decide quanto raciocínio uma requisição exige, e output_config.effort define o nível de esforço: low, medium, high, xhigh (extra alto) 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 sempre raciocinam: o Opus 5.5 em medium, a menos que você defina um nível, e o Fable em high. Quando você pede que não raciocinem, eles usam low.
  • O Claude Sonnet 5.5 e o Opus 5 raciocinam em high por padrão, e o Claude Haiku 5.5 em medium. Do Opus 4.6 ao 4.8, só há raciocínio quando você envia thinking. O Opus 4.6 não tem xhigh, então usa high.
  • O formato antigo, thinking: { type: "enabled", budget_tokens }, funciona em todos os modelos Claude: os que não o aceitam usam raciocínio adaptativo no nível mais próximo. O Claude Haiku 4.5 só aceita esse formato e recebe um orçamento de raciocínio quando você envia raciocínio adaptativo.
  • O raciocínio é cobrado como tokens de saída, então reserve espaço para ele em max_tokens em xhigh e max, e use streaming para respostas longas. Quando você define um nível, o cabeçalho x-zurelay-reasoning-effort informa qual foi usado.

Cache de prompts

O cache funciona como na Anthropic: adicione cache_control aos blocos que você quer armazenar em cache, ou à requisição inteira, para mantê-los por cinco minutos, ou adicione "ttl": "1h" para mantê-los por uma hora. Cada parte da entrada é cobrada como na Anthropic:

EntradaCobrado aNo uso
Lido do cachePreço de cache do modelocache_read_input_tokens
Gravado no cache por cinco minutos1.25 vezes o preço de entradaephemeral_5m_input_tokens
Gravado no cache por uma hora2 vezes o preço de entradaephemeral_1h_input_tokens
Todo o restantePreço de entradainput_tokens

Os dois tipos de gravação estão em usage.cache_creation, e cache_creation_input_tokens é a soma dos dois. A página de cada modelo mostra seus preços de cache. Só o que você pede para armazenar em cache é cobrado como gravação: uma requisição sem cache_control paga o preço de entrada por tudo que não lê do cache, e a entrada que você pediu para manter por cinco minutos nunca é cobrada como armazenamento por uma hora.

Claude Code

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

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 a 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, então xhigh e max funcionam como na Anthropic. Ultracode é uma configuração do Claude Code, não um nível de esforço: ele usa o nível da sessão (xhigh quando você inicia o Claude Code com --effort ultracode).

Contagem de tokens

POST/v1/messages/count_tokens

Aceita o mesmo corpo de /v1/messages e retorna { "input_tokens": 1234 }, uma estimativa da contagem de tokens da requisição. Grátis.

Erros

Os erros são retornados no formato da Anthropic ({ "type": "error", "error": { "type", "message" } }), com os mesmos significados da página de erros. Eles não incluem code: use o status HTTP e error.type.

Alguns modelos Claude só leem PDFs por /v1/chat/completions. Se você enviar um para /v1/messages, o erro informa qual endpoint usar. A tabela em Imagens, PDFs, áudio e vídeo mostra o que cada modelo lê.
  • Dica: O contador de tokens da Anthropic e o nosso podem variar um pouco; a cobrança é baseada no uso informado na resposta.

Tem dúvidas ou falta algo? Fale com nossa equipe de suporte e responderemos por e-mail, geralmente em até um minuto.