Skip to content

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.

Quick Start

Step 1: Get your API Key from the Console.

Step 2: Send a request:

bash
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"}
    ]
  }'
python
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)
javascript
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

ItemValue
MethodPOST
Path/v1/messages
Base URLhttps://open.dieyuyun.com
ProtocolAnthropic Messages API

Authentication

The Claude Messages API uses the following authentication headers:

HeaderValueDescription
x-api-keysk-xxxAPI Key authentication
anthropic-version2023-06-01Anthropic API version
Content-Typeapplication/jsonRequest 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

ModelContext LengthDescription
claude-sonnet-4-20250514200KClaude 4 Sonnet, balanced
claude-opus-4-20250514200KClaude 4 Opus, strongest
claude-3-5-sonnet-20241022200KClaude 3.5 Sonnet
claude-3-5-haiku-20241022200KClaude 3.5 Haiku, fast
claude-3-opus-20240229200KClaude 3 Opus

TIP

See the full model list in the Console.

Request Parameters

FieldTypeRequiredDefaultDescription
modelstringYesModel identifier, e.g. claude-sonnet-4-20250514
messagesarrayYesMessage list, supports user and assistant roles
max_tokensintegerYesMaximum output tokens (required in Anthropic protocol)
systemstring / arrayNoSystem prompt, separate from messages
streambooleanNofalseEnable streaming output
temperaturenumberNo1.0Sampling randomness, range 0~1
top_pnumberNoNucleus sampling parameter
top_kintegerNoTop-K sampling
stop_sequencesarrayNoStrings that stop generation
toolsarrayNoTool definitions (function calling)
tool_choiceobjectNoTool calling strategy
thinkingobjectNoExtended Thinking configuration
metadataobjectNoRequest metadata, e.g. user_id

Message Format

The message structure in Claude Messages API differs from OpenAI:

json
{
  "role": "user",
  "content": "Hello"
}

Multimodal content is also supported:

json
{
  "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

bash
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."}
    ]
  }'
python
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)
javascript
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

python
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)

json
{
  "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

json
{
  "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

FieldDescription
idUnique message identifier
typeAlways message
roleAlways assistant
contentArray of response blocks, may include text and tool_use types
modelActual model ID used
stop_reasonStop reason: end_turn, max_tokens, tool_use, stop_sequence
usage.input_tokensNumber of input tokens
usage.output_tokensNumber 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

json
{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "max_tokens: field required"
  }
}

See Error Codes for details.

Compatibility

FeatureWuliang AIAnthropic Native API
Messages protocolFully compatibleNative protocol
System promptSeparate system parameterSeparate system parameter
Multimodal (images)Supports base64Supports base64 / URL
Tool callingPass-through supportNative support
Streaming SSENative Claude event streamNative protocol
Extended ThinkingPass-through supportNative support
Authenticationx-api-keyx-api-key
anthropic-versionRequiredRequired

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 the max_tokens parameter.
  • Use the system parameter: Claude's system prompt is a separate parameter -- do not place it in messages.
  • 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's parameters). Be aware of the field name difference.

Rate Limits

See Rate Limits for details.