---
name: chatgpt-web2api
description: ChatGPT в CebersResearch через реверс-прокси залогиненного chatgpt.com (research/chatgpt)
metadata:
  node_type: memory
  type: project
  originSessionId: bec80f54-b944-4b3d-b98e-48e98f0f3e05
---

Сервис `~/Разработки/chatgpt-web2api/cgpt_app.py` на мини (FastAPI :1721, launchd
`com.cebers.chatgpt-web`, venv переиспользован `~/.venvs/deepseek-free-api`, process_match
`cgpt_app.py`). OpenAI-совместимый реверс-прокси **залогиненного веб-бэкенда chatgpt.com** →
даёт GPT-5.x (auto-роутер) как `research/chatgpt` в [[cebersresearch_overview]]. Мотив:
браузерная квота больше, чем у Codex-OAuth ([[codex_omniroute_provider]]).

**4 барьера ChatGPT и как сняты** (разведка 2026-07-13):
1. РФ-геоблок → egress через не-RU xray `127.0.0.1:2080` (DE). Обязательно, иначе 403.
2. Cloudflare → `curl_cffi impersonate="chrome124"` (как обход WAF у deepseek).
3. sentinel PoW → локально `sha3_512(seed+base64(json(config)))`, перебор counter пока
   hex-префикс ≤ difficulty. Сервер содержимое config не валидирует.
4. Turnstile → флаг `required:True`, но conversation принимается по ОДНОМУ PoW-токену
   (3/3). Arkose не запрашивается. Если однажды реально потребует turnstile — жёсткий
   блокер (headless/платный солвер), тогда честно сказать.

**Поток запроса:** `/backend-api/sentinel/chat-requirements` (body `{}`) → token+pow →
solve → `/backend-api/conversation` SSE. `history_and_training_disabled:True`. Парс SSE:
classic `message.content.parts` + delta `{v:...}`.

**⛔ ОТКЛЮЧЁН (2026-07-15) — по решению юзера.** ChatGPT-web оказался структурно нестабилен: k12-workspace деактивирован → personal/free токен `token_invalidated`. Первопричина = **анти-абуз OpenAI по датацентр-IP**: токен добыт при входе юзера (РФ/VPN), а запросы идут с DE-хостинг-IP нашего xray-egress → OpenAI флагует «доступ с подозрительного IP» и инвалидирует токен (сессия потом стабильно отдаёт мёртвый токен, next-auth не переминчивает). Резиденшел-IP обошёл бы, датацентр — нет. Снято: модели research/chatgpt* из шлюза, тайл chatgpt_web из дашборда, launchd booted out + плист→.disabled (порт 1721 свободен). Код/venv/identity.json на мини сохранены (реанимация — только со стабильным резиденшел-egress). У юзера остаются 4 голоса: DeepSeek/GigaChat-Ultra/Qwen/Gemini. Альтернатива для ChatGPT — Codex-OAuth (стабильно, но меньше квота). НИЖЕ — историческая механика (как было заведено).

**АККАУНТ (2026-07-15):** k12-workspace `cebersdev1@gmail.com` ДЕАКТИВИРОВАН (chat=`402 deactivated_workspace`; тайл флапал — это был реальный аутейдж, не флап). Перелогинен ТЕМ ЖЕ Google-юзером в **personal/free** (account cf921823). Занос токена: пейн (новый инстанс) блокирует https→loopback (mixed-content даже с PNA) → через **буфер Mac**: юзер Cmd+A/Cmd+C на /api/auth/session → `pbpaste | seed_from_clipboard.py` → POST /api/auth (значения не в чат). ⚠️ Free-план: есть `gpt-5-5`+mini+`gpt-5-4-t-mini`, НЕТ gpt-5-6-thinking/Pro → research/chatgpt-thinking=gpt-5-4-t-mini, chatgpt-pro=gpt-5-5. Тайлу chatgpt_web добавлен notify_grace_sec=360.

**Модели:** форс работает (само-название модели врёт!). Авторитет = `message.metadata.model_slug`
из SSE. `auto`→**gpt-5-5**, `gpt-5-6-thinking`→honored. Аккаунт (k12) даёт 5.3-5.6/Thinking/
Pro/o3/Deep Research (`/backend-api/models`). o3 через прокси пусто. Дефолт research/chatgpt=auto=gpt-5-5.
`_resolve_model` пропускает реальные slug (gpt-5-*, o3, research, auto) + алиасы chatgpt-thinking/-pro/-mini.

**Auth + АВТОРЕФРЕШ (активен, автономно):** accessToken (Bearer JWT ~10 дней) + session_token
в identity.json, занос POST /api/auth из браузера через туннель («pipe, not echo», нужен
CORSMiddleware иначе браузерный POST=Failed to fetch). **Ключ:** `/api/auth/session` отдаёт
`sessionToken` (next-auth JWE, ~3 мес, scope offline_access) прямо в ТЕЛЕ ответа — JS читает
(не только HttpOnly-кука!), поэтому DevTools НЕ нужен. `_refresh_access_token`+цикл 6ч+рефреш
при 401: session-cookie на /api/auth/session через egress → свежий accessToken (проверено
HTTP 200 + ротация sessionToken). Автономно ~3 мес; ручной занос — раз в ~3 мес/при разлогине.
healthz.autorefresh=bool(session_token)+token_days_left; 503 при протухании→degraded-тайл.

Полные доки: Obsidian Projects/chatgpt-web2api (5 файлов, D-cgpt-1..3). Родственники:
[[cebersresearch_gigachat_web]], [[cebersresearch_deepseek_restore_pending]] (тот же
web2api-паттерн + та же хрупкость).
