接口概览

QuantDB 提供 RESTful API,支持 JWT Token(桌面客户端)和 X-API-Key(量化脚本)两种鉴权方式。所有 API 均挂载在 /api/v1 下,返回 JSON 格式。

官方生产 Base URL: https://quantdb.quantmind.cloud   |   Content-Type: application/json

分类一览

分类端点鉴权
健康GET /health公开
认证POST /auth/login公开
账户GET /auth/me, GET /auth/usage, GET /auth/api-keys, POST /auth/api-keys, DELETE /auth/api-keys/:id需鉴权
数据GET /data/stock-list, GET /data/calendar, GET /data/meta, GET /data/preview需鉴权
下载GET /data/download, GET /data/download/manifest需鉴权
发布GET /data/releases需鉴权
订阅GET /subscription/plans, POST /subscription/orders, GET /subscription/orders/:idplans 公开,其余需鉴权
版本GET /api/v1/version公开

鉴权方式

JWT Bearer Token

桌面客户端或交互式使用,Token 24 小时过期。

Authorization: Bearer eyJhbGciOiJIUzI1NiIs... 📋 复制 Header

X-API-Key

量化脚本或自动化场景,长期有效。

X-API-Key: qdb_abc123def456... 📋 复制 Header

响应格式

成功返回 HTTP 200,数据放在 datafiles 字段;失败返回对应 HTTP 状态码与 detail 错误描述。

{
  "detail": "错误描述信息(有错误时)"
}

认证接口

POST /api/v1/auth/login 60次/分
用户名或邮箱登录,返回 JWT Token(24 小时有效)。

请求参数

字段类型说明
usernamestring用户名或邮箱
passwordstring密码

请求示例

curl -X POST https://quantdb.quantmind.cloud/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://quantdb.quantmind.cloud/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://quantdb.quantmind.cloud/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://quantdb.quantmind.cloud/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://quantdb.quantmind.cloud/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_idstring大分类 ID(1-6)
sub_categorystring子分类名,如 daily_forward
symbolstring股票代码
limitint返回行数,默认 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 数据集(日线、估值、技术指标、因子等)在 COS 上为纯 V2 存储,按日分区查询效率最优;V1 数据集(分钟线、Tick、财务等)仅提供逐股票文件。下载频率不限流。免费注册用户获赠 500MB 一次性体验流量,可下载 K线/Tick/财务等全部分类;模型训练数据集(第 6 大类)仅限订阅用户,免费用户访问返回 HTTP 403。订阅用户含 30GB/月,超出按 ¥1/GB 从账户余额扣减。
CDN 直连:服务端预扣流量成功后返回 302 重定向至一次性令牌中转端点,验证令牌后再 302 至 CDN 签名 URL。令牌一次性消费,防止签名 URL 被重复使用或分享。SDK 自动处理两跳重定向;直接调用 API 时请勿将 X-API-Key 透传至 CDN 域。
计费规则:两阶段事务 — 传输成功才扣费,中途断开自动回滚。携带匹配的 If-None-Match 时返回 HTTP 304,不下载正文、不扣流量。配额或余额不足返回 HTTP 402。
curl -OJ "https://quantdb.quantmind.cloud/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次/分
获取分类在 COS 上的文件清单(含 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_releasestring游标:只返回此 ID 之后的 release
datasetsstring逗号分隔的数据集名,如 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_idstring套餐 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")

常用方法

方法分类说明
get_usage()账户查询流量用量、余额、剩余额度
query_kline()数据查询始终优先 V2 按日分区;有范围且覆盖不完整时回退 V1(消耗流量)
query_tick()数据查询下载 Tick Parquet 切片后客户端解析(消耗流量)
query_stock_list()元数据股票列表模糊搜索(不计流量)
query_calendar()元数据交易日历查询(不计流量)
query_manifest()批量下载COS 文件清单
preview_as_df()预览预览 Parquet 尾部数据
download_file()下载流式下载 Parquet 到本地
load_as_df()下载远端 Parquet 直读 DataFrame
query_local()本地查询DuckDB SQL 查询已下载 Parquet
sync_dataset()增量同步按 release cursor 原子同步 V2 daily/patch,缺 V2 时回退 V1

完整 SDK 文档请查看 Python SDK 文档

更新日志

SDK v0.2.10 2026-08-06 当前版本
  • 规范对齐与稳定性增强:与 QuantDB 0.7.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_tradingfeatures_dailyl1_factorsl2_factors 等 11 个纯 V2 数据集在 COS 上已无 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 响应中的 COS ETag 回填至 CDN 响应,保证进程内 ETag 缓存与 If-None-Match 304 逻辑一致
  • [后端安全] 一次性下载令牌:302 模式改为两跳(令牌中转),防止签名 URL 被重复使用或分享
  • [后端安全] 移除 ?direct=1 请求级覆盖,用户无法强制走 302 模式
  • [数据架构] COS V2 数据集全面清理 V1 残留文件(~1.8 万对象),11 个 V2 数据集均为纯 V2 存储,ListObjects 分页效率提升 3-5 倍
  • [数据架构] L1 日频因子(l1_factors)V2 全量上线:2565 个交易日分区(2016-01-04 ~ 至今),支持按日范围高效查询
  • [数据架构] L2 高频因子(l2_factors)V2 上线:34 个交易日分区(2026-01-05 ~ 2026-02-27)
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 文件或 COS 对象不存在
409冲突用户名/邮箱已注册、API Key 已存在
429限流请求频率超限
500服务端错误内部错误
503服务不可用COS/邮件未配置