开发者
构建数据 API
订阅构建数据产品、生成 API 密钥,即可以签名 URL parquet 形式获取每日更新的因子数据。REST 接口,Bearer 鉴权,无需 SDK。
快速开始
- 1
在 /lab/data 订阅产品 — 每个订阅都会授予您的密钥访问该产品数据的权限。
- 2
在账户页面生成 API 密钥。完整密钥仅显示一次,请妥善保存。
- 3
发起第一个请求 — manifest 端点是验证密钥与订阅是否生效的最省事方式:
curl -H "Authorization: Bearer $NUMINOR_KEY" \
https://api.numinor.io/v1/constructs/sam-amplifier/manifest鉴权
每个请求都以 Bearer token 形式发送密钥。一个密钥即可访问您订阅的所有产品(权限由您的有效订阅决定)。沙盒层密钥不提供 REST 原始导出 — 这是 API 层功能。
Authorization: Bearer nm_live_…核心概念
- 时点延迟
- API 层提供当前数据;沙盒内层延迟 30 天。每一行都明确标注时点(PIT),确保回测无前视偏差。
- 签名 URL
- 数据端点返回短时效签名 S3 URL(约 4 小时)。直接从 S3 下载 parquet — 该传输不计量、不限流。
- Parquet 格式
- 所有文件均为 Apache Parquet。可用 pyarrow、DuckDB 或 polars 读取 — 常见场景无需服务端查询端点。
- 速率限制
- 每个密钥每分钟最多 1000 次请求。超限返回 429 并附带 Retry-After 响应头。
端点参考
基础 URL: https://api.numinor.io/v1
GET
/constructs/{sku}/manifest产品的数据新鲜度、覆盖范围与签名 URL 有效期。
| 参数 | 位置 | 说明 |
|---|---|---|
| sku* | path | 产品标识,例如 sam-amplifier。 |
curl -H "Authorization: Bearer $NUMINOR_KEY" \
https://api.numinor.io/v1/constructs/sam-amplifier/manifest响应示例
{
"sku": "sam-amplifier-construct-v1",
"tier": "api",
"status": "green",
"latest_trade_date": "2026-06-18",
"signed_url_ttl_seconds": 14400,
"historical_coverage": {
"start": "2016-01-04",
"end": "2026-06-18"
}
}GET
/constructs/{sku}/day/{date}指向某一交易日分区的签名 URL。
| 参数 | 位置 | 说明 |
|---|---|---|
| sku* | path | 产品标识,例如 sam-amplifier。 |
| date* | path | 交易日,格式 YYYYMMDD 或 YYYY-MM-DD。 |
# get a signed URL for one trading day, then download the parquet
curl -H "Authorization: Bearer $NUMINOR_KEY" \
https://api.numinor.io/v1/constructs/sam-amplifier/day/20260515响应示例
{
"url": "https://numinor-construct-data.s3.ap-northeast-2.amazonaws.com/…&X-Amz-Signature=…",
"trade_date": "2026-05-15",
"expires_in": 14400,
"format": "parquet"
}GET
/constructs/{sku}/range日期区间(含端点)内每个已发布交易日的签名 URL。
| 参数 | 位置 | 说明 |
|---|---|---|
| sku* | path | 产品标识,例如 sam-amplifier。 |
| start* | query | 区间起始(含),YYYYMMDD。 |
| end* | query | 区间结束(含),YYYYMMDD。 |
curl -H "Authorization: Bearer $NUMINOR_KEY" \
"https://api.numinor.io/v1/constructs/sam-amplifier/range?start=20260501&end=20260531"响应示例
{
"sku": "sam-amplifier-construct-v1",
"tier": "api",
"count": 21,
"days": [
{
"trade_date": "2026-05-06",
"url": "https://…signed…"
}
],
"format": "parquet"
}GET
/constructs/{sku}/historical指向完整历史批量文件(2016 至今)的签名 URL。
| 参数 | 位置 | 说明 |
|---|---|---|
| sku* | path | 产品标识,例如 sam-amplifier。 |
curl -H "Authorization: Bearer $NUMINOR_KEY" \
https://api.numinor.io/v1/constructs/sam-amplifier/historical响应示例
{
"url": "https://…signed-bulk-file…",
"expires_in": 14400,
"format": "parquet"
}POST
/constructs/{sku}/query内联筛选查询 — 规划中(目前返回 501)。
| 参数 | 位置 | 说明 |
|---|---|---|
| sku* | path | 产品标识,例如 sam-amplifier。 |
# roadmap — returns 501 today
curl -X POST -H "Authorization: Bearer $NUMINOR_KEY" \
https://api.numinor.io/v1/constructs/sam-amplifier/query响应示例
{
"ok": false,
"error": "not_implemented",
"detail": "Roadmap — fetch signed URLs via /day or /range and read the parquet locally."
}错误码
| 状态 | 错误 | 含义 |
|---|---|---|
| 401 | missing_bearer_token · invalid_api_key | 缺少或无效的 API 密钥。 |
| 403 | not_subscribed · rest_requires_api_tier | 您的密钥没有该产品的 API 层订阅(或仅有沙盒层)。 |
| 404 | unknown_construct · no_partition | 未知产品,或该日期无已发布分区。 |
| 400 | bad_date · bad_range · missing_params | 日期或区间格式有误,或缺少查询参数。 |
| 413 | range_too_large | 区间跨越天数过多 — 请改用历史批量文件。 |
| 429 | rate_limited | 超出速率限制(1000/分钟)。请遵循 Retry-After 响应头。 |
| 501 | not_implemented | 该端点尚在规划中,暂未实现。 |