Skip to main content
POST
/
api
/
user
/
assistant
Create Assistants
curl --request POST \
  --url https://app.famulor.de/api/user/assistant \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "name": "<string>",
  "voice_id": 123,
  "language_id": 123,
  "type": "<string>",
  "mode": "<string>",
  "timezone": "<string>",
  "initial_message": "<string>",
  "system_prompt": "<string>",
  "llm_model_id": 123,
  "multimodal_model_id": 123,
  "chat_llm_fallback_id": 123,
  "turn_detection_threshold": 123,
  "secondary_language_ids": [
    123
  ],
  "knowledgebase_id": 123,
  "knowledgebase_mode": "<string>",
  "phone_number_id": 123,
  "tool_ids": [
    123
  ],
  "tools": [
    {}
  ],
  "tts_emotion_enabled": true,
  "voice_stability": 123,
  "voice_similarity": 123,
  "speech_speed": 123,
  "llm_temperature": 123,
  "synthesizer_provider_id": 123,
  "transcriber_provider_id": 123,
  "allow_interruptions": true,
  "fillers": true,
  "filler_config": {},
  "record": true,
  "enable_noise_cancellation": true,
  "wait_for_customer": true,
  "max_duration": 123,
  "max_silence_duration": 123,
  "max_initial_silence_duration": 123,
  "ringing_time": 123,
  "reengagement_interval": 123,
  "reengagement_prompt": "<string>",
  "end_call_on_voicemail": true,
  "voice_mail_message": "<string>",
  "endpoint_type": "<string>",
  "endpoint_sensitivity": 123,
  "interrupt_sensitivity": 123,
  "min_interrupt_words": 123,
  "ambient_sound": "<string>",
  "ambient_sound_volume": 123,
  "is_webhook_active": true,
  "webhook_url": "<string>",
  "send_webhook_only_on_completed": true,
  "include_recording_in_webhook": true,
  "post_call_evaluation": true,
  "post_call_schema": [
    {
      "name": "<string>",
      "type": "<string>",
      "description": "<string>"
    }
  ],
  "variables": {},
  "conversation_inactivity_timeout": 123,
  "conversation_ended_retrigger": true,
  "conversation_ended_webhook_url": "<string>"
}
'
{
  "message": "Assistant created successfully",
  "data": {
    "id": 789,
    "name": "Sales Assistant",
    "status": "inactive",
    "type": "outbound",
    "mode": "pipeline"
  }
}
Create a new AI assistant with specified configuration
This endpoint allows you to create a new AI assistant with comprehensive configuration options.

Engine Modes

The API supports three engine modes with different capabilities:
ModeDescriptionRequired Fields
pipelineClassic STT → LLM → TTS pipelinellm_model_id
multimodalReal-time multimodal AImultimodal_model_id
dualplexMultimodal “Brain” + custom TTS voicemultimodal_model_id

Request Body

Required Core Fields

name
string
required
The name of the assistant (max. 255 characters)
voice_id
integer
required
The voice ID for the assistant. Use the endpoint Retrieve Voices with the query parameter mode to get compatible voices for your engine mode.
language_id
integer
required
The language ID for the assistant. Use the endpoint Retrieve Languages to get available languages.
type
string
required
The assistant type. Options: inbound, outbound
mode
string
required
The engine mode. Options: pipeline, multimodal, dualplex
timezone
string
required
The time zone of the assistant (e.g., “Europe/Berlin”, “America/New_York”)
initial_message
string
required
The first message the assistant speaks at the start of the call (max. 200 characters)
system_prompt
string
required
The system prompt that defines the assistant’s behavior and personality

Mode-Specific Fields

llm_model_id
integer
The LLM model ID. Required for mode pipeline.Use the endpoint Retrieve Models to get available models.
multimodal_model_id
integer
The multimodal model ID. Required for modes multimodal and dualplex.Use the endpoint Retrieve Models to get available multimodal models.
chat_llm_fallback_id
integer
Fallback LLM model ID for tool calls in multimodal/dualplex. Optional.
turn_detection_threshold
number
Sensitivity of turn detection in multimodal/dualplex (0-1). Default: auto

Secondary Languages

secondary_language_ids
integer[]
Array of additional language IDs that the assistant can speak. The assistant automatically recognizes the language and switches accordingly.
"secondary_language_ids": [2, 3, 4]

Knowledgebase Settings

knowledgebase_id
integer
The knowledgebase ID to attach to this assistant
knowledgebase_mode
string
How the knowledgebase is used. Options:
  • function_call - The AI calls a function to search (required for multimodal/dualplex)
  • prompt - Knowledge is injected into the prompt (only pipeline)

Phone Number

phone_number_id
integer
The ID of a phone number to assign to the assistant. Must belong to your account.
For inbound assistants, the phone number must not be a caller ID type and must not already be assigned to another inbound assistant.

Custom Mid-Call Tools

