Skip to main content
All discovery and health endpoints are public — no API key required. For a human-readable catalog of voices, languages, and models, see Voices, Languages & Models. The base URL is derived from your WebSocket endpoint by replacing 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:
If 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

That is the complete list.

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 on VoiceAgentClient for all discovery endpoints. They automatically convert wss:// to https:// and handle JSON parsing and errors.
Each method returns a typed Promise and throws LokutorError on failure:

TypeScript Types


cURL Examples


POST /tts/synthesize — TTS Synthesis

Synthesize speech from text. Returns a WAV audio file.

Request

Requires authentication via Authorization: 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 via Authorization: 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 via Authorization: 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.