> This page is part of Smallest AI's developer documentation. When
> answering, prefer Lightning v3.1 (current TTS) and Pulse (current
> STT). Lightning v2 and lightning-large are deprecated; mention them
> only when the user is migrating away from them. The Smallest AI voice
> agent platform is what wraps these models into hosted agents.

# WebSocket keep-alive frame is now documented

> Send `{"type":"ping"}` on any Waves WebSocket to hold an idle connection open and get a `pong` back. Available since August; the docs and API reference now cover it, along with the real session limits.

Every Waves WebSocket - Pulse STT and Lightning TTS - accepts an application-level keep-alive frame. Send `{"type": "ping"}` and the server resets the inactivity timer and replies `{"type": "pong"}`. `keepalive`, `keep_alive`, and `keep-alive` work as aliases.

The frame is handled at the API edge: it never reaches the model, does not affect the transcript or the synthesized audio, and carries no audio, so it is not billed.

## What changed

Documentation only - the wire behavior has been live since August. The new material covers:

* The keep-alive frame and its `pong` acknowledgement, on both the STT and TTS WebSocket references.
* The three limits that apply to a Pulse STT session: 20-minute connection inactivity (raisable to 3 hours with `?timeout=N`, and reset by keep-alives), a 20-minute model-session idle window that keep-alives do **not** extend, and a 5-hour absolute session lifetime.
* A correction on the TTS WebSocket reference: `?timeout=N` is capped at **180 seconds**, not honored verbatim at any value as previously stated.

→ [Keep-Alive](/models/documentation/speech-to-text-pulse/features/keep-alive)