thread/realtime/start (WebRTC, ChatGPT auth) fails since 2026-08-22 ~15:30Z: "Field `session.model` is not allowed for this Codex realtime session"
What happened
Starting a realtime conversation through codex app-server --enable realtime_conversation
(thread/realtime/start, version: "v3", outputModality: "audio", transport: {type: "webrtc", sdp})
has failed on every attempt since 2026-08-22 ~15:30Z. Last successful start on this machine: 2026-08-21T21:02Z.
ERROR codex_core::realtime_conversation: failed to start realtime conversation:
{"detail":"Field `session.model` is not allowed for this Codex realtime session"}
-> notification thread/realtime/error {"threadId": "...", "message": "{\"detail\":\"Field `session.model` is not allowed for this Codex realtime session\"}"}
Reproduction (no custom client needed)
codex app-server --enable realtime_conversation(ChatGPT login, macOS arm64)initializewithcapabilities: {experimentalApi: true},thread/startthread/realtime/startwithtransport: {type: "webrtc", sdp: <any offer>}→ error above.
Passing model: "gpt-realtime" or model: "gpt-realtime-1.5" explicitly gives the same error, so the backend rejects the
field, not a value. A syntactically dummy SDP also reaches the same error, i.e. the session config is rejected before SDP negotiation.
Analysis
codex-rs/core/src/realtime_conversation.rs (rust-v0.149.0, ~L1328) always sets model = Some(params.model ∨ experimental_realtime_ws_model ∨ DEFAULT_*),
so there is no configuration that omits session.model. main / 0.150.0-alpha.6 carry the same code.
Nothing changed client-side between the last success and the first failure (same binary, same config), so this looks like a backend-side validation change.
Versions
- codex-cli 0.149.0 (also reproduced on the version installed before, and on 0.149.0 after upgrading)
- macOS (Darwin 25.5), arm64, ChatGPT auth (websocket transport is not an option here: "realtime conversation requires API key auth")
Expected
Either the backend accepts session.model again, or the client omits it for Codex (ChatGPT-auth) realtime sessions.
3 Comments
Independently reproduced on a physical Samsung Galaxy Z Fold6 using ChatGPT authentication, native Android WebRTC, Codex Realtime v3, and current Codex source 8e649e3.
We verified from wire traces that the outgoing session object did not contain session.model, yet the service returned Field session.model is not allowed. Sending session: {} produced the same error; omitting session returned Field session must be an object.
This flow worked previously and now blocks all realtime voice sessions. No separate API key or custom backend is involved.
Independent sanitized reproduction from another native Codex Voice integration:
Field session.model is not allowed for this Codex realtime sessionThis looks consistent with a server-side validation/protocol regression rather than a client-supplied model value. All identifiers, prompts, thread IDs, and local paths are omitted.
Thanks for the detailed report. We’ve identified the cause: app-server’s default v3 model is no longer accepted for this ChatGPT-authenticated realtime flow.
As a workaround, explicitly set
"model": "gpt-live-1-codex"in the parameters of yourthread/realtime/startrequest, alongside"version": "v3". Keep your other parameters unchanged; don’t put model inside a nested session object.The error message is misleading: it rejects the model selection, not the presence of the field. Omitting model causes app-server to supply its default.
We’re preparing a change to update that default. It isn’t released yet, but explicit model selection provides a workaround for existing versions.