# ChatGPT Session JSON Format The raw ChatGPT session extracted from `https://chatgpt.com/api/auth/session` or via browser DevTools → Application → LocalStorage. ## JSON Structure ```json { "WARNING_BANNER": "!!!!!!!!!!!!!!!!!!!! DO NOT SHARE ... !!!!!!!!!!!!!!!!!!!!", "user": { "id": "user-XXX", // ChatGPT user ID (user-... format) "name": "Display Name", // From Google/OAuth profile "email": "user@gmail.com", // Login email "image": "https://lh3.google...", // Avatar URL "picture": "https://lh3.google...", // Same as image "idp": "google-oauth2", // Identity provider (google-oauth2, auth0, etc.) "iat": 1783170779, // Issued-at timestamp (Unix epoch) "mfa": false // Multi-factor auth enabled }, "expires": "2026-10-02T13:13:07.423Z", // ISO 8601 expiry "account": { "id": "UUID", // Account UUID (different from user.id) "planType": "free", // free | plus | pro | k12 "structure": "personal", // personal | workspace "isUsageBasedSeatEnabled": false, "isConversationClassifierEnabledForWorkspace": true, "isFedrampCompliantWorkspace": false, "isDelinquent": false, "residencyRegion": "no_constraint", "computeResidency": "no_constraint" }, "accessToken": "[REDACTED-JWT]...", // JWT (RS256) — for API calls "authProvider": "openai", // Always "openai" "sessionToken": "[REDACTED-JWT]...", // JWE (dir+A256GCM) — for web socket auth "rumViewTags": { "light_account": {"fetched": false} } } ``` ## Token Types | Field | Algorithm | Format | Use | |-------|-----------|--------|-----| | `accessToken` | RS256 (JWT) | `header.payload.signature` | REST API calls (`Authorization: Bearer `) | | `sessionToken` | dir + A256GCM (JWE) | `header.encryptedKey.iv.ciphertext.tag` | WebSocket auth, chat session refresh | ## Plan Types | planType | Models Available | Notes | |----------|-----------------|-------| | `free` | gpt-3.5-turbo, limited gpt-4o | No O1/O3/GPT-5 access | | `plus` | gpt-4o, o1, o3-mini | $20/mo | | `pro` | +o1-pro, gpt-4.5o, gpt-5 | $200/mo | | `k12` | gpt-4o, o3-mini, gpt-5.5 | Education workspace; O1 blocked by anti-abuse | ## IMAP Extraction Flow (alternative to browser) When the user provides the session JSON directly (copied from browser DevTools), save it to disk and validate: ```python import json with open('session.json') as f: data = json.load(f) # Validate structure assert 'accessToken' in data, "Missing accessToken" assert 'user' in data, "Missing user" assert data['user'].get('email'), "Missing email" # The accessToken can be used directly with OpenAI API: # Authorization: Bearer # Or fed into chat2api-proxy's tokens.txt ``` ## Extraction Methods 1. **Browser DevTools**: Open `chatgpt.com` → F12 → Application → LocalStorage → copy `___session` or visit `https://chatgpt.com/api/auth/session` 2. **Hermes Bridge**: Chrome extension → captures cookies/tokens from logged-in browser → saves to `hermes_bridge.json` 3. **Direct user paste**: User copies the JSON from DevTools and pastes it (as done 2026-07-04) ## Account Inventory | Email | Name | Plan | Structure | Expires | Token exp (10-day JWT) | |-------|------|------|-----------|---------|------------------------| | [REDACTED-NAME]@gmail.com | Ваня | free | personal | 2026-10-02 | — | | oooo1111oooo2222a@gmail.com | Серёга | free | personal | 2026-10-02 | — | | [REDACTED-NAME]@gmail.com | Никита | k12 | workspace | 2026-10-02 | 2026-07-14 (iat 07-04, ~10 day JWT) | All accounts: Google OAuth2, `no_constraint` residency. The K12 account (`[REDACTED-NAME]`) is a workspace-joined teacher account — `planType: "k12"`, `structure: "workspace"`, `workspaceType: "production"`, org ID `org-SITeTvGbrEDafVa9EHkSEn1j`.