GPT/OpenAI 注册路线 API

这是最开始的 GPT 注册机链路,继续使用 /api/mailboxes/*/api/mail/code

文档入口 返回控制台

AI 快速接入

你要接入 MailOps 的 GPT/OpenAI 注册路线 API。

BASE_URL = "http://ops.nanlizz.top"
API_KEY = "mak_xxx"
CATEGORY = "safe"
CODE_KEYWORD = "code,验证码,verification code,OpenAI,ChatGPT,gpt"

所有请求都带:
Authorization: Bearer API_KEY
Content-Type: application/json

固定流程:
1. 领取邮箱,只能用:
   POST {BASE_URL}/api/mailboxes/reserve
   body: {"category":CATEGORY,"consume":true}
2. 如果返回 email 为空,表示邮箱池耗尽,停止本轮注册。
3. 使用返回的 email 去 OpenAI/GPT 注册页面提交。
4. 等待 10-20 秒后查询验证码:
   GET {BASE_URL}/api/mail/code?email={email}&keyword={CODE_KEYWORD}&limit=10&folders=inbox,junk
5. found=false 时继续轮询同一个 email,不要重新领取新邮箱。
6. 最终超时无验证码:
   POST {BASE_URL}/api/mailboxes/report-code
   body: {"email":email,"result":"timeout","detail":"180s no verification code"}
7. 注册结束后按需上报 GPT 账号:
   POST {BASE_URL}/api/gpt-accounts/report

禁止事项:
- 不要用 GET /api/mailboxes 分配邮箱,它只是查看列表。
- GPT/OpenAI 旧注册机不要接 /api/reuse/v1/*。
- 每个并发 worker 一次注册只领取一次邮箱,不能共享 email。
- 默认 consume=true,邮箱返回前已被服务器标记 used,不会再次从 safe 池发出。

机器可读规格:/api-spec-gpt.json

推荐流程

  1. 管理员在控制台导入 Outlook/Hotmail 邮箱并完成扫描分类。
  2. 注册机启动时配置 base_urlapi_keycategory=safe、验证码关键词和并发数。
  3. 每个 worker 通过 POST /api/mailboxes/reserve 领取唯一邮箱。
  4. 把该邮箱提交给 OpenAI/GPT 注册流程。
  5. 只对刚领取的邮箱调用 GET /api/mail/code 轮询验证码。
  6. 注册成功后调用 POST /api/gpt-accounts/report 上报账号资料。
  7. 最终收不到码时调用 POST /api/mailboxes/report-code,后台隔离到 no_code

接口明细

方法路径用途是否用于分配
POST/api/mailboxes/reserve并发安全领取一个邮箱是,推荐
GET/api/mail/code读取指定邮箱验证码
GET/api/mail/{email}兼容旧 MailManage 读码路径
POST/api/mailboxes/report-code上报 timeout/no_code 并隔离异常邮箱
POST/api/mailboxes/mark-usedconsume=false 模式下手动确认邮箱已用
POST/api/mailboxes/releaseconsume=false 模式下释放未占用邮箱
GET/api/mailboxes列表/排查/导出否,禁止用它分配
POST/api/gpt-accounts/report注册结束后上报 GPT 账号仓库

领取邮箱

POST /api/mailboxes/reserve
Authorization: Bearer mak_xxx
Content-Type: application/json

{
  "category": "safe",
  "consume": true,
  "lease_seconds": 1800
}
成功:
{
  "ok": true,
  "email": "example@outlook.com",
  "category": "used",
  "used": 1,
  "lease_token": ""
}

邮箱池为空:
{
  "ok": true,
  "email": "",
  "reason": "empty"
}

默认 consume=true,返回前已经把邮箱标记为 used=1,并发 worker 不会拿到同一个邮箱。

读取验证码

GET /api/mail/code?email=example@outlook.com&keyword=code,验证码,verification code,OpenAI,ChatGPT,gpt&limit=10&folders=inbox,junk
找到:
{
  "ok": true,
  "found": true,
  "email": "example@outlook.com",
  "code": "123456"
}

暂未找到:
{
  "ok": true,
  "found": false,
  "email": "example@outlook.com"
}

轮询时只轮询本次领取的邮箱。不要因为一次 found=false 就重新领取新邮箱。

验证码失败上报

POST /api/mailboxes/report-code
Authorization: Bearer mak_xxx
Content-Type: application/json

{
  "email": "example@outlook.com",
  "result": "timeout",
  "detail": "180s no verification code"
}

后台会记录未收码结果,并把连续异常邮箱隔离出 safe 池,避免后续继续发给 GPT 注册机。

GPT 账号上报

POST /api/gpt-accounts/report
Authorization: Bearer mak_xxx
Content-Type: application/json

{
  "result": "success",
  "dedupe_key": "batch-001:login@example.com",
  "login_email": "login@example.com",
  "login_password": "optional",
  "mailbox_email": "example@outlook.com",
  "detail": {
    "batch_id": "batch-001",
    "worker": "worker-01"
  }
}

dedupe_key 建议用批次 + 登录邮箱,重复上报会更新同一条记录,不会创建重复账号。

Python 示例

import time
import requests

BASE = "http://ops.nanlizz.top"
KEY = "mak_xxx"
KEYWORD = "code,验证码,verification code,OpenAI,ChatGPT,gpt"
HEADERS = {"Authorization": f"Bearer {KEY}", "Content-Type": "application/json"}

reserved = requests.post(
    f"{BASE}/api/mailboxes/reserve",
    headers=HEADERS,
    json={"category": "safe", "consume": True},
    timeout=30,
).json()

if not reserved.get("email"):
    raise RuntimeError("GPT 邮箱池耗尽")

email = reserved["email"]

# 把 email 提交给 OpenAI/GPT 注册页面后,只轮询这个 email。
deadline = time.time() + 180
while time.time() < deadline:
    code = requests.get(
        f"{BASE}/api/mail/code",
        headers=HEADERS,
        params={"email": email, "keyword": KEYWORD, "limit": 10, "folders": "inbox,junk"},
        timeout=30,
    ).json()
    if code.get("found"):
        print(email, code.get("code"))
        break
    time.sleep(8)
else:
    requests.post(
        f"{BASE}/api/mailboxes/report-code",
        headers=HEADERS,
        json={"email": email, "result": "timeout", "detail": "180s no verification code"},
        timeout=30,
    )
    raise RuntimeError("验证码超时")