Anthropic Chat Format (Messages)¶
Official Documentation
📝 Introduction¶
All Claude models on the gateway can be called natively via the Anthropic Messages API format. This is the recommended format when using the official Anthropic SDKs or tools like Claude Code.
📮 Endpoint¶
Authentication¶
Anthropic-style headers are used:
The Authorization: Bearer $WS_API_KEY header is also accepted.
💡 Request Examples¶
Basic Chat ✅¶
curl http://baseurl/v1/messages \
-H "Content-Type: application/json" \
-H "x-api-key: $WS_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-sonnet-4-6",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "Hello, Claude!"}
]
}'
Response Example:
{
"id": "msg_01XFDUDYJgAACzvnptvVoYEL",
"type": "message",
"role": "assistant",
"model": "claude-sonnet-4-6",
"content": [
{"type": "text", "text": "Hello! How can I help you today?"}
],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 10,
"output_tokens": 12
}
}
System Prompt ✅¶
curl http://baseurl/v1/messages \
-H "Content-Type: application/json" \
-H "x-api-key: $WS_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-haiku-4-5-20251001",
"max_tokens": 1024,
"system": "You are a professional translator. Translate everything to Arabic.",
"messages": [
{"role": "user", "content": "Good morning!"}
]
}'
Streaming Response ✅¶
curl http://baseurl/v1/messages \
-H "Content-Type: application/json" \
-H "x-api-key: $WS_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-sonnet-4-6",
"max_tokens": 1024,
"stream": true,
"messages": [
{"role": "user", "content": "Hello!"}
]
}'
Streaming events:
event: message_start
data: {"type":"message_start","message":{"id":"msg_...","type":"message","role":"assistant","content":[],"model":"claude-sonnet-4-6","usage":{"input_tokens":10}}}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Hello"}}
event: message_stop
data: {"type":"message_stop"}
Image Input ✅¶
curl http://baseurl/v1/messages \
-H "Content-Type: application/json" \
-H "x-api-key: $WS_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-sonnet-4-6",
"max_tokens": 1024,
"messages": [
{
"role": "user",
"content": [
{
"type": "image",
"source": {"type": "url", "url": "https://example.com/photo.jpg"}
},
{"type": "text", "text": "Describe this image."}
]
}
]
}'
Base64 is also supported: "source": {"type": "base64", "media_type": "image/jpeg", "data": "..."}.
Tool Use ✅¶
curl http://baseurl/v1/messages \
-H "Content-Type: application/json" \
-H "x-api-key: $WS_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-opus-4-8",
"max_tokens": 1024,
"tools": [
{
"name": "get_weather",
"description": "Get the current weather for a given location",
"input_schema": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "City name"}
},
"required": ["location"]
}
}
],
"messages": [
{"role": "user", "content": "What is the weather in Riyadh?"}
]
}'
Response Example:
{
"id": "msg_01Aq9w938a90dw8q",
"type": "message",
"role": "assistant",
"model": "claude-opus-4-8",
"content": [
{
"type": "tool_use",
"id": "toolu_01A09q90qw90lq917835lq9",
"name": "get_weather",
"input": {"location": "Riyadh"}
}
],
"stop_reason": "tool_use"
}
Using the Official SDK¶
import anthropic
client = anthropic.Anthropic(
api_key="sk-...", # your WS API key
base_url="http://baseurl",
)
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello, Claude!"}],
)
print(message.content[0].text)
📋 Request Body Parameters¶
| Parameter | Type | Required | Description |
|---|---|---|---|
model |
string | Yes | Claude model ID, see Model Catalog |
max_tokens |
integer | Yes | Maximum number of tokens to generate |
messages |
array | Yes | Alternating user / assistant messages. Content is a string or an array of content blocks (text, image, tool_use, tool_result) |
system |
string / array | No | System prompt |
stream |
boolean | No | Stream the response via server-sent events |
temperature |
number | No | 0–1. Default 1 |
top_p |
number | No | Nucleus sampling |
top_k |
integer | No | Only sample from the top K options |
stop_sequences |
array | No | Custom stop sequences |
tools |
array | No | Tool definitions (name, description, input_schema) |
tool_choice |
object | No | {"type":"auto"} / {"type":"any"} / {"type":"tool","name":"..."} |
thinking |
object | No | Extended thinking, e.g. {"type":"enabled","budget_tokens":10000} |
metadata |
object | No | e.g. {"user_id": "..."} |
📥 Response Fields¶
| Field | Type | Description |
|---|---|---|
id |
string | Unique message identifier |
type |
string | Always message |
role |
string | Always assistant |
model |
string | Model used |
content |
array | Content blocks: text, tool_use, thinking |
stop_reason |
string | end_turn, max_tokens, stop_sequence, tool_use |
usage |
object | input_tokens, output_tokens, cache read/write token counts |