{"service":"chatgpt-bridge","transport":"REST; debug bridge connects at ws://<host>/ext, ask() extension at ws://<host>/ask-ext","auth":"Authorization: Bearer <token> or ?token= — a shared secret is baked in by default; override via the BRIDGE_TOKEN env + the extension popup","endpoints":{"POST /api/ask {text,model?,temporary?,system?,history?,reasoningEffort?,timeout?,raw?}":"headless ask() via the standalone extension — reuses ChatGPT's own pipeline, returns the answer","GET  /api/ask/status · POST /api/ask/arm":"ask() extension connection + ready tabs; arm attaches/injects","GET  /api/ask/models":"picker catalogue: models + thinking-effort presets (read from the tab cache)","GET  /v1/models · POST /v1/chat/completions {messages,tools?,stream?}":"OpenAI-compatible chat completions — streaming + emulated tool-calling so agentic clients (opencode) work","POST /v1/responses {model,input,instructions?,reasoning:{effort}?,attachments?,background?,stream?}":"OpenAI Responses API — background/long-run (>1h) that survives a tab reload; recommended for Pro/research","POST /v1/files {name,mime,data_b64}":"upload a file (base64) -> attachment handle; pass handles as `attachments` on /v1/responses","POST /v1/files/download {conversationId?,sandboxPath?,messageId?,fileId?}":"download a file the model wrote in its sandbox (or an uploaded file_id) -> {ok,dataB64,name,mime,size}","GET  /v1/responses/:id[?stream=true&starting_after=] · POST /v1/responses/:id/cancel · DELETE /v1/responses/:id":"poll / stream+resume / cancel / delete a response","GET  /v1/conversations[?offset=&limit=&order=updated|created] · GET /v1/conversations/search?query= · GET /v1/conversations/:id[?max_chars=]":"browse history (read-only): list paginated / search (fast, indexed) / read one chat's Q/A","GET  /api/status":"service + extension + attach status (+ request counts)","GET  /api/requests[?limit=]":"active + recent requests (asks/chats + /v1/responses jobs), newest first — persisted to disk + restored on restart","POST /api/eval {code,expression?}":"run JS in the page (MAIN world), return value","POST /api/dom {selector,limit?,includeHtml?}":"structured snapshot of matching elements","POST /api/html {cap?} · POST /api/text {cap?}":"document outerHTML / innerText","GET  /api/network?q=&type=&limit= · GET /api/network/:id":"captured requests + bodies","GET  /api/console · GET /api/chatgpt/events":"captured console / SSE events","POST /api/cdp {method,params}":"raw Chrome DevTools Protocol call","POST /api/chatgpt/send {text,wait?} · GET /api/chatgpt/messages · POST /api/chatgpt/stop":"chat control","POST /api/navigate {url} · POST /api/screenshot {full?}":"page control","GET  /api/tabs · POST /api/attach{tabId?} · POST /api/detach{tabId?}":"tabs + debugger","POST /api/clear":"clear the capture store"}}