接入指南 · GET / JSON · 无需 API Key
公开数据 API免费接入,无需 API Key
用同一套接口读取 TapeOut、FabX 和 TapeFour 的电路、地址、排行榜与市场数据。无需账户、钱包或充值,只读查询不会发起链上交易。
快速开始
将下列请求复制到终端即可。浏览器跨域 GET 也可直接调用,不发送 Cookie 或凭证。
curl 'https://tapeoutscan.io/v2/tapeout/circuits?page=1&pageSize=20&metadata=compact'
fetch('https://tapeoutscan.io/v2/fabx/orders?page=1&pageSize=20&metadata=compact',
{ credentials: 'omit' })
.then(response => response.json())
.then(result => console.log(result.data));
下载 OpenAPI 规范 ↗限频与重试
每个 IPv4 地址/IPv6 /64:60次/分钟、240次/5分钟、1200次/小时、5000次/天。使用固定时间窗口,每日额度在北京时间零点重置。不同用户共用出口 IP 时共享额度。
全服务最多120次/分钟,同时最多2个数据查询。缓存命中也计调用;返回429时按 Retry-After 等待,503时退避重试。请勿轮换 IP 绕过限制。
数据口径与更新
返回 data、meta 和 requestId。data 沿用对应浏览器的公开字段与估算口径;meta.source 保留来源状态。generatedAt 是响应生成时间,不是链上确认时间;请同时检查源数据的时间、区块、stale、pending 和覆盖标记。
额外响应缓存最多15秒,底层数据按现有采集周期更新。未知值返回 null 或 pending,不代表零。大于 JavaScript 安全整数范围的整数以字符串返回;金额原始整数与小数估算不可混用。
TapeOut/TapeFour 原生币为 BNB,FabX 为 OKB;美元估值保留各来源字段。成交按时间倒序,主站成交默认近7天,可传 period 查询其他范围;其他项目范围见响应覆盖字段。跨分页可能发生更新,请按电路身份或交易哈希+日志编号去重。
这不是 RPC 节点或全链历史归档,不提供交易、签名、钱包、游戏资金或管理员数据。旧 v1 和会员 API 保持停用,新接入请使用 v2。
错误处理
400:检查参数;404:接口或数据尚未收录;429:等待 Retry-After;503:来源未就绪或服务繁忙。反馈问题时请附请求网址、时间、HTTP状态及requestId。requestId是随机请求标识,不是数字签名,也不代表服务器保存了逐笔请求日志。
{"error":{"code":"INVALID_SORT","message":"Unsupported sort field; no fallback was applied.","messageZh":"排序字段不受支持,未退回默认排序。","field":"sort","details":{"allowed":["current_hashrate","cost"]}},"requestId":"documentation-example-not-live"}页面与接口对照
| 页面内容 | 接口 |
|---|---|
| 首页价格、产能、回本 | home |
| 电路数据、算力、矿工净卖压 | charts |
| 行情Pro、K线、深度、挂单、成交 | market / orders / trades |
| 地址全部卡片、算力变化、关联抛售 | address-detail / address-token / address-sales |
| 当前矿机、地址流水、追踪关系 | address-miners / address-activity / address-graph |
| 题目、C优化、最优电路、电路证据 | task-detail / task-circuits / circuit-detail |
| 排行榜与分页筛选 | leaderboard / circuits / tasks |
TapeFour没有题目系统,不提供题目接口;其关联卖出和关系数据在 address-detail 的 tokenAnalysis 中。收藏是浏览器本地偏好,不属于公共链上数据。
数值与单位
BNB/OKB原始金额为18位精度;BEM/FAB通常为8位,项目代币以返回的decimals为准。请使用十进制库或BigInt处理Raw字段。FabX的原始weight需要除以100才是页面H;TapeOut的current_hashrate与TapeFour的weight按各自页面H口径读取,不再额外乘除100。
美元成交额与当时/当前汇率转换依照字段moneyBasis、pricePolicy和覆盖标记;静态回本是价格与产能快照下的估算,不是保证收益。关联卖出属于来源追踪估算,不证明多个地址由同一个人控制。
分页、筛选与增量同步
默认page=1、pageSize=20,可选50或100。API不提供固定快照游标,更新时跨页可能移动;增量同步建议重读最近两页,并按链+交易哈希+日志序号去重,电路使用链+collection+id。超过1000页或来源保留范围时,不应声称已经获取全量历史。
排行榜advanced使用URL编码JSON:filters项为key/op/value,sorts项为key/order。TapeOut、FabX数值op支持gte(大于等于)、lte(小于等于)、eq(等于);同字段允许各一个gte/lte,区间占两个名额,eq不能与同字段上下界混用。筛选上限仍为TapeOut/FabX 3个、TapeFour目录3个、其他排行10个;排序最多3个,方向为asc/desc,排序字段不能重复。其他字段运算符见接口表格。
# TapeOut: power ≥ 100 H, descending
curl --get 'https://tapeoutscan.io/v2/tapeout/leaderboard' --data-urlencode 'kind=address' --data-urlencode 'advanced={"filters":[{"key":"total_hashrate","op":"gte","value":100}],"sorts":[{"key":"total_hashrate","order":"desc"}]}'
元信息与错误
数据读取支持GET与HEAD;HEAD返回相同状态和响应头,不返回正文,按相同IP额度计数。OPTIONS用于跨域预检;其他方法返回405及Allow。网址超过2048字符返回414。电路和题目详情未收录时返回404 NOT_INDEXED,已存在但没有关联电路仍可正常返回空列表。
apiVersion与OpenAPI版本一致;version=2.0保留兼容。metadata默认full;compact省略meta.source的currentChampions/addressLabels清单,按实际条目计数,data不变。omittedSourceLists是可选字段,仅发生省略时出现;full或无清单时不返回。compact不保证每个接口都更小,无清单时仅模式名称多3字节。
meta.sourceStatus固定提供stale、observedBlock、observedAt和paths。FabX映射data.status.stale及active.block/time,TapeFour读取meta.source.asOf;null表示该来源未提供,不能当作最新。paths指出原字段,多市场仍需分别检查时间与覆盖。cacheAgeSeconds仅为API缓存年龄。
data.eventTypes表示已应用的筛选,[]代表不限类型;可选类别使用meta.availableEventTypes或type参数说明。type=all不是“没有事件”。
error包含code、英文message、中文messageZh、出错field和details。FILTER_LIMIT_EXCEEDED与SORT_LIMIT_EXCEEDED返回实际上限;DUPLICATE_FILTER/DUPLICATE_SORT指出重复字段;INVALID_FILTER_SHAPE提示键名;INVALID_SORT不会静默退回默认排序。
响应示例来自2026年10月21日候选API对生产只读数据的实际HTTP响应,保留真实requestId与观测时间,较长数组经过节选;不是实时行情。请求参数和采样说明见x-example-observation,点击“查询示例”可获取当前响应。
响应与重试
const response = await fetch(url, { credentials: 'omit' });
if (response.status === 429 || response.status === 503) {
const seconds = Number(response.headers.get('Retry-After') || 10);
// Wait at least seconds, add jitter; use bounded retries.
throw new Error(`Retry after ${seconds}s`);
}
const result = await response.json();
if (!response.ok) throw new Error(`${result.error?.field || "request"}: ${result.error?.message}`);
console.log(result.data, result.meta.source, result.requestId);
这里只读公开浏览器数据,不包含后台统计、用户身份、会话或游戏付款操作。数据接口与网页共用已收录证据;不承诺未收录、未验证或已暂停来源的数据完整。
