鉴权
每个请求都要带访问密钥。推荐放在请求头 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": []
}| code | integer | 成功为 0;失败时与 HTTP 状态码相同 |
| message | string | 成功为 "success",失败时是原因 |
| success | boolean | 成功为 true |
| time | integer | 服务器时间,Unix 毫秒 |
| data | array | 数据行(多数接口是数组,少数汇总类接口是对象) |
分页与增量
列表类接口每次最多返回 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……),不是来源名称。
错误码
| HTTP | message | 场景 |
|---|---|---|
| 400 | bad param … | 参数格式不对(如 id 不是数字) |
| 401 | missing API key / unauthorized | 没带 key 或 key 无效、已停用 |
| 403 | interface is internal only | 内部接口,外部 key 不能调用 |
| 403 | explicit endpoint and data-domain entitlement required | 接口或数据域未开通 |
| 403 | source IP not allowed for this API key | 请求 IP 不在 key 的白名单内 |
| 404 | not found | 比赛、球队、赛事不存在,或不在 key 的数据范围内 |
| 404 | unknown interface … | 路径不存在 |
| 429 | rate limit exceeded | 超过每分钟请求数 |
| 429 | daily quota exceeded | 超过每日请求配额 |
| 500 | query error | 服务端查询失败,可稍后重试 |