Agents
Create Agent
Creates a new agent associated with the specified organization
POST
Request Body
Required Fields
Display name of the agent (1-255 characters)
Organization ID to create the agent in (UUID format)
Agent Configuration
Description of what the agent does
Initial message the agent says when call starts. This is spoken immediately when a call connects.Example:
"Hello! Thank you for calling Acme Corp. How can I help you today?"System prompt defining agent behavior and personality. This guides the AI’s responses throughout the conversation.Example:
"You are a helpful customer support agent for Acme Corp. Be friendly, professional, and concise. If you don't know an answer, offer to transfer the call to a human agent."Type of agent configuration.Supported values:
simple- Basic agent with standard configurationadvanced- Agent with additional features enabledcustom- Fully customizable agent configurationappointment_scheduler- Agent optimized for scheduling appointmentsreceptionist- Receptionist agent for call routing and transfersmessage_taker- Agent that takes messages and routes to directory extensions
AI/Voice Model Configuration
AI model used for the agent’s language processing.Supported values:
gpt-4.1- OpenAI GPT-4.1 (default, recommended)gpt-4.1-mini- OpenAI GPT-4.1 Mini (faster, more cost-effective)gpt-4o- OpenAI GPT-4ogpt-4o-mini- OpenAI GPT-4o Mini
Voice model for real-time speech processing
Speech-to-text model.Supported values:
deepgram- Deepgram STTv2 with flux-general-en model (recommended)
Text-to-speech model.Supported values:
cartesia- Cartesia TTS (high quality, supports custom voices)minimax- MiniMax TTS (multilingual support)
Voice configuration settings. Structure varies based on Cartesia voices also accept two optional fields:
Most English Cartesia voices do not accept For MiniMax (Advanced Voice Timing (optional, applies to all TTS models):
Example with advanced timing:
ttsModel:For Cartesia (ttsModel: "cartesia"):| Property | Type | Description |
|---|---|---|
model | string | Cartesia TTS model (e.g. sonic-3). When set, must match the model registered for the selected voice_id. |
language | string | Locale passed to Cartesia TTS (e.g. es). When set, must match the language registered for the selected voice_id. |
model or language overrides. Non-English voices (e.g. Spanish) require both:ttsModel: "minimax"):| Property | Type | Default | Description |
|---|---|---|---|
min_endpointing_delay | number | 0.1 | Seconds to wait after the caller stops speaking before the agent responds. Lower values feel more responsive; higher values reduce false interruptions. |
max_endpointing_delay | number | 2.0 | Maximum seconds to wait when the caller pauses mid-sentence. Prevents the agent from cutting in during natural speech pauses. |
vad_min_silence_duration | number | (system default) | Minimum silence duration in seconds for Voice Activity Detection to consider speech ended. Omit to use the system default. |
Call Features
Whether SIP call transfer is enabled. When enabled, the agent can transfer calls to:
- SIP extensions: Format
sip:extension@hostname - US phone numbers: Automatically formatted to
tel:+1XXXXXXXXXX
Whether the agent can send emails during or after calls
Instructions for the agent on how and when to use the email tool
Whether to enable answering machine / voicemail detection
Whether to enable echo detection during calls
Enable call recording. Recordings are saved to cloud storage and accessible via the Call Logs API.
Rules and conditions for call transfers. Describes when and where the agent should transfer calls.Example:
"Transfer to +15551234567 if the caller asks for billing support. Transfer to +15559876543 for technical issues."Array of email addresses used for notifications and the email tool.Example:
["[email protected]", "[email protected]"]UUID of the email server to use for this agent. Must belong to the same account. If omitted or
null, the account’s default email server is used.Use the List Email Servers endpoint to retrieve available IDs.Localization
Agent language for speech recognition and responses.Supported values:
en-US- English (US)es-US- Spanish (US)multi- Multilingual (English, Spanish, French, German, Hindi, Russian, Portuguese, Japanese, Italian, Dutch)
Agent timezone in IANA format. Used for date/time operations and calendar scheduling.Example:
"America/New_York", "Europe/London", "Asia/Tokyo"Knowledge Base
Array of URLs the agent can reference for knowledge. The content at these URLs is ingested and made available to the agent during conversations.Example:
["https://example.com/faq", "https://example.com/pricing"]Business (Google Place)
Google Place ID linking the agent to a Google Business Profile listing. The platform fetches the listing’s details (hours, location, phone, website, services, ratings) shortly after creation, and the agent uses them as verified facts when answering callers.Example:
"ChIJVS6XxJPFU4gRoE8c8ql2lCQ"Warm Transfer
Enable warm transfer routing for this agent.
Plain-language rules for when and where to warm transfer. Example:
"If the caller asks for billing, confirm first and warm transfer to pbx:1234."Public URL of the hold-music file played during warm transfer. The easiest way to set this is Upload Hold Music, which saves the URL for you. Leave empty for built-in hold music.
Whether the original caller’s number is passed to the transfer destination. Defaults to
true.Pronunciations
Custom pronunciation rules for specific words and names, using IPA (International Phonetic Alphabet) format. The agent’s TTS engine will use these rules to pronounce words correctly.Each entry is an object with:
word— The word or name (1–100 characters)phonemes— The IPA phoneme string (e.g.,<<ˈ|dʒ|eɪ|k|ə|b|s|ə|n>>)
Advanced Configuration
General configuration object for additional settings.Example:
| Property | Type | Description |
|---|---|---|
enable_recording | boolean | Enable call recording (saved to S3) |
user_timezone | string | IANA timezone for calendar operations (e.g., America/New_York) |
inactivity_timeout | number | Seconds before “Are you still there?” prompt (default: 15) |
ambient_type | string | Type of ambient background audio |
ambient_volume | number | Volume level for ambient audio |
thinking_sounds_enabled | boolean | Enable thinking/processing sounds during pauses |
thinking_volume | number | Volume level for thinking sounds |
thinking_clip_id | string | Sound clip to play while the agent is thinking. KEYBOARD_TYPING (default) or KEYBOARD_TYPING2 |
background_audio_enabled | boolean | Enable background audio during calls |
summary_context | string | Additional instructions for the AI-generated call summary. Use this to tell the summary what to focus on or what data to extract (e.g., "Focus on customer complaints. Extract any mentioned order numbers."). |
Extensions configuration for webhooks and MCP servers.Structure:Webhook fields:
Webhook conditions:
| Field | Type | Required | Description |
|---|---|---|---|
type | string | Yes | Must be "webhook" |
name | string | Yes | Unique identifier (e.g., Create_Ticket) |
friendlyName | string | Yes | Human-readable display name |
description | string | Yes | What the webhook does - helps AI understand when to use it |
condition | string | Yes | When to trigger: before_call, during_call, or after_call |
method | string | Yes | HTTP method: GET, POST, PUT, PATCH, or DELETE |
url | string | Yes | Endpoint URL to call |
headers | array | No | Array of {key, value} objects for HTTP headers |
parameters | array | No | Array of {key, value} objects - AI extracts values from conversation |
before_call- Execute before the agent answers (pre-fetch caller info)during_call- Execute while call is active (create tickets, real-time lookups)after_call- Execute after call ends (log to CRM, send summaries)
Parameters: Leave the
value empty for fields you want the AI to extract from the conversation. Provide default values for fallbacks.MCP Servers Request Body
Each entry in themcp_servers array inside extensions is validated at write time. The request shape is different from the stored shape returned by GET.
Validated request fields for each mcp_servers entry:
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Friendly label for the connection (displayed in the Portal) |
url | string | Yes | MCP endpoint URL. Use your streamable HTTP endpoint when transport_type is "http", or your SSE endpoint when transport_type is "sse" |
transport_type | string | No | "sse" (default) or "http" |
auth_headers | array | No | Array of {key, value} objects sent as HTTP headers to the MCP server |
initialization_options | object | No | Optional MCP initialization options stored with the connection |
name → connection_name, url → mcp_endpoint_url, auth_headers array → header object, and assigns a generated id. See Get Agent — Stored MCP Connection Shape for the full list of stored fields.
MCP servers are auto-tested on save. When you include To validate a configuration before creating an agent, use Test MCP Connection.
extensions.mcp_servers, the API tests each server (opening the transport and listing tools). Reachable servers are stored with a fingerprint and discovered tools, and appear with a green Connected badge in the Portal (agent → Integrations → MCP). Servers that are unreachable at save time are still stored, but without a fingerprint — they appear with a yellow Not tested badge, and the response includes a non-fatal warnings array:The
integrations field cannot be set on create. After creating the agent, configure integrations (ModMed, Google/Outlook Calendar, Twilio, NetSapiens) via the Dashboard or with the integrations field on Update Agent. Integration secrets are write-only — they never appear in API responses, including this endpoint’s response. MCP servers can be configured in the Dashboard under agent Integrations, or via extensions.mcp_servers on this endpoint and on Update Agent.Built-in Agent Functions
When created, every agent automatically has access to these functions that the AI can call during conversations:| Function | Description |
|---|---|
transfer_call(phone_number) | Transfer call to a SIP extension or US phone number (requires transferEnabled: true) |
end_call() | End the current call gracefully |
get_date_details(date_string) | Parse and get details about a date/time |
Additional functions are added based on enabled integrations (Google Calendar, Outlook, ModMed), configured webhook tools in
extensions.tools, and MCP servers in extensions.mcp_servers.