Chat

Anthropic Messages y Claude Code

Los modelos Claude también hablan la Messages API de Anthropic, así que los SDK de Anthropic, Claude Code y todo lo creado para ellos funcionan con una nueva URL base y una nueva clave.

POST/v1/messages

URL base https://api.zurelay.com (los SDK añaden /v1/messages). Envía la clave como x-api-key o Authorization: Bearer, con anthropic-version: 2023-06-01. Aquí solo se sirven modelos Claude; los demás modelos usan /v1/chat/completions.

Con los SDK de 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)

Todo lo de la Messages API de Anthropic pasa tal cual (excepto metadata, que se queda con nosotros): system como cadena o como bloques (con cache_control para la caché de prompt), tools, thinking, output_config, stop_sequences, temperature, streaming con los mismos eventos y cabeceras anthropic-beta. Las imágenes y los PDF entran como bloques image y document: consulta Imágenes, PDF, audio y vídeo. Anthropic rechaza temperature, top_p y top_k en Claude desde Opus 4.7, así que en esos modelos los omitimos de la solicitud en lugar de hacer que falle.

Razonamiento

Claude razona de forma adaptativa: decide cuánto necesita cada solicitud, y output_config.effort define cuánto esfuerzo pone: low, medium, high, xhigh (extra alto) o max. Añade display: "summarized" a thinking para recibir un resumen del razonamiento en bloques 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)
  • Claude Opus 5.5 y los modelos Fable siempre razonan: Opus 5.5 a medium salvo que fijes un nivel, Fable a high. Si se les pide no razonar, funcionan a low.
  • Claude Sonnet 5.5 y Opus 5 razonan a high por defecto, y Claude Haiku 5.5 a medium. De Opus 4.6 a 4.8 solo razonan cuando envías thinking. Opus 4.6 no tiene xhigh, así que funciona a high.
  • La forma antigua, thinking: { type: "enabled", budget_tokens }, funciona en todos los modelos Claude: los que la rechazan razonan de forma adaptativa al nivel más cercano. Claude Haiku 4.5 solo acepta esa forma, y recibe un presupuesto cuando envías razonamiento adaptativo.
  • El razonamiento se factura como tokens de salida, así que deja espacio para él en max_tokens a xhigh y max, y usa streaming en las respuestas largas. Cuando fijas un nivel, la cabecera x-zurelay-reasoning-effort indica cuál se usó.

Caché de prompts

La caché funciona como en Anthropic: pon cache_control en los bloques que quieras cachear, o en toda la solicitud, para conservarlos cinco minutos, o añade "ttl": "1h" para conservarlos una hora. Cada parte de la entrada se factura como la factura Anthropic:

EntradaSe factura aEn el uso
Leído de la cachéEl precio en caché del modelocache_read_input_tokens
Escrito en la caché durante cinco minutos1,25 veces el precio de entradaephemeral_5m_input_tokens
Escrito en la caché durante una hora2 veces el precio de entradaephemeral_1h_input_tokens
Todo lo demásEl precio de entradainput_tokens

Los dos tipos de escritura están en usage.cache_creation, y cache_creation_input_tokens es ambos juntos. Cada página de modelo muestra sus precios de caché. Solo se factura como escritura lo que pides cachear: una solicitud sin cache_control paga el precio de entrada por todo lo que no lee de la caché, y la entrada que pediste conservar cinco minutos nunca se factura como de una hora.

Claude Code

Apunta Claude Code a Zurelay con cinco variables de entorno (la URL base, tu clave y los tres alias de modelo) y ejecútalo como de costumbre:

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 conservarlo, pon los mismos valores en el bloque env de ~/.claude/settings.json. La guía completa, y las guías para Cursor, Cline y otros, están en Integraciones.

Los niveles /effort de Claude Code llegan al modelo como output_config.effort, así que xhigh y max funcionan como en Anthropic. Ultracode es un ajuste de Claude Code, no un nivel de esfuerzo: funciona al nivel de la sesión (xhigh cuando inicias Claude Code con --effort ultracode).

Contar tokens

POST/v1/messages/count_tokens

Acepta el mismo cuerpo que /v1/messages y devuelve { "input_tokens": 1234 }, una estimación de lo que contaría la solicitud. Gratis.

Errores

Los errores vuelven con el formato de Anthropic ({ "type": "error", "error": { "type", "message" } }), con los mismos significados que en la página de errores. No llevan code: usa el estado HTTP y error.type.

Algunos modelos Claude solo leen PDF a través de /v1/chat/completions. Envía uno a /v1/messages y el error indicará qué endpoint usar. La tabla de Imágenes, PDF, audio y vídeo muestra qué lee cada modelo.
  • Consejo: El contador de tokens de Anthropic y el nuestro pueden variar ligeramente; lo que se factura es el uso que aparece en la respuesta.

¿Tienes dudas o falta algo? Escribe a nuestro equipo de soporte y te responderemos por email, normalmente en menos de un minuto.