Anthropic 消息 API
Anthropic 消息 API
Section titled “Anthropic 消息 API”POST /anthropic/v1/messages 兼容 Anthropic Messages API,可直接使用 Anthropic 官方 SDK。
| Header | 值 |
|---|---|
x-api-key | <api-key> |
anthropic-version | 2023-06-01 |
Content-Type | application/json |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | 模型 ID,如 claude-sonnet-4-20250514 |
messages | array | 是 | 消息数组,每项含 role(user/assistant)与 content |
max_tokens | integer | 是 | 最大生成 token 数 |
system | string | 否 | 系统提示 |
temperature | number | 否 | 采样温度 |
stop_sequences | array | 否 | 停止序列 |
tools | array | 否 | 工具定义 |
tool_choice | object | 否 | 工具选择 |
stream | boolean | 否 | 是否流式,默认 false |
200 OK
Section titled “200 OK”{ "id": "msg-xxx", "type": "message", "role": "assistant", "content": [ { "type": "text", "text": "你好!" } ], "model": "claude-sonnet-4-20250514", "stop_reason": "end_turn", "usage": { "input_tokens": 10, "output_tokens": 5 }}流式响应(stream: true)以 SSE 返回,事件类型包括 message_start、content_block_delta、message_delta,以 message_stop 结束。
HTTP 状态码
Section titled “HTTP 状态码”| 状态码 | 说明 | 响应格式 |
|---|---|---|
| 200 | 成功 | Anthropic 格式 |
| 400 | 请求错误(协议校验失败) | Anthropic 错误格式 |
| 401 | API Key 无效 | {"code":"UNAUTHORIZED","message":...} |
| 403 | 权限不足(应用未授权该渠道)或 IP 黑名单 | {"code":"ACCESS_DENIED","message":...} |
| 429 | 限流 | {"error":{"code":"RATE_LIMIT_EXCEEDED","message":...}} |
| 500 | 服务器错误 | ApiResponse 格式(INTERNAL_ERROR) |
| 502 | 上游 Provider 错误 | ApiResponse 格式(code 为错误类型名,如 UPSTREAM_ERROR、MODEL_NOT_FOUND) |
| 503 | 熔断开启 | ApiResponse 格式(code 为 UPSTREAM_ERROR) |
错误格式详见 错误码与重试。
curl https://{gateway-host}/anthropic/v1/messages \ -H "x-api-key: sk-xxx" \ -H "anthropic-version: 2023-06-01" \ -H "Content-Type: application/json" \ -d '{ "model":"claude-sonnet-4-20250514", "max_tokens":1024, "messages":[{"role":"user","content":"你好"}] }'from anthropic import Anthropic
client = Anthropic(base_url="https://{gateway-host}/anthropic", api_key="sk-xxx")resp = client.messages.create( model="claude-sonnet-4-20250514", max_tokens=1024, messages=[{"role": "user", "content": "你好"}],)print(resp.content[0].text)import Anthropic from '@anthropic-ai/sdk';
const client = new Anthropic({ baseURL: 'https://{gateway-host}/anthropic', apiKey: 'sk-xxx' });const resp = await client.messages.create({ model: 'claude-sonnet-4-20250514', max_tokens: 1024, messages: [{ role: 'user', content: '你好' }],});console.log(resp.content[0].text);curl https://{gateway-host}/anthropic/v1/messages \ -H "x-api-key: sk-xxx" \ -H "anthropic-version: 2023-06-01" \ -H "Content-Type: application/json" \ -d '{ "model":"claude-sonnet-4-20250514", "max_tokens":1024, "messages":[{"role":"user","content":"讲个故事"}], "stream":true }'from anthropic import Anthropic
client = Anthropic(base_url="https://{gateway-host}/anthropic", api_key="sk-xxx")with client.messages.stream( model="claude-sonnet-4-20250514", max_tokens=1024, messages=[{"role": "user", "content": "讲个故事"}],) as stream: for text in stream.text_stream: print(text, end="", flush=True)import Anthropic from '@anthropic-ai/sdk';
const client = new Anthropic({ baseURL: 'https://{gateway-host}/anthropic', apiKey: 'sk-xxx' });const stream = await client.messages.stream({ model: 'claude-sonnet-4-20250514', max_tokens: 1024, messages: [{ role: 'user', content: '讲个故事' }],});for await (const event of stream) { if (event.type === 'content_block_delta' && event.delta.type === 'text_delta') { process.stdout.write(event.delta.text); }}