Verified by us: this deal no longer works.
100% of the community still says it works — but we checked, and it's dead.
检查自己的账户是否还有邀请用户获得重置卡的资格
#Chatgpt
先检查下,再确认是否要升级会员获得邀请吗 (已过期关闭)
The briefing
1. 在网页登录Chatgpt
2. 使用F12 控制台输入以下命令,查看资格。
(async () => {
if (location.hostname !== "chatgpt.com") {
throw new Error("请在 https://chatgpt.com 页面执行");
}
const referralKey = "codex_referral_persistent_invite";
const sessionRes = await fetch("/api/auth/session", {
credentials: "include",
headers: { accept: "application/json" },
});
const session = await sessionRes.json();
const token = session.accessToken;
if (!token) {
throw new Error("无法获取 accessToken,请确认已登录 ChatGPT");
}
async function api(path) {
const res = await fetch(path, {
method: "GET",
credentials: "include",
headers: {
accept: "application/json",
authorization: `Bearer ${token}`,
},
});
const text = await res.text();
let data;
try {
data = JSON.parse(text);
} catch {
data = text.slice(0, 300);
}
return { status: res.status, ok: res.ok, data };
}
console.clear();
console.log("%c正在检测 Codex 邀请资格...", "font-size:14px;font-weight:700;color:#2563eb;");
const [account, usage, rules, eligibility, resetCredits] = await Promise.all([
api("/backend-api/wham/accounts/check"),
api("/backend-api/wham/usage"),
api(`/backend-api/wham/referrals/eligibility_rules?referral_key=${encodeURIComponent(referralKey)}`),
api(`/backend-api/referrals/invite/eligibility?referral_key=${encodeURIComponent(referralKey)}`),
api("/backend-api/wham/rate-limit-reset-credits"),
]);
const acct = account.data?.accounts?.[0] ?? {};
const plan = usage.data?.plan_type ?? acct.plan_type ?? "unknown";
const timeRule = rules.data?.time_frame_rules?.[0] ?? {};
const sent = Number(timeRule.invites_sent ?? 0);
const total = Number(timeRule.invites_total ?? 0);
const remaining = Math.max(total - sent, 0);
const shouldShow = eligibility.data?.should_show;
let verdict;
let verdictColor;
if (remaining <= 0) {
verdict = "当前周期邀请额度已用完。";
verdictColor = "#dc2626";
} else if (plan === "free") {
verdict = "当前有邀请规则额度,但 Free 账号发送可能被 plan 拦截;升级 Plus/Pro 后可能解锁,但不能保证。";
verdictColor = "#b45309";
} else if (shouldShow === false) {
verdict = "当前有额度,但前端 eligibility 不显示;可能被服务端活动/实验开关拦截。";
verdictColor = "#b45309";
} else {
verdict = "当前账号大概率有邀请资格,可以尝试发送邀请。";
verdictColor = "#047857";
}
const summary = {
plan_type: plan,
reset_cards_available:
usage.data?.rate_limit_reset_credits?.available_count ??
resetCredits.data?.available_count ??
"unknown",
invites_sent: timeRule.invites_sent ?? "unknown",
invites_total: timeRule.invites_total ?? "unknown",
invite_remaining: remaining,
time_frame: timeRule.time_frame ?? "unknown",
eligibility_http: eligibility.status,
should_show: typeof shouldShow === "boolean" ? shouldShow : "unknown",
verdict,
};
const rawSanitized = JSON.parse(JSON.stringify({
account,
usage,
rules,
eligibility,
resetCredits,
}, (k, v) => /token|secret|authorization|cookie|email|url|link|id/i.test(k) ? "[redacted]" : v));
const css = {
title: "font-size:18px;font-weight:800;color:#111827;margin:6px 0;",
verdict: `font-size:15px;font-weight:800;color:${verdictColor};`,
label: "color:#6b7280;font-weight:700;",
value: "color:#111827;font-weight:800;",
muted: "color:#6b7280;",
line: "color:#d1d5db;",
};
console.log("%cCodex 邀请资格检测结果", css.title);
console.log("%c%s", css.verdict, verdict);
console.log("%c────────────────────────────────────", css.line);
console.log("%c当前套餐 %c%s", css.label, css.value, summary.plan_type);
console.log("%c重置卡数量 %c%s", css.label, css.value, summary.reset_cards_available);
console.log(
"%c邀请额度 %c已用 %s / 总计 %s / 剩余 %s",
css.label,
css.value,
summary.invites_sent,
summary.invites_total,
summary.invite_remaining
);
console.log("%c统计周期 %c%s", css.label, css.value, summary.time_frame);
console.log("%cEligibility %cHTTP %s", css.label, css.value, summary.eligibility_http);
console.log("%c前端 should_show %c%s", css.label, css.value, summary.should_show);
console.log("%c────────────────────────────────────", css.line);
console.log("%c结论说明", css.label);
console.log(
"%c%s",
css.muted,
"invite_remaining > 0 只代表规则额度未用完;真实能否发送还取决于 plan 和服务端 eligibility。"
);
console.groupCollapsed("完整响应,已脱敏");
console.dir(rawSanitized);
console.groupEnd();
return summary;
})();
3. 使用F12 控制台输入以下命令,查看现在的邀请情况
(async () => {
if (location.hostname !== "chatgpt.com") throw new Error("请在 https://chatgpt.com 执行");
const referralKey = "codex_referral_persistent_invite";
const timeZone = "Asia/Shanghai";
const privacyMode = true;
const session = await (await fetch("/api/auth/session", {
credentials: "include",
headers: { accept: "application/json" },
})).json();
const token = session.accessToken;
if (!token) throw new Error("无法获取 accessToken,请确认已登录 ChatGPT");
async function get(path) {
const res = await fetch(path, {
credentials: "include",
headers: { accept: "application/json", authorization: `Bearer ${token}` },
});
const text = await res.text();
let data;
try { data = JSON.parse(text); } catch { data = text.slice(0, 300); }
return { status: res.status, ok: res.ok, data };
}
const [account, usage, rules, eligibility, resetCredits] = await Promise.all([
get("/backend-api/wham/accounts/check"),
get("/backend-api/wham/usage"),
get(`/backend-api/wham/referrals/eligibility_rules?referral_key=${encodeURIComponent(referralKey)}`),
get(`/backend-api/referrals/invite/eligibility?referral_key=${encodeURIComponent(referralKey)}`),
get("/backend-api/wham/rate-limit-reset-credits"),
]);
const esc = (v) => String(v ?? "").replace(/[&<>"']/g, m => ({
"&": "&", "<": "<", ">": ">", '"': """, "'": "'"
}[m]));
const mask = (s) => {
s = String(s ?? "");
if (!privacyMode) return s;
return s
.replace(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/gi, "[email]")
.replace(/\b\d{7,}\b/g, v => `尾号 ${v.slice(-4)}`);
};
const fmt = (iso) => iso ? new Intl.DateTimeFormat("zh-CN", {
timeZone,
year: "numeric", month: "2-digit", day: "2-digit",
hour: "2-digit", minute: "2-digit", second: "2-digit",
hour12: false,
}).format(new Date(iso)).replace(/\//g, "-") : "";
const sourceOf = (c) => {
const text = `${c.title ?? ""} ${c.description ?? ""}`.toLowerCase();
if (/invite|referral|邀请/.test(text)) return mask(c.description || "邀请奖励");
if (/codex team|free|official|官方/.test(text)) return "官方免费赠送";
return mask(c.description || c.title || c.reset_type || "未知来源");
};
const acct = account.data?.accounts?.[0] ?? {};
const plan = usage.data?.plan_type ?? acct.plan_type ?? "unknown";
const rule = rules.data?.time_frame_rules?.[0] ?? {};
const sent = Number(rule.invites_sent ?? 0);
const total = Number(rule.invites_total ?? 0);
const remaining = Math.max(total - sent, 0);
const shouldShow = eligibility.data?.should_show;
const summary = {
plan,
resetCards: usage.data?.rate_limit_reset_credits?.available_count ?? resetCredits.data?.available_count ?? "unknown",
invitesSent: rule.invites_sent ?? "unknown",
invitesTotal: rule.invites_total ?? "unknown",
inviteRemaining: remaining,
timeFrame: rule.time_frame ?? "unknown",
eligibilityHttp: eligibility.status,
shouldShow: typeof shouldShow === "boolean" ? shouldShow : "unknown",
};
const rows = (resetCredits.data?.credits ?? []).map((c, i) => ({
序号: i + 1,
来源: sourceOf(c),
状态: c.status ?? "",
领取时间: fmt(c.granted_at),
过期时间: fmt(c.expires_at),
}));
const verdict =
remaining <= 0 ? "当前周期邀请额度已用完"
: plan === "free" ? "有规则额度,但 Free 可能被套餐拦截"
: shouldShow === false ? "有规则额度,但前端 eligibility 不显示"
: "大概率具备邀请资格";
document.getElementById("codex-invite-report")?.remove();
const box = document.createElement("div");
box.id = "codex-invite-report";
box.style = "position:fixed;right:20px;top:20px;z-index:999999;width:760px;max-height:80vh;overflow:auto;background:#111827;color:#f9fafb;border:1px solid #374151;border-radius:10px;box-shadow:0 20px 50px #0008;font:14px system-ui;padding:18px;";
box.innerHTML = `
<div style="display:flex;justify-content:space-between;gap:12px;align-items:center">
<div style="font-size:18px;font-weight:800">Codex 邀请资格详情</div>
<button onclick="this.closest('#codex-invite-report').remove()" style="background:#374151;color:white;border:0;border-radius:6px;padding:6px 10px;cursor:pointer">关闭</button>
</div>
<div style="margin:10px 0 16px;color:${remaining > 0 && plan !== "free" && shouldShow !== false ? "#34d399" : "#fbbf24"};font-weight:800">${esc(verdict)}</div>
<div style="display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:16px">
${[
["套餐", summary.plan],
["重置卡", summary.resetCards],
["邀请额度", `${summary.invitesSent}/${summary.invitesTotal}`],
["剩余邀请", summary.inviteRemaining],
["周期", summary.timeFrame],
["Eligibility", `HTTP ${summary.eligibilityHttp}`],
["should_show", summary.shouldShow],
].map(([k,v]) => `<div style="background:#1f2937;border-radius:8px;padding:10px"><div style="color:#9ca3af;font-size:12px">${esc(k)}</div><div style="font-weight:800;margin-top:4px">${esc(v)}</div></div>`).join("")}
</div>
<table style="width:100%;border-collapse:collapse">
<thead><tr>${["序号","来源","状态","领取时间","过期时间"].map(h => `<th style="text-align:left;border-bottom:1px solid #374151;padding:8px;color:#d1d5db">${h}</th>`).join("")}</tr></thead>
<tbody>${rows.map(r => `<tr>${Object.values(r).map(v => `<td style="border-bottom:1px solid #1f2937;padding:8px">${esc(v)}</td>`).join("")}</tr>`).join("")}</tbody>
</table>
`;
document.body.appendChild(box);
console.log("Codex 邀请资格摘要:", summary);
console.table(rows);
})();
—— 这条活动日期已过(截止日期记的是 2026-06-25),先关掉了。若后面官方又开,再单独更新。
