Skip to main content
POST

Request Body

Required Fields

string
required
Display name of the agent (1-255 characters)
string
required
Organization ID to create the agent in (UUID format)

Agent Configuration

string
Description of what the agent does
string
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?"
string
Greeting spoken when this agent places an outbound call. Overridden by a per-call greeting; if empty, the agent auto-generates an opener from the call context (falling back to greetingMessage).Example: "Hi, this is Ava calling from Acme Corp."
string
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."
string
default:"simple"
Type of agent configuration.Supported values:
  • simple - Basic agent with standard configuration
  • advanced - Agent with additional features enabled
  • custom - Fully customizable agent configuration
  • appointment_scheduler - Agent optimized for scheduling appointments
  • receptionist - Receptionist agent for call routing and transfers
  • message_taker - Agent that takes messages and routes to directory extensions
string
default:"active"
Activation status of the agent. Defaults to active when omitted, so most callers can leave this out.Supported values:
  • active - Agent is live and can take calls
  • inactive - Agent is disabled and will not take calls
  • cancelled - Agent has been cancelled
  • pending - Agent is awaiting activation
Any other value (for example draft) is rejected with a 400. The same values can be changed later via Update Agent.

AI/Voice Model Configuration

string
default:"gpt-4.1"
AI model used for the agent’s language processing. See List LLM Models for the full list with descriptions.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-mini - OpenAI GPT-4o Mini
  • grok-3-fast - xAI Grok-3 Fast
  • moonshotai/Kimi-K2.6 - Moonshot AI Kimi K2.6 (served via Telnyx)
  • claude-sonnet-4-6 - Anthropic Claude Sonnet
string
default:"gpt-4o-realtime-preview"
Voice model for real-time speech processing
string
default:"deepgram"
Speech-to-text model.Supported values:
  • deepgram - Deepgram STTv2 with flux-general-en model (recommended)
string
default:"cartesia"
Text-to-speech model.Supported values:
  • cartesia - Cartesia TTS (high quality, supports custom voices)
  • minimax - MiniMax TTS (multilingual support)
object
Voice configuration settings. Structure varies based on ttsModel.
Default when omitted: For a Cartesia agent (the default ttsModel), omitting voiceSettings creates the agent with the standard voice f786b574-daa5-4673-aa0c-cbe3e8534c02 (Katie – Friendly Fixer) on the sonic-3.5 model. For a MiniMax agent, omitting voiceSettings leaves it unset.
For Cartesia (ttsModel: "cartesia"):
Cartesia voices also accept two optional fields:
A custom (cloned) voice_id requires model sonic-3 or sonic-3.5; set voiceSettings.model to one of these or the request is rejected with 400.
English Cartesia voices accept a model override (e.g. sonic-3.5, the default for new agents) but not a language override. Non-English voices (e.g. Spanish) require both a model and a matching language:
For MiniMax (ttsModel: "minimax"):
Advanced Voice Timing (optional, applies to all TTS models):Example with advanced timing:

Call Features

boolean
default:"false"
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
boolean
default:"false"
Whether the agent can send emails during or after calls
string
Instructions for the agent on how and when to use the email tool
boolean
default:"false"
Whether to enable answering machine / voicemail detection
boolean
default:"false"
Whether to enable echo detection during calls
boolean
default:"false"
Enable call recording. Recordings are saved to cloud storage and accessible via the Call Logs API.
Include a link to the call recording in the post-call summary notification. This is a sub-option of call recording — it requires enableRecording: true. Sending true without recording enabled returns a 400. Note: the link is delivered via the call-summary email, so it is only actually sent when the agent also has an email recipient configured and a recording was produced; otherwise the flag is stored but has no effect.
string
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
Array of email addresses used for notifications and the email tool.Example: ["[email protected]", "[email protected]"]
string | null
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

string
default:"en-US"
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)
string
default:"America/New_York"
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.This is a legacy field and is not the RAG Knowledge Base — for vector search use ragEnabled and knowledgeBaseId below.Example: ["https://example.com/faq", "https://example.com/pricing"]

RAG Knowledge Base

Attach an organization-level Knowledge Base as part of the create request, so you do not need a follow-up Update Agent call.
boolean
Enable live vector search during calls. Requires knowledgeBaseId — an agent with no knowledge base does not retrieve regardless of this flag. Returns 403 forbidden when Knowledge Base is not enabled for the target organization.
string | null
Knowledge base the agent searches. It must belong to the same organization the agent is being created in; a knowledge base from another organization is rejected.Use List Knowledge Bases to retrieve available IDs.
object
RAG retrieval configuration. Unknown keys are rejected.
Omitting these fields leaves the defaults in place: rag_enabled is false, knowledge_base_id is null, and rag_config is { "top_k": 5, "rewrite_query": false }.

Business (Google Place)

string
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

boolean
Enable warm transfer routing for this agent.
string
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."
string
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.
boolean
Whether the original caller’s number is passed to the transfer destination. Defaults to true.

Pronunciations

array
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.
Custom pronunciations are only supported on Cartesia voices using the sonic-3 or sonic-3.5 model. The request must set ttsModel to cartesia and voiceSettings.model to sonic-3 or sonic-3.5; otherwise a non-empty pronunciations array is rejected with 400. Send an empty array [] to clear rules on any voice.
Each entry is an object with:
  • word — The word or name (1–100 characters)
  • phonetic (optional) — A plain-English respelling of how the word should sound (e.g., jay-kob-sen). Used by the dashboard’s “Apply” helper to generate the IPA phonemes; not used directly by the agent.
  • phonemes — The IPA phoneme string (e.g., <<ˈ|dʒ|eɪ|k|ə|b|s|ə|n>>)
Example:

Advanced Configuration

object
General configuration object for additional settings.Example:
object
Extensions configuration for webhooks and MCP servers.Structure:
Webhook fields:Webhook conditions:
  • 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 the mcp_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: After saving, the platform transforms each entry to the stored MCPConnection format: nameconnection_name, urlmcp_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.
The Get Agent response returns the stored shape with snake_case keys: id, connection_name, mcp_endpoint_url, transport_type (lowercase sse or http), and optional tools entries with name and description only. Do not paste a GET mcp_servers array into a create or update body without transforming it to match the request fields above.The schema is strict — any unrecognized field in an mcp_servers entry (for example, fields from the stored GET shape such as connection_name, mcp_endpoint_url, or id) will be rejected with a 400 error. Only url, name, transport_type, auth_headers, and initialization_options are accepted.
MCP servers are auto-tested on save. When you include 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 → IntegrationsMCP). 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:
To validate a configuration before creating an agent, use Test MCP Connection.
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:
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.

Feature Administration gating

When Feature Administration is enabled, agent creation is validated against the feature gates of the target organization — including locks inherited from its reseller or partner. The API returns 403 forbidden when the request:
  • sets warmTransferEnabled: true while Warm Transfer is locked;
  • selects a cloned voice in voiceSettings.voice_id while Custom Voices is locked;
  • sets a non-empty googlePlaceId while Business Listing (Google Places) is locked;
  • includes the ns_send_sms or ns_check_sms_replies tool in extensions.tools while SMS Messaging is locked.
    If you are seeding extensions.tools by copying them from an existing agent, do not paste a GET response verbatim. tools[].type accepts only the values in its enum (webhook, tool, notification, function, transfer_agent, end_of_call_action), which exclude the internal type a GET returns for UCaaS tools such as these. Such a request is rejected with 400 by schema validation before any gate runs — a pre-existing limitation of this endpoint, unrelated to Feature Administration.
Omitting a field, or sending it as null, is never blocked — so you can always create an agent without the locked capability.