跳转到内容

限流与错误

所有合作伙伴读取请求共享以下限制:

窗口 请求数 重置时间
分钟 300 下一个固定分钟边界
日 50,000 UTC 00:00

两项限制均按合作伙伴计算,汇总其全部密钥、端点、IP 地址和应用实例。这是固定窗口限制,不保证每秒可用请求数。申请替换密钥不会重置任何计数器。

每个到达合作伙伴限流器的已授权读取请求,都会在路由前消耗共享配额。HEAD 也计数,后续参数错误、404 或端点拒绝不会返还配额。浏览器 OPTIONS 预检不消耗该认证读取配额。

此外还有端点/IP 限制及边缘防护。密钥查询与浏览器预检另有每 IP、每应用实例每分钟 600 次的限制。因此即使伙伴配额未耗尽,也可能收到 429;配额不是容量预留。密钥或限流服务不可用时会拒绝请求,而不是放开无限访问。

遇到 429 时,遵守 Retry-After(秒,若存在)。合作伙伴配额拒绝会携带该头。至少等待指定时长,并增加随机抖动,避免同步重试。端点或上游拒绝可能有不同错误码,也可能不含该头,此时使用有上限的指数退避。

尚未开放的端点: 发现、持币人、发行活动、池概况、K 线及成交记录目前因发行平台索引未启用而返回 503。即使响应包含 Retry-After,也不要在宣布开放前轮询这些端点。现在可阅读其接口约定及示例。

临时 502 或 503 也应遵守存在的 Retry-After。限制重试次数,持续失败后展示不可用状态。不要紧密循环重试 400、401、403、404 或 405;先修正请求、密钥、来源或可用性问题。

function retryDelayMs(response, attempt) {
if (![429, 502, 503].includes(response.status)) return null;
if (attempt >= 3) return null;
const value = response.headers.get('retry-after');
const seconds = value !== null && /^\d+$/.test(value) ? Number(value) : null;
const base = seconds !== null
? seconds * 1000
: Math.min(30_000, 1000 * 2 ** attempt);
return base + Math.floor(Math.random() * 1000);
}

使用返回的延迟安排后续请求。每日配额等待可能长达数小时,不要让面向用户的 HTTP 请求一直保持连接。复用近期数据时标注新鲜度,合并支持批量的价格查询,并在后端合并并发的相同请求。剩余配额和重置响应头不属于本 API 约定。

合作伙伴访问错误采用以下 JSON 结构:

{
"error": {
"code": "partner_key_invalid",
"message": "A valid partner API key is required."
}
}
HTTP 状态 错误码 处理方式
401 partner_key_invalid 检查完整密钥及请求头。密钥可能格式错误、未知或已撤销;联系 Blast 更换。
403 partner_read_forbidden 使用只读参考列出的端点。
403 partner_origin_forbidden 请 Blast 登记精确的浏览器来源,并使用对应伙伴的密钥。检查预检请求头。
405 partner_read_only 使用 GET 或 HEAD。
429 partner_rate_limited 已达到伙伴配额或密钥查询 IP 限制。遵守 Retry-After。
503 partner_api_unavailable 密钥验证或限流存储不可用,稍后重试。

缺少伙伴请求头时会走网站普通访问规则,可能返回另一种 401 错误码。每次 API 调用都应发送该头。HEAD 响应和浏览器拦截的 CORS 失败不会暴露 JSON 错误正文。

端点错误与不可用数据

跳转到“端点错误与不可用数据”

端点保留自身错误码,包括 invalid_parameter、not_found、rate_limited 和 service_unavailable。发行平台还可能使用 LAUNCHPAD_QUERY_INVALID 或 LAUNCHPAD_RATE_LIMITED 等错误码。先处理 HTTP 状态,再据错误码提供更具体的信息。

即使密钥有效,未知资源或不支持的交易平台/路由组合仍可能返回 404。请检查资源 ID 和支持的路由。合作伙伴读取权限与前端是否开放无关;无效或已撤销密钥返回 401。

发现和搜索还会在 section 对象内表达失败。200 搜索响应可包含不可用分组,同时其他分组可读。应按各分区状态渲染,不要将不可用数据替换为空列表或零。503 可能包含分区,而非上述错误结构。