# 计算消息的 token 数

> BigModel.io 的 POST /v1/messages/count_tokens 接口：在不生成回复的情况下计算 Anthropic Messages 请求的输入 token 数，仅 Anthropic 分组可用。

网页版: https://bigmodel.io/zh-cn/docs/api-count-tokens · 更新于 2026-10-18

`POST https://bigmodel.io/v1/messages/count_tokens`

计算一个 Anthropic Messages 请求体会消耗多少输入 token，不生成回复，也不记录用量。仅 Anthropic 分组支持；OpenAI 分组和仅对话补全分组（DeepSeek、GLM 平台）返回 `404`。

## 请求

```http
POST https://bigmodel.io/v1/messages/count_tokens
```

### 认证

| 请求头 | 值 |
|---|---|
| `Authorization` | `Bearer $BIGMODEL_API_KEY` |
| `x-api-key` | `$BIGMODEL_API_KEY` |

任选其一。

### 请求体

Anthropic Messages 请求体，不需要 `max_tokens`。

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `model` | string | 是 | 模型 ID。 |
| `messages` | array<object> | 是 | 要计数的消息。 |
| `system` | string \| array<object> |  |  |
| `tools` | array<object> |  |  |

## 响应

| 状态码 | 含义 |
|---|---|
| `200` | 上游返回的 token 计数。 |
| `400` | `api_key_in_query_deprecated`（Key 放在了查询参数里），或 `invalid_request_error`：请求体为空或不是合法 JSON、缺少 `model`、`stream` 不是布尔值等。 |
| `401` | `API_KEY_REQUIRED`、`INVALID_API_KEY`、`API_KEY_DISABLED`、`USER_NOT_FOUND`、`USER_INACTIVE`。 |
| `403` | `INSUFFICIENT_BALANCE`、`API_KEY_EXPIRED`、`ACCESS_DENIED`（IP 规则）、`SUBSCRIPTION_NOT_FOUND`、`SUBSCRIPTION_INVALID`，或 `permission_error`（Key 未分配分组、分组不允许该接口）。 |
| `404` | 该 Key 所在分组不支持 token 计数。 |
| `413` | 请求体过大。 |
| `429` | `API_KEY_QUOTA_EXHAUSTED`、`USAGE_LIMIT_EXCEEDED`（套餐额度），或 `rate_limit_exceeded` / `rate_limit_error`（Key 的 5 小时/1 天/7 天限额、每分钟请求数、并发、上游限流）。每分钟限流会带 `Retry-After`。 |
| `503` | `api_error` 等：分组暂时没有该模型的可用容量，或分组不提供该模型（`No available accounts`）。 |

### 响应字段

| 字段 | 类型 | 说明 |
|---|---|---|
| `input_tokens` | integer | 该请求的输入 token 数。 |


## 示例

```bash [cURL]
curl https://bigmodel.io/v1/messages/count_tokens \
  -H "Authorization: Bearer $BIGMODEL_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "glm-5.3",
    "system": "你是一个简洁的助手。",
    "messages": [{"role": "user", "content": "用一句话解释 HTTP 429。"}]
  }'
```

```python [Python]
import os
from anthropic import Anthropic

client = Anthropic(base_url="https://bigmodel.io", api_key=os.environ["BIGMODEL_API_KEY"])

count = client.messages.count_tokens(
    model="glm-5.3",
    system="你是一个简洁的助手。",
    messages=[{"role": "user", "content": "用一句话解释 HTTP 429。"}],
)
print(count.input_tokens)
```

```js [Node.js]
import Anthropic from '@anthropic-ai/sdk'

const client = new Anthropic({baseURL: 'https://bigmodel.io', apiKey: process.env.BIGMODEL_API_KEY})

const count = await client.messages.countTokens({
  model: 'glm-5.3',
  system: '你是一个简洁的助手。',
  messages: [{role: 'user', content: '用一句话解释 HTTP 429。'}],
})
console.log(count.input_tokens)
```

响应示例（数值仅作示意）：

```json
{"input_tokens": 21}
```

## 说明

- **并非所有分组都可用。** OpenAI 分组和仅对话补全分组返回 `404`：`{"type":"error","error":{"type":"not_found_error","message":"Token counting is not supported for this platform"}}`。这些分组请直接读取实际响应中的 `usage`。
- **计数由上游返回**，反映的是该模型自己的分词方式。
- **仍做计费检查。** 计数本身不收费，但和其他文本接口一样，要求余额大于 0 或有生效中的套餐，否则返回 `403` `INSUFFICIENT_BALANCE`。
- 请求体为空或格式错误返回 `400` `invalid_request_error`，过大返回 `413`。完整列表见[错误码](https://bigmodel.io/zh-cn/docs/errors)。

## 相关文档

- [创建消息](https://bigmodel.io/zh-cn/docs/api-messages)
- [计费与充值](https://bigmodel.io/zh-cn/docs/billing)
