申请 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 | 7 天 | 不限 | 评估、临时调试、PoC |
| 登录永久 | /account → 「API Tokens」 | 永久 | 单账号 ≤10 个活跃 | 生产、长期接入 |
两种 Token 调用 API 时完全等价(同样的 60 req/min 限速,同样的接口集)。
明文只显示一次
申请成功时,引擎会回一串 mq_<43字符> 的明文 Token。这串只在创建那一刻可见,关闭页面后无法找回(我们只在 DB 里存 sha256(token))。请立即复制保存到密码管理器 / .env。
一、匿名申请(7 天试用)
适合不想注册账号、只是想跑通对接的场景。
步骤
- 打开 https://www.mobiusquant.ai/zh/apply-token
- (可选)给 Token 起个名字方便日后审计
- 通过 Cloudflare Turnstile 人机验证
- 点击「申请 Token」
- 立即复制返回的
mq_xxx明文
注意
- 关闭页面后 Token 不可找回 —— 必须立即复制
- 7 天到期后会自动失效,过期请求返回
401 invalid, expired or revoked token - 同一邮箱 / IP 没有数量限制,过期或丢了重新申请即可
- 申请页有 Cloudflare 人机验证,机器化批量申请被拦
二、登录申请(永久)
适合长期生产接入。登录后 Token 永久有效,且能在「使用记录」抽屉里看到调用明细。
步骤
- 打开 https://www.mobiusquant.ai/zh/account
- 用 Telegram 登录(或邮箱 / 邮箱+Telegram 绑定)
- 进入「API Tokens」区块,点击「新建 Token」
- 给 Token 起个名字(必填,比如「production-2026」),提交
- 立即复制弹窗里的
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,出问题影响面小