使用指南

OpenAI OAuth 卡密兑换 · 质保 1 小时

一、什么是卡密?

卡密是一串类似 OPENAI-XXXX-XXXX-XXXX 的兑换码,每张可以兑换一个 OpenAI (ChatGPT) OAuth 账号。

二、如何提卡?

  1. 提卡页面 输入卡密,点击"立即提卡"
  2. 系统从号池随机分配一个已验证存活的 OpenAI 账号
  3. 页面展示账号,可切换 cpa 格式 / sub2api 格式 复制使用

三、质保说明 重要

提卡后享有 1 小时 质保。号不可用时:

  1. 同一张卡密再次调用提卡接口
  2. 系统自动检测原号 → 死了自动换新号 → 仍存活提示无需换

最多换号 5 次 · 超时卡密失效

四、拿到账号怎么用?

提卡返回两种格式:

  1. cpa 格式 (account_info.cpa) — 保存为 .json 放入 cpa 的 auths/ 目录
  2. sub2api 格式 (account_info.sub2api) — 直接导入 sub2api 等代理工具

五、公开 API 无需认证

POST /api/redeem

提卡 / 质保换号。

请求字段类型必填说明
card_keystring卡密
notestring备注
curl -X POST https://team.cat68.com/api/redeem \
  -H "Content-Type: application/json" \
  -d '{"card_key":"OPENAI-XXXX-XXXX-XXXX"}'
import httpx, asyncio

async def redeem(card_key: str):
    async with httpx.AsyncClient() as c:
        r = await c.post("https://team.cat68.com/api/redeem",
            json={"card_key": card_key})
        return r.json()

result = asyncio.run(redeem("OPENAI-XXXX-XXXX-XXXX"))
print(result["account_info"]["cpa"])     # cpa 格式
print(result["account_info"]["sub2api"]) # sub2api 格式
const resp = await fetch("https://team.cat68.com/api/redeem", {
  method: "POST",
  headers: {"Content-Type": "application/json"},
  body: JSON.stringify({ card_key: "OPENAI-XXXX-XXXX-XXXX" }),
});
const data = await resp.json();
console.log(data.account_info.cpa);      // cpa 格式
console.log(data.account_info.sub2api);  // sub2api 格式
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "net/http"
)

func main() {
    body, _ := json.Marshal(map[string]string{
        "card_key": "OPENAI-XXXX-XXXX-XXXX",
    })
    resp, _ := http.Post(
        "https://team.cat68.com/api/redeem",
        "application/json",
        bytes.NewReader(body),
    )
    defer resp.Body.Close()
    var result map[string]any
    json.NewDecoder(resp.Body).Decode(&result)
    fmt.Println(result["account_info"])
}
$ch = curl_init("https://team.cat68.com/api/redeem");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => ["Content-Type: application/json"],
    CURLOPT_POSTFIELDS => json_encode([
        "card_key" => "OPENAI-XXXX-XXXX-XXXX",
    ]),
    CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($data["account_info"]["cpa"]);    // cpa 格式
print_r($data["account_info"]["sub2api"]); // sub2api 格式
响应字段类型说明
successbool是否成功
messagestring提示信息
account_info.cpaobjectcpa 格式,含 access_token / refresh_token / email / account_id / plan_type
account_info.sub2apiobjectsub2api 格式,含 credentials / concurrency / priority
is_warranty_replacementbool是否为质保换号
warranty_remainingstring质保剩余,"45分钟" / null
replacement_countint已换号次数
POST /api/verify-card

校验卡密(不消耗)。

请求字段类型必填说明
card_keystring卡密
curl -X POST https://team.cat68.com/api/verify-card \
  -H "Content-Type: application/json" \
  -d '{"card_key":"OPENAI-XXXX-XXXX-XXXX"}'
import httpx, asyncio

async def verify(card_key: str):
    async with httpx.AsyncClient() as c:
        r = await c.post("https://team.cat68.com/api/verify-card",
            json={"card_key": card_key})
        return r.json()

result = asyncio.run(verify("OPENAI-XXXX-XXXX-XXXX"))
print(result["valid"], result["mode"])
const resp = await fetch("https://team.cat68.com/api/verify-card", {
  method: "POST",
  headers: {"Content-Type": "application/json"},
  body: JSON.stringify({ card_key: "OPENAI-XXXX-XXXX-XXXX" }),
});
const { valid, mode } = await resp.json();
console.log(valid, mode);
func verify(cardKey string) (map[string]any, error) {
    body, _ := json.Marshal(map[string]string{
        "card_key": cardKey,
    })
    resp, _ := http.Post(
        "https://team.cat68.com/api/verify-card",
        "application/json",
        bytes.NewReader(body),
    )
    defer resp.Body.Close()
    var result map[string]any
    json.NewDecoder(resp.Body).Decode(&result)
    return result, nil
}
$ch = curl_init("https://team.cat68.com/api/verify-card");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => ["Content-Type: application/json"],
    CURLOPT_POSTFIELDS => json_encode([
        "card_key" => "OPENAI-XXXX-XXXX-XXXX",
    ]),
    CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
echo $data["valid"] ? "有效" : "无效";
echo " [" . $data["mode"] . "]";
响应字段类型说明
validbool是否有效
messagestring状态描述
modestringnew / warranty / expired / disabled / invalid
summary.emailstring?若已提卡,显示分配的邮箱
summary.warranty_remainingstring?质保剩余时间

六、常见问题

Q: 提卡返回 429 是不是没额度了?
不是。Codex token 不走 api.openai.com 开发 API,429 是正常的。通过 cpa 代理使用即可。

Q: 质保期内怎么换号?
用同一张卡密再次调用 /api/redeem,系统自动检测 → 死号换新、存活提示无需换。

Q: 怎么批量自动化提卡?
写好卡密列表,循环调 /api/redeem。先调 /api/verify-card 预检避免无效请求。

← 返回提卡页面