POST 请求使用 application/json;布尔值必须传 JSON boolean。
ASIN 分析 API
API 与 Web 共用相同的账号配额、任务队列和结果文件。API 创建的任务会实时出现在 Web 任务中心;Web 创建的任务也能通过 API 查询。完整接口定义也可通过 openapi.json(OpenAPI 3.0 规范)导入 Swagger UI / Apifox 等工具查看。
https://cy126.com/openapi/v1/tasks提交单个任务
POST/tasks/batch批量提交任务
GET/tasks/{task_id}查询任务状态
GET/tasks分页查询任务
GET/tasks/{task_id}/file获取文件直链
task_id。推荐先轮询查询任务状态(建议每 5 分钟一次),确认任务成功或失败后,再调用下载接口获取文件或读取 error 错误原因。不要保持 HTTP 长连接等待;任务失败或超时后,直接重新提交即可。
鉴权与积分
基础分析8分,可选采集和AI配置各1分,全选20分。初始100永久积分;无每日任务次数上限。会员及完整积分规则。usage.balance / temporary / permanent 为精确十进制字符串,分别代表可用、有期限、永久积分;任务 billing 返回扣分和退款明细。失败/超时全额返还积分;过期订阅积分退入24小时补偿批次,到期剩余再按20%转存。
API Key 在“个人中心 → API 设置”中管理:创建即生效,无需启用操作。每个用户只能拥有一个 Key;若 Key 泄露,可点击“重新生成”,旧 Key 立即失效。普通业务接口支持以下任一 Header,推荐 Bearer:
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
# 等价写法
X-API-Key: YOUR_API_KEY
每个已鉴权 JSON 响应都会附带以下公共字段:
| 字段 | 类型 | 说明 |
|---|---|---|
usage | object | 当前账号的用量信息 |
├─used | decimal string | 累计净消耗积分(含消耗) |
├─limit | decimal string | 累计净消耗加可用积分,兼容字段 |
├─remaining | decimal string / null | 当前可用积分;超级用户为 null |
└─is_unlimited | bool | 是否不限量(超级用户为 true) |
api_request_count | int | 当前 Key 的累计 API 请求次数(每次鉴权调用 +1) |
{
"usage": {
"used": "20",
"limit": "100",
"remaining": "80",
"is_unlimited": false
},
"api_request_count": 18
}
文件直链通过短期 ticket 查询参数鉴权,二进制响应通过 X-Usage-* 与 X-API-Request-Count Header 返回用量信息。
接口约定
查询成功返回 200,异步任务受理返回 202。
初始100永久积分;任务基础8分,可选项各1分,全选20分;管理员免费。
terminal=true 后停止轮询并处理最终状态。
404 task_not_found,避免泄露其它用户的任务信息。/tasks提交一个 ASIN 分析任务提交任务
每次提交一个 ASIN,成功返回 HTTP 202 与任务 ID。处理服务器维护时任务状态为 waiting,恢复后会自动执行。
curl -X POST "https://cy126.com/openapi/v1/tasks" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"asin": "B0XXXXXXXX",
"site": "US",
"collection_config": {
"bullet_points": true,
"reviews": true,
"ad_difficulty": false
},
"ai_analysis": {
"basic": true,
"ad_strategy": true,
"product_selection": false,
"visual": false,
"inventory": false,
"copy": true,
"development": false,
"pricing": false,
"weakness": false,
"strategy": false
}
}'
请求参数
| 字段 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
asin | string | 是 | — | 要分析的 ASIN,10 位字母或数字,自动转大写 |
site | string | 是 | — | 站点:US(美国站)或 JP(日本站),缺省返回 invalid_site |
collection_config | object | 否 | — | 数据采集配置;整个对象缺省时所有开关均为 false |
├─bullet_points | bool | 否 | false | 五点描述:采集竞品 Listing 五点描述数据 |
├─reviews | bool | 否 | false | 评价数据:采集竞品评论数据用于分析 |
└─ad_difficulty | bool | 否 | false | 广告难易:计算关键词广告投放难度 |
ai_analysis | object | 否 | — | 可选 AI 分析配置;基础分析默认执行 |
├─basic | bool | 否 | — | 基础分析:市场与竞品的基础 AI 分析报告。服务端始终执行,收取8积分;该字段可省略 |
├─ad_strategy | bool | 否 | false | 广告分析:关键词流量与广告投放策略分析报告 |
├─product_selection | bool | 否 | false | 市场分析:市场需求与趋势分析报告 |
├─visual | bool | 否 | false | 视觉分析:主图与 A+ 视觉呈现分析报告 |
├─inventory | bool | 否 | false | 经营分析:库存、动销与经营表现分析报告 |
├─copy | bool | 否 | false | 文案分析:Listing 文案质量分析报告 |
├─development | bool | 否 | false | 开发分析:产品开发方向分析报告 |
├─pricing | bool | 否 | false | 利润分析:利润空间、价格带与定价策略分析报告 |
├─weakness | bool | 否 | false | 竞争分析:竞争格局、竞品短板与自身改进点分析报告 |
└─strategy | bool | 否 | false | 决策分析:可独立读取本次关键词与产品数据;其它已选专项报告作为可选增强输入 |
响应字段(HTTP 202)
| 字段 | 类型 | 说明 |
|---|---|---|
success | bool | true 表示任务已受理 |
message | string | 提示信息;服务器维护时为“任务已保存并将在恢复后自动执行” |
task | object | 任务对象(Task 结构,所有接口通用) |
├─task_id | string | 任务唯一 ID(12 位十六进制),用于查询与下载 |
├─asin | string | 任务对应的 ASIN |
├─site | string | 站点(US / JP) |
├─source | string | 提交来源:api 或 web |
├─status | string | 任务状态,取值见「任务状态机」 |
├─status_text | string | 与 Web 端一致的实际状态文案:等待中 / 排队中 / 获取中 / 分析中 / 待分析 / 下载中 / 已完成 / 失败 / 超时 |
├─stage | string / null | 执行阶段:stage1(数据采集)/ stage2(AI 分析);仅 running 状态时可能有值,其余为 null |
├─terminal | bool | true 表示终态(success / failed / timeout),无需继续轮询 |
├─archived | bool | 任务是否已在 Web 端归档 |
├─submitted_at | string | 提交时间,YYYY-MM-DD HH:MM:SS |
├─completed_at | string / null | 完成时间;未完成为 null |
├─error | string / null | 失败原因;仅 failed / timeout 时有值 |
├─file_available | bool | 结果 XLSX 是否可下载 |
├─file_info_url | string / null | 文件信息接口地址;仅 status=success 且文件就绪时非空 |
├─collection_config | object | 回显采集配置:bullet_points / reviews / ad_difficulty |
└─ai_analysis | object | 回显 AI 分析配置:basic / ad_strategy / product_selection / visual / inventory / copy / development / pricing / weakness / strategy |
duration_notice | string | 任务时长提示文案 |
usage | object | 公共字段,见「鉴权与积分」 |
api_request_count | int | 公共字段,见「鉴权与积分」 |
响应示例
{
"success": true,
"message": "任务已提交",
"task": {
"task_id": "a1b2c3d4e5f6",
"asin": "B0XXXXXXXX",
"site": "US",
"source": "api",
"status": "queued",
"status_text": "排队中",
"stage": null,
"terminal": false,
"archived": false,
"submitted_at": "2026-08-20 10:00:00",
"completed_at": null,
"error": null,
"file_available": false,
"file_info_url": null,
"collection_config": { "bullet_points": true, "reviews": true, "ad_difficulty": false },
"ai_analysis": { "basic": true, "ad_strategy": true, "product_selection": false, "visual": false,
"inventory": false, "copy": true, "development": false, "pricing": false,
"weakness": false, "strategy": false }
},
"duration_notice": "任务通常需要 30-60 分钟,也可能因队列繁忙而更久;建议每 5 分钟轮询一次状态",
"usage": { "used": "20", "limit": "100", "remaining": "80" },
"api_request_count": 19
}
/tasks/batch一次提交最多 10 个 ASIN 分析任务批量提交任务
API 单次最多提交 10 个任务;网页任务中心每次提交单个 ASIN。每个元素的字段与「提交任务」完全一致(site 必填,基础分析自动执行)。任一元素校验失败则整批拒绝(不会部分创建);积分按每个任务的勾选配置合计,整批原子扣分。个别任务被处理服务器拒绝时,会出现在响应的 failed 数组中,其余任务正常受理。
curl -X POST "https://cy126.com/openapi/v1/tasks/batch" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"tasks": [
{
"asin": "B0XXXXXXXX",
"site": "US",
"collection_config": { "reviews": true },
"ai_analysis": { "basic": true, "copy": true }
},
{
"asin": "B0YYYYYYYY",
"site": "US",
"ai_analysis": { "basic": true }
}
]
}'
请求参数
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
tasks | array | 是 | 任务数组,1–10 个元素;每个元素的字段与「提交任务」的请求体完全一致(含 asin / site / collection_config / ai_analysis) |
响应字段(HTTP 202)
| 字段 | 类型 | 说明 |
|---|---|---|
success | bool | true 表示批次已受理 |
message | string | 提示信息;服务器维护时为“任务已保存并将在恢复后自动执行” |
tasks | array | 任务对象数组(Task 结构,与「提交任务」响应中的 task 层级完全一致),顺序与请求一致 |
failed | array | 被处理服务器拒绝的任务列表,元素为 { task_id, message };正常时为空数组 |
duration_notice | string | 任务时长提示文案 |
usage / api_request_count | object / int | 公共字段,见「鉴权与积分」 |
/tasks/{task_id}查询单个任务状态查询单个任务
task_id,每 5 分钟查询一次
先确认任务状态:success 后获取并下载文件;failed 或 timeout 时读取 error,需要继续时重新提交一个新任务。
status_text 返回 Web 端同款状态文案,stage 标注当前执行阶段;全部取值见下方「任务状态机」。
curl "https://cy126.com/openapi/v1/tasks/a1b2c3d4e5f6" \
-H "Authorization: Bearer YOUR_API_KEY"
请求参数
| 参数 | 位置 | 必填 | 说明 |
|---|---|---|---|
task_id | path | 是 | 任务 ID;只能查询属于当前 Key 用户的任务 |
Authorization | header | 是 | Bearer YOUR_API_KEY |
响应字段(HTTP 200)
| 字段 | 类型 | 说明 |
|---|---|---|
success | bool | true |
task | object | 任务对象,Task 结构与「提交任务」响应中的 task 层级完全一致;terminal=true 表示不必继续轮询,只有 status=success 且文件就绪时才返回 file_info_url |
usage | object | 公共字段,见「鉴权与积分」 |
api_request_count | int | 公共字段,见「鉴权与积分」 |
任务不存在或不属于当前用户时返回 HTTP 404 task_not_found。查询到 waiting 状态的任务时,服务端会自动尝试唤醒等待队列。
/tasks分页查询当前用户的全部任务查询当前用户的全部任务
返回通过 Web 与 API 提交的所有任务,包括已归档任务,适合 Agent 恢复上下文和批量检查进度。
curl "https://cy126.com/openapi/v1/tasks?page=1&page_size=50" \
-H "Authorization: Bearer YOUR_API_KEY"
# 可选筛选
?status=running
?source=api
?status=success&source=web
请求参数
| 参数 | 位置 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
page | query | 否 | 1 | 页码,从 1 开始 |
page_size | query | 否 | 50 | 每页数量,范围 1–100 |
status | query | 否 | — | 按状态筛选:waiting / queued / running / downloading / success / failed / timeout |
source | query | 否 | — | 按提交来源筛选:web / api |
Authorization | header | 是 | — | Bearer YOUR_API_KEY |
响应字段(HTTP 200)
| 字段 | 类型 | 说明 |
|---|---|---|
success | bool | true |
tasks | array | 任务对象数组,按提交时间倒序;数组元素为 Task 结构,与「提交任务」响应中的 task 层级完全一致 |
pagination | object | 分页信息 |
├─page | int | 当前页码 |
├─page_size | int | 每页数量 |
├─total | int | 符合条件的任务总数 |
└─total_pages | int | 总页数 |
usage | object | 公共字段,见「鉴权与积分」 |
api_request_count | int | 公共字段,见「鉴权与积分」 |
status / source 传入非法值时分别返回 invalid_status / invalid_source;page / page_size 非整数时返回 invalid_pagination(HTTP 400)。
/tasks/{task_id}/file获取文件信息与鉴权下载直链下载最终 XLSX
下载任务生成的最终 XLSX 文件。先获取文件信息及可直接访问的 download_url,再请求该地址保存文件;XLSX 中包含数据表、AI 分析及任务生成的全部产物。
# 第一步:获取文件信息
curl "https://cy126.com/openapi/v1/tasks/a1b2c3d4e5f6/file" \
-H "Authorization: Bearer YOUR_API_KEY"
# 第二步:直接请求响应中的完整 download_url
curl -L "DOWNLOAD_URL_FROM_RESPONSE" -o result.xlsx
请求参数
| 参数 | 位置 | 必填 | 说明 |
|---|---|---|---|
task_id | path | 是 | 任务 ID;只能获取属于当前 Key 用户的文件 |
Authorization / X-API-Key | header | 是 | 二选一;推荐 Authorization: Bearer YOUR_API_KEY |
响应(HTTP 200)
| 字段 | 类型 | 说明 |
|---|---|---|
file.task_id | string | 所属任务 ID |
file.filename | string | 建议保存的 XLSX 文件名 |
file.content_type | string | XLSX MIME 类型 |
file.size_bytes | int | 文件字节数 |
file.download_url | string | 包含 ticket 的完整直链,可直接 GET |
file.auth_method | string | 固定为 signed_ticket |
file.expires_at | string | UTC 到期时间,5 分钟有效;Key 重置后旧 URL 立即失效 |
usage / api_request_count | object / int | 公共用量字段 |
响应示例
{
"success": true,
"file": {
"task_id": "a1b2c3d4e5f6",
"filename": "B0XXXXXXXX-US-分析结果.xlsx",
"content_type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"size_bytes": 428617,
"download_url": "https://cy126.com/openapi/v1/tasks/a1b2c3d4e5f6/file/download?ticket=SHORT_LIVED_TICKET",
"auth_method": "signed_ticket",
"expires_at": "2026-09-07T00:05:00Z"
},
"usage": { "used": "20", "limit": "100", "remaining": "80", "is_unlimited": false },
"api_request_count": 20
}
/tasks/{task_id}/file/download?ticket=...返回 XLSX 二进制附件任务未完成时返回 HTTP 409 task_not_ready,请继续每 5 分钟轮询一次状态,待 status=success 后再下载,不要重复提交同一任务;任务不存在返回 404 task_not_found;文件丢失返回 404 file_not_found。
任务状态机
status 字段的全部取值及流转规则如下;status_text 为对应的实际状态文案(running 状态会按服务端队列细分为 获取中 / 分析中 / 待分析,与 Web 端显示一致)。
| 状态 | status_text | 说明 | 是否中间态 | 备注 |
|---|---|---|---|---|
waiting | 等待中 | 服务器维护,任务已持久保存 | 是 | 调用查询接口会尝试唤醒队列;服务恢复后自动转为 queued |
queued | 排队中 | 进入处理队列等待调度 | 是 | 任务按队列顺序执行,无需干预 |
running | 获取中分析中待分析执行中 | 正在采集数据 / AI 分析 | 是 | 按 stage 细分:stage1=获取中(数据采集),stage2 且 current=分析中(AI 分析),stage2 且 waiting=待分析(采集完成等待分析) |
downloading | 下载中 | 结果文件同步中 | 是 | 结果正在从处理服务器同步到 Web,稍后即可下载 |
success | 已完成 | 任务完成,可下载文件 | 终态 | terminal=true,调用下载接口获取 XLSX |
failed | 失败 | 执行失败 | 终态 | 读取 error 字段获取原因;直接重新提交任务即可 |
timeout | 超时 | 执行超时 | 终态 | 任务本身不设置执行超时时间,仅当处理服务器长时间停止时才会将排队中/处理中的任务判定为超时 |
timeout 只在处理服务器长时间停止响应时对排队中或处理中的任务触发。任务失败或超时后,调用方直接重新提交任务即可,API 不提供重试操作。
GET /tasks)时会包含已归档任务,通过 archived=true 字段区分。
Python / Agent 完整流程
import time
import requests
BASE_URL = "https://cy126.com/openapi/v1"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}
created = requests.post(
f"{BASE_URL}/tasks",
headers=HEADERS,
json={
"asin": "B0XXXXXXXX",
"site": "US",
"collection_config": {"reviews": True},
"ai_analysis": {"basic": True, "copy": True},
},
timeout=30,
)
created.raise_for_status()
task_id = created.json()["task"]["task_id"]
# 建议每 5 分钟轮询一次状态,先确认状态再决定下载或重提
while True:
response = requests.get(f"{BASE_URL}/tasks/{task_id}", headers=HEADERS, timeout=30)
response.raise_for_status()
task = response.json()["task"]
if task["status"] == "success":
break
if task["terminal"]:
# failed / timeout:读取 error 后直接重新提交任务即可
raise RuntimeError(task.get("error") or task["status"])
time.sleep(300)
file_info_response = requests.get(
f"{BASE_URL}/tasks/{task_id}/file",
headers=HEADERS,
timeout=30,
)
file_info_response.raise_for_status()
file_info = file_info_response.json()["file"]
# download_url 已包含短期 ticket,请在 5 分钟内下载;不要记录完整 URL
file_response = requests.get(file_info["download_url"], timeout=120)
file_response.raise_for_status()
with open(f"{task_id}.xlsx", "wb") as output:
output.write(file_response.content)
print("usage:", file_response.headers.get("X-Usage-Used"))
Agent 调用文档
这是一份平台无关的 Markdown 文档,包含全部接口、参数、状态、错误码、安全约束和完整调用流程。可以直接将文档提交给 Agent、AI 助手或 vibe coding 工具,让其按文档调用 API。
交付前检查
- 1
选择在线查看,或下载完整的
agent-api-guide.md交给 Agent。 - 2
准备当前用户的 API Key 与 ASIN;优先通过环境变量或 Secret 功能提供 Key。
- 3
确认 Agent 能执行后台轮询与完成通知,再按文档提交任务并下载 XLSX。
- 4
确认 Agent 遵守对话要求:提交前用中文完整转述采集与分析配置的可选参数;基础分析必选、不让用户选择;战略可独立运行;状态用中文汇报(排队中、待分析、分析中、已完成、失败、超时);最终输出字符串形式的完整文件路径。
常见错误码
所有错误响应均为统一结构:success=false + error.code(机器可读)+ error.message(中文说明),并同样附带 usage 与 api_request_count 公共字段(能鉴权成功时):
{
"success": false,
"error": { "code": "invalid_asin", "message": "asin 必须是 10 位字母或数字" },
"usage": { "used": "20", "limit": "100", "remaining": "80", "is_unlimited": false },
"api_request_count": 19
}
| HTTP | code | 含义 |
|---|---|---|
| 400 | invalid_asin | asin 不是 10 位字母或数字 |
| 400 | invalid_site | site 不是 US / JP |
| 400 | invalid_config | collection_config / ai_analysis 结构错误或布尔字段类型错误 |
| 400 | invalid_status / invalid_source / invalid_pagination | 列表接口的筛选或分页参数非法 |
| 401 | missing_api_key | 未提供 API Key |
| 401 | invalid_or_disabled_key | Key 无效,或所属用户已被停用 |
| 404 | task_not_found | 任务不存在或不属于当前用户 |
| 404 | file_not_found | 结果文件尚未就绪或已丢失 |
| 409 | task_not_ready | 任务尚未成功完成,暂不能下载 |
| 429 | quota_exceeded | 积分不足,请减少勾选项或联系客服 |
| 502 | upstream_rejected | 处理服务器拒绝任务;响应会附带 task_id |
| 502 | upstream_unavailable | 处理服务器提交异常(网络/超时);响应会附带 task_id |