快速开始
一个 API Key、一种 JSON 结构,调用 73 个社交、电商与网页数据接口。只有成功并且有结果的调用才扣费。
三步上手
创建 API Key
在控制台创建 API Key,可以限定它能调用的接口(scope)。完整的 Key 只在创建时显示一次,请马上保存:服务端只保存它的哈希,之后无法再查看。
export QOVIA_KEY="sk-qovia-…"
验证 KeyGET
/v1/account确认 API Key 可用,并返回余额、套餐、每分钟上限和本月免费额度。不扣费,但计入限流。
curl https://api.qovia.ai/v1/account \ -H "Authorization: Bearer $QOVIA_KEY"
示例响应
{ "request_id": "00000000-0000-0000-0000-000000000000", "data": { "user": { "id": "00000000-0000-0000-0000-000000000000", "email": "you@example.com" }, "api_key": { "id": "00000000-0000-0000-0000-000000000000", "name": "production", "scopes": [ "*" ], "expires_at": null }, "billing": { "balance_usd": "10.000000", "plan": "payg", "rpm_limit": 600, "free_quota": { "limit": 1000, "used": 12, "remaining": 988, "resets_at": "2026-11-01T00:00:00+08:00" } } }, "meta": { "billed": false } }发起第一次调用
用「B 站视频搜索」(
GET /v1/raw/bilibili/search)试一下:它返回实时数据,并且可以用免费额度。curl 'https://api.qovia.ai/v1/raw/bilibili/search?keyword=%E5%8F%B0%E7%A7%AF%E7%94%B5' \ -H "Authorization: Bearer $QOVIA_KEY"
把
$QOVIA_KEY换成你的 API Key{ "request_id": "00000000-0000-0000-0000-000000000000", "data": { "items": [ { "id": "soc_bil_2913ac9c522a", "src": "social", "platform": "bilibili", "lang": "zh-CN", "text": "「小白」全球芯片代工王!万字台积电发展史", "author": { "uid_hash": "ca5fa000e345", "mid": "8969156", "name": "小白测评" }, "metrics": { "plays": 689248, "likes": 20365, "saves": 7230, "comments": 1348, "danmaku": 2676 }, "extra": { "source_id": "BV1DkoeYhExZ", "url": "https://www.bilibili.com/video/BV1DkoeYhExZ", "title": "「小白」全球芯片代工王!万字台积电发展史", "published_at": "2025-03-26T18:30:00+08:00", "category": { "id": 95, "name": "数码" }, "tags": [ "芯片", "数码", "台积电", "手机芯片" ], "cover": "https://i0.hdslb.com/bfs/archive/8f62d780e4e308bafa8c9f6c4d14ce5a28b2ce0b.jpg" }, "prov": { "hash": "0xc16f694e973143c1", "ts": "2026-10-20T12:00:00+08:00", "source": "live" } } ], "cursor": 2, "has_more": true }, "meta": { "billed": false, "charged_usd": "0.000000", "used_free_quota": true, "free_quota_remaining": 999, "balance_usd": "0.000000", "empty": false } }目录示例,不是实时数据
新账户的前 1,000 次调用走免费额度,不扣费;额度用完后同样的调用按价格扣费,
查看这个接口的完整参考meta见下方「响应」一节的示例。
基础地址与认证
所有接口都在同一个基础地址下:
https://api.qovia.ai每个请求都在 Authorization 请求头里用 Bearer 方式带上 API Key:
Authorization: Bearer $QOVIA_KEY- 也可以改用
x-api-key: <API Key>请求头;两个都带时以Authorization为准。 - 服务端只从这两个请求头读取 Key,从不读取 URL 参数或 Cookie。
- 缺少、格式不对、已吊销或已过期的 Key 返回 401
invalid_api_key;同一 IP 一分钟内认证失败 30 次后返回 429too_many_auth_failures。
权限范围(scope)
创建 Key 时可以选择一个或多个 scope;调用 Key 权限之外的接口返回 403 scope_denied。
| scope | 可调用 |
|---|---|
* | 全部接口 |
search | 跨域检索 |
raw:* | 全部原始接口 |
raw:<platform> | 一个平台的全部原始接口:raw:douyin、raw:bilibili、raw:xingtu、raw:tieba、raw:xiaohongshu、raw:tiktok、raw:weibo、raw:shopee、raw:amazon、raw:fliggy、raw:news、raw:cljx、raw:huahuo |
请求
- GET 接口
- 参数放在查询串里,按参数类型转换:整数直接写数字,布尔值接受
true/false/1/0/yes/no,数组重复参数名传多个值(?id=1&id=2)。 - POST 接口
- 请求体是一个 JSON 对象,带上
Content-Type: application/json。不是合法 JSON 或不是对象时返回 400invalid_params。 - 参数校验
- 只接受接口列出的参数。多出的参数、缺少必填、类型或格式不对都返回 400
invalid_params,不扣费;message以出错的参数名开头(item_id: …),缺少必填或多出参数时以params: …开头。 - 默认值
- 可选参数不传时,由服务端补上默认值(见各接口参数的「默认」)。
响应
成功返回 HTTP 200 和统一信封。下面是免费额度用完之后的一次扣费调用,可以和第 3 步对照:
{
"request_id": "00000000-0000-0000-0000-000000000000",
"data": {
"items": [
{
"id": "soc_bil_2913ac9c522a",
"src": "social",
"platform": "bilibili",
"lang": "zh-CN",
"text": "「小白」全球芯片代工王!万字台积电发展史",
"author": {
"uid_hash": "ca5fa000e345",
"mid": "8969156",
"name": "小白测评"
},
"metrics": {
"plays": 689248,
"likes": 20365,
"saves": 7230,
"comments": 1348,
"danmaku": 2676
},
"extra": {
"source_id": "BV1DkoeYhExZ",
"url": "https://www.bilibili.com/video/BV1DkoeYhExZ",
"title": "「小白」全球芯片代工王!万字台积电发展史",
"published_at": "2025-03-26T18:30:00+08:00",
"category": {
"id": 95,
"name": "数码"
},
"tags": [
"芯片",
"数码",
"台积电",
"手机芯片"
],
"cover": "https://i0.hdslb.com/bfs/archive/8f62d780e4e308bafa8c9f6c4d14ce5a28b2ce0b.jpg"
},
"prov": {
"hash": "0xc16f694e973143c1",
"ts": "2026-10-20T12:00:00+08:00",
"source": "live"
}
}
],
"cursor": 2,
"has_more": true
},
"meta": {
"billed": true,
"charged_usd": "0.001500",
"used_free_quota": false,
"free_quota_remaining": 0,
"balance_usd": "9.998500",
"empty": false
}
}目录示例,不是实时数据
成功响应
| 字段 | 类型 | 说明 |
|---|---|---|
request_id | string | 本次调用的 ID(用量记录 ID),与响应头 X-Request-Id 相同,可在控制台用量日志里查到。 |
data | object | array | null | 接口返回的数据,结构见各接口的响应示例。结果为空时可能是空结构(例如空的 items),也可能是 null;是否为空以 meta.empty 为准。 |
meta.billed | boolean | 这次是否从余额扣了费。用免费额度或结果为空时为 false。 |
meta.charged_usd | string | 这次扣费金额,美元,6 位小数;未扣费为 "0.000000"。 |
meta.used_free_quota | boolean | 这次是否用了免费额度。 |
meta.free_quota_remaining | integer | 本月剩余的免费调用次数。 |
meta.balance_usd | string | 结算后的余额,美元,6 位小数。 |
meta.empty | boolean | 结果为空:不扣费,用掉的免费额度也会退回。 |
结果为空时仍是 HTTP 200,meta.empty 为 true,不扣费(用掉的免费额度也会退回);data 可能是空结构,也可能是 null,请以 meta.empty 为准。
错误响应
| 字段 | 类型 | 说明 |
|---|---|---|
error.code | string | 错误码,见错误码表。程序请按 code 判断。 |
error.message | string | 简短的英文说明。同一个 code 可能有几种写法(错误码表列出全部),不要按 message 做判断;从不包含数据源的原始报错。 |
error.request_id | string | 与响应头 X-Request-Id 相同(见下表)。 |
响应头
| 响应头 | 何时出现 | 说明 |
|---|---|---|
X-Request-Id | 所有响应(意外的纯文本 500 除外) | 与响应体里的 request_id 相同。已预留的调用(成功、空结果、预留后的失败)是用量记录 ID;预留前就被拒绝的请求沿用你在请求头里传的 X-Request-Id,没传则由服务端生成。 |
X-RateLimit-Limit | 成功(含空结果)GET /v1/account错误:rate_limited、too_many_unbilled、upstream_busy、upstream_timeout、upstream_error、upstream_rejected、not_found | 账户每分钟请求上限。 |
X-RateLimit-Remaining | 成功(含空结果)GET /v1/account错误:rate_limited、too_many_unbilled、upstream_busy、upstream_timeout、upstream_error、upstream_rejected、not_found | 当前 60 秒窗口内还能发的请求数。 |
X-Qovia-Charged | 成功(含空结果)错误:upstream_busy、upstream_timeout、upstream_error、upstream_rejected、not_found | 本次扣费,美元,6 位小数;没扣费或已退款时为 0.000000。 |
X-Qovia-Balance | 成功(含空结果)错误:upstream_busy、upstream_timeout、upstream_error、upstream_rejected、not_found | 结算后的余额,美元,6 位小数。 |
Retry-After | 错误:too_many_auth_failures、rate_limited、too_many_unbilled、endpoint_busy、upstream_busy | 建议等待的秒数,到时再重试。 |
WWW-Authenticate | 错误:invalid_api_key | Bearer realm="qovia"。 |
Allow | 错误:method_not_allowed | 这个路径支持的方法。 |
/v1 只接受 GET 和 POST:其他方法(如 PUT、DELETE)由框架直接返回 405 {"detail": "Method Not Allowed"};服务端意外错误可能是纯文本 500。这两种都不扣费。
计费与免费额度
- 只有成功并且有结果的调用才扣费。
- 失败、空结果、超时一律不扣费:预扣的费用和免费次数会自动退回。
- 每月 1,000 次免费调用,按 Asia/Singapore 时区的自然月重置;只用于标注「可用免费额度」的接口,免费调用不计入阶梯。
- 余额不足以支付一次调用时,请求不会执行,返回 402
insufficient_balance。 - 每次的扣费写在
meta和X-Qovia-Charged/X-Qovia-Balance响应头里。
阶梯价格
按产品的边际阶梯计价:同一个自然月里,超过阈值之后的计费调用按下一档价格计算。
| 产品 | 每月计费调用 | 每千次 | 每次 |
|---|---|---|---|
| 跨域检索 | 0 – 100 万 | $4 | $0.004 |
| 跨域检索 | 100 万 – 1,000 万 | $3 | $0.003 |
| 跨域检索 | 1,000 万以上 | $2.5 | $0.0025 |
| 原始接口 | 0 – 500 万 | $1.5 | $0.0015 |
| 原始接口 | 500 万以上 | $1 | $0.001 |
固定价格的接口
下面这些接口不走阶梯,每次成功调用按固定价格扣费。
| 价格 | 免费额度 | 接口 |
|---|---|---|
| $0.01 / 次$10 / 千次 | 不使用 | 星图 (16)、小红书 (11) |
| $0.0015 / 次$1.5 / 千次 | 不使用 | 磁力聚星 (12)、花火 (6) |
限流
- 免费账户
- 60 次/分钟
- 首次充值后
- 600 次/分钟
- 计数窗口
- 60 秒滑动窗口
- 每分钟上限按账户计算:同一账户的所有 API Key 和控制台调试台共用。
- 部分接口另有全局每秒上限(所有用户合计,见各接口页的「限速」);超过时返回 429
endpoint_busy,这次请求不占你的每分钟额度。 - 最近 10 分钟里打到数据源的请求,如果至少 50 次、且超过 80% 是空结果、不存在或被拒,返回 429
too_many_unbilled,放慢后再试。 - 429 或 503 响应带
Retry-After响应头时,按它给出的秒数等待后再重试。503endpoint_unavailable不带这个头:接口暂未上线,重试也不会成功。
错误码
出错时返回对应的 HTTP 状态码和错误信封:
{
"error": {
"code": "rate_limited",
"message": "rate limit exceeded",
"request_id": "00000000-0000-0000-0000-000000000000"
}
}| code | HTTP | 计费 | 说明 |
|---|---|---|---|
invalid_api_key | 401 | 不扣费 | 缺少 API Key、格式不对、Key 不存在、已吊销或已过期。
|
too_many_auth_failures可重试 | 429 | 不扣费 | 同一 IP 一分钟内认证失败达到 30 次,60 秒后再试。
|
account_disabled | 403 | 不扣费 | 账号已停用。
|
endpoint_not_found | 404 | 不扣费 | 没有这个接口,检查方法和路径。
|
method_not_allowed | 405 | 不扣费 | 路径存在但方法不对,Allow 响应头给出正确方法。
|
endpoint_disabled | 410 | 不扣费 | 接口已下线。
|
scope_denied | 403 | 不扣费 | 这个 API Key 没有该接口需要的权限(scope)。
|
endpoint_unavailable | 503 | 不扣费 | 接口暂不可用(尚未接入数据源,或价格未配置),没有执行。
|
invalid_params | 400 | 不扣费 | 参数没有通过校验:缺少必填、类型或格式不对、有多余参数,或 POST 请求体不是 JSON 对象。单个参数的错误以参数名开头(item_id: …),缺少必填或多出参数以 params: … 开头。
|
rate_limited可重试 | 429 | 不扣费 | 超过账户每分钟请求上限(滑动 60 秒窗口),按 Retry-After 等待。
|
too_many_unbilled可重试 | 429 | 不扣费 | 最近 10 分钟打到数据源的请求里,空结果、不存在或被拒的有至少 50 次且占 80% 以上,放慢后再试。
|
endpoint_busy可重试 | 429 | 不扣费 | 这个接口所有用户合计的每秒请求已满,1 秒后重试;不占你的每分钟额度。
|
insufficient_balance | 402 | 不扣费 | 余额不足以支付这次调用(免费额度已用完,或接口不使用免费额度)。
|
upstream_busy可重试 | 503 | 已退款 | 数据源繁忙或在冷却,已退款,按 Retry-After 重试。
|
upstream_timeout | 504 | 已退款 | 数据源超时,已退款。
|
upstream_error | 502 / 503 | 已退款 | 数据源返回失败,已退款。
|
upstream_rejected | 400 | 已退款 | 数据源拒绝了这组参数(格式合法但不被接受),已退款。
|
not_found | 404 | 已退款 | 数据源里没有这条数据(已删除或 ID 不存在),已退款。
|
reservation_expired | 504 | 已退款 | 处理时间过长,已自动退款,没有返回数据。
|
请按 error.code 判断;message 只给人看,可能有多种写法。
给 AI agent 与工具
AI 工具可以通过 MCP 直接调用这些接口;同一份目录也以机器可读的形式发布,可以交给代码生成器: