Claude Messages
Call Claude models via the Anthropic Messages API native protocol. Fully compatible with Claude SDK, Claude Code, and the native Anthropic request format.
Try it now
Quick Start
Step 1: Get your API Key from the Console.
Step 2: Send a request:
curl -X POST "https://open.dieyuyun.com/v1/messages" \
-H "Content-Type: application/json" \
-H "x-api-key: sk-xxx" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-sonnet-4-20250514",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "Hello, introduce yourself"}
]
}'import anthropic
client = anthropic.Anthropic(
base_url="https://open.dieyuyun.com",
api_key="sk-xxx"
)
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[
{"role": "user", "content": "Hello, introduce yourself"}
]
)
print(message.content[0].text)import Anthropic from '@anthropic-ai/sdk'
const client = new Anthropic({
baseURL: 'https://open.dieyuyun.com',
apiKey: 'sk-xxx',
})
const message = await client.messages.create({
model: 'claude-sonnet-4-20250514',
max_tokens: 1024,
messages: [{ role: 'user', content: 'Hello, introduce yourself' }],
})
console.log(message.content[0].text)Step 3: Read the response from content[0].text.
Endpoint
| Item | Value |
|---|---|
| Method | POST |
| Path | /v1/messages |
| Base URL | https://open.dieyuyun.com |
| Protocol | Anthropic Messages API |
Authentication
The Claude Messages API uses the following authentication headers:
| Header | Value | Description |
|---|---|---|
| x-api-key | sk-xxx | API Key authentication |
| anthropic-version | 2023-06-01 | Anthropic API version |
| Content-Type | application/json | Request body format |
TIP
When using the Anthropic SDK, the anthropic-version header is added automatically. You only need to configure base_url and api_key.
Supported Models
| Model | Context Length | Description |
|---|---|---|
| claude-sonnet-4-20250514 | 200K | Claude 4 Sonnet, balanced |
| claude-opus-4-20250514 | 200K | Claude 4 Opus, strongest |
| claude-3-5-sonnet-20241022 | 200K | Claude 3.5 Sonnet |
| claude-3-5-haiku-20241022 | 200K | Claude 3.5 Haiku, fast |
| claude-3-opus-20240229 | 200K | Claude 3 Opus |
TIP
See the full model list in the Console.
Request Parameters
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| model | string | Yes | — | Model identifier, e.g. claude-sonnet-4-20250514 |
| messages | array | Yes | — | Message list, supports user and assistant roles |
| max_tokens | integer | Yes | — | Maximum output tokens (required in Anthropic protocol) |
| system | string / array | No | — | System prompt, separate from messages |
| stream | boolean | No | false | Enable streaming output |
| temperature | number | No | 1.0 | Sampling randomness, range 0~1 |
| top_p | number | No | — | Nucleus sampling parameter |
| top_k | integer | No | — | Top-K sampling |
| stop_sequences | array | No | — | Strings that stop generation |
| tools | array | No | — | Tool definitions (function calling) |
| tool_choice | object | No | — | Tool calling strategy |
| thinking | object | No | — | Extended Thinking configuration |
| metadata | object | No | — | Request metadata, e.g. user_id |
Message Format
The message structure in Claude Messages API differs from OpenAI:
{
"role": "user",
"content": "Hello"
}Multimodal content is also supported:
{
"role": "user",
"content": [
{ "type": "text", "text": "What's in this image?" },
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/jpeg",
"data": "/9j/4AAQ..."
}
}
]
}Request Examples
Conversation with System Prompt
curl -X POST "https://open.dieyuyun.com/v1/messages" \
-H "Content-Type: application/json" \
-H "x-api-key: sk-xxx" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-sonnet-4-20250514",
"system": "You are a professional Python developer. Keep answers concise.",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "What are Python decorators? Give an example."}
]
}'import anthropic
client = anthropic.Anthropic(
base_url="https://open.dieyuyun.com",
api_key="sk-xxx"
)
message = client.messages.create(
model="claude-sonnet-4-20250514",
system="You are a professional Python developer. Keep answers concise.",
max_tokens=1024,
messages=[
{"role": "user", "content": "What are Python decorators? Give an example."}
]
)
print(message.content[0].text)import Anthropic from '@anthropic-ai/sdk'
const client = new Anthropic({
baseURL: 'https://open.dieyuyun.com',
apiKey: 'sk-xxx',
})
const message = await client.messages.create({
model: 'claude-sonnet-4-20250514',
system: 'You are a professional Python developer. Keep answers concise.',
max_tokens: 1024,
messages: [{ role: 'user', content: 'What are Python decorators? Give an example.' }],
})
console.log(message.content[0].text)Streaming Output
import anthropic
client = anthropic.Anthropic(
base_url="https://open.dieyuyun.com",
api_key="sk-xxx"
)
with client.messages.stream(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[
{"role": "user", "content": "Write a quicksort algorithm"}
]
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)Tool Calling (Function Calling)
{
"model": "claude-sonnet-4-20250514",
"max_tokens": 1024,
"messages": [{ "role": "user", "content": "What's the weather like in Beijing today?" }],
"tools": [
{
"name": "get_weather",
"description": "Get weather information for a city",
"input_schema": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City name"
}
},
"required": ["city"]
}
}
]
}Response Format
Successful Response
{
"id": "msg_013Zva2CMHLNnXjNJJKqJ2EF",
"type": "message",
"role": "assistant",
"content": [
{
"type": "text",
"text": "Hello! I'm Claude, an AI assistant developed by Anthropic. I'm happy to help you."
}
],
"model": "claude-sonnet-4-20250514",
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 12,
"output_tokens": 32
}
}Field Reference
| Field | Description |
|---|---|
| id | Unique message identifier |
| type | Always message |
| role | Always assistant |
| content | Array of response blocks, may include text and tool_use types |
| model | Actual model ID used |
| stop_reason | Stop reason: end_turn, max_tokens, tool_use, stop_sequence |
| usage.input_tokens | Number of input tokens |
| usage.output_tokens | Number of output tokens |
Streaming SSE Events
Streaming output returns the native Claude SSE event stream:
event: message_start
data: {"type":"message_start","message":{"id":"msg_01...","type":"message",...}}
event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Hello"}}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"! I'm"}}
event: content_block_stop
data: {"type":"content_block_stop","index":0}
event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":32}}
event: message_stop
data: {"type":"message_stop"}Error Response
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "max_tokens: field required"
}
}See Error Codes for details.
Compatibility
| Feature | Wuliang AI | Anthropic Native API |
|---|---|---|
| Messages protocol | Fully compatible | Native protocol |
| System prompt | Separate system parameter | Separate system parameter |
| Multimodal (images) | Supports base64 | Supports base64 / URL |
| Tool calling | Pass-through support | Native support |
| Streaming SSE | Native Claude event stream | Native protocol |
| Extended Thinking | Pass-through support | Native support |
| Authentication | x-api-key | x-api-key |
| anthropic-version | Required | Required |
TIP
The platform maintains full compatibility with the Anthropic Messages API. Successful responses return the native Claude format directly, without additional code / data wrappers. You can integrate using the Anthropic SDK by simply changing the base_url.
Best Practices
- Always set
max_tokens: Unlike the OpenAI protocol, the Anthropic Messages API requires themax_tokensparameter. - Use the
systemparameter: Claude's system prompt is a separate parameter -- do not place it inmessages. - Claude Code support: This platform supports direct Claude Code connections. Simply configure the
base_url. - Token counting differences: Anthropic's tokenization may differ from OpenAI's, so the same text may produce different token counts.
- Tool calling syntax: Claude tools use
input_schema(not OpenAI'sparameters). Be aware of the field name difference.
Rate Limits
See Rate Limits for details.
Related Docs
- Chat Completions (Streaming) - Use the OpenAI-compatible protocol
- Gemini Native Format - Use the Gemini native protocol
- OpenAI Responses - Use the OpenAI Responses API
- Manage API Keys - Create and configure API keys