快速开始
接口地址:
- 生成并保存一个 UUID 作为
request_id,然后提交一个账号。 - 保存响应中的
task_token。它是读取这次任务结果的凭证,有效期 30 天。 - 每 2 秒查询一次任务;只有
status=succeeded且verified=true时,才使用result.totp_secret。
调用接口即表示你确认有权管理该账号并执行换绑。请求超时请沿用原 request_id 和相同输入重试,不能换编号重新提交。任务凭证不要放进 URL 或分享给他人。
API 供服务端脚本调用,不依赖浏览器 Cookie。请求和结果使用 HTTPS;请勿把账号密码、密钥或任务凭证写入公开日志。
POST/api/v1/rotations
每次一个账号,使用 JSON 请求体。以下两种输入方式任选一种:
独立字段
{
"request_id": "1b123456-1234-4234-9234-123456789012",
"email": "your-account@example.com",
"password": "你的账号密码",
"totp_secret": "你的当前2FA长期密钥"
}账号行
{
"request_id": "1b123456-1234-4234-9234-123456789012",
"text": "your-account@example.com----密码----当前2FA长期密钥"
}text 同时支持 账号--密码--2FA;2FA 必须是 Base32 长期密钥,不能填六位验证码。上面的 UUID 仅作示例,每个新任务请自行生成新的 UUID。
响应:202 Accepted
{
"request_id": "你提交的UUID",
"task_token": "本次任务的私密凭证",
"status": "queued",
"poll_after_seconds": 2
}202 只表示任务已接收,不代表换绑成功。同一编号、相同内容重复提交会返回原任务;同一编号改换内容返回 409。
curl
先将 JSON 保存为仅自己可读的 request.json,避免把密码直接写入命令历史。
GET/api/v1/rotations/{request_id}
请求头:X-Task-Token: 提交时收到的task_token。无需其他密码或 API Key。
已验证成功的响应结构
{
"request_id": "你提交的UUID",
"status": "succeeded",
"phase": "complete",
"message": "",
"verified": true,
"result": {
"email": "your-account@example.com",
"password": "原密码,不变",
"totp_secret": "已核对的新2FA长期密钥",
"text": "账号----密码----新2FA长期密钥"
},
"recovery": null
}排队或处理中,result 为 null。失败或结果不确定时,recovery 包含账号、原密码、original_secret 和可能取得的 candidate_secret。候选密钥未经核对,不能当作成功结果;请妥善保存供恢复。
POST/api/v1/rotations/{request_id}/verify
使用同一 X-Task-Token 请求头,无需请求体。仅适用于已保存候选新密钥的失败或不确定任务;只核对已保存密钥,不再次申请或启用新密钥。响应 202 后继续查询原任务。
若没有候选密钥或任务已在运行,返回 409。无法完成额外登录验证时,需要在官方账号安全设置中处理。
Access Token 账号操作
以下接口供管理台页面调用,使用浏览器访客会话和 X-CSRF-Token 请求头,不属于无需 Cookie 的 v1 服务端 API。所有接口都需要 JSON 请求体中的 access_token。
POST/api/account/login/otp/start
{"email":"account@example.com"}向账号邮箱发送验证码,返回有效期约 10 分钟的 flow_id。
POST/api/account/login/otp/complete
{"flow_id":"流程编号","code":"123456"}验证码通过后返回 access_token 和 session_token。流程编号只允许创建它的访客使用,且只能使用一次。
POST/api/account/login/password
{"email":"account@example.com","password":"账号密码"}使用邮箱和密码登录并返回 Token。仅适用于未开启 2FA 的账号;已开启 2FA 时会返回明确提示。
POST/api/account/plan
{"access_token":"ChatGPT accessToken"}返回套餐类型、套餐名称、订阅计划、订阅是否有效和试用状态。
POST/api/account/email/begin
{"access_token":"ChatGPT accessToken","new_email":"new@example.com"}向新邮箱发送验证码。拿到验证码后调用下一步,第二步不会再次发送验证码。
POST/api/account/email/complete
{"access_token":"ChatGPT accessToken","new_email":"new@example.com","code":"240456"}成功后会完成邮箱换绑,原登录会话可能退出。
POST/api/account/password/start
{"access_token":"ChatGPT accessToken"}通过 reauthenticate 流程向当前账号邮箱发送验证码,返回有效期约 10 分钟的 flow_id。
POST/api/account/password/complete
{"flow_id":"流程编号","code":"123456","new_password":"GoodPass123!"}新密码需为 12–128 位并同时包含大小写字母、数字和符号。流程编号只允许创建它的访客使用,且只能使用一次。
Access Token、验证码和新密码都属于敏感凭证。请勿写入日志、导出文件或分享给他人。服务不会把 Access Token 保存到数据库。
Python 示例
下载示例Python 3 标准库即可运行,无需额外依赖。运行后输入账号、密码和长期 2FA 密钥;程序先保存提交编号,再提交任务,并把结果写入本地文件。示例保留相同编号供中断后继续查询。处理另一个账号时请在新目录运行,保留原任务文件以便恢复。
正在加载示例…状态与限制
| status | 含义 / 下一步 |
|---|---|
| queued / running | 排队 / 处理中,每 2 秒查询。 |
| succeeded | 新密钥有效、旧密钥已失效,可使用 result。 |
| failed | 未完成;阅读 message 和 recovery,不要自动创建新任务。 |
| partial / unknown | 结果待确认;保存恢复资料,可对原任务调用 verify。 |
| cancelled | 本次操作尚未开始,已停止;核对任务已有的恢复资料仍保留。 |
全站最多两路处理、30 个排队或运行中的账号;同一 IP 每 15 分钟最多提交或核对 6 次。相同任务的提交重试不新增排队,不重复换绑。网页每批最多 10 个,API 每次 1 个。
常见 HTTP 状态:400 输入错误;401 任务凭证无效或过期;403 来源不允许;404 任务不存在;409 编号冲突、账号正在处理或不适合核对;429 提交频繁;503 服务更新中。错误响应格式为 {"detail":"具体说明"}。
查询暂时失败并不代表换绑失败,请保存原编号和凭证后继续查询。不要盲目换编号重做。耗时与成功率受 OpenAI 登录流程及额外验证影响,不保证固定秒数。