STT API: clarify that words[] and utterances[] need word_timestamps=true

The STT API-ref example response showed populated words[] and utterances[] arrays, but a default request from the docs explorer or Postman returns both arrays empty (the transcription string is fine).

Both arrays are gated on the word_timestamps=true query parameter. The same flag turns on both. Without it, the API still transcribes but does not attach per-word timings or sentence-level segments.

TTS: opt-in math_notation flag for reading operators as words

Lightning v3.1 and v3.1_pro accept a new math_notation request field on every transport (POST /waves/v1/tts, POST /waves/v1/tts/live, and the wss://.../waves/v1/tts/live WebSocket).

Off by default. Set math_notation: true to have the normalizer read digit-flanked math operators as spoken words: 6 x 7 becomes “6 times 7”, 2 ^ 10 becomes “2 to the power of 10”, 6 ÷ 2 becomes “6 divided by 2”. The operator word follows number_pronunciation_language (Hindi and Marathi localized; every other language falls back to English).

New `x-expire-content` header: opt a request into content deletion (enterprise)

Enterprise plans only. Send x-expire-content: true on a Text to Speech or Speech to Text request and that request’s free-text content is deleted after 7 days, while the usage record is kept — billing, credits, and usage graphs are unaffected.

Documented as a header parameter on the HTTP routes — POST /waves/v1/tts, POST /waves/v1/tts/live, POST /waves/v1/stt/ — and on the WebSocket routes wss://.../waves/v1/tts/live and wss://.../waves/v1/stt/live, where it is sent on the upgrade request.

TTS: latency measurement caveat + legacy /streaming-tts/stream artifacts retired

Two related updates to the TTS docs.

Latency measurement caveat added to the Lightning v3.1 + Pro model cards. The published ~200 ms TTFB is measured from a client in the same AWS region as the inference pool (India ap-south-1, USA us-west-2, geo-routed). Client-to-server RTT adds on top. A naive TTFB test from a laptop far from either region typically reports 500-800 ms because RTT dominates synthesis time. Callout now spells this out next to the number so readers know to test from their production network position, not their dev machine.

TTS language surface aligned with product-team canonical

The unified TTS endpoints (POST /waves/v1/tts + wss://api.smallest.ai/waves/v1/tts/live) now document the full language surface the platform accepts, matching the product-team lineup for both lightning_v3.1 (base) and lightning_v3.1_pro.

Added to the language enum on both HTTP and WebSocket:

  • auto — routes the request internally based on input text. Any English or Hindi voice can be used across all supported languages when auto is set; the platform handles language-appropriate routing without needing an explicit code per call. Recommended for cross-language use cases.
  • nl (Dutch) — accepted on both lightning_v3.1 and lightning_v3.1_pro.
  • sv (Swedish) — accepted on both lightning_v3.1 and lightning_v3.1_pro.

Models docs URL migration — waves → models, version dropdown flattened

The Models product now lives under /models/ on the docs site, replacing the older /waves/ prefix. The version dropdown is also gone. There is only one active version (v4.0.0), and it is served from a flat URL — /waves/v-4-0-0/documentation/text-to-speech-lightning/streaming becomes /models/documentation/text-to-speech-lightning/streaming.

Every old URL 301-redirects to its new equivalent. Legacy v2.2.0 and v3.0.1 bookmarks (retired earlier) also land on the same flat /models/* paths. Bookmarks, external links, and search-indexed pages keep resolving.

Waves docs v2.2.0 and v3.0.1 retired; v4.0.0 is now the sole documented surface

The v4.0.0 doc surface is now the only supported view of the Waves models. The version dropdown no longer offers v3.0.1 or v2.2.0, and the pages under those two versions have been removed from the docs site. Old bookmarked and search-indexed URLs 301-redirect to their v4 equivalents; where a specific v3.0.1/v2.2.0 page was renamed or merged in the v4 restructure, the redirect points at the closest v4 page (voice-cloning how-tos land on Instant Clone (API) etc.). The API-reference tabs on the retired versions rendered a completely different OpenAPI (Lightning v1/v2/large focused), so any auto-generated API-ref URLs on those versions land on the v4 API-ref authentication page.

Agno integration guide

Added a documentation page for generating speech with Lightning v3.1 and Lightning v3.1 Pro inside Agno, the open-source Python framework for building multi-agent systems, via the SmallestTools toolkit.

Agno integration

TTS deprecated endpoints hidden from API ref; delete-voice endpoint retired from docs

Nine deprecated TTS endpoints are hidden from the v4 API-reference sidebar. Old bookmarked URLs 301-redirect to the current unified endpoints on /waves/v1/tts and /waves/v1/voice-cloning. Wire-level behavior is unchanged. Existing customer code keeps working.

Hidden from sidebar:

  • POST /waves/v1/lightning-v3.1/get_speech, POST /waves/v1/lightning-v3.1/stream, WSS /waves/v1/lightning-v3.1/get_speech/stream (superseded by POST /waves/v1/tts + POST /waves/v1/tts/live + WSS /waves/v1/tts/live)
  • POST /waves/v1/lightning-v2/get_speech, POST /waves/v1/lightning-v2/stream, WSS /waves/v1/lightning-v2/get_speech/stream (deprecated, superseded by the same unified routes)
  • POST /waves/v1/lightning-large/add_voice (superseded by POST /waves/v1/voice-cloning)
  • GET /waves/v1/lightning-large/get_cloned_voices (superseded by GET /waves/v1/voice-cloning)

Pulse STT: `vad_events` query parameter on the streaming WebSocket

The Pulse STT WebSocket accepts a new query parameter, vad_events. When set to true, the server emits two additional JSON message types: speech_started and speech_ended. They are interleaved with the transcription stream on the same connection.

Usage

Set vad_events=true on the WebSocket URL. Default is false. vad=true is accepted as an alias; when both are set, vad_events takes precedence and vad is ignored.

Lightning v3.1 + Pulse STT API-ref Python snippets — `SmallestAI(api_key=...)` (was `token=...`)

The Python “Try it” snippets attached to the Lightning v3.1 TTS and Pulse STT API reference operations used the pre-4.4.5 SDK constructor signature:

1client = SmallestAI(token="YOUR_API_KEY")

The SDK kwarg was renamed in 4.4.5. Customers copy-pasting the old snippet hit:

WebSocket auth and default URL fixes

Fixed authentication configuration and default server URLs across the WebSocket specs for Lightning TTS, Pulse STT, and related endpoints.

Additional endpoints for v2.2.0 and v3.0.1 are now marked deprecated in the API reference.

Hydra — full-duplex speech-to-speech model

Hydra, Smallest AI’s in-house speech-to-speech model, is now live. A single WebSocket carries microphone audio from your client to the model and streams synthesised response audio back — no STT → LLM → TTS pipeline in the middle.

1import asyncio, base64, json, os, wave
2import websockets
3
4API_KEY = os.environ["SMALLEST_API_KEY"]
5URL = f"wss://api.smallest.ai/waves/v1/s2s?model=hydra&api_key={API_KEY}"

Electron LLM — chat completions on the Waves API

Electron, Smallest AI’s in-house language model, is now generally available on the Waves API. Use it as a drop-in replacement for OpenAI’s chat completions — point the OpenAI SDK at https://api.smallest.ai/waves/v1 and pass "model": "electron".

1import os
2from openai import OpenAI
3
4client = OpenAI(
5 base_url="https://api.smallest.ai/waves/v1",
6 api_key=os.environ["SMALLEST_API_KEY"],

Fern CLI 5.28.2 + Python SDK generator 5.12.12

The Fern CLI has been updated to 5.28.2 and the Python SDK generator (fernapi/fern-python-sdk) bumped from 4.61.3 to 5.12.12.

Why: CLI 5.28.2 ships an updated @fern-api/replay that fixes a regression where customer commits made directly on a fern-bot regeneration PR branch could be silently dropped on the next regen if the PR was merged via the GitHub merge-commit button. Pinning the generator to the latest stable (5.12.12) aligns automated regenerations going forward.

API reference rewrite — Lightning v3.1 + Pulse

The Lightning v3.1 (sync + SSE + WebSocket) and Pulse (REST + WebSocket) endpoints in the API reference have been rewritten end-to-end. Each page now opens with a one-paragraph what, a when to use this comparison against the alternatives, a how-it-works walkthrough, copy-paste examples for cURL / Python / JavaScript, and a common gotchas section.

A note for JavaScript users: the official smallestai npm package (v1.0.1) predates Lightning v3.1 and Pulse, so the docs show fetch (REST/SSE) and ws (WebSocket) examples for those endpoints — they work in Node and the browser with no SDK install.

Waves API spec — corrected `output_format` enum and resynced base ↔ v4 overrides

The output_format enum on Lightning v3.1 (POST /waves/v1/lightning-v3.1/get_speech and /stream) is now correctly documented as ["pcm", "mp3", "wav", "ulaw", "alaw"]. The previously listed mulaw is rejected by the platform with an invalid_enum_value error and has been removed. Verified live against api.smallest.ai.

The sample_rate enum on the same endpoints now correctly includes 44100 (the model’s native rate) on both the SDK schema and the rendered API reference.

OpenWhispr integration guide

Added a documentation page for using Smallest AI’s Pulse model as the speech-to-text engine inside OpenWhispr, the open-source desktop dictation app for macOS, Windows, and Linux.

OpenWhispr integration

Unified voice cloning API

Voice cloning now has a single cross-model endpoint: POST /waves/v1/voice-cloning. Upload a short audio sample, get back a voice_... ID that works across supported Lightning TTS models.

The legacy Lightning-large clone endpoint is deprecated and will be removed in a future release.

Voice Cloning guide