Voice Agents
Two things live here: the agent configurations that decide how an agent behaves, and the catalog of speech providers and voices it can speak with.
| Action | Route |
|---|---|
| List configurations | GET /agents/configs |
| Get one | GET /agents/configs/{documentId} |
| Create | POST /agents/configs |
| Replace | PUT /agents/configs/{documentId} |
| Delete | DELETE /agents/configs/{documentId} |
| List providers | GET /voice/providers |
| List a provider's voices | GET /voice/providers/{provider}/voices |
Configurations
A configuration is a document — the studio adds fields to it as agents gain capabilities, so treat unknown keys as pass-through rather than dropping them.
curl "$ME_BASE/agents/configs" \
-H "API-Key: $ME_API_KEY" \
-H "X-TenantID: $ME_TENANT"Provider and voice catalog
Which providers are available is a per-deployment question, not a constant: availability follows the vendor keys configured for your environment. Read the catalog at runtime rather than hard-coding a provider list.
curl "$ME_BASE/voice/providers/elevenlabs/voices" \
-H "API-Key: $ME_API_KEY" \
-H "X-TenantID: $ME_TENANT"{
"data": [
{
"id": "voice_abc",
"name": "Mali",
"gender": "female",
"language": "th-TH",
"preview": true
}
]
}| Field | Notes |
|---|---|
id | Pass this as the agent's voice id. |
preview | Whether this voice can be rendered to a sample here. |
Honour preview
preview is resolved per request because it turns on and off with a vendor key. When it is false, disable the play button — never substitute a different voice for the sample, or the picker plays something the agent will not speak with.
Go SDK
configs, err := c.Agents.ListConfigs(ctx)
voices, err := c.Agents.ListVoices(ctx, "elevenlabs")