Files
autoreg-skills-max/skills/chatgpt-autoreg/references/token-extraction.md

3.8 KiB

Token Extraction Workflow — 2026-08-01

Extract tokens from account_manager.db

After a registration task completes with status: succeeded, extract tokens immediately (session cookies expire within 1-3 hours):

import sqlite3, json

db = sqlite3.connect("C:/Users/User/Desktop/GPT-AUTOREG/aBaiAutoplus/account_manager.db")
db.row_factory = sqlite3.Row

# 1. Find valid accounts from the latest task
task = db.execute("SELECT result_json FROM tasks WHERE status='succeeded' ORDER BY finished_at DESC LIMIT 1").fetchone()
result = json.loads(task["result_json"])
account_ids = result["data"]["account_ids"]  # e.g. [33, 34, 35, ...]

# 2. Get emails
emails = {}
for aid in account_ids:
    a = db.execute("SELECT email FROM accounts WHERE id = ?", (aid,)).fetchone()
    emails[aid] = a["email"]

# 3. Get full tokens (cookies + access_token + session_token + legacy_token)
new_accounts = []
for aid in account_ids:
    creds = db.execute("""
        SELECT key, value FROM account_credentials
        WHERE account_id = ? AND credential_type IN ('token','cookie')
    """, (aid,)).fetchall()
    tokens = {c["key"]: c["value"] for c in creds}
    new_accounts.append({"email": emails[aid], "tokens": tokens})

# 4. Save to accounts_tokens.json
with open("C:/Users/User/Desktop/GPT-AUTOREG/accounts_tokens.json", "w") as f:
    json.dump({"accounts": new_accounts}, f, indent=2)

db.close()

Token structure

Each account in account_credentials table has these credential types:

credential_type key Description
token session_token ~3700-char JWT, used as __Secure-next-auth.session-token cookie
token access_token ~1700-char JWT, ChatGPT web app access token
token legacy_token Same as access_token
cookie cookies Python dict string with 27 cookies (CF, oai-, auth-, etc.)
identifier account_id UUID for workspace/account

Cookies set via context.add_cookies() — format requirements:

  • domain: "chatgpt.com" (NO leading dot)
  • secure: True
  • sameSite: "Lax"
  • Do NOT set httpOnly field (causes "Invalid cookie fields" error)
  • Truncate cookie values >4000 chars (Playwright limit)
import ast
cookies_dict = ast.literal_eval(account["tokens"]["cookies"])
cookies_list = []
for name, value in cookies_dict.items():
    if not isinstance(value, str): continue
    clean = value[:4000] if len(value) > 4000 else value
    cookies_list.append({
        "name": name, "value": clean,
        "domain": "chatgpt.com", "path": "/",
        "secure": True, "sameSite": "Lax",
    })
await page.context.add_cookies(cookies_list)

API endpoints tested

Endpoint Result Notes
GET /backend-api/me HTTP 200 Works even on fresh accounts
POST /backend-api/conversation HTTP 403 "Unusual activity" on accounts <24h old
POST /backend-api/conversation (text) HTTP 403 Same block for text messages
POST api.openai.com/v1/images/generations HTTP 401 token_invalidated — access_token not valid for official API

Transport comparison

Transport Cloudflare /me /conversation
httpx (Python) Blocked (403 HTML) ❌ ❌
Playwright Chromium Blocked ("Just a moment...") ❌ ❌
Camoufox (Firefox) Passes ✅ 200 ❌ 403 (account age)
curl_cffi (aBaiAutoplus) Passes (firefox144 impersonation) ✅ Used for registration only

Registration task command

curl -s -X POST http://localhost:8000/api/tasks/register \
  -H "Content-Type: application/json" \
  -d '{"count":10,"concurrency":2,"executor_type":"protocol","captcha_solver":"auto","extra":{"mail_provider":"imap_pool","identity_provider":"mailbox"}}'

Typical yield: 8/10 success with t-online.de pool. Failures are account_deactivated or invalid_auth_step.