快速开始
- 登录 TapeOutScan,进入个人中心的「我的 API」。所有用户均可直接创建密钥,无需申请审批。
- 填写用途,新建 API Key,立即保存 Key 和 Secret。Secret 只展示一次。
- 在你的服务器上签名并调用接口。Secret 不应放进前端网页、App 包或公开代码仓库。
服务地址:https://tapeoutexplorer.com;接口前缀:/v1。每账号最多 3 个有效 Key,可随时停用;更换密钥时先创建新 Key,再停用旧 Key。
接口规范与代码示例是什么?
OpenAPI 3.1 是接口说明书的标准格式,列出接口地址、参数、认证方式和返回字段,便于开发者导入 Postman、Swagger 等工具阅读或生成调用代码。3.1 是这份规范的版本号。
Python 代码示例 是一段用 Python 编写的调用程序,演示如何读取 Key / Secret、生成签名并查询数据。可交给开发人员参考;实际请求会按相同积分规则计费。
当前能提供什么
提供资产资料、持有人、挖矿快照、成交记录、账号活动与汇总统计。所有返回都附带 meta.scope、检查点和更新时间。
| 链 | CPU | Collection |
|---|---|---|
| BNB Smart Chain · 56 | TapeOut · 30 | 0xb1024b89886b9a34aa4ff5f31c411d708b20a14c |
| BNB Smart Chain · 56 | Behemoth · 1 | 0x1f5cb4aeae1807bf60c3b9c0d8adbcc14e91f12c |
未收录的资产返回 ASSET_NOT_INDEXED,不代表链上不存在。余额、所有权和挖矿状态均以最后一次索引为准;成交金额不能当作当前报价。
请求签名
所有 /v1/* 接口(包括健康检查)均需下列请求头。仅支持 GET,无请求体、无浏览器跨域调用。
| 请求头 | 值 |
|---|---|
X-TOS-Key | 创建时得到的 API Key |
X-TOS-Timestamp | Unix 秒时间戳,允许与服务器相差 ±60 秒 |
X-TOS-Nonce | 每次请求随机且唯一,16–64 位字母、数字、下划线或连字符 |
X-TOS-Signature | HMAC-SHA256 结果,小写十六进制 |
签名原文为下面 5 行,使用换行符 \n 连接,末尾没有换行:
GET /v1/circuits?chainId=56&collection=30&limit=20 <timestamp> <nonce> e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
最后一行是空请求体的 SHA-256。用 Secret 的 UTF-8 原文字节作为 HMAC 密钥,不做 Base64 解码。第二行必须与实际发送的路径和查询字符串逐字一致,包括编码和参数顺序;不得放入域名。
signature = HMAC_SHA256(secret, message).hexdigest()
同步服务器时钟;重试必须使用新时间戳和新 nonce。相同 nonce 会被拒绝。签名验证、过期检查、权限检查与限频均在服务端完成。
接口目录
| GET 路径 | 用途 / 查询参数 | 查询积分 |
|---|---|---|
/v1/health | API 与索引更新时间、是否陈旧 | 0 |
/v1/processors | 本期支持的 CPU 及合约 | 0 |
/v1/stats | 各 CPU 已收录资产、持有人和算力统计 | 0 |
/v1/circuits | 资产目录。collection、tokenId、limit、offset | 3 / 次 |
/v1/circuits/{collection}/{tokenId} | 单资产详情、当前索引所有者及挖矿快照 | 2 / 次 |
/v1/accounts/{account}/holdings | 已收录持仓。collection、tokenId、limit、offset | 3 / 次 |
/v1/accounts/{account}/events | 已有链上活动。collection、fromBlock、limit、offset | 2 / 每 20 条 |
/v1/trades | 核验成交。collection、tokenId、account、fromBlock、limit、offset | 2 / 每 20 条 |
所有接口可带 chainId=56。collection 接受合约地址、CPU 编号(30 / 1)或别名(tapeout / behemoth)。account 为 0x 开头的 40 位十六进制地址。tokenId 为十进制字符串;当前底层索引支持 0 到 9223372036854775807。
列表默认 limit=20,范围 1–100;offset 范围 0–10000。fromBlock 是包含边界的最小区块号。成交和事件按区块倒序;Circuit 按内部 processor、tokenId 升序。未知参数、重复参数、其他链或合约会返回明确错误。
字段和数据口径
统一返回 {data, meta, requestId}。金额(wei)、tokenId 和算力以字符串返回,避免 JavaScript 大整数精度丢失。
| 字段 | 说明 |
|---|---|
assetId | chainId:collection:tokenId;跨 CPU / 链关联时不得只用 tokenId |
owner / observedBlock / updatedAt | 最后索引持有人和资产观察位置;不是即时 ownerOf 调用 |
mining | 现有矿工快照;null 代表无已收录快照,不能解释为绝对不可挖矿 |
sellerProceedsWei / feeWei / buyerTotalWei | 卖家实收、费用及买家实付;BNB,18 位小数,沿用已核验记录 |
evidenceBasis / txHash / logIndex | 成交证据类型和链上定位;仅支持已核验交易形态 |
meta.indexedBlock / checkpoints | 两个 CPU Transfer 检查点的最小确认区块,以及分流检查点;不是所有市场完整覆盖水位 |
meta.stale | Transfer 检查点缺失或超过 10 分钟未更新时为 true |
meta.pagination | limit、offset、hasMore、nextOffset;达到 offset 上限时 nextOffset 为 null,请缩小筛选范围 |
meta.points | 本次用量、共享余额、会员无限标记、每日会员剩余用量与 UTC+8 重置时间 |
每个请求使用一致的数据库快照;连续分页之间数据可能变化,需按 assetId、tradeId 或 eventId 去重,并定期回查近期数据以处理链重组。当前不是固定快照游标,也没有承诺商业 SLA。
返回示意(字段节选,非实时数据)
{
"data": [{"chainId":56,"cpuId":"30","tokenId":"888","owner":"0x…"}],
"meta": {
"scope":{"coverage":"indexed_subset","allProcessors":false},
"pagination":{"limit":20,"offset":0,"hasMore":false,"nextOffset":null},
"points":{"cost":3,"remaining":117,"unlimited":false}
},
"requestId":"…"
}共用积分,按账号保护服务
API 和网页直接使用同一账号的积分余额、充值/奖励积分及每日会员用量。普通账号每日 UTC+8 零点补足至 30 分,绑定 X 后为 120;高于基础额度的余额保留。会员沿用网站权益:月度/永久会员不扣余额,但查询用量仍计入现有每日上限。
仅成功的数据查询计分。事件和成交按请求的 limit 向上取整,每 20 条 2 分(例如 limit=50 计 6 分);相同查询再次成功仍计分。认证失败、查无资产、参数错误、服务错误和余额不足均不扣分。客户端在服务器成功处理后断网,仍可能已计分。
- 所有已登录用户均可直接创建 API Key,无需激活码或续期;每账号每分钟最多 60 次。
- 同账号所有 Key 合计每秒最多 3 次;API 另按账号会员档位限制短时查询积分。
- 免费 / 充值 / 月度 / 永久档位每分钟 API 查询积分分别为 25 / 120 / 180 / 600;5 分钟和小时上限沿用同档网站策略。
- 网页与 API 共用每日会员查询用量(充值/月度 1200 分,永久 6000 分)和共享 IP 积分防护;短时请求限频分别执行。
- 整个 API 服务每分钟最多 600 次、每日最多 50,000 次请求,最多 4 个并行数据查询。这是初期限额,不是性能或可用性承诺。
API 请求保护采用固定时间窗(UTC 边界),积分日结仍为 UTC+8。免费接口也占调用次数。成功响应含 X-RateLimit-Limit、X-RateLimit-Remaining、X-Point-Cost;遇 429 请按 Retry-After 等待,不要用多个 Key 绕过。
错误处理
| HTTP | 常见错误码 | 处理方式 |
|---|---|---|
| 400 / 422 | INVALID_* / UNKNOWN_PARAMETER / UNSUPPORTED_CHAIN / UNSUPPORTED_COLLECTION | 核对参数和覆盖范围,不扣积分 |
| 401 | AUTH_INVALID | 核对签名、时间、Key 是否有效 |
| 404 | ASSET_NOT_INDEXED / ENDPOINT_NOT_SUPPORTED | 数据尚未收录或接口未支持 |
| 409 | NONCE_REUSED | 生成新 nonce;相同请求重放不会重复扣分 |
| 429 | RATE_LIMITED / POINTS_INSUFFICIENT / DAILY_POINTS_LIMIT / SHARED_IP_LIMIT | 查看 Retry-After;余额不足可通过网站获取积分 |
| 503 | SERVER_BUSY / SERVICE_BUSY | 退避重试,并记录 requestId 便于排查 |
{"error":{"code":"AUTH_INVALID"},"requestId":"…"}