一、概述
KData API 提供贵金属与外汇市场的实时报价和历史 K 线数据。所有接口通过 HTTP/HTTPS 访问,返回统一的 JSON 响应格式。
Base URL:
数据格式: JSON (UTF-8)
字符编码: 所有请求和响应均使用 UTF-8
时间戳: 所有时间字段均为 UTC,格式 ISO-8601
http://127.0.0.1:8000(本地部署)数据格式: JSON (UTF-8)
字符编码: 所有请求和响应均使用 UTF-8
时间戳: 所有时间字段均为 UTC,格式 ISO-8601
支持品种
| 代码 | 名称 | 类别 |
|---|---|---|
| XAU | 现货黄金 XAU/USD | 贵金属 |
| XAG | 现货白银 XAG/USD | 贵金属 |
| EURUSD | 欧元 / 美元 | 外汇 |
| GBPUSD | 英镑 / 美元 | 外汇 |
| USDJPY | 美元 / 日元 | 外汇 |
| AUDUSD | 澳元 / 美元 | 外汇 |
二、鉴权方式
使用 API Key 进行鉴权。每个用户拥有独立的 Key,可通过以下两种方式传递:
- HTTP Header(推荐):
X-API-Key: your-api-key - Query 参数:
?api_key=your-api-key
⚠️ API Key 是敏感信息,请勿在客户端代码(如前端 JavaScript)中直接暴露。建议在服务端转发。
获取 API Key
联系客服(见文末联系方式),提供使用场景和预估调用量,我们会为你生成专属 API Key 并设置配额。
三、接口列表
| 方法 | 路径 | 说明 | 鉴权 |
|---|---|---|---|
| GET | /api/v1/health | 健康检查 | 无需 |
| GET | /api/v1/symbols | 品种列表 | 需要 |
| GET | /api/v1/quote | 实时报价 | 需要 |
| GET | /api/v1/kline | K 线数据 | 需要 |
四、实时报价接口
获取指定品种的最新实时报价。
请求
GET /api/v1/quote?symbol=XAU
Header: X-API-Key: your-key
Header: X-API-Key: your-key
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
symbol | string | 是 | 品种代码,如 XAU、EURUSD |
响应示例
{
"code": 0,
"message": "ok",
"data": {
"symbol": "XAU",
"bid": 4073.13,
"ask": 4073.13,
"last": 4073.13,
"high": 4079.65,
"low": 4030.77,
"ts": "2026-07-03T06:35:00+00:00"
},
"server_ts": 1782981324096
}
"code": 0,
"message": "ok",
"data": {
"symbol": "XAU",
"bid": 4073.13,
"ask": 4073.13,
"last": 4073.13,
"high": 4079.65,
"low": 4030.77,
"ts": "2026-07-03T06:35:00+00:00"
},
"server_ts": 1782981324096
}
响应字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
symbol | string | 品种代码 |
bid | float | 买入价 |
ask | float | 卖出价 |
last | float | 最新成交价 |
high | float | 当日最高价 |
low | float | 当日最低价 |
ts | datetime | 报价时间 (UTC) |
五、K 线数据接口
获取指定品种的历史 K 线数据,支持按时间范围过滤。
请求
GET /api/v1/kline?symbol=XAU&period=1m&limit=200&from=2026-07-01T00:00:00Z&to=2026-07-02T23:59:59Z
Header: X-API-Key: your-key
Header: X-API-Key: your-key
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
symbol | string | 是 | 品种代码 |
period | string | 是 | 周期:1m / 5m / 15m / 60m / 1d |
limit | int | 否 | 返回条数,1~1000,默认 200 |
from | datetime | 否 | 起始时间(ISO-8601),如 2026-07-01T00:00:00Z |
to | datetime | 否 | 结束时间 |
周期说明:
•
•
•
•
1m — 1 分钟 K 线(直接从东方财富采集)•
5m / 15m / 60m — 从 1 分钟 K 线合成,确保 bar 对齐•
1d — 日线
响应示例
{
"code": 0,
"message": "ok",
"data": {
"symbol": "XAU",
"period": "1m",
"count": 3,
"bars": [
{ "ts": "2026-07-03 02:17:00", "open": 4180.55, "high": 4180.67, "low": 4179.57, "close": 4180.12, "volume": 0 },
...
]
},
"server_ts": 1782981324096
}
"code": 0,
"message": "ok",
"data": {
"symbol": "XAU",
"period": "1m",
"count": 3,
"bars": [
{ "ts": "2026-07-03 02:17:00", "open": 4180.55, "high": 4180.67, "low": 4179.57, "close": 4180.12, "volume": 0 },
...
]
},
"server_ts": 1782981324096
}
OHLCV 字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
ts | datetime | K 线起始时间 (UTC) |
open | float | 开盘价 |
high | float | 最高价 |
low | float | 最低价 |
close | float | 收盘价 |
volume | float | 成交量 |
六、品种列表接口
获取当前 API 支持的所有品种清单。
GET /api/v1/symbols
Header: X-API-Key: your-key
Header: X-API-Key: your-key
响应 data 为数组,每个元素包含 code、name、category。
七、健康检查
无需鉴权,用于监控 API 是否在线。
GET /api/v1/health
返回:{"code":0,"message":"ok","data":{"ok":true},"server_ts":...}
八、限流说明
每个 API Key 有三层独立配额,任一超限即返回 429:
| 层级 | 周期 | 免费版默认配额 | 重置方式 |
|---|---|---|---|
| 分钟 | 60 秒滑动窗口 | 60 次/分钟 | 自动 |
| 天 | 自然日(UTC) | 10,000 次/天 | 自动 |
| 月 | 自然月 | 200,000 次/月 | 自动 |
超限响应示例:
HTTP/1.1 429 Too Many Requests
Retry-After: 65
X-RateLimit-Limit-Minute: 60
X-RateLimit-Limit-Day: 10000
X-RateLimit-Limit-Month: 200000
{
"code": 42901,
"message": "rate_limit_exceeded:minute",
"data": { "limit": 60, "window": "minute" },
"server_ts": ...
}
Retry-After: 65
X-RateLimit-Limit-Minute: 60
X-RateLimit-Limit-Day: 10000
X-RateLimit-Limit-Month: 200000
{
"code": 42901,
"message": "rate_limit_exceeded:minute",
"data": { "limit": 60, "window": "minute" },
"server_ts": ...
}
建议:在客户端实现退避策略(exponential backoff)。当收到 429 后,等待
Retry-After 头指定的秒数再重试。
九、错误码表
| HTTP 状态码 | code | message | 说明 |
|---|---|---|---|
| 200 | 0 | ok | 成功 |
| 401 | 40101 | missing_api_key | 未提供 API Key |
| 401 | 40102 | invalid_api_key | API Key 无效或已过期 |
| 404 | 40401 | quote not available yet | 报价数据暂不可用(数据源延迟) |
| 422 | - | validation error | 请求参数校验失败(具体见响应 detail) |
| 429 | 42901 | rate_limit_exceeded:xxx | 调用频率超限 |
十、通用响应格式
所有接口(包括错误)使用同一响应壳:
{
"code": 0, // 业务码:0=成功,非0=错误
"message": "ok", // 描述信息
"data": { ... }, // 业务数据
"server_ts": 1782981324096 // 服务器时间戳(毫秒)
}
"code": 0, // 业务码:0=成功,非0=错误
"message": "ok", // 描述信息
"data": { ... }, // 业务数据
"server_ts": 1782981324096 // 服务器时间戳(毫秒)
}
十一、代码示例
cURL
# 获取黄金报价
curl.exe -H "X-API-Key: your-key" \
"http://127.0.0.1:8000/api/v1/quote?symbol=XAU"
# 获取欧元/美元 1分钟K线
curl.exe -H "X-API-Key: your-key" \
"http://127.0.0.1:8000/api/v1/kline?symbol=EURUSD&period=1m&limit=50"
curl.exe -H "X-API-Key: your-key" \
"http://127.0.0.1:8000/api/v1/quote?symbol=XAU"
# 获取欧元/美元 1分钟K线
curl.exe -H "X-API-Key: your-key" \
"http://127.0.0.1:8000/api/v1/kline?symbol=EURUSD&period=1m&limit=50"
Python (requests)
import requests
KEY = "your-key"
headers = {"X-API-Key": KEY}
# 报价
r = requests.get("http://127.0.0.1:8000/api/v1/quote",
params={"symbol": "XAU"}, headers=headers)
print(r.json()["data"]["last"])
# K 线
r = requests.get("http://127.0.0.1:8000/api/v1/kline",
params={"symbol": "EURUSD", "period": "1m", "limit": 100},
headers=headers)
bars = r.json()["data"]["bars"]
KEY = "your-key"
headers = {"X-API-Key": KEY}
# 报价
r = requests.get("http://127.0.0.1:8000/api/v1/quote",
params={"symbol": "XAU"}, headers=headers)
print(r.json()["data"]["last"])
# K 线
r = requests.get("http://127.0.0.1:8000/api/v1/kline",
params={"symbol": "EURUSD", "period": "1m", "limit": 100},
headers=headers)
bars = r.json()["data"]["bars"]
PHP (Guzzle)
$client = new \GuzzleHttp\Client([
'base_uri' => 'http://127.0.0.1:8000',
'headers' => ['X-API-Key' => 'your-key']
]);
$r = $client->get('/api/v1/quote', ['query' => ['symbol' => 'XAU']]);
$data = json_decode($r->getBody(), true);
echo $data['data']['last'];
'base_uri' => 'http://127.0.0.1:8000',
'headers' => ['X-API-Key' => 'your-key']
]);
$r = $client->get('/api/v1/quote', ['query' => ['symbol' => 'XAU']]);
$data = json_decode($r->getBody(), true);
echo $data['data']['last'];
JavaScript (fetch)
const KEY = 'your-key';
const res = await fetch(
'http://127.0.0.1:8000/api/v1/quote?symbol=XAU',
{ headers: { 'X-API-Key': KEY } }
);
const json = await res.json();
console.log(json.data.last);
const res = await fetch(
'http://127.0.0.1:8000/api/v1/quote?symbol=XAU',
{ headers: { 'X-API-Key': KEY } }
);
const json = await res.json();
console.log(json.data.last);
十二、支持与联系
获取 API Key、咨询专业版配额或定制开发需求,请通过以下方式联系我们: