API REFERENCE

接口使用说明

快速开始

在个人中心创建 API Key。请求时优先将 Key 放入 X-Api-Key 请求头,不要把 Key 写进浏览器前端、公开仓库或截图。

基础地址:https://jinniu.ziyoutang.com。日期使用 YYYYMMDD,例如 20260805。
所有 API 的响应压缩:客户端请求头带 Accept-Encoding: gzip 时,服务端使用 gzip 压缩传输;未携带时按默认 JSON 返回。该请求头不是业务参数,不需要写入各接口的请求示例。

MCP 接入

支持无状态 Streamable HTTP MCP。将服务地址设为 https://jinniu.ziyoutang.com/mcp,并在请求头中使用 Authorization: Bearer YOUR_API_KEY;也兼容 X-Api-Key。

MCP 复用当前账号的数据权限。

复制给AI,一键添加MCP
复制后将 YOUR_API_KEY 替换为个人中心生成的Key。
请帮我添加并连接这个MCP服务:
名称:金牛行情数据
类型:Streamable HTTP
地址:https://jinniu.ziyoutang.com/mcp
鉴权:Authorization: Bearer YOUR_API_KEY

安装后请读取tools/list验证连接;如果不能自动添加,请告诉我配置入口。

连接验证

curl -X POST 'https://jinniu.ziyoutang.com/mcp' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"example","version":"1.0"}}}'

连接后通过 tools/list 获取当前工具及输入参数说明;通过 tools/call 查询数据。返回数据使用 data.fields + data.items 结构。

faq_search 可搜索已核验、可解释的FAQ,参数为 q(关键词,可省略)和 page(默认1),固定每页20条。未确认的问题不返回,查询不扣行情日额度;答案适用范围见返回的 scope,分页信息见 data.meta。已连接的AI如看不到新工具,请刷新工具列表或重新连接MCP。

调用规则

调用频率与并发

  • 历史、实时及 MCP 调用均为每账户每分钟最多 60 次。
  • 同一 API Key 最多同时发起 2 个并发请求;达到上限时服务端会返回 429 和 Retry-After: 2,请等待已有请求完成后再继续下一批。
  • 账户数据权限到期、权限关闭或超限时,接口会拒绝请求。删除或重新生成 API Key 不会重置账户调用次数。

单次返回与批量查询

适用接口单次返回上限查询方式
股票、ETF、交易所指数历史日线;股票复权因子;股票、ETF、交易所指数、期货及期权历史分钟线;期权日线5000 条按代码、日期或时间区间分批查询。
期货合约信息5000 条按交易所、产品筛选,使用 offset 分页。
期货日线、主力映射、持仓排名2000 条按合约、日期或 offset 分页。
期货复权因子、复权日线3000 条主力合约换月复权。
期货仓单日报1000 条按产品、日期或 offset 分页。
申万指数历史分钟线5000 条单个指数代码,按时间区间分批查询。
股票基础信息:股票列表、交易日历、ST 历史、名称变更、公司主体、北交所代码映射;期权合约信息5,000 条通过各接口支持的代码、日期等条件筛选。
申万指数基本信息、行业分类、行业成分及历史成员;ETF 复权因子2,000 条通过代码、分类、日期等条件筛选。
申万指数历史日线4,000 条按指数代码与日期区间查询。
股票、ETF、交易所指数、期货实时分钟线;股票及 ETF 实时日线;申万指数实时行情1,000 条每次最多查询 100 个代码或合约。
股票日内分钟线;ETF、交易所指数及期货盘中分钟线1,000 条每次仅查询 1 个代码或合约。
  • 分钟线不限制固定自然日跨度;超过单次返回量时请按时间范围分批查询。
  • 所有 API 支持可选 gzip 响应压缩:带 Accept-Encoding: gzip 时返回压缩内容;不带时按默认 JSON 返回。常见浏览器和 HTTP 客户端会自动协商并解压。
  • 请妥善保管 API Key。发现泄露时,在个人中心轮换 Key,旧 Key 会立即失效。
  • 数据仅限研究、学习和个人使用,使用者应自行核验并遵守适用的法律、平台与数据使用规则。

规范调用建议

  • 按代码和时间范围分批查询,并通过 fields 仅请求所需字段;已成功获取的数据请保存在本地,避免重复拉取。
  • 收到 429 时必须按照 Retry-After 等待后再重试,不要立即连续重发;网络异常建议间隔 2、5、10 秒逐步重试,最多 3 次。
  • 大批量历史数据建议安排在非交易时段执行;实时接口仅查询当前业务需要的代码,不要循环请求全市场。
Python 标准调用示例
代码可在窗口内滚动,也可直接复制完整内容。
import json
import time
import requests

API_KEY = "YOUR_API_KEY"
URL = "https://jinniu.ziyoutang.com/api/stk_mins"

session = requests.Session()
session.headers.update({
    "X-Api-Key": API_KEY,
    "Content-Type": "application/json",
    "Accept-Encoding": "gzip",
})

def query_minutes(ts_code, start_date, end_date):
    payload = {
        "ts_code": ts_code,
        "freq": "1min",
        "start_date": start_date,
        "end_date": end_date,
        "fields": "ts_code,trade_time,open,close,high,low,vol,amount",
        "limit": 4000,
    }
    retry_delays = [2, 5, 10]

    for attempt in range(4):
        try:
            response = session.post(URL, json=payload, timeout=60)
            if response.status_code == 429:
                time.sleep(int(response.headers.get("Retry-After", 5)))
                continue
            response.raise_for_status()
            return response.json()
        except requests.RequestException:
            if attempt == 3:
                raise
            time.sleep(retry_delays[attempt])

# 按日期串行查询;同一 API Key 最多同时运行 2 个并发请求。
dates = ["2026-09-08", "2026-09-09", "2026-09-10"]
for trade_date in dates:
    result = query_minutes(
        ts_code="000001.SZ",
        start_date=f"{trade_date} 09:30:00",
        end_date=f"{trade_date} 15:00:00",
    )
    with open(f"000001.SZ_{trade_date}.json", "w", encoding="utf-8") as file:
        json.dump(result, file, ensure_ascii=False)
    time.sleep(1)

错误码

400 参数错误,401 API Key 无效或已删除,403 账户期限或数据权限不满足,429 请求超过限额,503 行情数据暂不可用。错误响应包含 code、message 和 data 字段。

请求频率超限时,HTTP 429 响应头会返回 Retry-After;响应体的 data 会提供 limit_type、retry_after_seconds 和 reset_at,客户端应等待后再重试。