# WebSocket: Can't distinguish idle\_timeout from regular speech\_stopped - is this expected?

**URL:** <https://community.openai.com/t/websocket-cant-distinguish-idle-timeout-from-regular-speech-stopped-is-this-expected/1371509>\
**Category:** Bugs\
**Tags:** realtime, api-realtime, gpt-realtime\
**Created:** [January 12, 2026, 1:00pm UTC](https://community.openai.com/t/websocket-cant-distinguish-idle-timeout-from-regular-speech-stopped-is-this-expected/1371509 "2026-01-12T13:00:07Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![dudi](https://sea2.discourse-cdn.com/openai1/user_avatar/community.openai.com/dudi/32/715052_2.png) [@dudi](https://community.openai.com/u/dudi)\
**Post date:** [January 12, 2026, 1:00pm UTC](https://community.openai.com/t/websocket-cant-distinguish-idle-timeout-from-regular-speech-stopped-is-this-expected/1371509/1 "2026-01-12T13:00:07Z")

</div>

Hi everyone,

I’m implementing a voice bot using the Realtime API over **WebSocket** (not WebRTC/SIP), and I’m running into an issue with `idle_timeout_ms`.

## The Problem

When I configure `idle_timeout_ms` in my session:

json

```auto
{
  "type": "session.update",
  "session": {
     "turn_detection": {
       "type": "server_vad",
       "idle_timeout_ms": 6000
    }
  }
}

```

Both of these scenarios trigger the same `input_audio_buffer.speech_stopped` event:

1. **User finishes speaking** → `speech_stopped`

2. **Idle timeout triggers** → `speech_stopped` (also)

According to the [official docs](https://developers.openai.com/blog/realtime-api/):

> “When the timeout is triggered, the server sends an input\_audio\_buffer.timeout\_triggered event”

However, this event only exists for **WebRTC/SIP** connections, not WebSocket.

## The Question

**Is there any way to distinguish between these two cases in WebSocket?**

I need to know when the model is responding due to `idle_timeout_ms` vs. when it’s responding to actual user speech, so I can handle them differently in my application logic.

## What I’ve Tried

- Checking `audio_start_ms` and `audio_end_ms` duration (unreliable)

- Looking for additional fields in the event (none found)

- Reviewing all server events documentation

## Workaround

Currently considering implementing the idle timeout logic manually in my application code instead of relying on `idle_timeout_ms`, but it would be much cleaner to have a proper way to detect this from the API events.

Has anyone found a solution for this, or is this a feature that should be added to the WebSocket interface?

Thanks!
