接口概览

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

官方生产 Base URL
HTTPS https://www.quantdb.cn 复制
Prefix /api/v1
Format application/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 小时有效)。

请求参数

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

请求示例

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_idstring必填大分类 ID(1-6)
sub_categorystring必填子分类名,如 daily_forward
symbolstring可选股票代码(如 600519.SH)
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 按日分区数据集(日线、估值、技术指标、因子、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_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")

常用方法

方法名模块分类功能说明与工作机制
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 usage CLI 改为分行展示套餐 / 流量包 / 合计的已用、总额与剩余
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服务不可用对象存储/邮件未配置