← 返回接口文档

通用说明

所有 REST 接口共用的鉴权方式、返回格式、分页、频率限制和错误码。

鉴权

每个请求都要带访问密钥。推荐放在请求头 X-API-Key 里;也支持 Authorization: Bearer <key>。查询参数 ?key= 仍然可用,但不建议:key 会留在地址、浏览器历史和沿途代理的日志里,只在临时调试时用。key 请保存在服务端,不要写进前端代码。

curl "https://api.sports.csap.ai/api/v1/categories?limit=1" -H "X-API-Key: YOUR_API_KEY"

返回格式

所有接口都返回 JSON 信封;HTTP 状态码和 code 一致,成功为 200 / 0。

{
  "code": 0,
  "message": "success",
  "success": true,
  "time": 1794201504407,
  "data": [
    { "id": 1, "name_en": "England", "alpha2": "EN", "slug": "england", "priority": 10, "updated_at": 1794136080165 }
  ]
}
{
  "code": 404,
  "message": "unknown interface /api/v1/nope",
  "success": false,
  "time": 1794201504847,
  "data": []
}
codeinteger成功为 0;失败时与 HTTP 状态码相同
messagestring成功为 "success",失败时是原因
successboolean成功为 true
timeinteger服务器时间,Unix 毫秒
dataarray数据行(多数接口是数组,少数汇总类接口是对象)

分页与增量

列表类接口每次最多返回 limit 条(默认和上限都是 1000)。
全量拉取:从 id=1 开始,取本页最大 id + 1 作为下一页的 id,直到返回条数小于 limit。
增量更新:带 time=<上次同步的 Unix 秒>,只返回之后有变动的记录;建议 1 分钟一次。

频率限制

按 key 计:每分钟请求数(rate_per_min)和每日配额(quota_daily)由套餐决定,可在后台查看。超出时返回 HTTP 429,message 为 rate limit exceeded(每分钟)或 daily quota exceeded(每日)。
建议:列表接口按 id / time 增量拉取,实时数据改用 WebSocket / SSE / MQTT 推送,不要轮询。

外部 key 的数据范围

可调用所有有效的 key 都能调用。
可调用(数据有范围)外部 key 可以调用,但只返回开放范围内的数据,见「通用说明 · 外部 key 的数据范围」。
需单独开通需要为 key 开通对应的接口和数据域,未开通时返回 403。
不对外开放仅内部使用,外部 key 调用返回 403 interface is internal only。
  • 比赛只返回已开放覆盖范围内的比赛;范围外的比赛按 id 查询返回 404。
  • logo 字段只给平台自己的图片地址(/logos/… 或 /logo/{type}/{id}),没有时为空字符串。
  • 集锦视频、动画 widget、体彩类接口不对外开放,调用返回 403。
  • 已合并到其他比赛的旧 id,按 id 查询会返回新的比赛 id。
  • 数据行里的 source 字段是来源代号(S1、S2……),不是来源名称。

错误码

HTTPmessage场景
400bad param …参数格式不对(如 id 不是数字)
401missing API key / unauthorized没带 key 或 key 无效、已停用
403interface is internal only内部接口,外部 key 不能调用
403explicit endpoint and data-domain entitlement required接口或数据域未开通
403source IP not allowed for this API key请求 IP 不在 key 的白名单内
404not found比赛、球队、赛事不存在,或不在 key 的数据范围内
404unknown interface …路径不存在
429rate limit exceeded超过每分钟请求数
429daily quota exceeded超过每日请求配额
500query error服务端查询失败,可稍后重试