Voice Providers
Connect optional voice providers for tenant-scoped premium/custom voices. This page currently documents the public ElevenLabs endpoints.
ElevenLabs is a BYO provider integration: you supply your own ElevenLabs API key, Rymi encrypts it, syncs your available voices into the tenant voice catalog, and lets agents reference those voices. Specialist defaults do not require ElevenLabs; it remains a premium/custom override.
Status
GET /v1/voice-providers/elevenlabs/statusReturns connection state and cached ElevenLabs voice count for the authenticated tenant.
Response 200
{
"connected": true,
"provider": "elevenlabs",
"account_name": "Acme ElevenLabs",
"cached_voice_count": 18
}Fields
| Field | Type | Description |
|---|---|---|
connected | boolean | Whether active ElevenLabs credentials exist for the tenant |
provider | string | Always elevenlabs |
account_name | string or null | Display name saved during connection |
cached_voice_count | integer | Number of active ElevenLabs voices cached in Rymi |
Connect ElevenLabs
POST /v1/voice-providers/elevenlabs/connectValidates the API key against ElevenLabs, stores it encrypted, and syncs the voice catalog.
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
api_key | string | Yes | ElevenLabs API key |
account_name | string | No | Display name for the connected account. Defaults to ElevenLabs |
Example
curl -X POST https://api.rymi.live/v1/voice-providers/elevenlabs/connect \
-H "Authorization: Bearer $RYMI_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{
"api_key": "sk_elevenlabs_...",
"account_name": "Acme ElevenLabs"
}'Response 200
{
"status": "connected",
"provider": "elevenlabs",
"account_name": "Acme ElevenLabs",
"voice_count": 18
}Errors
| Status | Meaning |
|---|---|
400 | api_key is missing |
401 | ElevenLabs rejected the key |
500 | Rymi could not save credentials |
502 | Credentials were saved but voice sync failed |
Sync Voices
POST /v1/voice-providers/elevenlabs/syncRefreshes the cached ElevenLabs voice catalog using active tenant credentials. Use this after adding or removing voices in ElevenLabs.
Response 200
{
"status": "synced",
"provider": "elevenlabs",
"voice_count": 21
}Errors
| Status | Meaning |
|---|---|
400 | No active ElevenLabs credentials exist for the tenant |
502 | Voice sync failed |
Disconnect ElevenLabs
POST /v1/voice-providers/elevenlabs/disconnectDeactivates ElevenLabs credentials for the tenant. It does not delete anything in the ElevenLabs account.
Response 200
{
"status": "disconnected",
"provider": "elevenlabs"
}Using Synced Voices
After syncing, call GET /v1/agents/llm-options and select an ElevenLabs voice from the returned voices array. Then create or update an agent with the selected voice, tts_provider, and tts_model if you want to override role defaults.
{
"name": "Premium Support Voice",
"agent_role": "specialist",
"voice": "21m00Tcm4TlvDq8ikWAM",
"tts_provider": "elevenlabs",
"tts_model": "eleven_turbo_v2_5"
}Cost model
ElevenLabs can be a high-quality voice option, but it is not the default Specialist economics path. Use it when custom voice quality matters and you are comfortable with the provider's separate pricing.

