# Messages (/docs/zh-CN/api/messages)

`POST /v1/messages` 使用 Anthropic Messages 协议。用 Anthropic SDK 和 Claude Code 调用 Claude 时用它；模型列表中的其他对话模型也能在这里调用，同样以 content block 的形式返回。完整的 schema 见[端点参考](/docs/zh-CN/api/chat/createMessage)。

| | |
|---|---|
| 端点 | `POST https://api.ohmygpt.com/v1/messages` |
| SDK Base URL | `https://api.ohmygpt.com` |
| 鉴权 | `x-api-key: $OHMYGPT_API_KEY` 或 `Authorization: Bearer $OHMYGPT_API_KEY` |

<Callout type="warn">
Base URL 不要带 `/v1`。Anthropic SDK 和 Claude Code 会自己拼上 `/v1/messages`，所以写成 `https://api.ohmygpt.com/v1` 会变成请求 `/v1/v1/messages`，返回 404。
</Callout>

```python tab="Python"
import os
from anthropic import Anthropic

client = Anthropic(
    base_url="https://api.ohmygpt.com",
    api_key=os.environ["OHMYGPT_API_KEY"],
)

message = client.messages.create(
    model="anthropic/claude-haiku-4-5",
    max_tokens=256,
    messages=[{"role": "user", "content": "Explain QUIC in two sentences."}],
)
print(message.content[0].text)
```

```bash tab="cURL"
curl https://api.ohmygpt.com/v1/messages \
  -H "x-api-key: $OHMYGPT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "anthropic/claude-haiku-4-5",
    "max_tokens": 256,
    "messages": [{"role": "user", "content": "Explain QUIC in two sentences."}]
  }'
```

不需要发送 `anthropic-version`，缺省时会自动补上 `2023-06-01`。使用 Claude Code 见 [Claude Code](/docs/zh-CN/code-cli/claude-code)。

## Claude [#claude]

Claude 模型收到的请求体和 `anthropic-*` 请求头（包括 `anthropic-beta`）都与你发送的一致。提示词缓存、扩展思考、服务端工具和 beta 功能都按 Anthropic 文档的说明生效。

## 其他模型 [#其他模型]

其他任何对话模型也能在这里调用，包括工具调用：

```bash
curl https://api.ohmygpt.com/v1/messages \
  -H "x-api-key: $OHMYGPT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "ohmygpt/mock",
    "max_tokens": 64,
    "messages": [{"role": "user", "content": "What is the weather in Paris?"}],
    "tools": [{
      "name": "get_weather",
      "description": "Get weather",
      "input_schema": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]}
    }]
  }'
```

```json
{
  "type": "message",
  "role": "assistant",
  "model": "mock",
  "content": [
    { "type": "tool_use", "id": "call_mock_1", "name": "get_weather", "input": { "city": "" } }
  ],
  "stop_reason": "tool_use",
  "usage": { "input_tokens": 71, "output_tokens": 8 }
}
```

在这些模型上：

- `stop_reason` 取值为 `end_turn`、`max_tokens`、`tool_use` 或 `refusal`。
- `usage.output_tokens` 包含模型的推理 token。
- `anthropic-*` 请求头、`container`、`mcp_servers` 以及 `web_search_20250305` 等服务端工具是 Claude 的功能，请配合 Claude 模型使用。
- `cache_control` 不会发送。它只决定缓存哪些内容，不影响回答。

通用规则见[协议](/docs/zh-CN/api/protocols#其他协议)。

## 计算 token 数 [#计算-token-数]

`POST /v1/messages/count_tokens` 返回一个 Claude 请求的输入 token 数。它是免费的，也不会产生用量记录。

```bash
curl https://api.ohmygpt.com/v1/messages/count_tokens \
  -H "x-api-key: $OHMYGPT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "anthropic/claude-haiku-4-5", "messages": [{"role": "user", "content": "Hello, Claude"}]}'
```

```json
{ "input_tokens": 10 }
```

请配合 Claude 模型使用。

## 流式输出 [#流式输出]

`stream: true` 返回 Anthropic 的事件序列，从 `message_start` 到 `message_stop`，中间穿插 `ping` 事件。`message_stop` 之前有一行 `: x-cost-credits` 注释。如果流开始后模型出错，流会以一个 `error` 事件结束。详见[流式输出](/docs/zh-CN/api/streaming)。
