Anthropic Chat
Interface description: Compatible endpoint for the Anthropic Messages API (/v1/messages), supporting streaming output (SSE). Request, response and error formats follow Anthropic specifications; authentication uses the x-api-key header (carried by Anthropic SDK by default). Existing Anthropic SDKs can be accessed by simply replacing baseURL and API Key, and billing is based on AiToEarn points.
Before calling this interface, please request the “Conversation Model List” interface (GET /api/ai/models/chat) to obtain the currently available model list.
curl --request POST \
--url https://aitoearn.cn/api/ai/v1/messages \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"model": "claude-sonnet-5",
"messages": [
{
"role": "user",
"content": "Introduce AiToEarn in one sentence."
}
]
}
'import requests
url = "https://aitoearn.cn/api/ai/v1/messages"
payload = {
"model": "claude-sonnet-5",
"messages": [
{
"role": "user",
"content": "Introduce AiToEarn in one sentence."
}
]
}
headers = {
"X-Api-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Api-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'claude-sonnet-5',
messages: [{role: 'user', content: 'Introduce AiToEarn in one sentence.'}]
})
};
fetch('https://aitoearn.cn/api/ai/v1/messages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://aitoearn.cn/api/ai/v1/messages"
payload := strings.NewReader("{\n \"model\": \"claude-sonnet-5\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"Introduce AiToEarn in one sentence.\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Api-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}event: message_start
data: {"type":"message_start","message":{"model":"string","id":"string","type":"message","role":"assistant","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":"integer","output_tokens":"integer","cache_creation_input_tokens":"integer","cache_read_input_tokens":"integer"}}}
event: content_block_start
data: {"type":"content_block_start","index":"integer","content_block":{"type":"text","text":"string"}}
event: content_block_delta
data: {"type":"content_block_delta","index":"integer","delta":{"type":"text_delta","text":"string"}}
event: content_block_stop
data: {"type":"content_block_stop","index":"integer"}
event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":"integer","output_tokens":"integer","cache_creation_input_tokens":"integer","cache_read_input_tokens":"integer","cache_creation":{"ephemeral_5m_input_tokens":"integer"}}}
event: message_stop
data: {"type":"message_stop"}Authorizations
Need to get API Key from AiToEarn. Click to go to "API Key Obtaining Tutorial".
Body
Message list
1[
{
"role": "user",
"content": "Introduce AiToEarn in one sentence."
}
]
Anthropic channel model ID. First call the Chat Model List endpoint (GET /api/ai/models/chat), then select data[n].name where channel is anthropic.
"claude-sonnet-5"
Maximum output tokens. The allowed range is 1 to 9007199254740991 and the default is 32000; the example uses 64 to limit test usage.
1 <= x <= 900719925474099164
Response
Native third-party protocol response or SSE data, not wrapped in the AiToEarn common response envelope.
SSE event stream using the Anthropic Messages protocol.
curl --request POST \
--url https://aitoearn.cn/api/ai/v1/messages \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"model": "claude-sonnet-5",
"messages": [
{
"role": "user",
"content": "Introduce AiToEarn in one sentence."
}
]
}
'import requests
url = "https://aitoearn.cn/api/ai/v1/messages"
payload = {
"model": "claude-sonnet-5",
"messages": [
{
"role": "user",
"content": "Introduce AiToEarn in one sentence."
}
]
}
headers = {
"X-Api-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Api-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'claude-sonnet-5',
messages: [{role: 'user', content: 'Introduce AiToEarn in one sentence.'}]
})
};
fetch('https://aitoearn.cn/api/ai/v1/messages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://aitoearn.cn/api/ai/v1/messages"
payload := strings.NewReader("{\n \"model\": \"claude-sonnet-5\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"Introduce AiToEarn in one sentence.\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Api-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}event: message_start
data: {"type":"message_start","message":{"model":"string","id":"string","type":"message","role":"assistant","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":"integer","output_tokens":"integer","cache_creation_input_tokens":"integer","cache_read_input_tokens":"integer"}}}
event: content_block_start
data: {"type":"content_block_start","index":"integer","content_block":{"type":"text","text":"string"}}
event: content_block_delta
data: {"type":"content_block_delta","index":"integer","delta":{"type":"text_delta","text":"string"}}
event: content_block_stop
data: {"type":"content_block_stop","index":"integer"}
event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":"integer","output_tokens":"integer","cache_creation_input_tokens":"integer","cache_read_input_tokens":"integer","cache_creation":{"ephemeral_5m_input_tokens":"integer"}}}
event: message_stop
data: {"type":"message_stop"}
