接口概览
QuantDB 提供 RESTful API,支持 JWT Token(桌面客户端)和 X-API-Key(量化脚本)两种鉴权方式。所有 API 均挂载在 /api/v1 下,返回 JSON 格式。
分类一览
| 分类模块 | 端点路径 | 鉴权要求 | 功能说明 |
|---|---|---|---|
| 健康状态 |
GET
/health
|
公开 | 网关可用性与健康检查 |
| 认证鉴权 |
POST
/auth/login
|
公开 | 用户登录获取 24h JWT Bearer Token |
| 账户管理 |
GET
/auth/me
GET/auth/usage
GET/auth/api-keys
POST/auth/api-keys
DELETE/auth/api-keys/:id
|
需鉴权 | 个人资料、用量余额及 API Key 管理 |
| 基础数据 |
GET
/data/stock-list
GET/data/calendar
GET/data/meta
GET/data/preview
|
需鉴权 | 股票列表、交易日历与 Parquet 尾部免流量预览 |
| 数据下载 |
GET
/data/download
GET/data/download/manifest
|
需鉴权 | CDN 直连高速下载与全量文件清单 |
| 发布清单 |
GET
/data/releases
|
需鉴权 | 增量同步 Release Cursor 差异包索引 |
| 订阅支付 |
GET
/subscription/plans
POST/subscription/orders
GET/subscription/orders/:id
|
部分公开 | 套餐公开查询,下单与订单需鉴权 |
| 引擎版本 |
GET
/api/v1/version
|
公开 | 客户端最新版本号与自动升级校验 |
鉴权方式
JWT Bearer Token
桌面客户端或交互式使用,Token 24 小时过期。
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
X-API-Key
量化脚本或自动化场景,长期有效。
X-API-Key: qdb_abc123def456...
响应格式
成功返回 HTTP 200,数据放在 data 或 files 字段;失败返回对应 HTTP 状态码与 detail 错误描述。
{
"detail": "错误描述信息(有错误时)"
}
认证接口
POST
/api/v1/auth/login
60次/分
▶
用户名或邮箱登录,返回 JWT Token(24 小时有效)。
请求参数
| 字段名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
| username | string | 必填 | 用户名或邮箱 |
| password | string | 必填 | 用户密码 |
请求示例
curl -X POST https://www.quantdb.cn/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"username": "your_username", "password": "your_password"}'
响应示例
{
"access_token": "eyJhbGciOiJIUzI1NiIs...",
"token_type": "bearer"
}
账户管理
查询用量、余额、管理 API Key。支持 Bearer Token 或 X-API-Key。
GET
/api/v1/auth/me
60次/分
▶
获取当前用户信息及流量使用情况。
curl https://www.quantdb.cn/api/v1/auth/me \ -H "Authorization: Bearer <jwt_token>"
{
"username": "trader01",
"email": "trader@example.com",
"id": 2,
"used_traffic": 1048576,
"traffic_limit": 104857600,
"credit_limit": 0,
"purchased_traffic": 0,
"balance_yuan": 0,
"subscription": { "status": "free", "plan_id": "" }
}
GET
/api/v1/auth/usage
需鉴权
▶
获取当前用户流量用量与余额(与 /auth/balance 等价)。
curl https://www.quantdb.cn/api/v1/auth/usage \ -H "Authorization: Bearer <jwt_token>"
{
"used_traffic": 1048576,
"traffic_limit": 104857600,
"credit_limit": 0,
"purchased_traffic": 0,
"balance_yuan": 0,
"subscription": { "status": "free", "plan_id": "" }
}
GET
/api/v1/auth/api-keys
需鉴权
▶
列出当前用户的 API Key 列表(仅展示前缀,明文仅创建时返回一次)。
curl https://www.quantdb.cn/api/v1/auth/api-keys \ -H "Authorization: Bearer <jwt_token>"
POST
/api/v1/auth/api-keys
需鉴权
▶
创建新的 API Key(免费用户限 1 个,订阅用户按套餐上限)。
注意:API Key 创建后仅在返回时明文展示一次,请立即保存。
curl -X POST https://www.quantdb.cn/api/v1/auth/api-keys \
-H "Authorization: Bearer <jwt_token>" \
-H "Content-Type: application/json" \
-d '{"description": "量化回测脚本"}'
DELETE
/api/v1/auth/api-keys/:id
需鉴权
▶
按 id 撤销指定 API Key。
元数据查询
股票列表、交易日历、数据预览等元数据接口:网关直读对象存储 Parquet 返回 JSON,仅登录 + 限流,不计流量,免费用户可用。业务数据(K 线 / Tick / 财务)的查询通过下载 Parquet 切片实现,见下方"数据预览与下载"。
GET
/api/v1/data/stock-list
30次/分·用户
▶
A 股基础信息:代码、名称、上市日、ST/退市状态。
df = client.query_stock_list(keyword="茅台", limit=5) print(df)
GET
/api/v1/data/calendar
30次/分·用户
▶
A 股交易日历,返回交易日及是否开市标记。
df = client.query_calendar(start_date="2026-01-01", end_date="2026-12-31")
数据预览与下载
预览(免费)和下载(消耗流量)Parquet 原始数据文件。
GET
/api/v1/data/preview
60次/分
▶
预览本地 Parquet 尾部数据,不计流量费。
| 参数名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
| category_id | string | 必填 | 大分类 ID(1-6) |
| sub_category | string | 必填 | 子分类名,如 daily_forward |
| symbol | string | 可选 | 股票代码(如 600519.SH) |
| limit | int | 可选 | 返回行数,默认 30 |
df = client.preview_as_df("1", "daily_forward", symbol="600519.SH", limit=5)
GET
/api/v1/data/download
30次/分
▶
流式下载原始 Parquet 文件。支持
layout=auto|v1|v2;可用 object_key 下载 release 中的 V2 patch(必须属于所选数据集)。V2 按日分区数据集(日线、估值、技术指标、因子、1 分钟/5 分钟 K 线、Tick、ETF 日线等)在对象存储上为纯 V2 存储,按日分区查询效率最优;V1 逐股票文件(财务、股本等低频季报)按标的单独存储。下载频率不限流。免费注册用户获赠 1GB 一次性体验流量,可下载 K线/Tick/财务等全部分类;模型训练数据集(第 6 大类)仅限订阅用户,免费用户访问返回 HTTP 403。订阅用户含 50GB/月,超出按 ¥1/GB 从订购流量包中扣减。
CDN 直连:服务端预扣流量成功后返回 302 重定向至一次性令牌中转端点,验证令牌后再 302 至 CDN 签名 URL。令牌一次性消费,防止签名 URL 被重复使用或分享。SDK 自动处理两跳重定向;直接调用 API 时请勿将
X-API-Key 透传至 CDN 域。
计费规则:两阶段事务 — 传输成功才扣费,中途断开自动回滚。携带匹配的
If-None-Match 时返回 HTTP 304,不下载正文、不扣流量。配额或余额不足返回 HTTP 402。
curl -OJ "https://www.quantdb.cn/api/v1/data/download?category_id=1&sub_category=daily_forward&symbol=600519.SH" \ -H "X-API-Key: qdb_abc..."
Python SDK
# 下载到本地
path = client.download_file("1", "daily_forward", symbol="600519.SH")
# 直接加载到 DataFrame(不落盘)
df = client.load_as_df("1", "daily_forward", symbol="600519.SH")
GET
/api/v1/data/download/manifest
10次/分
▶
获取分类在对象存储上的文件清单(含 layout、relative_path、ETag 与大小),用于批量下载和 V1/V2 选择。不计费。
files = client.query_manifest("1", "daily_forward", layout="v2")
print(f"共 {len(files)} 个文件")
GET
/api/v1/version
公开
▶
客户端版本检查,返回最新版本号和下载地址。
发布清单
V2 增量同步专用:按 release_id 获取增量发布包(含 daily 切片与 patch),SDK 据此做原子同步。
GET
/api/v1/data/releases
需鉴权
▶
获取 after_release 之后的增量发布包清单,可按 datasets 过滤。
| 参数名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
| after_release | string | 可选 | 游标:只返回此 ID 之后的 release |
| datasets | string | 可选 | 逗号分隔的数据集名,如 kline,financial |
result = client.sync_dataset("daily_forward", save_dir="D:/quantdb-data")
订阅与支付
套餐查询、下单与支付宝回调。
GET
/api/v1/subscription/plans
公开
▶
获取可用订阅套餐列表(名称、价格、流量额度、API Key 上限等)。
POST
/api/v1/subscription/orders
需鉴权
▶
创建支付订单,返回支付宝付款链接。
| 字段名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
| plan_id | string | 必填 | 套餐 ID,如 monthly |
GET
/api/v1/subscription/orders/:id
需鉴权
▶
查询当前用户的订单详情。
Python SDK 快速入门
quantdb-sdk 是官方 Python SDK,一行代码即可调用全部接口。
安装:
pip install quantdb-sdk(依赖 requests、pandas、httpx、duckdb)
初始化
from quantdb_sdk import QuantDBClient # 方式一:API Key(推荐) client = QuantDBClient(api_key="qdb_abc123...") # 方式二:用户名密码登录 client = QuantDBClient(username="user", password="pass")
常用方法
| 方法名 | 模块分类 | 功能说明与工作机制 |
|---|---|---|
client.data | 统一入口 | 只凭数据集名跨 6 大分类取数(在线 + 本地零流量),自动解析分类并路由 |
get_usage() | 账户 | 查询流量用量、余额、剩余额度与订阅状态 |
query_kline() | 数据查询 | 始终优先 V2 按日分区;有范围且覆盖不完整时回退 V1(消耗流量) |
query_tick() | 数据查询 | 下载 Tick Parquet 切片后客户端自动解析为 DataFrame(消耗流量) |
query_etf_kline() | 数据查询 | 查询 ETF 日 K 线(510300.SH 等),优先 V2 按日分区(消耗流量) |
query_stock_list() | 元数据 | 股票列表模糊搜索与上市退市状态查询(免计流量) |
query_calendar() | 元数据 | A 股全量交易日历与休市标记查询(免计流量) |
query_manifest() | 批量下载 | 获取对象存储文件清单与 ETag 散列索引 |
preview_as_df() | 预览 | 免流量预览指定数据集尾部前 N 行 |
download_file() | 下载 | 多线程并发流式下载 Parquet 到本地指定目录 |
load_as_df() | 下载 | 远端 Parquet 直读内存并转换为 Pandas DataFrame |
query_local() | 本地查询 | 基于内置 DuckDB 对本地 Parquet 执行高性能 SQL 查询 |
sync_dataset() | 增量同步 | 按 release cursor 原子同步 V2 daily/patch,缺 V2 时自动回退 V1 |
完整 SDK 文档请查看 Python SDK 文档。
更新日志
SDK v0.4.4
2026-10-11
当前版本
- 修复
get_usage()/a_get_usage()漏算流量包额度:旧口径只算traffic_limit + credit_limit + purchased_traffic - used_traffic,完全忽略流量包,导致持有流量包的用户剩余流量被低估、is_active误判 - 新增额度明细字段:合计
total_gb/used_gb/remaining_gb,套餐额度plan_total_gb/plan_used_gb/plan_remaining_gb,流量包额度package_total_gb/package_used_gb/package_remaining_gb(原字段全部保留) quantdb usageCLI 改为分行展示套餐 / 流量包 / 合计的已用、总额与剩余
SDK v0.4.3
2026-10-05
per_share数据集更名:中文名由「每股指标(补充)」改为「财务指标(TTM)」,描述与关键词同步更新(每股/eps→财务/ttm)- 该表实际为 TTM 口径财务指标补充表(营收 / 归母净利 / 扣非净利 / 经营现金流等);
per_share标识符不变,client.data用法不受影响
SDK v0.4.2
2026-10-05
- 新增数据集
per_share(每股指标补充表,分类 3):补登记为第 30 个数据集,client.data/sync_dataset()/mount()均可直接按per_share使用 - 物理形态为 V1 逐股票文件
3_financial_data/per_share/{Symbol}.parquet(部分股票为空),读取 / 查询需提供symbol - 与 MCP catalog、后端
subCategoryMapping、前端分类表同步对齐(均为 30 项)
SDK v0.4.1
2026-10-05
- 本地零流量读取提速(
client.data.read_local/read):改用 DuckDB 对精确分区文件列表做一次read_parquet,symbol/ 日期区间 / 列裁剪全部下推到 SQL;实测(120 分区 × 1000 标的)单标的全历史 0.62s → 0.22s,带columns列裁剪 → 0.07s - 依赖下界:
duckdb由>=0.8.0提升到>=1.0.0(read_parquet(filename=true)+* EXCLUDE语法;0.8.x 在部分环境导入即崩溃) - 修复:
read_local(columns=[...])未下推symbol过滤,columns不含symbol时会误返回全市场行
SDK v0.4.0
2026-10-05
- 统一数据入口
client.data(同步DataHub/ 异步AsyncDataHub):只凭 dataset 名即可跨 6 大分类目录取数,无需再手填category_id + sub_category,SDK 侧自动解析分类并路由,零后端改动 - 发现与本地零流量读取:
datasets()列出 29 个数据集,info()叠加云端元数据;local_files()/local_path()/read_local()/read()支持可配置root的本地零流量读取,V2 / tick 自动注入trade_date - 在线查询与同步映射:
query()按数据集自动路由(日线 / ETF / Tick / 通用 V2 / V1),并映射preview/load/download/sync/mount;异步方法统一a_前缀 - 新增 CLI
quantdb datasets [name]:列出全部数据集目录或查看某数据集详情(无需 API Key)
SDK v0.3.5
2026-09-26
- 分区大小查询
query_partition_size()(含异步a_query_partition_size()):返回各子分类的分区数file_count、总字节file_size与换算列file_size_gb,用于估算下载流量与数据占用;缺省返回全部子分类,可传sub_category单查 query_meta()/a_query_meta()新增sub_category参数:data_meta 现已包含file_size(分区总字节),可按子分类精准查询各数据集日期范围/行数/文件数/文件大小
SDK v0.3.4
2026-09-04
- ETF 日 K 线查询
query_etf_kline()(含异步a_query_etf_kline()):查询分类 4 的etf_kline(V2 全市场按日分区,symbol 形如 510300.SH),自动优先 V2、覆盖不完整时回退 V1 sync_dataset("etf_kline")支持:增量同步 ETF 日线,此前会报「不支持同步的数据集」
SDK v0.3.3
2026-08-29
- 本地完整性扫描
scan_local_directory()(scan_local()/a_scan_local()方法):扫描本地数据目录,流式计算每个文件的 MD5 与 COS 形态 ETag,用于发布前/对账的独立指纹核对,全程本地 IO 不消耗流量 - 支持递归/后缀过滤/进度回调,返回汇总与逐文件清单;读取失败文件登记到
errors不中断扫描
SDK v0.3.2
2026-08-27
- 同步 304 权威对账:
sync_dataset()对已存在本地文件先发If-None-Match(服务端在预扣/直连前校验),命中 304 免流量只登记跳过,修复"本地有文件但 sqlite 记录/指纹对不上"时的整块重下 - 判重主键改为 sha256:不再依赖 release 对象的 etag 字段;下载后落库真实 COS ETag 供后续对账/304 复用
SDK v0.3.1
2026-08-15
- CLI 目录规范命令:新增
quantdb layout,终端直接打印本地数据目录规范(无需 API Key) - CLI 帮助增强:
--help提示演示脚本;sync打印matched本地对账跳过数
SDK v0.3.0
2026-08-15
- 目录规范模块:新增
quantdb_sdk.layout(CATEGORY_DIRS / dataset_dir / dataset_layout / local_relative_path / data_root),本地落地目录与平台统一约定一致,根目录可配置(QUANTDB_DATA_DIR) - 演示脚本包:随 wheel 发布 6 个
quantdb_sdk.examples示例 - 同步磁盘对账:
sync_dataset()目标文件已存在且本地 MD5 == COS ETag 时跳过下载,返回matched字段;数据根目录可自由指向,不会重复下载
SDK v0.2.10
2026-08-06
- 规范对齐与稳定性增强:与 QuantDB 1.0.0 正式版规范全面对齐,优化 ETag 缓存比对与数据传输机制
SDK v0.2.9
2026-07-30
- CDN 直连重试路径修复:0.2.8 引入的重试逻辑缺失
import time/import asyncio,触发重试时抛NameError,已补齐导入
SDK v0.2.8
2026-07-30
- CDN 直连 302 相对 URL 修复:服务端 CDN 直连模式 Stage 1 返回相对 URL(
/api/v1/data/cdn-bridge?token=xxx),此前直接作为请求 URL 导致MissingSchema/UnsupportedProtocol,CDN 直连下载完全不可用;现在自动拼接api_host构造完整 URL - CDN 直连请求带重试:cdn-bridge 与 CDN 签名 URL 两跳请求均带 2 次重试(指数退避 1s/2s),网络抖动不再中断整个
sync_dataset - 302 重定向链路手动跟随:统一用重试循环跟随最多 3 跳(
/download→/cdn-bridge→ CDN 签名 URL),ETag 逐跳透传
SDK v0.2.7
2026-07-29
- V1 回退对纯 V2 数据集失效修复:
query_kline/a_query_kline无日期范围时不再默认走 V1。margin_trading、features_daily、l1_factors、l2_factors等 11 个纯 V2 数据集在对象存储上已无 V1 逐股票文件,V1 回退会 404。现在无范围时也走 V2 manifest 路径(全量下载所有分区),仅在有日期范围时才做日历完整性校验 - 异步客户端时区处理对齐:
AsyncQuantDBClient._normalise_kline补齐tz_convert逻辑,与同步客户端行为一致
SDK v0.2.6
2026-07-27
- 适配服务端 CDN 直连下载(302 跳转):修复异步客户端在 CDN 直连模式下下载/同步接口失效的问题
- 凭证保护:同步与异步客户端统一改为手动处理 302 + 无鉴权头裸请求直连 CDN,API Key 不会泄露给 CDN 域
- 302 响应中的对象存储 ETag 回填至 CDN 响应,保证进程内 ETag 缓存与 If-None-Match 304 逻辑一致
- [后端安全] 一次性下载令牌:302 模式改为两跳(令牌中转),防止签名 URL 被重复使用或分享
- [后端安全] 移除 ?direct=1 请求级覆盖,用户无法强制走 302 模式
- [数据架构] 对象存储 V2 数据集全面清理 V1 残留文件(~1.8 万对象),11 个 V2 数据集均为纯 V2 存储,ListObjects 分页效率提升 3-5 倍
- [数据架构] L1 日频因子(l1_factors)V2 全量上线:覆盖 2016-01-04 至今全历史,支持按日范围高效查询与每日增量更新
- [数据架构] L2 高频因子(l2_factors)V2 上线:覆盖 2023 年至今全市场高频微观结构因子
SDK v0.2.5
2026-07-27
- 异步客户端完善:全量 a_ 前缀方法、httpx 连接池复用、Semaphore 并发控制
- CLI 增强:quantdb check / usage / --version 子命令
- 下载工具函数重构:SHA-256 校验、原子 .part 临时文件、断点重试
- V1/V2 Manifest 回退与 release patch 下载兼容
- 批量下载建议 8 工作线程并发,每个 worker 使用独立客户端实例
SDK v0.2.4
2026-07-26
- V1 股票切片与 V2 日切片兼容;日期范围优先 V2,缺覆盖整次回退 V1
- release cursor 增量同步 V2 daily / patch,SHA-256 校验与原子落盘
- 下载 ETag 条件请求,HTTP 304 不传输正文、不扣流量
- API Key 全生命周期管理
- 滑动窗口限流
- Python SDK(同步 + 异步)
- Electron 桌面客户端
HTTP 状态码速查
| 码 | 含义 | 说明 |
|---|---|---|
| 200 | 成功 | 请求正常处理 |
| 400 | 参数错误 | 缺少必填参数或格式不正确 |
| 401 | 未认证 | JWT 过期 / API Key 无效 |
| 402 | 余额不足 | 下载时账户余额不足 |
| 403 | 无权限 | 邮箱未验证 / 账户禁用 / 免费用户访问模型训练数据集(第 6 大类) |
| 404 | 数据不存在 | Parquet 文件或对象存储对象不存在 |
| 409 | 冲突 | 用户名/邮箱已注册、API Key 已存在 |
| 429 | 限流 | 请求频率超限 |
| 500 | 服务端错误 | 内部错误 |
| 503 | 服务不可用 | 对象存储/邮件未配置 |