Developer API key
Long-lived, scoped server credential for LLM, TTS, STT, Voice Isolator, voices, and tickets.
VoiceLab has two credential types. Use the right one for each endpoint.
Long-lived, scoped server credential for LLM, TTS, STT, Voice Isolator, voices, and tickets.
Signed-in user credential for key management and analytics.
Short-lived credential for one browser or client connection.
Product endpoints use a long-lived API key:
Authorization: Bearer vlk_<your-secret>Keep it in a server-side environment variable or secret manager:
export VOICELAB_API_KEY=vlk_your_secretAPI keys call /v1/tts, /v1/stt, /v1/voice-isolations, /v1/voices, history endpoints, and POST /v1/ticket. Permissions control read, write, voices, and realtime access.
For Voice Isolator, grant audio_isolation the access level to upload audio and poll or download results. Its compatibility scopes are audio_isolation:read and audio_isolation:write. Restricted keys need this permission explicitly; a write-only key can submit jobs but cannot poll them.
For LLM, grant llm the access level for model discovery, completions, and usage lookup. The compatibility scopes are llm:read and llm:write. These developer routes use /v1/models, /v1/chat/completions, and /v1/llm/requests/{id}. Ask's /api/v1/llm/* and /api/v1/chats/* routes use a platform JWT and remain uncharged.
The account key-management and analytics endpoints under /api/v1/account/... require a signed-in user's access JWT:
Authorization: Bearer <USER_ACCESS_JWT>Do not send a user JWT to /v1 product endpoints, and do not use a developer API key for account-management endpoints. The dashboard Voice Isolator routes at /api/v1/voice-isolations also require a user JWT; server integrations use /v1/voice-isolations with an API key.
Never put a long-lived API key in a WebSocket URL. Use the API key to mint a short-lived ticket:
POST /v1/ticket
Authorization: Bearer vlk_...
Content-Type: application/json
{"transport":"websocket","service":"tts"}Then connect with the returned ticket:
wss://api.voicelab.uz/v1/tts/stream?ticket=<short-lived-ticket>Use "service":"stt" for /v1/stt/stream. Tickets expire after about two minutes.
Full key creation, listing, editing, revocation, and deletion contracts are in Authentication and API keys.