> 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. Atoms is the
> voice-agent platform.

# Endpointing

> On-by-default `endpointing` mode on the Pulse STT WebSocket that finalizes transcripts on trailing silence. Set `endpointing=false` to disable.

Real-Time

Pulse STT streaming finalizes each turn on trailing silence. When the speaker stops, the server emits `is_final: true` promptly instead of waiting for the model's internal finalization cadence. Transcript accuracy is unchanged.

On by default. Set `endpointing=false` on the WebSocket URL to opt out.

## When to use it

Leave `endpointing=true` (the default) for:

* **Voice agents.** Faster `is_final` means faster LLM turn, faster TTS response, lower perceived latency.
* **Live captioning.** Steadier finalization pacing between the speaker stopping and the caption settling.
* **Any interactive workload** where the client acts on `is_final=true` and the wait between speech-end and finalize is user-visible.

Set `endpointing=false` for batch-style workloads that consume the full transcript at the end and don't care about per-turn finalize timing.

## Disabling

```javascript
const url = new URL("wss://api.smallest.ai/waves/v1/stt/live?model=pulse");
url.searchParams.append("language", "en");
url.searchParams.append("encoding", "linear16");
url.searchParams.append("sample_rate", "16000");
url.searchParams.append("endpointing", "false");

const ws = new WebSocket(url.toString(), {
  headers: { Authorization: `Bearer ${API_KEY}` },
});
```

## Parameters

| Parameter     | Values               | Default  | Effect                                                                                           |
| ------------- | -------------------- | -------- | ------------------------------------------------------------------------------------------------ |
| `endpointing` | `"true"` / `"false"` | `"true"` | Finalize-on-silence. Set to `"false"` to fall back to the model's internal finalization cadence. |

## How finalization changes

**With `endpointing=true`** (default): the connection watches for a silence gap on the audio and finalizes as soon as one is detected. No tokens are lost.

**With `endpointing=false`**: the model finalizes each turn on its own internal cadence, which is slower than trailing-silence detection and varies with where the speaker's pause lands.

Accuracy is unchanged. The same tokens are emitted either way. Only the finalize timing changes.

## Interaction with other params

* **`vad_events`.** Independent. `endpointing` controls when the current turn's transcript is finalized. `vad_events` adds `speech_started` / `speech_ended` messages for observability. They do not conflict.
* **`eou_timeout_ms`.** The model's own end-of-utterance timer. When `endpointing=true`, silence detection usually fires first, so `eou_timeout_ms` acts as a ceiling. When `endpointing=false`, it controls finalization alone.
* **`finalize_on_words`.** Word-count-based auto-finalization (default `true`). Independent of endpointing. Whichever condition fires first triggers the final.
* **`finalize` message.** Client-triggered finalization always takes precedence and works with any combination of the above.

## Notes

* **On by default.** Existing streaming clients get the new behavior automatically. Accuracy is unchanged.
* **Opt-out.** Set `endpointing=false` to restore the previous finalization behavior.
* **India region only for South Indian languages.** `ta`, `te`, `kn`, `ml`, and `multi-south-indic` route through the India region gateway. Endpointing works identically on both regions.