Create Assistant
Create a new assistant configuration.
- URL:
/assistant/create - Method:
POST - Headers:
Authorization: Bearer <your_api_key> - Content-Type:
application/json
Request Body (Common Fields)
| Field | Type | Required | Description |
|---|---|---|---|
assistant_name |
string | Yes | Assistant name (1-100 chars). |
assistant_description |
string | Yes | Assistant description. |
assistant_prompt |
string | Yes | System prompt. |
assistant_llm_mode |
string | No | LLM mode: pipeline or realtime. Default: pipeline. |
assistant_start_instruction |
string | No | Opening response text. Used when assistant_interaction_config.speaks_first=true (max 200 chars). |
assistant_interaction_config |
object | No | Interaction settings (see below). |
assistant_end_call_enabled |
boolean | No | Enables built-in end-call tool. Default: false. |
assistant_end_call_trigger_phrase |
string | Conditional | Required if assistant_end_call_enabled=true. |
assistant_end_call_agent_message |
string | Conditional | Required if assistant_end_call_enabled=true. |
assistant_end_call_url |
string | No | Webhook URL for call-ended payload. |
Mode Configuration
Pipeline mode uses OpenAI Realtime for STT + LLM, with a separate TTS provider for audio output.
If assistant_interaction_config.speaks_first=true, the opening response is spoken at session start.
Required fields
| Field | Type | Required | Description |
|---|---|---|---|
assistant_tts_model |
string | Yes | One of cartesia, sarvam, elevenlabs, mistral. |
assistant_tts_config |
object | Yes | TTS config for the selected provider (see tabs below). |
TTS provider configuration
| Field | Type | Required | Description |
|---|---|---|---|
voice_id |
string | Yes | Cartesia voice ID. |
api_key |
string | No | Optional Cartesia API key. |
| Field | Type | Required | Description |
|---|---|---|---|
speaker |
string | Yes | Sarvam speaker identifier. |
target_language_code |
string | No | BCP-47 code. Default: bn-IN. |
api_key |
string | No | Optional Sarvam API key. |
| Field | Type | Required | Description |
|---|---|---|---|
voice_id |
string | Yes | ElevenLabs voice ID. |
api_key |
string | No | Optional ElevenLabs API key. |
| Field | Type | Required | Description |
|---|---|---|---|
voice_id |
string | Yes | Mistral voice ID. |
api_key |
string | No | Optional Mistral API key. |
Example request
curl -X POST "https://api-livekit-vyom.indusnettechnologies.com/assistant/create" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <your_api_key>" \
-d '{
"assistant_name": "Support Bot",
"assistant_description": "First line support",
"assistant_prompt": "You are a helpful customer support agent.",
"assistant_llm_mode": "pipeline",
"assistant_tts_model": "cartesia",
"assistant_tts_config": {
"voice_id": "a167e0f3-df7e-4277-976b-be2f952fa275"
},
"assistant_interaction_config": {
"speaks_first": true,
"filler_words": true,
"silence_reprompts": true,
"silence_reprompt_interval": 10.0,
"silence_max_reprompts": 2
}
}'
Realtime mode uses a single model (e.g. Gemini Live API) that handles STT, LLM, and TTS in one stream.
If assistant_interaction_config.speaks_first=true, the opening response is sent at session start through the realtime conversation path.
Filler words are not available in realtime mode
Since there is no external TTS, filler_words is automatically disabled even if set to true.
Required fields
| Field | Type | Required | Description |
|---|---|---|---|
assistant_llm_config |
object | Yes | Realtime provider configuration (see table below). |
Realtime LLM config (assistant_llm_config)
| Field | Type | Required | Description |
|---|---|---|---|
provider |
string | No | Realtime provider. Current value: gemini. |
model |
string | No | Gemini realtime model. Default: gemini-3.1-flash-live-preview. |
voice |
string | No | Gemini voice. Default: Puck. |
api_key |
string | No | Optional per-assistant Google key. Falls back to system GOOGLE_API_KEY. |
Example request
curl -X POST "https://api-livekit-vyom.indusnettechnologies.com/assistant/create" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <your_api_key>" \
-d '{
"assistant_name": "Gemini Assistant",
"assistant_description": "Realtime voice assistant",
"assistant_prompt": "You are a helpful assistant.",
"assistant_llm_mode": "realtime",
"assistant_llm_config": {
"provider": "gemini",
"model": "gemini-3.1-flash-live-preview",
"voice": "Puck"
}
}'
Interaction Configuration
| Field | Type | Required | Description |
|---|---|---|---|
speaks_first |
boolean | No | If true (default), assistant sends an opening response first in both pipeline and realtime modes. |
filler_words |
boolean | No | Enables filler words while user is speaking. Pipeline mode only. |
silence_reprompts |
boolean | No | Enables reprompts during prolonged user silence. |
silence_reprompt_interval |
number | No | Reprompt interval in seconds (1.0-60.0). Default: 10.0. |
silence_max_reprompts |
number | No | Maximum reprompts before ending session (0-5). Default: 2. |
Response Schema
| Field | Type | Description |
|---|---|---|
success |
boolean | Operation status. |
message |
string | Human-readable message. |
data.assistant_id |
string | Created assistant UUID. |
data.assistant_name |
string | Created assistant name. |
Example Response
{
"success": true,
"message": "Assistant created successfully",
"data": {
"assistant_id": "550e8400-e29b-41d4-a716-446655440000",
"assistant_name": "Support Bot"
}
}
HTTP Status Codes
| Code | Description |
|---|---|
| 200 | Assistant created successfully. |
| 400 | Validation or payload mismatch error. |
| 401 | Unauthorized. |
| 500 | Internal server error. |