OPEN API · 信号接入

先体验合成沙盒,再申请真实接入

公开演示沙盒无需密钥,可先验证接收结构与错误处理。真实信号事件流尚未对外开放;真实接入需说明用途、人工审核并单独确认可用数据和权限。

内测期请先读这段

当前公开入口是本地合成沙盒。真实信号事件流还没有对外开放;持有效内测密钥调用现有端点时, 现在调 /v1/signals 拿到的是空集,响应里的 notice 字段会写明这一点, /v1/health 的 dataStream 会是 not_open_yet。

沙盒与下方代码用于学习接收流程,不构成正式数据协议或开放时间承诺。真实接入前需确认字段版本、权限、额度、数据覆盖与投递测试结果。

真实接入条件与内测代码示例

  1. 提交用途并获人工确认:草稿只存本机,需通过合作入口人工提交;未获得确认前不能访问真实数据。获准后保管密钥,形如 sv_live_xxxxxx.xxxxxxxx。它只会给你看一次,请自己存好。
  2. 验证连通:调 /openapi/v1/me,能看到自己的档位与今日用量就通了。
  3. 核对开放状态:事件流未开放时返回空集,不代表链路故障。获准后调用 /openapi/v1/signals。第一次不带参数拿最新一批,之后带上 since_id 做增量,不重不漏。
# 验证连通
curl -H "Authorization: Bearer $SV_API_KEY" \
     https://stock.tanggestock.com/openapi/v1/me

# 拉最近 50 条 4 小时级别的比特币信号
curl -H "Authorization: Bearer $SV_API_KEY" \
     "https://stock.tanggestock.com/openapi/v1/signals?symbol=BTC&interval=4h&limit=50"

# 增量:把上次响应里的 paging.nextSinceId 传回来
curl -H "Authorization: Bearer $SV_API_KEY" \
     "https://stock.tanggestock.com/openapi/v1/signals?since_id=10432"

端点

方法路径说明
GET/openapi/v1/me看这把密钥的档位、权限与今日用量
GET/openapi/v1/signals信号列表。过滤:since_id / market / symbol / interval / engine / tone / from / to / limit(≤500)
GET/openapi/v1/engines信号引擎名录
GET/openapi/v1/symbols近 30 天有信号的品种
GET/openapi/v1/health服务状态与最新信号时间,可用于监控

信号长什么样

{
  "signals": [
    {
      "id": 10433,
      "engine": "bull-bear",
      "market": "crypto",
      "symbol": "BTC",
      "interval": "4h",
      "signalTime": "2026-08-10T04:00:00.000Z",
      "tone": "bull",          // bull 看多 / bear 看空 / neutral 中性
      "kind": "多",             // 多 / 空 / 空转多 / 多转空
      "level": "normal",        // normal / important
      "price": 65132.13,        // 信号发生时的价格
      "text": "多头开始"
    }
  ],
  "paging": { "count": 1, "limit": 100, "nextSinceId": 10433, "hasMore": false }
}

我们只给信号本身:什么品种、什么周期、什么时候、看多还是看空、当时什么价。 自研引擎的计算方式属于平台核心资产,不在接口范围内 —— 这点在商务沟通里也是同样的口径。

Webhook 接收参考 · 真实投递待接入确认

以下为内测接收示例。真实回调需确认授权、目标地址与安全测试;本页沙盒不会发送网络请求,不能用沙盒通过来证明真实投递已开启。

POST https://你的地址/hook
Content-Type: application/json
X-SV-Signature: sha256=<hmac>      # 必须验签
X-SV-Delivery:  7-10433              # 投递 id,用它去重
X-SV-Timestamp: 1786311537           # 秒级时间戳,可用于防重放

{
  "type": "signal.created",
  "deliveredAt": "2026-08-10T04:00:03.120Z",
  "signal": { "id": 10433, "engine": "bull-bear", "symbol": "BTC", "interval": "4h",
              "tone": "bull", "kind": "多", "price": 65132.13, "text": "多头开始" }
}

验签(务必做,否则任何人都能往你的接口灌假信号):

// Node.js:注意要用**原始请求体**算,不能先 JSON.parse 再 stringify
const expected = 'sha256=' + crypto.createHmac('sha256', SECRET).update(rawBody).digest('hex');
const ok = crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(req.headers['x-sv-signature']));
  • 回调地址必须是 https。明文回调会让签名失去意义,我们直接拒收。
  • 返回 2xx 视为成功;其它状态或超时(8 秒)算失败。
  • 失败按 30s → 1m → 2m … 最长 1 小时退避重试,停在失败那条不跳过,所以你不会漏信号。
  • 连续失败 20 次自动熔断,我们会联系你;修好后恢复,从熔断那条继续推。
  • 可以只订阅一部分:按市场、品种、周期、引擎过滤,或者只要「重要」级别。

额度与限流

每把密钥有两个上限:每分钟调用数与每日调用数,具体数值按你的档位。每次响应都会带上:

X-RateLimit-Limit / X-RateLimit-Remaining / X-RateLimit-Reset
X-Quota-Limit / X-Quota-Used

建议按 X-RateLimit-Remaining 自适应节奏;触发 429 时按 Retry-After 退避即可,不必重试风暴。

API 接入方案参考 · 非当前可购买服务

正在核对 API 接入方案…

档位月费日调用每分钟适合
Trial月费免费 14 天日调用1,000每分钟30适合先接上看看
Starter月费$29日调用20,000每分钟120适合个人站 / 单个机器人
Growth月费$59日调用100,000每分钟300适合有流量的社区站
Pro月费$99日调用不限每分钟600适合商用 / 多站点 / 白标

正式套餐、可用权限与Webhook条件需在接入获准后单独确认;网站会员不自动获得API密钥或真实事件流。当前没有本页自助购买或自动开通。

先算用量,再讨论接入

参考方案同时限制每日用量和每分钟峰值。评估结果用于准备申请,不代表开通或授权。

填入预计用量,查看需要确认的方案。

接入前,把六件事确认清楚

数据覆盖
确认品种、交易所和字段;有接口不代表每个来源都有数据。
历史长度
按数据类型和时间粒度确认可用起止日期。
刷新与延迟
确认采集时间、更新时间与异常时的返回方式。
使用权限
个人研究、商业展示、转售和白标分别确认;参考价格不授予数据使用权。
实际投递
真实密钥、读取和 Webhook 分别测试,合成沙盒通过不代表生产已开通。
支持范围
确认技术联系人、故障反馈方式与变更通知;未约定的服务等级不作承诺。

准备接入申请

先整理用途和范围,再通过合作入口人工确认。草稿仅在你点击保存后留在本机,本页不会提交申请或创建密钥。

申请尚未提交。

打开合作入口

错误码

HTTPcode怎么办
401missing_key没带 Authorization: Bearer
401invalid_key密钥无效、已停用或已过期,联系我们
403scope_required这把密钥没有该项权限
403origin_not_allowed浏览器直连时来源域名不在白名单
429rate_limited超过每分钟上限,按 Retry-After 退避
429quota_exceeded当日额度用完,次日重置或升档
400bad_request参数不合法,响应里 field 指出是哪个
503upstream_unavailable数据暂不可用,稍后重试

本地演示沙盒 · 合成数据

无需密钥。以下事件完全合成,不代表真实行情或私有信号。Webhook 仅在本页模拟接收,不会向任何地址发送请求。真实数据流仍处于内测,申请状态需人工确认。

选择结果后点击生成。