wss:// with https://:
The JavaScript SDK converts this automatically via
VoiceAgentClient.fetchVoices() and siblings.
GET /health — Admin Dashboard Health
This is the admin dashboard’s health/status page, not a lightweight liveness probe — for automated health checks, use /ready below instead, which is what’s actually unauthenticated and probe-friendly.
Returns the dashboard’s HTML status page by default. Pass Accept: application/json or ?format=json to get JSON instead:
DASHBOARD_PASSWORD is set on the server, this endpoint requires HTTP Basic Auth (admin / the configured password) for all callers except Kubernetes probes (matched by a kube-probe User-Agent).
cURL
GET /ready — Readiness Probe
Returns 200 when the TTS engine is warmed up and ready to accept synthesis requests. Returns 503 during startup.
Response (200)
Response (503)
GET /voices — List Voice Styles
Returns all available voice styles with a display name, inferred gender, and the full list of supported languages (currently identical across all voices — every voice supports every language below).
Response
GET /voices lists the built-in voices only. Your cloned voices are yours alone: they are listed in the dashboard under Voices, each with its clone_… id, and any endpoint that takes a voice accepts one of them only from an API key on the account that created it. From any other account a clone_… id is answered as an unrecognised voice (validation.invalid_voice).
GET /languages — List Supported Languages
Returns every language code and display name that text-to-speech can speak. Nine languages are supported today. Speech recognition, which voice agents and the speech-to-text API use to understand a caller, covers six of them: English, Spanish, Portuguese, French, Italian and German. Catalan, Galician and Basque are speak-only for now.
Response
GET /models — List TTS Models
Returns all loaded TTS model versions, including the default model.
Response
versa-1.0 has been retired and is no longer served — versa-2.0 is the only model this endpoint
returns.
GET /config — Server Configuration
Returns runtime limits such as max text length, speed range, steps range, and audio format.
Response
Use these values to validate synthesis requests client-side before sending them over the WebSocket.
GET /status — Runtime Status
Returns detailed runtime information including memory usage, active connections, uptime, and readiness state.
Response
GET /v1/pricing — Rate Card
Every price Lokutor charges, as JSON, public and without a key. Fields and an example are on the Rate Card page; how the prices apply is in Pricing and billing.
JavaScript SDK
The SDK provides static methods onVoiceAgentClient for all discovery endpoints. They automatically convert wss:// to https:// and handle JSON parsing and errors.
LokutorError on failure:
TypeScript Types
cURL Examples
POST /tts/synthesize — TTS Synthesis
Synthesize speech from text. Returns a WAV audio file.
Request
Requires authentication viaAuthorization: Bearer or X-API-Key header.
Multi-speaker segments — each segment has its own
voice, text, speed, language, and optional pause_ms.
Same vocabulary as the SDK and WebSocket API.
voice, language, speed, and steps are identical across REST, WebSocket, and both SDKs. The older voice_id, lang, and quality names are still accepted as deprecated aliases (quality maps to steps: ultra_fast=8, fast=16, medium=32, high=64), so existing integrations keep working — but new code should use the canonical names above.Response
Content-Type: audio/wav — PCM16, 44.1 kHz, mono.
cURL
POST /stt/transcribe — Speech-to-Text
One-shot transcription of a complete audio clip. For continuous/live transcription with automatic utterance detection, use WS /ws/stt instead — see the SDK’s Speech-to-Text guide.
Request
Requires authentication viaAuthorization: Bearer or X-API-Key header. Accepts either multipart/form-data (an audio file field) or JSON with base64-encoded audio.
Response
engine is "parakeet" on the normal path, or "whisper" if this deployment is falling back to
the local Whisper model. Audio at any sample rate is resampled correctly — 44.1kHz (this API’s own
TTS output) works the same as 16kHz.
cURL
POST /denoise — Audio Denoising
Removes background noise from a WAV audio file.
Request
Requires authentication viaAuthorization: Bearer or X-API-Key header (an API key or a Supabase session token both work).
Send as multipart/form-data with the WAV file in a field named audio. 16-bit PCM WAV only.
Response
Content-Type: audio/wav — denoised audio, 16-bit PCM.
Observability Endpoints
Note: /docs/ is intended for development environments only. Do not expose it through production ingress.
Related Pages
- WebSocket Protocol — Real-time streaming API
- Streaming API — TTS synthesis endpoint
- Voice Chat — Conversational agent endpoint
- JavaScript SDK Reference — SDK methods and types