tool_ids
integer[]
Array of IDs for custom mid-call tools to attach. Each tool must belong to your account.
"tool_ids": [1, 5, 12]

Built-in Tools

tools
array
Array of activated built-in tools. Each tool has a type field and tool-specific fields.
"tools": [
  {
    "type": "call_transfer",
    "phone_number": "+1234567890",
    "description": "Transfer when customer requests human support"
  },
  {
    "type": "warm_call_transfer",
    "supervisor_phone": "+1234567891",
    "outbound_phone_id": 7,
    "description": "Transfer to a human agent if the customer wants to speak to a real person.",
    "custom_sip": false,
    "caller_id_mode": "outbound_number",
    "hold_music": "hold_music",
    "hold_music_volume": 80,
    "hold_message": "Please wait while I connect you to an agent.",
    "summary_instructions": "Briefly from your perspective: Who is calling, why, why a human is needed. 2–3 sentences.",
    "briefing_initial_message": "Hello! I have a caller who needs assistance. May I briefly explain the situation?",
    "connected_message": "You are now connected to an agent."
  },
  {
    "type": "collect_keypad",
    "timeout": 5,
    "stop_key": "#"
  },
  {
    "type": "end_call",
    "description": "End call when customer confirms satisfaction"
  }
]

Voice and TTS Settings

tts_emotion_enabled
boolean
default:"true"
Whether emotional text-to-speech synthesis is enabled
voice_stability
number
default:"0.70"
Voice stability (0-1). Higher = more consistent
voice_similarity
number
default:"0.50"
Voice similarity (0-1). Higher = closer to the original
speech_speed
number
default:"1.00"
Speech speed multiplier (0.7-1.2)
llm_temperature
number
default:"0.10"
LLM temperature (0-1). Lower = more deterministic
synthesizer_provider_id
integer
Custom TTS provider ID. If not set, selected automatically based on language. See Retrieve Synthesizer Providers.
transcriber_provider_id
integer
Custom STT provider ID. If not set, selected automatically based on language. Only for pipeline. See Retrieve Transcriber Providers.

Call Behavior Settings

allow_interruptions
boolean
default:"true"
Whether interruptions from the caller are allowed.
Cannot be disabled for multimodal and dualplex.
fillers
boolean
default:"false"
Whether filler audio should be used during processing (e.g., “uh”, “just a moment”).
Only available in pipeline mode.
filler_config
object
Custom filler profiles per category. If not specified, language-dependent defaults are used. Each category is an array of short phrases.
  • positive: Fillers for affirmative responses (e.g., “Great!”, “Perfect!”)
  • negative: Fillers for negative/neutral responses (e.g., “Hmm.”, “Mhm.”)
  • question: Fillers while processing a question (e.g., “Good question.”, “One moment.”)
  • neutral: Fillers for neutral acknowledgments (e.g., “Okay.”, “Understood.”)
"filler_config": {
  "positive": ["Great!", "Perfect!", "Very good!"],
  "negative": ["Hmm.", "Understood.", "Okay."],
  "question": ["Good question.", "One moment.", "Let me check."],
  "neutral": ["Okay.", "Understood.", "Noted."]
}
record
boolean
default:"false"
Whether the call should be recorded
enable_noise_cancellation
boolean
default:"true"
Whether noise cancellation should be enabled
wait_for_customer
boolean
default:"false"
If true, the assistant waits for the customer to speak first

Timing Settings

max_duration
integer
default:"600"
Maximum call duration in seconds (20-1200)
max_silence_duration
integer
default:"40"
Maximum silence duration until re-engagement in seconds (1-360)
max_initial_silence_duration
integer
Maximum silence directly after call start before termination (1-120 seconds). Optional.
ringing_time
integer
default:"30"
Maximum ringing time before canceling (1-60 seconds)

Re-Engagement Settings

reengagement_interval
integer
default:"30"
Re-engagement interval in seconds (7-600)
reengagement_prompt
string
Custom prompt for re-engagement messages (max. 1000 characters)Example: "Are you still there? Do you have any other questions?"

Voicemail Settings

end_call_on_voicemail
boolean
default:"true"
Whether to end the call if voicemail is detected
voice_mail_message
string
Message to leave on voicemail (max. 1000 characters)

Endpoint Detection

endpoint_type
string
default:"vad"
Voice activity detection type. Options: vad, ai
endpoint_sensitivity
number
default:"0.5"
Endpoint sensitivity (0-5)
interrupt_sensitivity
number
default:"0.5"
Interrupt sensitivity (0-5)
min_interrupt_words
integer
Minimum number of words before interruption is allowed (0-10). Set to enable.

Ambient Sound

ambient_sound
string
Background ambient sound. Options: off, office, city, forest, crowded_room, cafe, nature
ambient_sound_volume
number
default:"0.5"
Ambient sound volume (0-1)

Webhook Configuration

