---
title: 申请 Token
description: MobiusQuant API 鉴权 Token 的两种申请方式 —— 匿名 7 天试用 + 登录永久 Token
---

# 申请 Token

`api.mobiusquant.ai` 走**分档限速**:

- **匿名档**(不带 `Authorization` 头)—— **10 req/min per IP**,适合快速试用、无需注册
- **Token 档**(带合法 Bearer token)—— **60 req/min per token**,推荐生产接入

若你**带了 `Authorization` 但 token 不合法**(过期/撤销/拼错)→ 返回 `401`,**不会降级到匿名档**(避免误诊为"token 在工作但奇怪老超限")。

本页说明**如何拿到 token**、怎么用、错误怎么处理。

## 两种 Token 一览

| 模式 | 申请入口 | 有效期 | 数量上限 | 适用场景 |
| --- | --- | --- | --- | --- |
| **匿名试用** | [/apply-token](https://www.mobiusquant.ai/zh/apply-token) | **7 天** | 不限 | 评估、临时调试、PoC |
| **登录永久** | [/account](https://www.mobiusquant.ai/zh/account) → 「API Tokens」 | **永久** | 单账号 ≤10 个活跃 | 生产、长期接入 |

两种 Token 调用 API 时**完全等价**(同样的 60 req/min 限速,同样的接口集)。

::: warning 明文只显示一次
申请成功时,引擎会回一串 `mq_<43字符>` 的明文 Token。**这串只在创建那一刻可见**,关闭页面后无法找回(我们只在 DB 里存 `sha256(token)`)。请立即复制保存到密码管理器 / `.env`。
:::

---

## 一、匿名申请(7 天试用)

适合不想注册账号、只是想跑通对接的场景。

### 步骤

1. 打开 [https://www.mobiusquant.ai/zh/apply-token](https://www.mobiusquant.ai/zh/apply-token)
2. （可选）给 Token 起个名字方便日后审计
3. 通过 Cloudflare Turnstile 人机验证
4. 点击「申请 Token」
5. 立即复制返回的 `mq_xxx` 明文

### 注意

- **关闭页面后 Token 不可找回** —— 必须立即复制
- 7 天到期后会自动失效,过期请求返回 `401 invalid, expired or revoked token`
- 同一邮箱 / IP 没有数量限制,过期或丢了重新申请即可
- 申请页有 Cloudflare 人机验证,机器化批量申请被拦

---

## 二、登录申请(永久)

适合长期生产接入。登录后 Token 永久有效,且能在「使用记录」抽屉里看到调用明细。

### 步骤

1. 打开 [https://www.mobiusquant.ai/zh/account](https://www.mobiusquant.ai/zh/account)
2. 用 Telegram 登录(或邮箱 / 邮箱+Telegram 绑定)
3. 进入「API Tokens」区块,点击「新建 Token」
4. 给 Token 起个名字(必填,比如「production-2026」),提交
5. 立即复制弹窗里的 `mq_xxx` 明文,点「我已保存」

### 管理

| 操作 | 怎么做 |
| --- | --- |
| 查看所有 Token | Account 页 → 「API Tokens」表格(默认隐藏已撤销,可切换显示) |
| 查看某个 Token 的调用记录 | 点表格行的「📊 使用记录」 → 抽屉里看最近 50 条明细 + 7 天聚合 |
| 撤销 Token | 点行尾「🗑 撤销」按钮 → 二次确认(撤销后约 ≤60 秒生效) |

每个账号最多 **10 个活跃**(未撤销 & 未过期) Token,达到上限时新建会返回:

```
HTTP/1.1 400 Bad Request
{"detail": "未吊销 token 已达上限 10,请先吊销旧的"}
```

---

## 使用 Token

在任何请求里加 `Authorization` 头:

```bash
curl -H "Authorization: Bearer mq_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
     "https://api.mobiusquant.ai/api/markets"
```

```python
import requests

TOKEN = "mq_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
resp = requests.get(
    "https://api.mobiusquant.ai/api/klines",
    params={"exchange": "binance", "market": "perp",
            "symbol": "BTCUSDT", "interval": "5m", "limit": 100},
    headers={"Authorization": f"Bearer {TOKEN}"},
)
resp.raise_for_status()
print(resp.json())
```

```javascript
const TOKEN = "mq_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
const r = await fetch(
  "https://api.mobiusquant.ai/api/indicators",
  {
    method: "POST",
    headers: {
      "Content-Type":  "application/json",
      "Authorization": `Bearer ${TOKEN}`,
    },
    body: JSON.stringify({
      exchange: "binance", market: "perp", symbol: "BTCUSDT",
      interval: "5m", limit: 100,
      calc: [{ name: "ema", params: { period: 20 } }],
    }),
  },
);
const json = await r.json();
```

---

## 速率限制

- **匿名档:10 req/min per IP**(以 CF-Connecting-IP 为 key,Cloudflare 真实客户端 IP)
- **Token 档:60 req/min per token**
- 令牌桶算法,burst = 完整 1 分钟配额 —— 可一秒打完,然后等整一分钟从空桶补满
- **豁免路径**(不需要 token,也不计入限速):`/api/health` `/agents.md` `/docs` `/redoc` `/openapi.json`

超限返回:

```http
HTTP/1.1 429 Too Many Requests
Retry-After: 7
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 0

{"detail": "rate limit exceeded (60/min); consider batching requests."}
```

**请遵守 `Retry-After`**,死循环重试只会让桶永远空。

---

## 错误码速查

| HTTP | 含义 | 排查方向 |
| --- | --- | --- |
| `401` | 带了 `Authorization` 头但 token 不合法(拼错 / 过期 / 撤销)| 修正 token 后重试;不带 `Authorization` 头会走匿名档而非 401 |
| `429` | 超限(匿名 10/min 或 token 60/min)| 看 `Retry-After` 退避;匿名可申请 token 升档(6x) |
| `400` | 业务参数错误 | 读 `detail` 字段,**不要盲目重试** |
| `422` | 请求结构不对(必填缺失、类型错、未知字段) | 读 validation 数组修请求结构 |
| `404` | 缓存空 / symbol 不存在 / venue 不支持 | 先看 `/api/health`(`starting` 等),再查 `/api/markets/.../symbols` |
| `502` | 上游容器重启 | 30 秒后重试 |

---

## 安全建议

- **绝不要把 Token 写进前端代码 / 提交到公开仓库**。前端调用请走自家后端中转
- 用环境变量 / 密钥管理器存放,例如 `.env` 文件加入 `.gitignore`
- 怀疑泄露立即在 Account 页撤销,然后新建
- 每个环境(dev / staging / prod)用独立 Token,出问题影响面小
