Developer preview

Jutusta Speech · Developer API

An HTTP interface to the Jutusta speech stack: text-to-speech with the same voices that power Jutusta, plus speech-to-text (sync and async/webhook). Point your baseUrl at /api/v1 and authenticate with an xi-api-key header.

Voice samples

Your personal voice samples are exposed through the same v1 endpoints as the presets. Pass a sample's voice_id to /text-to-speech/{voice_id} to synthesize with it.

  • GET /v1/voices returns presets plus your voice samples, marked category: "cloned".
  • POST /v1/voices/add creates a new voice sample from a reference audio file, multipart files field, 6–30 s of clean speech, max 10 MB.
  • preview_url on user-created voices requires the same xi-api-key as the rest of the API.

You can also manage voice samples in the UI at /en/app/text-to-speech.

Streaming TTS

For long scripts where time-to-first-audio matters, the synth has two streaming modes. Chunked HTTP POST /text-to-speech/{voice_id}/stream splits the input into sentence-sized segments and streams a single WAV — drop-in for any HTTP client. The WebSocket wss://…/api/v1/text-to-speech/{voice_id}/stream-input mirrors the ElevenLabs `stream-input` protocol for voice-agent use: push JSON text frames as your LLM emits tokens, receive base64 PCM audio frames back. See the full protocol (frame shapes, auth, idle timeout, error codes) in the API reference below.

Voice clones are not yet supported on the WebSocket endpoint — use the regular POST /text-to-speech/{voice_id} instead.

Connect an AI agent

Jutusta is a standard OAuth 2.1 / OIDC authorization server, so an AI agent can call the speech API on a user's behalf. There are two ways to get a bearer credential — both are presented the same way at call time.

  • On a user's behalf (OAuth 2.1) — The agent registers a client (dynamic client registration), runs the authorization-code + PKCE flow, and the user signs in and approves the scopes on a consent screen. Synthesis and transcription spend the authorizing user's credits.
  • As your own bot (API key) — Mint a key (prefixed sk_jt_ ) below and send it as a bearer token — or via the `xi-api-key` header. No OAuth flow; this assumes a human holds the account.

There is also a native MCP endpoint at /mcp (Streamable HTTP, JSON-RPC) exposing tools for speech synthesis, voices and voice cloning, transcription, summaries, translation and noise removal — guarded by the same bearer token, with one OAuth scope per family.

Agents can discover all of this without reading this page. Step-by-step instructions for an LLM live at /auth.md , with machine-readable metadata at the standard discovery endpoints below.

Connect your AI tool

Most clients only need the server URL — they discover the tools and run the OAuth sign-in themselves. Pick your client below for the exact steps.

Server URL
  1. Open Claude and go to Settings → Connectors.
  2. Click “+” and choose “Add custom connector”.
  3. Paste the server URL above and click “Add”. Claude opens the Jutusta sign-in page; approve the permissions you want to grant.
  4. In a chat, open the “+” menu → Connectors and switch Jutusta on.

Each tool family has its own permission: tts (speech synthesis), asr (transcription), voices, summary, translate and denoise. Approve only the ones you want the agent to be able to spend credits on — tools whose permission you skipped will say so when called.

Already connected before the tools expanded? Disconnect and reconnect Jutusta in your client, so the sign-in can ask for the new permissions.

Sign in to get a key

Personal API keys are tied to your account. The public reference below is always available.

Sign in

API reference

Live schema served from /api/v1/openapi.json.

Endpoint shapes follow the ElevenLabs v1 API, so existing ElevenLabs SDKs work as drop-in clients — point their baseUrl at /api/v1.

Loading reference…