API ACCESS GUIDE
API 接入指南
开放 API 用于第三方系统提交和管理自动化任务。接口基于 REST 风格,统一使用 JSON 请求和返回。
接口基准地址
所有请求均使用 POST 请求,Content-Type 为 application/json,并且必须携带 cdkey 参数。开放 API 面向第三方后端服务调用,请不要在浏览器前端、公开仓库、网页源码中保存 CDK、账号密码或 2FA。
POST
查询卡密余额
提交任务前检查 CDK 剩余可用次数。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
action | string | 是 | 固定值 get_balance |
cdkey | string | 是 | 有效卡密,最长 64 个字符 |
请求 JSON
{
"action": "get_balance",
"cdkey": "YOUR_CDK"
}
成功返回
{
"success": true,
"remaining_uses": 10.0
}
POST
提交任务
提交 Google 账号自动化任务,全流程扣除 1 次额度,仅提取扣除 0.5 次额度。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
action | string | 是 | 固定值 submit_task |
cdkey | string | 是 | 有效卡密,最长 64 个字符 |
email | string | 是 | 完整 Google 邮箱,最长 254 个字符;服务端会去除首尾空格并转为小写 |
password | string | 是 | Google 账号密码,最长 1024 个字符 |
twofa | string | 是 | 身份验证器密钥,不是当前 6 位验证码,最长 512 个字符 |
task_type | string | 否 | 不传时默认为 full 全流程;传 extract 时为仅提取 Offer 链接。 |
请求 JSON
{
"action": "submit_task",
"cdkey": "YOUR_CDK",
"email": "user@gmail.com",
"password": "ACCOUNT_PASSWORD",
"twofa": "JBSWY3DPEHPK3PXP",
"task_type": "full"
}
仅提取请求 JSON
{
"action": "submit_task",
"cdkey": "YOUR_CDK",
"email": "user@gmail.com",
"password": "ACCOUNT_PASSWORD",
"twofa": "JBSWY3DPEHPK3PXP",
"task_type": "extract"
}
成功返回
{
"success": true,
"message": "任务提交成功",
"task_id": 168,
"remaining_uses": 9.0
}
仅提取任务会执行提取链接;成功后可在
get_status 或 get_my_tasks 返回的 offer_url 字段读取链接。
POST
查询任务状态
task_id 和 email 至少提供一个;同时提供时优先使用任务 ID 查询,否则按邮箱查询当前 CDK 下最新任务。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
action | string | 是 | 固定值 get_status |
cdkey | string | 是 | 提交任务时使用的卡密 |
task_id | integer | 至少一个 | 大于 0 的任务 ID;与 email 同时提供时优先使用此字段 |
email | string | 至少一个 | 账号邮箱;未提供 task_id 时,查询当前 CDK 下该邮箱的最新任务;查询时会去除首尾空格并转为小写 |
请求 JSON
{
"action": "get_status",
"cdkey": "YOUR_CDK",
"task_id": 168
}
返回示例
{
"success": true,
"data": {
"task_id": 168,
"email": "account@gmail.com",
"status": "running",
"display_status": "running",
"message": "正在执行",
"error_type": null,
"completed_at": null,
"offer_url": null,
"task_type": "full",
"retry_count": 0,
"max_retries": 2,
"requeue_count": 0,
"max_requeues": 2,
"system_recovery_state": "none",
"last_requeue_reason": null,
"last_requeued_at": null,
"queue_duration_seconds": 12
}
}
仅提取成功返回
{
"success": true,
"data": {
"task_id": 169,
"email": "account@gmail.com",
"status": "success",
"display_status": "success",
"message": "已提取Offer链接",
"error_type": null,
"completed_at": "2026-07-02T10:00:00Z",
"offer_url": "https://one.google.com/offer/TOKEN",
"task_type": "extract",
"retry_count": 0,
"max_retries": 2,
"requeue_count": 0,
"max_requeues": 2,
"system_recovery_state": "none",
"last_requeue_reason": null,
"last_requeued_at": null,
"queue_duration_seconds": 4
}
}
get_status 适合单个任务快速查询,并返回业务重试、系统自愈、本轮排队和 error_type。需要任务列表、队列摘要或 queue_position 时,请使用 get_my_tasks。
POST
取消排队任务
仅排队中的任务可以取消,取消成功后自动退还本次额度。
请求 JSON
{
"action": "cancel_task",
"cdkey": "YOUR_CDK",
"task_id": 168
}
成功返回
{
"success": true,
"message": "任务已取消并退款"
}
无法取消返回
{
"success": false,
"message": "任务正在处理中"
}
POST
查询我的任务
返回当前 CDK 最近 50 条任务,按任务 ID 倒序排列。
get_my_tasks 适合列表轮询和队列展示,会返回当前 CDK 的队列摘要、最近任务、失败类型、排队位置、创建时间和完成时间。
请求 JSON
{
"action": "get_my_tasks",
"cdkey": "YOUR_CDK"
}
成功返回
{
"success": true,
"queue": {
"total_pending": 5,
"my_pending": 1,
"my_first_position": 3,
"my_first_task_id": 168
},
"data": [
{
"task_id": 168,
"email": "account@gmail.com",
"status": "pending",
"display_status": "abnormal",
"message": "登录页面加载异常,请稍后重新提交 | 将自动重试 (1/2)",
"error_type": "account_check_error",
"task_type": "full",
"offer_url": null,
"retry_count": 1,
"max_retries": 2,
"requeue_count": 0,
"max_requeues": 2,
"system_recovery_state": "none",
"last_requeue_reason": null,
"last_requeued_at": null,
"queue_duration_seconds": 38,
"queue_position": 3,
"created_at": "2026-06-26T10:00:00Z",
"completed_at": null
},
{
"task_id": 167,
"email": "extract@gmail.com",
"status": "success",
"display_status": "success",
"message": "已提取Offer链接",
"error_type": null,
"task_type": "extract",
"offer_url": "https://one.google.com/offer/TOKEN",
"retry_count": 0,
"max_retries": 2,
"requeue_count": 1,
"max_requeues": 2,
"system_recovery_state": "recovered",
"last_requeue_reason": "system_lease_expired",
"last_requeued_at": "2026-06-26T09:55:00Z",
"queue_duration_seconds": 15,
"queue_position": null,
"created_at": "2026-06-26T09:50:00Z",
"completed_at": "2026-06-26T10:05:00Z"
}
]
}
| 字段 | 说明 |
|---|---|
queue.total_pending | 全局当前排队任务数。 |
queue.my_pending | 当前 CDK 下正在排队的任务数。 |
queue.my_first_position | 当前 CDK 最靠前排队任务在全局队列中的位置;没有排队任务时为 null。 |
queue.my_first_task_id | 当前 CDK 最靠前排队任务的任务 ID;没有排队任务时为 null。 |
data[].task_id | 任务 ID。 |
data[].email | 提交任务时使用的 Google 邮箱。 |
data[].status | 任务底层状态,取值见下方“任务状态值”。自动重试任务底层仍为 pending。 |
data[].display_status | 任务展示状态。自动重试或 Controller 断线未恢复时返回 abnormal;Controller 恢复后但尚未派发时返回 pending;派发到设备后返回 running。 |
data[].message | 当前详情提示,会随着任务进度或失败原因变化;API 返回原始任务文案,前端可能会显示更短的友好文案。 |
data[].error_type | 失败、自动重试或异常类型;等待自动重试的 pending 任务也可能保留该值,普通非失败任务通常为 null。 |
data[].task_type | 任务类型,full 为全流程,extract 为仅提取。 |
data[].offer_url | 仅提取任务成功后为 Offer 链接;其他任务或未提取成功时通常为 null。 |
data[].retry_count | 业务异常触发的自动重试次数,不等同于换机次数;仅部分错误类型会在调度时优先避开原设备。 |
data[].max_retries | 业务异常最多自动重试次数,可用于展示“业务重试 retry_count/max_retries”。 |
data[].requeue_count | 系统看门狗或运行协议异常触发的系统自愈次数,与业务重试次数相互独立。 |
data[].max_requeues | 系统最多自愈次数,当前为 2。 |
data[].system_recovery_state | 系统自愈状态:none、queued、running、recovered、ended 或 exhausted。 |
data[].last_requeue_reason | 最近一次系统自愈原因;可能为 controller_disconnected、device_disconnected、system_no_progress、system_run_timeout、system_start_timeout、system_lease_expired 或 system_device_busy。 |
data[].last_requeued_at | 最近一次重新进入队列的 UTC 时间;从未重排时为 null。 |
data[].queue_duration_seconds | 本轮排队秒数;重新排队后从 last_requeued_at 重新计算,不是任务历史总时长。 |
data[].queue_position | 单条任务在全局队列中的位置;仅排队任务通常会有值。 |
data[].created_at | 任务创建时间。 |
data[].completed_at | 任务完成、失败或取消时间;未结束时为 null。 |
| 任务状态值 | 说明 |
|---|---|
pending | 排队中,任务已提交,或系统恢复后正在等待重新调度。 |
abnormal | 异常处理中,任务曾发生可自动重试异常,或 Controller/设备断线后同一任务 ID 已打回队列等待恢复。此值通常出现在 display_status 中。 |
running | 处理中,设备正在执行任务。 |
success | 成功,任务已完成。 |
failed | 失败,任务未完成,详情可查看 message 和 error_type。 |
cancelled | 已取消,通常是排队任务被取消或重新处理后的历史状态。 |
| 常见任务级 error_type(非完整列表) | 说明 |
|---|---|
controller_disconnected | Controller 连接中断,任务会在断线宽限及运行对账后等待恢复或重新调度。 |
device_disconnected | 设备心跳或连接中断,任务会停止旧运行并等待系统重新调度。 |
system_no_progress | 连续 4 分钟没有有效业务进度,系统会停止旧运行并执行自愈。 |
system_run_timeout | 单轮执行达到 15 分钟硬上限,系统会停止旧运行并执行自愈。 |
system_start_timeout | 任务派发后未按时确认启动,系统会重新对账并执行自愈。 |
system_lease_expired | 运行租约没有按时续期,系统会重新对账并执行自愈。 |
system_device_busy | 设备仍被旧运行占用。任务尚未确认启动时会返回队列继续等待,不增加 requeue_count;任务已确认启动后才按系统自愈处理并增加 requeue_count。两种情况都不增加业务重试字段 retry_count。 |
system_recovery_exhausted | 系统已经完成 2 次自愈,第三轮仍触发系统异常;任务终止并自动退还额度。 |
system_recovery_timeout | 异常恢复或部分业务重试任务等待重新调度超过 3 分钟,任务终止并自动退还额度。 |
offer_link_extract_failed | 仅提取任务未能提取 Offer 链接,任务会失败并自动退还额度;可稍后重新提交。 |
CODE
服务端调用示例
Python
import requests
response = requests.post(
"{{API_ENDPOINT}}",
json={
"action": "get_balance",
"cdkey": "YOUR_CDK",
},
timeout=30,
)
print(response.json())
PHP
<?php
$payload = json_encode([
"action" => "get_balance",
"cdkey" => "YOUR_CDK"
]);
$ch = curl_init("{{API_ENDPOINT}}");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Content-Type: application/json"],
CURLOPT_POSTFIELDS => $payload,
]);
echo curl_exec($ch);
HTTP
错误处理
| 状态码 | 场景 | 建议 |
|---|---|---|
| 400 | CDK 无效或已停用 | 检查 cdkey 是否正确、是否仍处于启用状态。 |
| 400 | 额度不足 | 更换有可用额度的 CDK 后重试。 |
| 400 | 邮箱格式不正确 | email 必须且只能包含一个 @,并提交完整 Google 邮箱。 |
| 400 | 缺少 2FA 双重密钥 | 必须传递 twofa 字段,且它是身份验证器密钥,不是当前 6 位动态验证码。 |
| 404 | 任务不存在或不属于当前 CDK | 检查 task_id、email 和 cdkey 是否对应。 |
| 409 | 同一邮箱已有任务正在排队或处理中 | 等待原任务完成、失败或取消后再提交。 |
| 200 | 任务正在处理中,无法取消 | cancel_task 会返回 success: false,表示当前任务不能取消。 |
| 422 | 动作不支持、字段类型错误或超过长度限制 | 按照参数表重新构造 JSON,确认 action 拼写、字段类型和长度。 |
多数参数校验或权限错误会返回 HTTP 状态码和
detail 字段;少量业务状态会返回 HTTP 200,但 success 为 false,调用方需要同时判断 HTTP 状态码和 JSON 内容。
参数或权限错误
{
"detail": "Invalid or inactive CDK"
}
业务状态失败
{
"success": false,
"message": "任务正在处理中"
}