Open API Documentation / API开放文档 API 开放文档 Developer Integration / 开发者接入

API ACCESS GUIDE

API 接入指南

开放 API 用于第三方系统提交和管理自动化任务。接口基于 REST 风格,统一使用 JSON 请求和返回。

接口基准地址
所有请求均使用 POST 请求,Content-Type 为 application/json,并且必须携带 cdkey 参数。开放 API 面向第三方后端服务调用,请不要在浏览器前端、公开仓库、网页源码中保存 CDK、账号密码或 2FA。
POST

查询卡密余额

提交任务前检查 CDK 剩余可用次数。

参数类型必填说明
actionstring固定值 get_balance
cdkeystring有效卡密,最长 64 个字符
请求 JSON
{
  "action": "get_balance",
  "cdkey": "YOUR_CDK"
}
成功返回
{
  "success": true,
  "remaining_uses": 10.0
}
POST

提交任务

提交 Google 账号自动化任务,全流程扣除 1 次额度,仅提取扣除 0.5 次额度。

参数类型必填说明
actionstring固定值 submit_task
cdkeystring有效卡密,最长 64 个字符
emailstring完整 Google 邮箱,最长 254 个字符;服务端会去除首尾空格并转为小写
passwordstringGoogle 账号密码,最长 1024 个字符
twofastring身份验证器密钥,不是当前 6 位验证码,最长 512 个字符
task_typestring不传时默认为 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_statusget_my_tasks 返回的 offer_url 字段读取链接。
POST

查询任务状态

task_idemail 至少提供一个;同时提供时优先使用任务 ID 查询,否则按邮箱查询当前 CDK 下最新任务。

参数类型必填说明
actionstring固定值 get_status
cdkeystring提交任务时使用的卡密
task_idinteger至少一个大于 0 的任务 ID;与 email 同时提供时优先使用此字段
emailstring至少一个账号邮箱;未提供 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系统自愈状态:nonequeuedrunningrecoveredendedexhausted
data[].last_requeue_reason最近一次系统自愈原因;可能为 controller_disconnecteddevice_disconnectedsystem_no_progresssystem_run_timeoutsystem_start_timeoutsystem_lease_expiredsystem_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失败,任务未完成,详情可查看 messageerror_type
cancelled已取消,通常是排队任务被取消或重新处理后的历史状态。
常见任务级 error_type(非完整列表)说明
controller_disconnectedController 连接中断,任务会在断线宽限及运行对账后等待恢复或重新调度。
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

错误处理

状态码场景建议
400CDK 无效或已停用检查 cdkey 是否正确、是否仍处于启用状态。
400额度不足更换有可用额度的 CDK 后重试。
400邮箱格式不正确email 必须且只能包含一个 @,并提交完整 Google 邮箱。
400缺少 2FA 双重密钥必须传递 twofa 字段,且它是身份验证器密钥,不是当前 6 位动态验证码。
404任务不存在或不属于当前 CDK检查 task_idemailcdkey 是否对应。
409同一邮箱已有任务正在排队或处理中等待原任务完成、失败或取消后再提交。
200任务正在处理中,无法取消cancel_task 会返回 success: false,表示当前任务不能取消。
422动作不支持、字段类型错误或超过长度限制按照参数表重新构造 JSON,确认 action 拼写、字段类型和长度。
多数参数校验或权限错误会返回 HTTP 状态码和 detail 字段;少量业务状态会返回 HTTP 200,但 successfalse,调用方需要同时判断 HTTP 状态码和 JSON 内容。
参数或权限错误
{
  "detail": "Invalid or inactive CDK"
}
业务状态失败
{
  "success": false,
  "message": "任务正在处理中"
}