Skip to content

Messages (Anthropic)

Uses the Messages protocol format — for Claude-family models and any SDK or client that speaks it.

POST https://wrouter.ai/v1/messages

Headers

HeaderRequiredNotes
Authorization✓*Bearer sk-...
x-api-key✓*sk-... (alternative to Authorization)
anthropic-versione.g. 2023-06-01
Content-Typeapplication/json

*Use either Authorization or x-api-key.

Body parameters

ParameterTypeRequiredNotes
modelstringe.g. claude-sonnet-4-5, claude-opus-4-1
messagesarrayStandard Messages-protocol structure
max_tokensinteger
systemstring | arraySystem prompt
temperaturenumber
top_pnumber
top_kinteger
streambooleanSSE streaming
stop_sequencesarray
toolsarrayAnthropic tool defs
tool_choiceobject{"type":"auto"|"any"|"tool","name":"..."}
thinkingobjectExtended thinking, e.g. {"type":"enabled","budget_tokens":10000}
cache_controlobjectPrompt caching to save cost
context_managementobjectLong-conversation context strategy
output_configobjectOutput configuration
output_formatobjectOutput format constraints (e.g. structured output)
mcp_serversarrayMCP (Model Context Protocol) server list
containerstring | objectTool execution container
inference_geostringInference region hint
metadataobject{"user_id": "..."}
speedstring"standard" | "fast"
service_tierstring"auto" | "standard_only"

Field semantics follow the Messages protocol spec.

Examples

bash
curl https://wrouter.ai/v1/messages \
  -H "x-api-key: $WROUTER_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-5",
    "max_tokens": 1024,
    "messages": [{"role":"user","content":"Introduce WRouter in one sentence."}]
  }'

Python (anthropic SDK)

python
import anthropic
client = anthropic.Anthropic(
    api_key="sk-...",
    base_url="https://wrouter.ai",
)

resp = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello"}],
)
print(resp.content[0].text)

Response

Response shape:

json
{
  "id": "msg_xxx",
  "type": "message",
  "role": "assistant",
  "content": [{"type":"text","text":"Hello! ..."}],
  "model": "claude-sonnet-4-5",
  "stop_reason": "end_turn",
  "usage": {"input_tokens": 12, "output_tokens": 24}
}

Streaming follows the Messages SSE event protocol: message_start, content_block_delta, message_delta, message_stop.

Cross-vendor calls

You may pass non-Claude IDs (e.g. gpt-4o) to /v1/messages — WRouter translates protocols. For non-Claude models, however, /v1/chat/completions exposes more native features.