Realtime V3: WebRTC call creation succeeds but sideband returns 404 call_id_not_found
What version of Codex is running?
- Installed CLI:
codex-cli 0.145.0 - Codex Desktop bundled runtime: reproduced with both the stable runtime and
0.146.0-alpha.3 - Platform: macOS arm64
- Auth mode: ChatGPT login
- Realtime request:
version: v3,transport: WebRTC,model: gpt-live-1-codex
What issue are you seeing?
Codex Desktop successfully creates a fresh Realtime V3 WebRTC call, but the sideband WebSocket cannot join that same call.
Observed request sequence:
POST https://chatgpt.com/backend-api/codex/realtime/calls
-> 201 Created
-> Location contains a fresh rtc_* call_id
GET wss://api.openai.com/v1/live/<same-fresh-call-id>
-> 404 Not Found
-> call_id_not_found / No session found for the provided call_id
The 404 occurs immediately after call creation and repeats across sideband retries, so this is not an expired call id.
The source comment in sideband_websocket_auth_headers says that for ChatGPT-auth sessions, transceiver is expected to accept the same call-create identity on the direct api.openai.com sideband path. That handoff does not appear to happen for this account/session.
What steps reproduce the bug?
- Enable
realtime_conversation. - Sign in with ChatGPT auth.
- Open Codex Desktop and start Voice.
- Desktop sends
thread/realtime/startwith V3 + WebRTC. - Wait for the call creation response and sideband join.
- Voice exits with:
Voice chat error: stream disconnected before completion:
failed to connect realtime websocket: HTTP error: 404 Not Found
Expected behavior
The V3 sideband WebSocket joins the fresh WebRTC call and Voice remains connected.
Diagnostic evidence / controls
- Ordinary Codex Responses WebSocket connectivity succeeds with
HTTP 101 Switching Protocols. - Reproduced through two different VPN exit regions (US and Sweden), with
chatgpt.com,api.openai.com, and auth traffic using the same exit route in each test. - A synthetic app-server V3 call reproduced the same immediate
call_id_not_foundusing the bundled0.146.0-alpha.3runtime. - Forcing the V3 sideband to the ChatGPT backend path changes the failure to
403 Forbidden, including from the real Desktop process where DeviceCheck attestation is generated. - Forcing call creation to
https://api.openai.com/v1/livereturns500 Internal Server Errorwith aLocation/rtc_*header, but that id also has no joinable session and returnscall_id_not_found. - V1 WebRTC is denied with
Voice session access denied. - V2 is rejected because AVAS WebRTC requires V1 or V3.
- Standalone WebSocket transport is not a ChatGPT-auth workaround because it requires API-key auth.
- Re-authentication is unlikely to explain the split: the authenticated ChatGPT backend creates the call successfully, and the exact matching auth/account headers are forwarded to the sideband as implemented in current source.
No access tokens, account ids, call ids, public IPs, or attestation values are included here. I can provide request ids / CF-Ray values privately if maintainers need them.
2 Comments
I can reproduce the same call-creation/sideband handoff failure in the current Codex Desktop app, with the sideband variant returning HTTP 403.
Environment:
26.721.41059(bundle5848)codex-cli 0.146.0-alpha.3.1Observed sequence from the real Desktop process:
Desktop retried the complete sequence once. Both attempts created a different fresh
rtc_*id and both failed at the sideband handshake with:Additional controls:
thread/realtime/startboth succeeded.chatgpt.comandws.chatgpt.comwere routed through the same proxy exit.ws.chatgpt.com:443is reachable; an unauthenticated HTTPS request reaches the edge and returns 404 rather than a network or TLS failure.base_urlis the officialhttps://chatgpt.com/backend-api/codex, withwire_api = "responses"andrequires_openai_auth = true; no third-party endpoint participates in this voice attempt.This strongly matches the cross-service Realtime call/session handoff or sideband authorization problem described here. I can provide sanitized timestamps or additional Desktop logs if useful.
Related OAuth-only live signal from OpenClaw
v2026.7.2-beta.5with bundledcodex-cli 0.145.0. I am not claiming this is proven to be the same failure stage as the reported sideband 404, because OpenClaw does not expose the underlying call-create/sideband wire trace in this path.Environment:
thread/realtime/start,version: "v3", WebRTCThe browser offer was produced by a real
RTCPeerConnection: microphone track added beforecreateOffer(),oai-eventsdata channel created, andoffer.sdpposted successfully to OpenClaw's local Codex broker. The broker accepted the request, but Codex app-server never emitted eitherthread/realtime/sdpor an explicit realtime error. OpenClaw therefore failed after its 60-second wait with:Adding an actual audio track versus a synthetic offer did not change the result. A v2 WebRTC control was rejected immediately with
AVAS realtime calls require realtime v1 or v3; v1 was not a usable ChatGPT-auth fallback.This may be an earlier manifestation of the same v3 + ChatGPT-auth call/session handoff problem, but without the wire trace I cannot assert that call creation succeeded and then hit the exact
call_id_not_foundsideband step described here. The OpenClaw-side tracking issue and fuller reproduction are at https://github.com/openclaw/openclaw/issues/115021.