is_webhook_active
boolean
default:"false"
Whether webhook notifications are enabled
webhook_url
string
The webhook URL for post-call notifications. Required if is_webhook_active is true.
send_webhook_only_on_completed
boolean
default:"true"
Whether to send webhooks only for completed calls (not for failed/no-answer)
include_recording_in_webhook
boolean
default:"true"
Whether to include the recording URL in the webhook payload

Post-Call Evaluation

post_call_evaluation
boolean
default:"true"
Whether AI post-call evaluation is enabled
post_call_schema
array
Schema definition for post-call data extraction
"post_call_schema": [
  {"name": "status", "type": "bool", "description": "Whether the call objective was met"},
  {"name": "summary", "type": "string", "description": "Brief summary of the call"}
]

Variables

variables
object
Key-value pairs of custom variables that can be used in prompts via {{variable_name}}
"variables": {
  "company_name": "Acme GmbH",
  "product": "Premium Widget",
  "support_email": "support@acme.com"
}

Conversation-Ended Settings

conversation_inactivity_timeout
integer
default:"30"
Minutes of chat inactivity before the conversation is considered ended (1–1440)
conversation_ended_retrigger
boolean
default:"false"
Whether the conversation can be restarted after inactivity end
conversation_ended_webhook_url
string
Webhook URL invoked when a chat conversation ends due to inactivity. Separate from the call webhook.

Example Requests

pipeline Mode Assistant

{
  "name": "Sales Assistant",
  "voice_id": 1,
  "language_id": 1,
  "type": "outbound",
  "mode": "pipeline",
  "timezone": "Europe/Berlin",
  "initial_message": "Hello! How can I assist you today?",
  "system_prompt": "You are a professional sales assistant...",
  "llm_model_id": 2,
  "secondary_language_ids": [2, 3],
  "knowledgebase_id": 1,
  "knowledgebase_mode": "prompt",
  "fillers": true,
  "filler_config": {
    "positive": ["Great!", "Perfect!", "Very good!"],
    "negative": ["Hmm.", "Understood."],
    "question": ["Good question.", "One moment."],
    "neutral": ["Okay.", "Noted.", "Understood."]
  },
  "tool_ids": [1, 5],
  "tools": [
    {"type": "end_call", "description": "End call when the customer is satisfied"},
    {"type": "call_transfer", "phone_number": "+1234567890", "description": "Transfer to support"},
    {
      "type": "warm_call_transfer",
      "supervisor_phone": "+1234567891",
      "outbound_phone_id": 7,
      "description": "Transfer to a human agent if the customer wants to speak to a real person.",
      "custom_sip": false,
      "caller_id_mode": "outbound_number",
      "hold_music": "hold_music",
      "hold_music_volume": 80,
      "hold_message": "Please wait while I connect you to an agent.",
      "summary_instructions": "Briefly from your perspective: Who is calling, why, why a human is needed. 2–3 sentences.",
      "briefing_initial_message": "Hello! I have a caller who needs assistance. May I briefly explain the situation?",
      "connected_message": "You are now connected to an agent."
    },
    {"type": "collect_keypad", "timeout": 5, "stop_key": "#"}
  ],
  "reengagement_interval": 20,
  "reengagement_prompt": "Are you still there?"
}

multimodal Mode Assistant

{
  "name": "Support Bot",
  "voice_id": 41,
  "language_id": 1,
  "type": "inbound",
  "mode": "multimodal",
  "timezone": "America/New_York",
  "initial_message": "Hi! Welcome to support.",
  "system_prompt": "You are a helpful support agent...",
  "multimodal_model_id": 1,
  "chat_llm_fallback_id": 2,
  "turn_detection_threshold": 0.7,
  "knowledgebase_id": 1,
  "knowledgebase_mode": "function_call",
  "tts_emotion_enabled": false
}

dualplex Mode Assistant

{
  "name": "Premium Agent",
  "voice_id": 1,
  "language_id": 2,
  "type": "outbound",
  "mode": "dualplex",
  "timezone": "Europe/Berlin",
  "initial_message": "Good day!",
  "system_prompt": "You are a professional assistant...",
  "multimodal_model_id": 4,
  "chat_llm_fallback_id": 2,
  "secondary_language_ids": [1, 3],
  "knowledgebase_id": 1,
  "knowledgebase_mode": "function_call",
  "ambient_sound": "office",
  "ambient_sound_volume": 0.3
}

Response

message
string
Success message confirming the creation of the assistant
data
object
{
  "message": "Assistant created successfully",
  "data": {
    "id": 789,
    "name": "Sales Assistant",
    "status": "inactive",
    "type": "outbound",
    "mode": "pipeline"
  }
}

Notes

  • All required fields must be provided for successful creation
  • Use the endpoint Retrieve Voices with the query parameter mode to obtain compatible voices
  • For multimodal/dualplex, knowledgebase_mode must be set to function_call
  • For multimodal/dualplex, allow_interruptions is always enabled
  • fillers is only available in pipeline mode
  • New assistants are created with status inactive by default