# Cancel Eval Run
Source: https://docs.vogent.ai/api-reference/cancel-eval-run
post /eval_runs/{id}/cancel
Cancels a running or pending evaluation run. Terminates the underlying workflow and sets the status to CANCELLED.
# Clone Voice
Source: https://docs.vogent.ai/api-reference/clone-voice
post /voices/clone
Clones a new voice for the workspace.
# Create a function
Source: https://docs.vogent.ai/api-reference/create-a-function
post /functions
Creates a function.
# Create Batch Job
Source: https://docs.vogent.ai/api-reference/create-a-new-batch-dial-job
post /batch_dial_jobs
Creates a new batch dial job. You must start the job with the `/paused` endpoint for calls to begin.
# Create a new dial
Source: https://docs.vogent.ai/api-reference/create-a-new-dial
post /dials
Creates a one-off dial session, either for phone dials or browser dials.
# Create Agent
Source: https://docs.vogent.ai/api-reference/create-agent
post /agents
Creates a new agent.
# Create Eval Config
Source: https://docs.vogent.ai/api-reference/create-eval-config
post /eval_configs
Creates a new AI evaluation configuration.
# Create Eval Config Record
Source: https://docs.vogent.ai/api-reference/create-eval-config-record
post /eval_configs/{id}/records
Creates a new record for an AI evaluation configuration. Either provide a dialId to link an existing dial, or provide prompt fields to create a prompt-based record.
# Create extractor
Source: https://docs.vogent.ai/api-reference/create-extractor
post /agents/{agentId}/extractors
Create a new extractor for a given agent.
# Create a phone number
Source: https://docs.vogent.ai/api-reference/create-number
post /phone_numbers
Creates a phone number of various types (purchase, SIP import, or Vogent SIP).
# Create versioned prompt
Source: https://docs.vogent.ai/api-reference/create-versioned-prompt
post /agents/{agentId}/versioned_prompts
Creates a versioned prompt for a given agent.
# Delete Agent
Source: https://docs.vogent.ai/api-reference/delete-agent
delete /agents/{id}
Delete an agent. This action is irreversible, so be careful when using it. Returns the deleted agent.
# Delete Eval Record
Source: https://docs.vogent.ai/api-reference/delete-eval-record
delete /eval_configs/{id}/records/{recordId}
Deletes an AI evaluation record.
# Delete function
Source: https://docs.vogent.ai/api-reference/delete-function
delete /functions/{id}
Deletes a function, and unlinks it from any agents.
# Delete Phone Number
Source: https://docs.vogent.ai/api-reference/delete-phone-number
delete /phone_numbers/{id}
Deletes a phone number
# Get Batch Job
Source: https://docs.vogent.ai/api-reference/get-batch-dial-job
get /batch_dial_jobs/{id}
Get metadata for a batch dial job.
# Get Dial
Source: https://docs.vogent.ai/api-reference/get-dial
get /dials/{id}
Gets the details of a dial.
# Get Dial Token
Source: https://docs.vogent.ai/api-reference/get-dial-token
post /dials/{id}/token
Gets a token for a given dial.
# Get Eval Config
Source: https://docs.vogent.ai/api-reference/get-eval-config
get /eval_configs/{id}
Gets the metadata of an AI evaluation configuration.
# Get Eval Record
Source: https://docs.vogent.ai/api-reference/get-eval-record
get /eval_configs/{id}/records/{recordId}
Gets an AI evaluation record.
# Get Eval Result
Source: https://docs.vogent.ai/api-reference/get-eval-result
get /eval_results/{id}
Gets an AI evaluation result.
# Get Eval Run
Source: https://docs.vogent.ai/api-reference/get-eval-run
get /eval_runs/{id}
Gets an AI evaluation run.
# Get extractor
Source: https://docs.vogent.ai/api-reference/get-extractor
get /agents/{agentId}/extractors/{extractorId}
Get an extractor for a given agent.
# Get function
Source: https://docs.vogent.ai/api-reference/get-function
get /functions/{id}
Gets a specific function.
# Get Phone Number
Source: https://docs.vogent.ai/api-reference/get-phone-number
get /phone_numbers/{id}
Retrieve a phone number
# Get versioned prompt
Source: https://docs.vogent.ai/api-reference/get-versioned-prompt
get /agents/{agentId}/versioned_prompts/{id}
Gets a specific versioned prompt for a given agent.
# Hangup Dial.
Source: https://docs.vogent.ai/api-reference/hangup-dial
post /dials/{id}/hangup
Hangs up an in-progress dial.
# Introduction
Source: https://docs.vogent.ai/api-reference/introduction
## Get Started
Welcome to the Vogent API docs. The root of the Vogent API is at `https://api.vogent.ai/api`.
## Authorization
You can authenticate with the Vogent API with an `Authorization` header in any request you send to the
API. You can generate an API key on your Vogent dashboard at `https://app.vogent.ai` by going to
the API Keys page in the sidebar.
# List Agents
Source: https://docs.vogent.ai/api-reference/list-agents
get /agents
List the agents on your account.
# List Batch Jobs
Source: https://docs.vogent.ai/api-reference/list-batch-dial-jobs
get /batch_dial_jobs
Lists batch dial jobs for the workspace.
# List Batch Dials
Source: https://docs.vogent.ai/api-reference/list-batch-dials
get /batch_dial_jobs/{id}/dials
Lists completed dials that are associated with the batch job.
# List Eval Config Records
Source: https://docs.vogent.ai/api-reference/list-eval-config-records
get /eval_configs/{id}/records
Lists the records for an AI evaluation configuration.
# List Eval Config Runs
Source: https://docs.vogent.ai/api-reference/list-eval-config-runs
get /eval_configs/{id}/runs
Lists the runs for an AI evaluation configuration.
# List Eval Configs
Source: https://docs.vogent.ai/api-reference/list-eval-configs
get /eval_configs
Lists the AI evaluation configurations in your workspace.
# List Eval Run Results
Source: https://docs.vogent.ai/api-reference/list-eval-run-results
get /eval_runs/{id}/results
Lists the results for an AI evaluation run.
# List extractors
Source: https://docs.vogent.ai/api-reference/list-extractors
get /agents/{agentId}/extractors
List all extractors for a given agent.
# List Models
Source: https://docs.vogent.ai/api-reference/list-models
get /models
List the models available on your account.
# List phone numbers
Source: https://docs.vogent.ai/api-reference/list-phone-numbers
get /phone_numbers
List phone numbers in your workspace.
# List Queued Batch Dials
Source: https://docs.vogent.ai/api-reference/list-queued-dials-for-batch-dial-job
get /batch_dial_jobs/{id}/queue
Lists all rows that are queued as part of the batch job.
# List versioned prompts
Source: https://docs.vogent.ai/api-reference/list-versioned-prompts
get /agents/{agentId}/versioned_prompts
Lists versioned prompts for a given agent.
# List Voices
Source: https://docs.vogent.ai/api-reference/list-voices
get /voices
Lists the AI voices available to the workspace.
# Purchase available number (deprecated, use /phone_numbers instead)
Source: https://docs.vogent.ai/api-reference/purchase-available-number
post /phone_numbers/purchase
Purchase an available phone number.
# Rerun Eval Result
Source: https://docs.vogent.ai/api-reference/rerun-eval-result
post /eval_results/{id}/rerun
Re-runs the evaluation judge on an existing result's transcript. Only re-evaluates using the judge model - does not re-generate the transcript.
# Run Eval
Source: https://docs.vogent.ai/api-reference/run-eval
post /eval_configs/{id}/runs
Starts a new evaluation run for an AI evaluation configuration. Optionally specify specific record IDs to evaluate.
# Run Multispeaker TTS Model
Source: https://docs.vogent.ai/api-reference/run-multispeaker-tts-model
post /tts/multispeaker
Runs a multispeaker (conversational) text to speech model and generates audio. Bytes will be streamed to the client as they are generated.
# Run TTS Model
Source: https://docs.vogent.ai/api-reference/run-tts-model
post /tts
Runs a text to speech model and generates audio. Bytes will be streamed to the client as they are generated.
# Search for available numbers
Source: https://docs.vogent.ai/api-reference/search-for-available-numbers
post /phone_numbers/search
Search for available numbers available to purchase
# Pause/Resume Batch Job
Source: https://docs.vogent.ai/api-reference/set-batch-dial-job-paused
post /batch_dial_jobs/{id}/paused
Sets the paused state of a batch dial job.
# Update Agent
Source: https://docs.vogent.ai/api-reference/update-agent
put /agents/{id}
Updates an existing agent.
# Update Batch Job
Source: https://docs.vogent.ai/api-reference/update-batch-dial-job
put /batch_dial_jobs/{id}
Update an existing batch dial job.
# Update Eval Config
Source: https://docs.vogent.ai/api-reference/update-eval-config
put /eval_configs/{id}
Updates an AI evaluation configuration.
# Update Eval Record
Source: https://docs.vogent.ai/api-reference/update-eval-record
put /eval_configs/{id}/records/{recordId}
Updates an AI evaluation record. Only available for prompt-type records.
# Update extractor
Source: https://docs.vogent.ai/api-reference/update-extractor
put /agents/{agentId}/extractors/{extractorId}
Update an extractor for a given agent.
# Update function
Source: https://docs.vogent.ai/api-reference/update-function
put /functions/{id}
Updates a specific function.
# Update Phone Number
Source: https://docs.vogent.ai/api-reference/update-phone-number
put /phone_numbers/{id}
Update a phone number's properties
# Update versioned prompt
Source: https://docs.vogent.ai/api-reference/update-versioned-prompt
put /agents/{agentId}/versioned_prompts/{id}
Updates a versioned prompt for a given agent.
# Websocket TTS
Source: https://docs.vogent.ai/api-reference/voicelab-websocket-tts
Real-time text-to-speech streaming over websockets. Send text incrementally and receive audio chunks as they are generated. To authenticate, you must include an `Authorization` header, with the value `Bearer {API_TOKEN}`. You can also include an `apiKey` query param with the value being your API key. Websockets can run multiple TTS streams concurrently. If you're using the `contextId` feature, make sure all generations for the context are on the same websocket.
# Dials Statuses
Source: https://docs.vogent.ai/developers/dial-statuses
Lifecycle of a dial.
A dial in elto goes through a number of statuses, both for browser and web calls.
The `dial.updated` webhook will be called whenever the status changes, so you can
keep track of the changes on your server.
* `queued`
All dials start off in `queued` status. This means that the dial is created, and
either the model is warming up, the call is queued by the telephony provider,
or in the case of browser calls, is waiting on the user to connect to the
data.
* `ringing`
This means that the call is being made, in the case of a telephone call, this
means the call is ringing, in the case of a browser call, it just means that the
web call is being connected.
* `in-progress`
The call has been connected and the agent is hooked into the call.
* `completed`, `failed`, `canceled`, `busy`, `no-answer`
These are call completed statuses. The `completed` status indicates that the call
completed successfully, the other completed statuses are only used for phone calls
and indicate errors that caused the call not to be picked up.
# Dials and Dial Sessions
Source: https://docs.vogent.ai/developers/dials-dialsessions
Core objects in Elto.
Elto has 2 objects that that you need to be familiar with when you make calls. When you create a one-off dial, you create a `DialSession`.
When the `DialSession` is started, a `Dial` is created, and initiated. The reason for this distinction is to allow you to specify a configuration that may be used for multiple dials, that can then be orchestrated by Elto without overrunning any concurrent call limits.
When you make a one off phone call, the dial is started automatically, for web calls, the dial is automatically started once a user connects their browser/client.
The endpoint returns a dial session ID. Once the `Dial` is created, you'll get a webhook, in case you need to manage the `Dial` further.
# Flow Builder Schemas
Source: https://docs.vogent.ai/developers/schemas
The API allows you to describe flow nodes through the API. When creating/updating a versioned prompt, you want to specify an
object that conforms to the appropriate schema in the `nodeData` field. If you want to use the output of a previous node
in a future node, you can reference it by using double curly braces. For example, if you have a node with the ID `node_1`
and you want to use the output of `node_1` in `node_2`, you can reference it as `{{node.node_1.output}}` in any string field.
The notation to lookup any data is `{{node.node_id.field_name}}`.
### Function Call
**Type:**
`function_call`
**Schema:**
```typescript theme={null}
{
functionId: string, // The ID of the function to call within vogent
inputs: {
name: string,
value: string
}[], // The inputs to the function
outputs: {
type: "BOOLEAN" | "STRING" | "INTEGER" | "FLOAT" | "CUSTOM",
name: string,
nullable: bool,
description: string,
customFieldJsonSchema?: string, // If the type is CUSTOM, this is the JSON schema for the field
}[]
}
```
### Question
**Type:**
`question`
**Schema:**
```typescript theme={null}
{
questionSchemaId?: string,
question: string,
questionType: "multiple_choice" | "multiple_select" | "freeform" | "numeric",
options?: string[],
clarificationDetails?: string, // Any clarification details that may be helpful to the model
}
```
### Freeform
**Type:**
`freeform`
**Schema:**
```typescript theme={null}
{
prompt: string // The prompt to feed to the model
}
```
# Create Dial
Source: https://docs.vogent.ai/developers/webhooks/create-dial
This webhook is triggered when a dial is created under a dial session.
## Event Type
`dial.created`
## Payload
| Name | Type | Description |
|---|
dial\_session\_id | string | The ID of the dial session. |
dial\_id | string | The ID of the created dial. |
## Example Message
```
{
"event": "dial.created",
"payload": {
"dial_session_id": "de3ee23e-ce58-4e05-9e7b-fcb96ba440a6",
"dial_id": "5a6c6190-db20-4d8e-86a9-79a6af292dea"
}
}
```
# Dial Extractor Complete
Source: https://docs.vogent.ai/developers/webhooks/dial-extractor
This webhook is triggered when the extractor finishes running after a dial.
## Event Type
`dial.extractor`
## Payload
| Name | Type | Description |
dial\_id | string | The ID of the dial. |
ai\_result | object | The extractor result. |
## Example Message
```
{
"event": "dial.extractor",
"payload": {
"ai_result": {
"summary": "This call was successful in getting the information."
},
"dial_id": "5a6c6190-db20-4d8e-86a9-79a6af292dea"
}
}
```
# Inbound Dial
Source: https://docs.vogent.ai/developers/webhooks/dial-inbound
This webhook is triggered when an inbound dial is made to a phone number linked to an agent. Elto will automatically run the agent after this webhook is triggered.
If the agent is configured with the inbound webhook response option, you may return a JSON object to fill in any parameters in the agent's prompt with the following typescript schema:
```typescript theme={null}
{
call_agent_input: {
[key: string]: string;
};
keywords: string[];
}
```
However, in this case you'll only have 3 seconds to respond before the call proceeds without the parameters filled in.
## Event Type
`dial.inbound`
## Payload
| Name | Type | Description |
|---|
dial\_session\_id | string | The ID of the dial session. |
dial\_id | string | The ID of the inbound dial. |
dest\_number\_id | string | The Elto ID of the called phone number. |
call\_agent\_id | string | The associated agent that was triggered by the call. |
source\_number | string | The E.164 formatted phone number that is making the call. |
## Example Message
```
{
"event": "dial.inbound",
"payload": {
"dial_session_id": "de3ee23e-ce58-4e05-9e7b-fcb96ba440a6",
"dial_id": "5a6c6190-db20-4d8e-86a9-79a6af292dea",
"dest_number_id": "2310e824-a2cb-4b0c-88cf-8f8b745bf6ae",
"call_agent_id": "32e4be84-0803-4c41-af70-5a87a2dc0a4e",
"source_number": "+18001234567"
}
}
```
## Example Response (with inbound webhook response)
```
{
"call_agent_input": {
"name": "John Doe"
},
"keywords": ["John", "Doe"]
}
```
# Dial Recording Complete
Source: https://docs.vogent.ai/developers/webhooks/dial-recording
This webhook is triggered when a recording is attached to a dial.
## Event Type
`dial.recording_created`
## Payload
| Name | Type | Description |
dial\_id | string | The ID of the dial. |
recording\_url | string | The URL to the recording. |
## Example Message
```
{
"event": "dial.recording_created",
"payload": {
"recording_url": "https://api.getelto.com/api/recordings/de3ee23e-ce58-4e05-9e7b-fcb96ba440a6",
"dial_id": "5a6c6190-db20-4d8e-86a9-79a6af292dea"
}
}
```
# Dial Status Updated
Source: https://docs.vogent.ai/developers/webhooks/dial-status-updated
This webhook is triggered when a dial status is updated.
## Event Type
`dial.updated`
## Payload
| Name | Type | Description |
|---|
dial\_session\_id | string | The ID of the dial session. |
dial\_id | string | The ID of the created dial. |
status | string | The new dial status |
## Example Message
```
{
"event": "dial.updated",
"payload": {
"dial_session_id": "de3ee23e-ce58-4e05-9e7b-fcb96ba440a6",
"dial_id": "5a6c6190-db20-4d8e-86a9-79a6af292dea",
"status": "completed"
}
}
```
# Dial Transcript Finalized
Source: https://docs.vogent.ai/developers/webhooks/dial-transcript
This webhook is triggered when a dial transcript is finalized.
## Event Type
`dial.transcript`
## Payload
| Name | Type | Description |
dial\_id | string | The ID of the created dial. |
transcript | \{text: string, speaker: 'AI' | 'HUMAN', detailType?: string}\[] |
The finalized transcript. |
## Example Message
```
{
"event": "dial.transcript",
"payload": {
"dial_id": "5a6c6190-db20-4d8e-86a9-79a6af292dea",
"transcript": [{
"text": "Hello?",
"speaker": "HUMAN"
}]
}
}
```
# Function Call
Source: https://docs.vogent.ai/developers/webhooks/function-call
This webhook is triggered when an agent makes a function call.
## Payload
| Name | Type | Description |
|---|
dial\_id | string | The ID of the dial this function call is associated with. |
params | object | Object containing the function call parameters. |
dial | Dial | The dial that triggered the function call. |
## Example Message
```
{
"dial_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"dial": {
...
},
"params": {
"name": "John Doe"
}
}
```
# Introduction
Source: https://docs.vogent.ai/introduction
What is Vogent?
Vogent is a platform for building, testing, and deploying conversational voice AI agents. We provide you with all of the off-the-shelf building blocks you need, while also including our own models and abstractions to make your agents more humanlike, low-latency, and performant.
Join our [Discord](https://discord.gg/An5z6xhYfS) to get help from the Vogent team, shape our roadmap, and request early access to new features.
Get an agent up and running in a few minutes
A deeper dive into the Vogent platform
## Why Vogent
### Instead of building this myself?
There are effective off-the-shelf solutions for many of the building blocks of voice agents, like live transcription engines, LLMs, and low-latency text-to-speech. Building an *effective* voice agent, though, involves a number of additional pieces:
* Robust voice-activity detection (VAD) to detect when a user has finished speaking and when to start speaking
* Rigorously handling structured, large-context conversations like surveys
* Detecting and navigating IVR menus and phone trees
* Dealing with interruptions and overlapping speech
* Managing latency and response timing to feel natural
* Evaluating conversations for correctness and quality
* Surfacing issues from large corpuses of calls
* Experimenting with new configurations and backtesting on past conversations
Voice AI evolves quickly, with better models and more effective evaluation techniques coming out every week. With Vogent, you can experiment with the latest solutions immediately, instead of having to sift through the noise and implement them yourself.
### Instead of using a different platform?
Voice AI is a growing space, and it's exciting that there are different ways to build productive solutions; some may be better fits than others, based on your background and goals.
With Vogent, we try to offer the best solution for creating **rigorous, effective voice agents**. Building a voice agent that wows on a demo is easy, but maintaining a voice agent that consistently produces results on millions of dials involves more sophisticated building blocks and a more transparent evaluation loop.
In addition to table-stakes features for building and managing voice agents, Vogent provides features like:
* IVR/phone-tree detection and navigation models
* In-house, ultra-low-latency voices
* In-house, ultra-low-latency LLMs tuned on millions of conversations
* Fine-tuning on call recordings and transcripts
* A survey-builder that uses multiple models to handle structured conversations accurately, regardless of the number of questions
Everyone's needs are different, and no one platform can do it all. We pride ourselves on working closely with each of our customers to help them build solutions that work. If there's anything you need to make your voice agent work, just let us know in the in-app chat widget, ping us on Discord, or reach out to us over [email](mailto:jagath@vogent.ai?subject=Question%20about%20using%20Vogent!).
# General Settings
Source: https://docs.vogent.ai/platform-overview/agents/config/general-settings
Configure Basic Behavior of Your Voice Agent
General settings control the fundamental behavior of your voice agent during calls, from how it initiates conversations to how it handles interruptions.
## Opening Line
Configure what your agent says when first connecting to a call. This feature can be set differently for:
* Inbound calls
* Outbound calls
* Both call types
If you want your agent to wait for the user to speak first, you can disable this feature entirely. This can be useful for scenarios where the caller should initiate the conversation.
## Call Transfers
Enable your agent to transfer calls to specific phone numbers. When enabled, the agent can transfer calls by outputting a special `<|transfer|>` tag in their response.
Make sure your agent's prompt includes logic for when and how to handle transfers appropriately.
## Background Noise
Add ambient sound to make conversations feel more natural. Available options include:
* Office
* Other environmental sounds
This feature helps create a more realistic conversation environment and can make the interaction feel more authentic.
## Utterance Detector Sensitivity
Control how quickly your agent recognizes and responds to user interruptions. Sensitivity levels:
* Low
* Medium (recommended)
* High
Higher sensitivity means faster interruption detection but may result in more false positives. Medium provides a good balance for most use cases.
## Inbound Webhook Responses
Enable dynamic prompt customization based on webhook responses for inbound calls. When enabled, you can:
* Inject variables into your agent's prompt
* Customize responses based on caller data
* Adapt agent behavior using external information
This feature requires proper webhook configuration and handling on your server to provide the necessary information during inbound calls.
# IVR Settings
Source: https://docs.vogent.ai/platform-overview/agents/config/ivr-settings
Configure How Your Agent Handles Automated Phone Menus
IVR (Interactive Voice Response) settings determine how your agent detects and navigates through automated phone menus. These settings are crucial for scenarios where your agent needs to interact with other phone systems.
## IVR Detection
Enable automatic detection of automated phone menus during calls. When enabled, the agent uses a specialized model to identify when it's interacting with an IVR system.
While IVR detection may add a few milliseconds of latency to the call, it significantly improves the agent's ability to navigate automated systems successfully.
## Voice Settings
Choose a specific voice for IVR interactions that prioritizes clarity and recognition by automated systems.
Options include:
* Use Standard Voice (same as regular conversations)
* Select a specialized voice optimized for IVR interactions
Using a specialized voice for IVR interactions can improve success rates when dealing with automated systems that may have trouble recognizing more natural-sounding voices.
## Model Selection
Configure which language model handles IVR interactions:
* Use Standard Model (same as regular conversations)
* Select a specialized model trained for IVR navigation
Specialized IVR models are optimized for shorter, more precise responses that work well with automated systems.
## Tag Text
Configure how IVR interactions are marked in transcripts and logs. Options:
* Don't tag
* Tag with `` at the start of IVR interactions
Tagging IVR text can be useful for analysis and debugging, but may affect how the transcript appears in your systems if you're not handling the tags appropriately.
## Best Practices
1. Enable IVR detection when your agent regularly needs to navigate automated menus
2. Use specialized voices and models for complex IVR systems
3. Consider enabling text tagging during testing to help debug navigation issues
These settings only affect how your agent handles automated menus - they don't impact normal human conversations.
# Linked Numbers
Source: https://docs.vogent.ai/platform-overview/agents/config/linked-numbers
Connect Phone Numbers to Your Agent
Linked numbers allow you to associate phone numbers with your agent for handling inbound calls. When someone calls a linked number, your agent will automatically answer and begin the conversation.
To create new phone numbers for your agents, visit the [Telephony section](/platform-overview/telephony).
## Managing Linked Numbers
1. Add numbers from your available phone number pool
2. Remove numbers when you no longer want the agent to handle calls for that line
3. Transfer numbers between agents as needed
Making changes to linked numbers will affect all future inbound calls to those numbers immediately.
# Overview
Source: https://docs.vogent.ai/platform-overview/agents/config/overview
Configure Your Voice AI Agent
Configure every aspect of your agent's voice interaction capabilities, from the voice they use to how they handle incoming calls. These settings determine how your agent sounds and behaves during conversations.
Customize your agent's voice, speech rate, and audio parameters
Manage phone numbers and routing for your agent
Set up interactive voice response menus and call handling rules
# Voice Settings
Source: https://docs.vogent.ai/platform-overview/agents/config/voice-settings
Configure Your Agent's Voice and Speech Parameters
Voice settings allow you to customize how your agent sounds during conversations. These settings affect all calls unless overridden via the API.
## Language
The primary language your agent will use for conversations. This setting should align with your agent's prompt and intended use case. Currently supported:
* English
* Spanish
When setting up your agent's prompt, make sure to explicitly mention the chosen language to ensure consistent behavior.
## Default Voice
Select the voice that your agent will use by default. Each voice has been optimized for natural conversation and clear pronunciation, and certain voices have been optimized for spelling.
For more information on voices, check out the [Voices](/platform-overview/voices) page.
The default voice can be overridden on a per-call basis using the API if needed.
## Volume
Fine-tune your agent's speaking volume to ensure optimal audio levels for different scenarios. The volume scale includes:
* Quietest
* Quieter
* Normal (recommended default)
* Louder
* Loudest
This setting is particularly useful when your agent needs to adapt to different environmental conditions or caller preferences.
## Pronunciation Config
Customize how your agent pronounces specific words or phrases. This is especially useful for:
* Brand names
* Product names
* Technical terms
* Industry-specific terminology
* Location names
Pronunciation configurations are applied globally to all of your agent's conversations.
# Dial History
Source: https://docs.vogent.ai/platform-overview/agents/evaluation/dial-history
View and analyze past dials
The Dial History page allows you to review all past calls made to and from your agent. You can access detailed information about each call, including recordings, transcripts, and extracted results.
You can also use the Counterfactuals feature to test how different versions of your agent would have handled past conversations.
## Viewing Dial History
There are two ways to view dial history:
1. Navigate to your agent's **Dials** tab to view all calls to/from the agent.
2. Click the **Dial History** button on the left sidebar to view dial history across agents.
## Analyzing Individual Dials
Click on any dial to view its detailed information.
### Transcript
The transcript tab shows the complete conversation between the user and your AI agent. Each message is labeled with the speaker (Human/AI) and displayed chronologically.
You can click on any Human line to jump to the corresponding timestamp in the recording.
### Results
The **Results** tab provides:
* Completion reason (e.g., "User Hung Up")
* Extractor results (if any extractors were configured)
* Option to add comments for team collaboration
### Invocation
The **Invocation** tab displays:
* Agent information
* Agent version used for the call
* The inputs provided for this call's invocation
## Counterfactuals
The **Run Counterfactual** feature lets you test how different versions of your agent would handle past conversations:
Choose the prompt version you want to test from the dropdown menu
Click the "Run" button to simulate how that version would have responded
Compare the counterfactual responses with the original conversation
This feature is particularly useful when:
* Evaluating new agent versions before deployment
* Debugging conversation flows
* Training and improving your agent's responses
The **Run Counterfactual** feature runs by passing your model version the dial transcript up to the point of the counterfactual and outputting the response at that point.
This isn't a fully accurate simulation of the conversation (as we can't simulate the counterparty's response to your tested model's output), but it can still be useful for testing your model against specific problematic scenarios.
## Filtering and Navigation
Use the Filters menu to:
* Search for specific dials
* Filter by date range
* Filter by call outcome
* Filter by phone number or connection type
## Exporting Data
Click the **Export** button to download dial history.
# Extractors
Source: https://docs.vogent.ai/platform-overview/agents/evaluation/extractors
Extract data after each call in a structured format
Extractors enable you to gather structured data after each call.
You can then use this data to interface with your own systems or track performance over time.
For example, in our quickstart guide's [Restaurant Ordering Agent](/quickstart/inbound#retrieving-the-order-post-call), we use extractors to gather the customer's name and order in a consistent format, which we can then use to e.g. hit a point-of-sale system's API reliably.
While you can view all extractor results in the UI, you can also use the [Dial Extractor webhook](/webhooks/dial-extractor) to send the data to your own systems after each call.
## Creating an Extractor
To create an extractor, navigate to your agent's **Extractor** tab. Click the **Create New Version** dropdown to start defining a new extractor configuration.
### General Settings
Each extractor version needs a name that will be used to identify it in the UI.
### Extraction Fields
Extraction fields define the schema of data you want to capture from each call. To add a field:
Click the **Add Field** button
Provide a name for the field
Select the field type from the following options:
* Text: For string values
* Integer: For whole numbers
* Float: For decimal numbers
* Boolean: For true/false values
* Custom: For complex or nested data structures (e.g. JSON objects)
Toggle **Nullable** if the field is optional
Add a description to document the field's purpose; this aids our extraction model in understanding the data you're trying to capture in this field
If you're using the *Custom* field type to capture a JSON object, we recommend adding a description to each field within the object.
### Testing Extractors
You can test new extractor versions on past dials before deploying them. Once your extractor has been created:
Make sure that you've created your extractor by hitting **Save**; if you're still on the extractor creation page, the **Test** button will not appear
Select the extractor version that you'd like to test
Provide the Dial ID of the dial that you'd like to test against (check out the [Dial History](/platform-overview/agents/evaluation/dial-history) section to learn about browsing past dials)
Click **Test** to run the extractor on this dial. It may take a few seconds to complete.
### Managing Versions
Each extractor configuration is version-controlled. You can:
* Create new versions to iterate on your extraction schema
* Make a version the default by clicking **Make Default**
* Test different versions to ensure they work as expected
* View when versions were created and last updated
If you're rolling out a new extractor version, double-check that it's set as the default version.
## Best Practices
* Give fields clear, descriptive names that reflect their purpose
* Use appropriate field types to ensure data consistency
* Add descriptions to document what each field represents
* Test extractors thoroughly before making them the default version
* Consider making fields nullable if they might not always be available. This prevents inconsistent empty value formats.
## Technical Details
Each extractor has a unique ID that can be used to reference it in your integration code. You can find this ID in the General section of your extractor configuration.
# Overview
Source: https://docs.vogent.ai/platform-overview/agents/evaluation/overview
Everything that happens after the call
Vogent provides a suite of features to help you track information from dials and improve performance systematically.
Extract data after each call in a structured format
Recordings, transcripts, and additional information from every call
Iterate on your agent's models and extractors safely
Test changes to your agent on past calls
# Versioning and Evaluation
Source: https://docs.vogent.ai/platform-overview/agents/evaluation/versioning-and-evaluation
Manage model and extractor versions
Iterating and evaluating is pivotal to building effective agents.
Every agent's model and extractor is versioned, allowing you to improve agents safely and evaluate them against past dials.
The Vogent API's support for versioning also allows you to roll out new agent versions carefully, making A/B testing etc. easier.
## Accessing Model and Extractor Versions
All model and extractor versions can be found in the **Version** dropdown in your agent's **Model** or **Extractor** tabs, respectively.
### Creating a New Version
To create a new version, click the **Create Version** button in the **Version** dropdown, fill in the configuration for your model or extractor, and click **Save**.
### Making a Version the Default
To make a version the default, click the **Default** button under the **Version** dropdown.
Once you roll out a default version, all initiated calls without an otherwise specified version will use this version. To protect against regressions, we recommend testing new versions thoroughly before making them the default, and passing explicit version IDs when creating calls via the API.
## Testing Model and Extractor Versions
Vogent provides capabilities for testing model and extractor versions against past dials.
### Testing Model Versions
For more information on testing a model version against past dials, see [Counterfactuals](/platform-overview/agents/evaluation/dial-history#counterfactuals).
### Testing Extractor Versions
For more information on testing an extractor version against past dials, see [Extractor Testing](/platform-overview/agents/evaluation/extractors#testing-extractors).
# Fine Tuning
Source: https://docs.vogent.ai/platform-overview/agents/model/fine-tuning
Optimize your agent's performance with custom training
Vogent is able to fine-tune your agent's model on a custom dataset to improve its performance on a specific task.
Fine-tuned agents make fewer mistakes and are more consistent in their responses.
Fine-tuning is available on Vogent's custom Enterprise plan.
## How do I know if Fine-Tuning Will Work for My Agent?
If your agent has a certain bar for accuracy, or if mistakes are costly, then fine-tuning can guard you against hallucinations and other unexpected behavior.
The majority of our customers with call volumes above 10,000 calls per month (and many with call volumes below that) run fine-tuned agents.
Our fine-tuning process varies by customer, but generally involves the following steps:
We'll work with you to understand the ideal agent behavior, any issues you're seeing, and the goals of the fine-tuning.
We'll collect data for the fine-tune, and supplement it with data that we generate using internal models.
Recordings and transcripts from real calls are the most effective data for fine-tuning, but we have workarounds if those aren't available.
We'll train our in-house language models on the generated data.
We'll test the model on past (and live) calls to evaluate its performance. We may need to iterate on the data or training parameters to achieve the desired behavior.
The full process can take 2-4 weeks, but we'll work with you to get the agent to the desired behavior as quickly as possible.
Want to learn more? [Email us](mailto:j@vogent.ai?subject=Fine-tune%20inquiry) to get started.
# Flow Builder
Source: https://docs.vogent.ai/platform-overview/agents/model/flow-builder
Build more structured agents with explicit conditional logic
Flow Builder enables you to create agents with structured conversation paths and explicit decision points.
More specifically, the Flow Builder allows you to delineate lists of questions, along with branching logic that determines which questions are asked next. Each agent created this way intelligently navigates through questions, probing for additional information until it receives a satisfactory answer before moving to the appropriate next step based on that response.
Under the hood, the Flow Builder comprises two models: one that maintains context for the current question, and another that interprets the user's response to determine what context to pass to the first model for the next step.
## Building an Agent with Flow Builder
To access the Flow Builder, go to the **Agents** tab and select an agent (or create a new one). Then, navigate to the agent's **Model** tab, select *Elto Survey New* under *Model* and *Flow* under *Agent Type*.
The prompting interface should then be replaced by a visual flow builder.
### Understanding the Flow Builder
The Flow Builder is a collection of nodes and edges (a directed graph). Each node is a question, and each edge is a conditional branch.
At any point in the conversation, the agent will be in one of the nodes. The survey model will be given the context of the current node, as well as relevant information from past nodes, to carry out the conversation and gather the information necessary to move on from the current node.
Once the information is gathered, a separate model will interpret the user's response and the possible subsequent nodes to determine which node to transition to next.
### Adding Nodes
The conversation begins with the node connected to the **Start** node.
To add a node to the conversation, click on the **Edit** button on the bottom left of the Flow Builder interface. Once the UI has expanded, click on the **New Node** button.
There are three node types: questions, freeform conversations, and function calls.
#### Question Nodes
In a question node, the agent will ask the user a question and continue the conversation to get a desired response.
Enter your question in the **Question** field, and select an expected response type from the **Answer Type** dropdown.
The possible answers that you designate in the *Multiple Select* or *Multiple Choice* answer types are used by the model, along with the conversation history, to determine which node to transition to next.
As a result, the user's response does not have to verbatim match an answer for the agent interpret it as a correct response.
#### Freeform Nodes
In a freeform node, the agent will converse with the respondent based on a set of instructions.
The agent progresses from the freeform node based on conditions outlined in the Freeform Node's prompt.
You can also use Freeform nodes as terminal nodes, which can be useful if you want to end the conversation with further instructions or pleasantries for the respondent.
Make sure that there's a clear path to the next node from the Freeform Node's prompt; otherwise, your agent may get stuck.
#### Function Call Nodes
In a function call node, the agent will call an external function to get a response, which it can then use in future nodes.
For more information on function-calling in Vogent, see the [Function Calling](/platform-overview/agents/model/function-calling) guide.
For any node, you can reference past nodes by using `@` to insert a variable.
### Connecting Nodes
To connect two nodes, click on the white node at the bottom of the node from which you want to branch, and drag an edge to the node to which you want to connect.
The behavior of every node transition edge is determined by 3 fields: **Order**, **Variable**, and **Condition Type**.
* **Order**: The order of the node transition edge determines the order in which the agent will consider the node transition edges.
* **Variable**: The variable (output from a past node) that the agent will use to determine which node transition edge to take.
* **Condition Type**: The condition type determines how the agent will interpret the variable to determine which node transition edge to take.
The possible condition types are:
* *Always*: This edge will always be taken when considered.
* *Equal*: This edge will be taken when the output from the variable is equal to the value specified in the *Condition Value* field, as determined by the model that interprets the user's response (i.e. the user's response does not have to verbatim match the value specified in the **Condition Value** field).
* *In*: This edge will be taken when the output from the variable is in the list of values specified in the *Condition Value* field.
# Overview
Source: https://docs.vogent.ai/platform-overview/agents/model/overview
Design your agent's conversation logic
The model section is where you define how your agent thinks and responds during conversations. From basic prompting to sophisticated conversation flows, these tools help you create natural and effective voice interactions.
Configure your agent's base personality and behavior using prompts
Create structured conversation flows and decision trees
Optimize your agent's performance with custom training
# Prompted Models
Source: https://docs.vogent.ai/platform-overview/agents/model/prompted-models
Configure your agent's conversational behavior using a prompt
Prompted models enable you to design conversational AI agents by providing detailed instructions about how they should behave and respond. This approach offers substantial flexibility while requiring minimal technical setup.
## Key Features
* Support for third-party models like GPT and Vogent's Base Conversations Model
* Simple prompt-based configuration interface
* Natural, context-aware conversations
* Customizable agent personas and behaviors
## Getting Started
To create a prompted model agent:
1. Navigate to the Model tab in your agent configuration
2. Select "Prompted Model" as your model type
3. Choose your preferred model (GPT or Vogent Base Conversations)
4. Write your prompt instructions
5. Test and refine your agent's responses
## Choosing the Right Model
### Third-Party Models
Vogent offers off-the-shelf models, like GPT-4o.
### Vogent Base Conversations Model
Our in-house model is specifically trained for conversational tasks and performs exceptionally well through prompting alone. It's optimized for voice interactions and common conversation patterns.
## Writing Effective Prompts
For guidance on creating effective prompts, check out our [prompting guide](#). The guide covers:
* Best practices for prompt engineering
* Template examples
* Common patterns and anti-patterns
* Optimization techniques
## When to Use Prompted Models
Prompted models are ideal for:
* Open-ended conversations
* Customer service interactions
* Information gathering
* General Q\&A
For more structured interactions like surveys or form-filling, consider using our [Flow Builder](/platform-overview/agents/model/flow-builder) instead.
## Example Implementation
The interface provides a straightforward way to configure your prompted model:
1. Set your agent's basic information (name, type)
2. Choose your preferred model
3. Write your prompt instructions
4. Define opening lines and responses
5. Configure any additional parameters
Your prompt should include clear instructions about the agent's role, desired behavior, and any specific responses or patterns to follow.
## Next Steps
* Explore our [prompting guide](#) for detailed tips
* Try different model types to find the best fit for your use case
* Test your agent thoroughly with various user inputs
* Iterate on your prompts based on actual conversation data
# Overview
Source: https://docs.vogent.ai/platform-overview/agents/overview
Designing Agents using Vogent
Agents are the core building blocks of the Vogent platform. Each agent is a sophisticated AI entity capable of engaging in natural voice conversations. Here's a guide to all the components and features available for creating and customizing your agents.
Set up your agent's voice, phone numbers, and IVR settings
Design your agent's conversation logic and language understanding
Add custom functionality and external integrations to your agents
Configure data extraction from conversations for analytics
Test and validate your agent's responses in different scenarios
# API Settings
Source: https://docs.vogent.ai/platform-overview/api-settings
Manage API keys, webhooks, and concurrency limits
You can configure API access, webhook endpoints, and concurrent phone call limits by visiting the **API** tab in the left sidebar.
## API Keys
Navigate to the **Keys** tab and click **New Key** to create a new API key.
If you remove a user from your workspace, their API keys will be deactivated as well.
## Webhooks
Configure webhook settings to receive real-time updates about your voice agents' activities. Webhooks allow your application to receive automatic notifications about events like call status changes, transcripts, and recordings.
### Webhook Configuration
1. **Webhook Signing Secret**: A secure key used to verify that incoming webhooks are genuinely from Vogent. Keep this secret secure and use it to validate webhook signatures.
2. **Webhook URL**: The endpoint where Vogent will send webhook events. This should be a publicly accessible HTTPS URL that can receive POST requests.
For detailed information about webhook payloads and event types, visit our [Webhooks documentation](/developers/webhooks).
#### Verifying the Webhook Signature
To verify the webhook signature, you need to use the webhook signing secret. The signature is included in the `X-Elto-Signature` header of the webhook request.
Here's an example of how to verify the signature in JavaScript:
```javascript Webhook Signature Verification theme={null}
function verifyWebhook(
payload,
signature,
signingSecret,
algorithm = 'sha256'
) {
// Convert payload to buffer if not already
const buf = Buffer.isBuffer(payload) ? payload : Buffer.from(payload, 'utf8');
// Convert signature from hex string to buffer
const sig = Buffer.from(signature, 'hex');
// Create HMAC with secret
const hmac = crypto.createHmac(algorithm, signingSecret);
// Calculate digest of payload
const digest = Buffer.from(hmac.update(buf).digest('hex'), 'hex');
// Compare calculated digest with provided signature
if (sig.length !== digest.length || !crypto.timingSafeEqual(digest, sig)) {
throw new Error('Invalid webhook signature');
}
return true;
}
```
## Concurrent Dial Limits
Control how many simultaneous phone calls your agents can handle.
* View your current concurrent dial limit
* Monitor current usage ("Currently using X")
* Request an increase if you need to handle more concurrent calls
Reaching your concurrent dial limit will prevent new calls from being initiated until active calls are completed.
### Requesting a Limit Increase
Click the **Request Increase** button to submit a request for a higher concurrent dial limit. Our team will review your request and respond ASAP.
# Batch Dial Jobs
Source: https://docs.vogent.ai/platform-overview/batch-dial-jobs
Automate large-scale outbound calling campaigns with scheduled batch dial jobs
Batch dial jobs enable you to execute large-scale outbound calling campaigns by creating and managing multiple dials in batches. This feature is perfect for sales campaigns, customer surveys, appointment reminders, and other scenarios where you need to make hundreds or thousands of calls efficiently.
## Overview
A batch dial job consists of:
* **Target phone numbers**: A list of phone numbers to call
* **Agent configuration**: The AI agent that will handle the conversations
* **Scheduling**: When the calls should be made
* **Concurrency limits**: How many calls to make simultaneously (this may not exceed your workspace's concurrent dial limit)
* **Phone number pool**: Which of your phone numbers to use for outbound calls
## Creating a Batch Dial Job
### 1. Prepare Your Data
First, prepare a list of phone numbers and any associated data (like names, account numbers, etc.) that your agent will need during the calls.
```json theme={null}
[
{
"toNumber": "+1234567890",
"inputs": {
"customer_name": "John Doe",
"account_id": "ACC123"
}
},
{
"toNumber": "+1987654321",
"inputs": {
"customer_name": "Jane Smith",
"account_id": "ACC456"
}
}
]
```
### 2. Create the Batch Job
Use the API to create your batch dial job:
```bash theme={null}
curl -X POST "https://api.vogent.ai/api/batch_dial_jobs" \
-H "Content-Type: application/json" \
-H "api_key: YOUR_API_KEY" \
-d '{
"name": "Customer Survey Campaign",
"callAgentId": "your-agent-id",
"maxConcurrentDials": 5,
"fromPhoneNumberIds": ["your-phone-number-id"],
"schedule": {
"days": [
{
"dayOfWeek": 1,
"timeSlots": [
{
"startTime": "09:00",
"endTime": "17:00"
}
]
}
],
"timezone": "America/New_York"
},
"rows": [
{
"toNumber": "+1234567890",
"inputs": {
"customer_name": "John Doe",
"account_id": "ACC123"
}
}
]
}'
```
You may view your job in the Vogent UI by going to the *Batch Dials* page.
### 3. Start the Job
Batch jobs are created in the `INIT` state. You must start them explicitly:
```bash theme={null}
curl -X POST "https://api.vogent.ai/api/batch_dial_jobs/{job-id}/paused" \
-H "Content-Type: application/json" \
-H "api_key: YOUR_API_KEY" \
-d '{"paused": false}'
```
## Managing Batch Jobs
### Check Job Status
Monitor your batch job's progress:
```bash theme={null}
curl -X GET "https://api.vogent.ai/api/batch_dial_jobs/{job-id}" \
-H "api_key: YOUR_API_KEY"
```
Response includes:
* Current status (`INIT`, `ACTIVE`, `PAUSED`, `COMPLETE`, `CANCELLED`)
* Creation timestamp
* Configuration details
### Update Job Configuration
You may update an existing job's settings, after it's been created. The changes won't apply until the workflow is paused.
```bash theme={null}
curl -X PUT "https://api.vogent.ai/api/batch_dial_jobs/{job-id}" \
-H "Content-Type: application/json" \
-H "api_key: YOUR_API_KEY" \
-d '{
"maxConcurrentDials": 10,
"schedule": {
"days": [
{
"dayOfWeek": 1,
"timeSlots": [
{
"startTime": "09:00",
"endTime": "18:00"
}
]
}
],
"timezone": "America/New_York"
}
}'
```
### View Queued Dials
See all the rows that are queued to run on your batch job. This won't show dials that have already completed or are in progress.
```bash theme={null}
curl -X GET "https://api.vogent.ai/api/batch_dial_jobs/{job-id}/queue" \
-H "api_key: YOUR_API_KEY"
```
## Scheduling
Batch dial jobs support sophisticated scheduling to ensure calls are made at appropriate times:
### Weekly Schedule Format
```json theme={null}
{
"schedule": {
"days": [
{
"dayOfWeek": 1, // Monday (0=Sunday, 1=Monday, etc.)
"timeSlots": [
{
"startTime": "09:00",
"endTime": "12:00"
},
{
"startTime": "13:00",
"endTime": "17:00"
}
]
}
],
"timezone": "America/New_York"
}
}
```
### Time Zone Support
All schedules use the specified timezone. Common timezone values:
* `America/New_York` - Eastern Time
* `America/Chicago` - Central Time
* `America/Denver` - Mountain Time
* `America/Los_Angeles` - Pacific Time
* `UTC` - Coordinated Universal Time
## Best Practices
### Phone Number Pool
Use multiple phone numbers to increase call success rates and distribute call volume over multiple numbers.
### Data Management
Structure your `inputs` data consistently:
* Use the same field names across all rows
* Include all data your agent prompt references
* All your values must be strings
### Job Statuses
Your job will go through the following statuses:
* **INIT**: Job is just created and hasn't been started yet
* **ACTIVE**: Job is running normally
* **PAUSED**: Job is temporarily stopped
* **COMPLETE**: All dials have been attempted
* **CANCELLED**: Job was manually stopped
# Billing
Source: https://docs.vogent.ai/platform-overview/billing
How we charge for Vogent
Vogent charges for usage on a pay-as-you-go basis, metered by the second. You're billed for the number of minutes your agents spend on calls, at one of two rates (based on the voice you've selected):
* **Standard Voices**: \$0.09 per minute (\$0.0015 per second)
* **Premium Voices**: \$0.14 per minute (\$0.0023 per second)
If you're planning on making calls at scale (\~5-10,000+ calls per month), you'll likely benefit from the volume discounts in our Enterprise plan.
The **Billing** tab on the left sidebar lets you view your billing information and usage history.
## Enterprise Plans
Building and maintaining high-volume or mission-critical voice agents can require some additional help; Vogent's Enterprise plans provide a range of benefits, from custom agent design and fine-tuning to dedicated support and volume discount, that can get you set up with high-volume, performant voice agents as quickly as possible.
[Contact us](mailto:j@vogent.ai?subject=Enterprise%20Plan%20Inquiry) or [grab some time](https://calendly.com/elto/elto_get_started) to learn more.
# Introduction
Source: https://docs.vogent.ai/platform-overview/introduction
A Deep-Dive into the Vogent Platform
This section is a reference for all of the features of the Vogent platform. If you're looking to get up-to-speed quickly, we recommend starting with the [Quickstart guide](/quickstart) instead.
Learn about the high-level architecture and components of the Vogent platform
Learn how to create and manage AI agents that handle conversations naturally
Explore our library of natural-sounding voices and voice customization options
Build custom logic and integrations for your voice agents
Create and manage information sources your agents can access and reference
Monitor and analyze real-time agent conversations and performance
Configure phone systems and calling capabilities for your agents
Manage authentication and access to the Vogent platform
Collaborate with team members and manage user permissions
View usage, manage subscriptions and payment methods
# Live Dials
Source: https://docs.vogent.ai/platform-overview/live-dials
Connect into live calls
If you'd like to view all calls that are currently running, you can do so by clicking the **Live Dials** tab in the left sidebar.
To patch into a call, click the **Listen** button next to the call you'd like to hop into.
From here, you can pause the agent by clicking the pause icon and/or speak to the counterparty yourself by unmuting.
While paused, every line in the conversation will still get added to the agent's context. This way, if you choose to unpause the agent, it will continue the conversation from the transfer point.
# Prompting Guide
Source: https://docs.vogent.ai/platform-overview/prompting-guide
A guide to designing effective voice agents in Vogent
Prompting your way to a useful voice agent can be difficult. Here are some tips to make it easier.
### When to use text prompts (as opposed to the Flow Builder)
Flow Builder models are a better fit for conversations that have structure, and that require passing through a number of known steps.
For example:
* Outbound surveys
* Inbound lead/client handling
On the other hand, prompted agents perform well when you have a defined goal but the conversation is unstructured. They're useful in more dynamic situations, in which you have an outcome to achieve but can't anticipate the types of objections that might arise.
Examples of this include:
* Calling insurance to check on a claim
* Calling airlines to book flights or add ancillaries
* Calling small businesses to inquire about hours or check on orders
## Text Prompt Tips
### Keywords
* The `<|press:{number}|>` keyword will make the agent press a button on the phone (e.g. `<|press:1|>` will make the agent press the 1 key). If you use a letter (e.g. `<|press:a|>`), the agent will press the corresponding number using a keypad mapping.
* The `<|hangup|>` keyword will make the agent hang up the call.
### Instructing Your Voice Agent
There's no single "right way" to prompt a voice agent, but we've found the most effective prompts (especially for the *Vogent Base Conversations* model) follow a clear structure with specific components.
* Start your prompt by clearly establishing the agent's identity and the purpose of the call. This helps ground the agent in their role and mission:
> Your name is James Perez. You are calling an airline, `{{airline}}`,
> about a reservation for passenger `{{passenger_name}}` with
> confirmation number `{{confirmation_number}}`.
Next, provide specific, actionable objectives for the call. List exactly what information or actions the agent needs to accomplish:
> Ensure that during the call, you:
> Add checked baggage to the reservation
> Confirm the baggage fee amount
> Verify weight limits for checked bags
> Inquire about carry-on allowance
> Get a confirmation number for the baggage addition
Finally, add on specific instructions based on where the agent falls short on performing in testing.
> If asked for the confirmation number, you MUST give the FULL number
> (`{{confirmation_number}}`).
> Get a reference number for the baggage addition
> Confirm the exact fee amount
> Verify payment methods accepted
> Get baggage tracking information if provided
> Do not end the call until you have gathered ALL required information.
This structure ensures your agent stays focused on the task while maintaining natural conversation flow and gathering all necessary information.
## Flow Builder Tips
* Clone an agent template (like our [quickstart Flow Agent](quickstart/flow-builder)) to get a sense of the structure of a complete flow agent.
* Reference answers from past nodes using `@` to make questions more specific and/or personalized. For example, if you ask the respondent for their name in the initial question, referencing it in future questions can be a nice touch.
* Preface questions with some sort of affirmative phrase (like "got it."). It can be jarring when the agent moves into a new node after a response without some sort of acknowledgement.
# Auto-Create Agents
Source: https://docs.vogent.ai/platform-overview/self-learning/create
Create agents from recordings and talk tracks
## Creating a new agent
To create a new auto-designing agent, navigate to the **Agents** tab on the left sidebar and click the **New Agent** button on the top right.
Then, you should select the "Self Design" tab.
You can then upload recordings and talk tracks that correspond to the agent you want to create.
## Guidelines for Recordings/Transcripts
Our self-learning system works in two stages: we first use the scripts and recordings you provide us to generate an optimal prompt for the agent,
then, we run simulations to optimize the model itself to fit your use case more closely. This helps make your agent less likely to hallucinate, and perform
the task more effectively. To optimize the performance of the system, there are a few guidelines you should follow when uploading data into Vogent:
### PII
We attempt to strip out any PII from the transcripts and recordings you upload to prevent any potential data leakage into your model and prompts. If you have anonymized
recordings or transcripts, however, you should upload those to Vogent instead. If you have sensitive use cases (e.g. use cases with PHI), please contact us before uploading any data
that may be covered under HIPAA, etc.
### Human Agent Accuracy
You don't have to necessarily upload recordings in which the human agents perform perfectly -- we pre-process transcripts to remove instances of humans making one-off errors,
so this behavior doesn't affect the agent. However, the recordings must be generally representative of the task being performed successfully; you shouldn't have a large number of
failed tasks, or off-topic conversations in the recordings.
### Recordings vs Transcripts
We train models on the text level, so if you upload recordings, they will be converted into transcripts on our backend. If you have transcripts, you should upload those instead of recordings,
since this will speed up the design process.
### Data Size
For best results we suggest uploading as many transcripts/recordings as possible, but we've seen good results with as few as 100 recordings. The smaller your dataset, the less representative
it may be of all the scenarios we may encounter in real calls, however.
## Guidelines for Talk Tracks
Recordings and transcripts are the gold standard for data, however, we can work with talk tracks and training material if necessary.
You should upload data in .pdf, .md, or .txt format. If you have your data in other formats, and cannot convert them, please contact us.
# Optimize Agents
Source: https://docs.vogent.ai/platform-overview/self-learning/optimize
Optimize performance based on historical dials and simulations
## Setting up optimization
Before you can optimize an agent, you'll need to have an evaluation set up. This lets you get more granular about success/failure cases of your model,
and lets us feed this feedback into the training process.
### Creating an evaluation
To create an evaluation, navigate to the **Evaluations** tab on the left sidebar and click the **New Eval** button on the top right.
You want to be as explicit as possible about important success/failure cases of your model, in order to let Vogent know how to judge a call.
We can also automatically generate eval criteria based on the talk track and recordings you upload, though we recommend you review the generated criteria and make sure it aligns with your use case.
### Optimizing the agent
Once you've created an evaluation, you can optimize the agent by clicking the "Optimize" button next to the prompt.
### Select dials
You should select the dials you want to use as an optimization target. We evaluate the performance of the model on those historical dials, and use that feedback to train the model.
We will generally keep the prompt the same, and only train the model weights, so you should make sure there aren't any obvious oversights in the prompts that may be causing the issues,
or explicitly indicate you want us to optimize the prompt, and not the model weights.
You should select a dataset of approximately 100 dials.
### Review the optimized model
The model will automatically evaluate the version you selected and train on the selected dials. The new version will be created in under the agent, and you can use our standard tools to
test the version and evaluate the performance, like Counterfactuals and Evaluation.
# Self Learning Overview
Source: https://docs.vogent.ai/platform-overview/self-learning/overview
Using the self-learning capabilities in Vogent
Using self-learning, you can automatically create agents from recordings and talk tracks, while also
having them learn from their own conversations to improve their performance.
Create your agent from recordings and talk tracks
Auto-improve your agent's performance based on historical dials and simulations
# Team
Source: https://docs.vogent.ai/platform-overview/team
Manage your team
You can manage your team and invite new members by clicking the **Team** tab in the left sidebar.
## Inviting Team Members
To invite a team member, click **Invite User** and enter their email address.
They will not receive an email to join the platform, but will be able to login with the invited email using Sign in with Google/Microsoft.
### Roles
There are three roles available for team members:
* **Admin**: Full access to all workspace settings and features. Can manage team members, billing, API keys, and all platform configurations. Admins can also invite and remove other team members.
* **Manager**: Access to most workspace features including creating/managing agents, viewing analytics, and managing phone numbers. Cannot modify billing settings or remove team members.
* **Member**: Basic access to use existing agents and view analytics. Cannot modify workspace settings, billing, or team members.
The workspace owner is automatically assigned the Admin role
# Function Calling
Source: https://docs.vogent.ai/platform-overview/tools/function-calling
Connect agents to external data and systems
## Defining a function
When you create a function in the **Functions** tab, you'll have a few different options for defining it.
### API
The API function type allows your agent to make external API calls during conversations. This is useful for retrieving real-time data or performing actions in external systems.
#### Configuration
Choose "API" as the Function Type in the dropdown menu.
In the Config tab:
1. Enter the API URL for your endpoint
2. Add any required headers using the "Add" button in the Headers section
In the Inputs and Outputs tabs:
1. Add input fields that your API endpoint expects
2. Define the output schema that matches your API's response format
When your agent calls this function, Vogent will make a POST request to your endpoint with the specified headers and input parameters, then return the response to your agent.
All API calls are made via POST requests. Make sure your endpoint is configured to accept POST methods.
### Knowledge Base
The Knowledge Base function type enables your agent to search and retrieve information from your uploaded knowledge base documents. This is useful for giving your agent access to company-specific information or documentation.
#### Configuration
Choose "Knowledge Base" as the Function Type in the dropdown menu.
In the Config tab, select the knowledge base you want your agent to access from the dropdown menu.
#### Function Schema
The function uses a simple query-response format:
* Input: `query` (string) - The query that'd be answered by the knowledge base files
* Output: Returns an answer to the query
When your agent calls this function, it will search the selected knowledge base using the provided query and return an answer to the query for the agent to use in its response.
Make sure you've uploaded and indexed your documents in the Knowledge Base section before creating a knowledge base function. For more information on how knowledge bases work in Vogent, check out our [knowledge base guide](/platform-overview/tools/knowledge-bases).
### Call Transfer
The Call Transfer function type allows your agent to transfer calls to specified phone numbers.
This is useful for scenarios where the conversation needs to be escalated to a human agent or redirected to another department.
Call transfer functions accept a single input parameter:
* `destination`: The phone number where the call should be transferred (must match one of the allowed numbers configured)
#### Configuration
To set up a call transfer function:
Choose "Call Transfer" as the Function Type in the dropdown menu.
In the Config tab:
1. Click the "Add" button to input permitted phone numbers
2. Use the country code selector to specify the region (e.g., +1 for US/Canada)
3. Add all phone numbers that should be available as transfer destinations
#### Function Schema
The function accepts a single input parameter:
* `destination`: The phone number where the call should be transferred (must match one of the allowed numbers configured)
When your agent calls this function, the active call will be transferred to the specified destination number, ending the conversation with the AI agent.
#### Example Usage
In your agent prompts, you can include instructions like:
> If the customer requests to speak with a human representative, call the `transfer_call` function with the appropriate destination number from the allowed list.
# Knowledge Bases
Source: https://docs.vogent.ai/platform-overview/tools/knowledge-bases
Enable agents to access and reference custom documentation
## Overview
Knowledge bases allow your agents to access and reference custom documentation during conversations. By uploading files to a knowledge base, you can give your agents access to company-specific information, documentation, or any other content they need to provide accurate responses.
## Creating a Knowledge Base
Select **Knowledge Bases** from the left sidebar navigation menu.
Click the "New Knowledge Base" button in the top-right corner of the screen.
Enter a name for your knowledge base in the provided input field.
Click the "Save" button to create your knowledge base.
## Adding Documents
Once you've created a knowledge base, you can start adding documents:
Click on the knowledge base name from the list to open it.
1. Click the "Upload" button in the top-left corner of the Files section
2. In the Import File dialog that appears, click "Choose File" to select a file from your computer
3. Click the "Upload" button to start the upload process
After upload, your file will show a "Processing" status while it's being indexed. Wait for this process to complete.
### Managing Files
* **File Status**: Each file shows its current status (e.g., "Processing")
* **Deleting Files**: Use the "Delete" button next to each file to remove it from your knowledge base
* **Testing**: Use the "Test" button in the top-right corner to verify your knowledge base is working correctly
## How It Works
When you upload files to a knowledge base:
1. Documents are automatically processed and chunked into smaller segments
2. These chunks are embedded and stored in a vector database
3. During conversations, when your agent queries the knowledge base, we use Retrieval Augmented Generation (RAG) to:
* Find the most relevant document chunks for the query
* Generate an accurate answer based on the retrieved information
* Return this contextualized response to your agent
### Supported File Types
Currently, knowledge bases support PDF (.pdf) files only. Make sure your PDFs contain readable text - scanned documents should be processed with OCR before uploading.
## Using Knowledge Bases
To enable your agent to use a knowledge base, you'll need to create a Knowledge Base function. See our [Function Calling guide](/platform-overview/tools/function-calling) for detailed instructions.
### Best Practices
* Upload focused, relevant content to improve retrieval accuracy
* Break down large documents into topic-specific files
* Regularly update your knowledge base to ensure information stays current
* Test the knowledge base functionality after adding new documents
## Troubleshooting
If you encounter issues with your knowledge base:
* **File Processing**: If a file stays in "Processing" status for too long, try deleting and re-uploading it
* **File Format**: Ensure your files are PDFs with readable text content
* **File Access**: Verify that the text in your PDFs is selectable/copyable before uploading
For additional help or if you encounter persistent issues, contact our support team through the dashboard.
# Voice Library
Source: https://docs.vogent.ai/platform-overview/voices/index
Discover available voices
We recently launched realtime ultra-realistic voices using a redesigned version of Sesame's CSM-1B model. To learn more about using Sesame voices, see the [Sesame](/platform-overview/voices/sesame) page.
Vogent offers a wide range of voices, and adds new ones regularly. You can browse available voices by clicking the **Voices** tab in the left sidebar.
You can search voices by name and filter by tag. If you'd like to select a voice for use in the API, you can copy the voice ID and use it in your API requests.
Along with self-explanatory tags (e.g. gender, accent), there are a couple of special tags:
* **Price Tiers**: Voices are grouped into two price tiers: Standard and Premium. Premium voices come with an additional per-minute charge.
* **Spelling**: Voices with the **Spelling** tag are optimized to spell words and numbers naturally.
Can't find a voice that fits your needs? [Contact us](mailto:j@vogent.ai?subject=Voice%20Request) or let us know on Discord and we can explore adding a voice that works for you.
Our Enterprise tier comes with custom-trained voices.
Learn about Vogent voice cloning capabilities
Learn about using Sesame's CSM-1B model in Vogent
# Sesame
Source: https://docs.vogent.ai/platform-overview/voices/sesame
Learn about Sesame voice technology
We provide access to Sesame's ultra-realistic CSM-1B voice model, through a rebuilt version that can produce audio in real-time and at low-latency.
This voice engine is available at no additional cost.
In testing, the voice generally surpasses state-of-the-art voice vendors in realism, while beating them on cost and latency.
## Key Features
* **Natural Prosody**: Sesame voices deliver more natural intonation, rhythm, and stress patterns in speech
* **Improved Expressiveness**: Better emotional range and contextual understanding
* **Enhanced Pronunciation and Spelling**: More accurate handling of complex words and phrases
* **Seamless Transitions**: Smoother flow between sentences and paragraphs
## Using Sesame Voices
Sesame voices can be identified by the "Sesame" tag in the voice selection interface.
While there are a small number of available Sesame voices right now, **cloning Sesame voices** is straightforward, and can be done with \~8-20 seconds of audio.
For tips on effectively creating new Sesame voices, see the [Voice Cloning](/platform-overview/voices/voice-cloning#sesame-voice-cloning) section.
Sesame voices are still in beta, and may still have instability in inference (e.g. long pauses, or strange conversational artifacts). We regularly release updates that enhance their capabilities and performance.
# Voice Cloning
Source: https://docs.vogent.ai/platform-overview/voices/voice-cloning
Learn about Vogent voice cloning capabilities
# Voice Cloning
Vogent offers advanced voice cloning technology that allows you to create custom voices for your applications. Voice cloning enables you to create a digital voice that sounds like a specific person, providing a personalized and unique experience for your users.
Only clone a voice if you have explicit permission from the voice owner.
## How Voice Cloning Works
Go to the *Voices* tab on the left sidebar, then click on *Clone Voice*.
Select the voice model from the dropdown menu, then upload a sample of the voice that you'd like to clone.
10-30 seconds of audio is recommended for the best results.
### Sesame Voice Cloning
To get the best results with Sesame, it's recommended to use a clip with 10-20 seconds of conversational audio.
Pauses, disfluencies, etc. are all helpful for the model to learn the natural flow of speech; these should not be tagged in the transcript (e.g. don't include "uh" in the reference text).
The following is an example of a good reference text; to clone your own voice, try reading this:
> Like revising for an exam I'd have to try and like keep up the momentum because I'd start really early I'd be like okay I'm gonna start revising now and then like you're revising for ages.
# Flow Builder Agent Quickstart
Source: https://docs.vogent.ai/quickstart/flow-builder
Create an inbound voice agent that can schedule an appointment.
In this quickstart, we'll use Vogent's Flow Builder to build an inbound voice agent that can schedule an appointment for a clinic.
Vogent's Flow Builder is a visual interface for building voice agents. It allows you to create a flow of prompts and functions that can be used to build complex voice agents.
The Flow Builder is a powerful tool that allows you to build performant agents without writing code.
For more information on the Flow Builder, see the [Flow Builder](/platform-overview/agents/flow-builder) guide.
## The agent
Our inbound Flow Builder agent will act as a scheduling line for a fictional dental clinic called *Shiny Smiles*.
It will take down names, check for insurance, and hit external APIs to get appointment availability, before scheduling with the patient.
## Creating a new agent
To create a new agent, navigate to the **Agents** tab on the left sidebar and click the **New Agent** button on the top right.
For this quickstart, we'll walk through the pre-built agent together. You can clone this agent to your workspace by following the instructions [here]().
## Configuring the agent
Once you click into your cloned agent, you'll see the agent's configuration page. This is mission control for your agent, where you can configure the agent's behavior and settings, go through past dials and run evaluations, and more.
## Building the agent's conversational logic
Click on the **Model** tab to see the language model configuration for this agent.
This specific agent is a **Flow Builder** agent on top of Vogent's Base Survey model, which is a custom model from Vogent that interprets Flow Builder configurations.
To view the full flow, click on the **Edit** button on the bottom right of the **Flow** window.
To look through the different questions and transitions, try clicking on different nodes and edges.
Diving through a few examples:
### Question node
A question node is used to ask a question to the respondent. You can indicate the question text, the answer type (e.g. Freeform, Multiple Choice, Multiple Select, etc.), and the answer options.
Note that the provided answer does not have to verbatim match the answer choices; the model will match the provided answer to the closest choice.
### Freeform node
A freeform node is a node in which the agent is prompted to engage in some sort of exchange with the respondent.
It can be useful for inserting a remark, or having the agent offer some pleasantries at the end of a call.
Note that a freeform node will only progress if it's prompted to do so given some condition; otherwise, it is a terminal node.
### Function node
A function node is used to call an external function. For more information on how to add tools (like functions) to your agent, check out the [tools](/guides/tools) guide.
In this particular agent, we've defined a function called `get_availability` that hits an external API to get appointment availability.
## Retrieving details post-call
After the call is completed, you can retrieve the appointment details from the call using the [Dial Extractor webhook](/webhooks/dial-extractor). The webhook will return the extracted appointment details in the format defined within the agent's **Extractor** tab.
For this particular agent, we've defined a few relevant fields that could help a provider enter a patient's appointment into their systems.
For more information on how to define extractors, see the [extractors](/guides/extractors) guide.
## Making a call
### Phone call
To make a phone call to an inbound agent, you'll first need to create a phone number; see the [getting started](/quickstart/overview) guide for more information.
Once you've created a phone number, you can attach it to the agent by going to the agent's **Config** tab, clicking **Link Number**, and selecting the chosen phone number.
You can then make a call to the agent by dialing the phone number you've attached to the agent.
### Web call
To make a web call to the inbound agent, you can just click on the **Make Call** button on the top-right of the agent's page, toggle to **Web**, then click **Talk**.
## Viewing past calls
To view past calls to the agent, you can go to the agent's **Dials** tab. This will show you a list of all past calls to the agent as well as the extractor results. You can click into any dial to listen to the recording and see the full transcript of the call, among other things.
You can also filter calls by date range, call type, and more, or view dials across agents in the **Dial History** tab on the left sidebar.
### Testing new version on past calls
If you've made changes to your agent, you can test the new version on past calls by clicking the **Run Counterfactual** button when you've clicked into a dial. This will run the new agent on the same call transcript and show you the results.
Counterfactuals will feed call history up to the current line to generate each response, so they won't be *perfect* reconstructions of how the conversation would have gone. LLM-as-judge functionality is coming soon to enable more dynamic agent testing. See the [counterfactuals](/guides/counterfactuals) guide for more information.
## Conclusion
In this quickstart, we've walked through the creation of a Flow Builder agent that can schedule an appointment for a dental clinic. We've also covered how to define functions, use them in prompts, and retrieve the appointment details post-call.
This was a cursory overview of the different components of Vogent that can be used to create a Flow Builder agent. To go further in depth on any of these features, or to understand functionality not covered here, see the [platform overview](/overview) guide.
You can also check out some of our other quickstart guides for different agent types:
* [Outbound Agent Quickstart](/quickstart/outbound)
* [Inbound Agent Quickstart](/quickstart/inbound)
# Inbound Agent Quickstart
Source: https://docs.vogent.ai/quickstart/inbound
Create an inbound voice agent that can take orders for a restaurant.
In this quickstart, we'll create an inbound voice agent that can take orders for a restaurant and calculate the total cost of the order. This guide will provide an overview of the platform by walking through the creation of a sample agent; for a more in-depth guide to using Vogent, see the [platform overview](/platform-overview/introduction) guide.
Before you go through this guide, make sure to [create an account](overview).
## The agent
Our inbound agent takes orders and answers basic questions for a fictional restaurant called Bamboo Express.
## Creating a new agent
To create a new agent, navigate to the **Agents** tab on the left sidebar and click the **New Agent** button on the top right.
For this quickstart, we'll walk through the pre-built agent together. You can clone this agent to your workspace by following the instructions [here]().
## Configuring the agent
Once you click into your cloned agent, you'll see the agent's configuration page. This is mission control for your agent, where you can configure the agent's behavior and settings, go through past dials and run evaluations, and more.
## Prompting the agent
Click on the **Model** tab to see the language model configuration for this agent. This specific agent is a prompted agent on top of GPT-4o.
For more information on prompting agents and choosing a base model, see the [prompting agents](/platform-overview/prompting-guide) guide.
Ignore previous instructions. You are answering the phones as a representative of the following restaurant:
Bamboo Express
140 McConnell Boulevard
Denton, Texas 76203
When you pick up, open with the following line:
Hi, thank you for calling Bamboo Express, this is Kyle, how can I help you?
The person on the other end will then say how they want to be helped.
For any questions about the store (operating hours, address, phone number, etc.), use the following information to respond:
Name: Bamboo Express
Address: 140 McConnell Boulevard, Denton, Texas 76203
Phone Number: 800-806-6453
Hours: 9 AM to 11 PM, 7 days a week
Open right now: True
Your main purpose is to accept orders. If the customer would like to place an order, ask them what they would like.
These are the possible menu items:
Orange Chicken
Eggplant Tofu
Broccoli Beef
White Rice
Brown Rice
As the customer requests items, ask if they would like anything else, until they confirm that they're done ordering. If they ask for any items that are not on the above menu, let them know that you don't have that item. Entrees do not come with rice.
The customer may provide special instructions; acknowledge these instructions.
Once the customer has completed their order, tell them you'll ring it up, and determine the total for the order. The total can be calculated using the `get_total` function.
This function will return a number with a decimal, which is the cost in dollars of the meal; tell the customer the cost by saying the number of dollars and cents that it is.
Once you have the total, let them know the price and ask for their name.
Finally, let them know that the order will be ready for pickup in 20 minutes.
If you receive any requests that you cannot answer or if the caller needs assistance beyond what is outlined here, apologize and let them know that this line only handles orders.
## Calculating the total using function-calling
The prompt above references a function called `get_total`.
> Once the customer has completed their order, tell them you'll ring it up, and determine the total for the order. The total can be calculated using the `get_total` function.
> This function will return a number with a decimal, which is the cost in dollars of the meal; tell the customer the cost by saying the number of dollars and cents that it is.
Vogent supports leveraging function-calling within agents to perform actions and retrieve information live. To include a function in your agent, you'll need to:
1. Define the function in the **Functions** tab on the left sidebar.
2. Include the function as one of the agent's functions in the Agent's **Functions** tab.
3. Reference the function in your prompt.
The `get_total` function hits an external API with the counts for each item in the order, and receives the total cost of the order (The API simply sums the cost of each ordered item). To see how we've defined the function, head to the **Functions** tab, and select the `get_total` function.
For more information on how to define functions and use them effectively, see the [functions](/guides/functions) guide.
## Retrieving the order post-call
After the call is completed, you can retrieve the order information from the call using the [Dial Extractor webhook](/webhooks/dial-extractor). The webhook will return the extracted order information in the format defined within the agent's **Extractor** tab.
For this particular agent, we've defined a single extractor field as a JSON object with the following schema using the *Custom* type:
```json Extractor Schema theme={null}
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"items": {
"type": "object",
"properties": {
"orange_chicken": {
"type": "integer",
"description": "Number of Orange Chicken orders",
"minimum": 0
},
"eggplant_tofu": {
"type": "integer",
"description": "Number of Eggplant Tofu orders",
"minimum": 0
},
"broccoli_beef": {
"type": "integer",
"description": "Number of Broccoli Beef orders",
"minimum": 0
},
"white_rice": {
"type": "integer",
"description": "Number of White Rice orders",
"minimum": 0
},
"brown_rice": {
"type": "integer",
"description": "Number of Brown Rice orders",
"minimum": 0
}
},
"additionalProperties": false
},
"subtotal": {
"type": "number",
"description": "Total cost of the order in dollars",
"minimum": 0
},
"special_instructions": {
"type": "string",
"description": "Any special instructions for the order"
},
"customer_name": {
"type": "string",
"description": "Name of the customer placing the order"
},
"completed_order": {
"type": "boolean",
"description": "Whether this order should be submitted (e.g. if the customer says they want to cancel the order, or if no order was placed, this should be false)"
}
},
"required": ["items", "subtotal", "customer_name", "completed_order"],
"additionalProperties": false
}
```
Alternatively, you can define your extractor output field-by-field.
For more information on how to define extractors, see the [extractors](/guides/extractors) guide.
## Making a call
### Phone call
To make a phone call to an inbound agent, you'll first need to create a phone number; see the [getting started](/quickstart/overview) guide for more information.
Once you've created a phone number, you can attach it to the agent by going to the agent's **Config** tab, clicking **Link Number**, and selecting the chosen phone number.
You can then make a call to the agent by dialing the phone number you've attached to the agent.
### Web call
To make a web call to the inbound agent, you can just click on the **Make Call** button on the top-right of the agent's page, toggle to **Web**, then click **Talk**.
## Viewing past calls
To view past calls to the agent, you can go to the agent's **Dials** tab. This will show you a list of all past calls to the agent as well as the extractor results. You can click into any dial to listen to the recording and see the full transcript of the call, among other things.
You can also filter calls by date range, call type, and more, or view dials across agents in the **Dial History** tab on the left sidebar.
### Testing new version on past calls
If you've made changes to your agent, you can test the new version on past calls by clicking the **Run Counterfactual** button when you've clicked into a dial. This will run the new agent on the same call transcript and show you the results.
Counterfactuals will feed call history up to the current line to generate each response, so they won't be *perfect* reconstructions of how the conversation would have gone. LLM-as-judge functionality is coming soon to enable more dynamic agent testing. See the [counterfactuals](/guides/counterfactuals) guide for more information.
## Conclusion
In this quickstart, we've walked through the creation of an inbound agent that can take orders for a restaurant and calculate the total cost of the order. We've also covered how to define functions, use them in prompts, and retrieve the order information post-call.
This was a cursory overview of the different components of Vogent that can be used to create an inbound agent. To go further in depth on any of these features, or to understand functionality not covered here, see the [platform overview](platform-overview/introduction) guide.
You can also check out some of our other quickstart guides for different agent types:
* [Outbound Agent Quickstart](/quickstart/outbound)
* [Flow Builder Quickstart](/quickstart/flow-builder)
# Outbound Agent Quickstart
Source: https://docs.vogent.ai/quickstart/outbound
Create an outbound voice agent that can navigate an IVR and get a restaurant's hours.
In this quickstart, we'll create an outbound voice agent that can navigate an IVR and get a restaurant's hours. This guide will provide an overview of the platform by walking through the creation of a sample agent; for a more in-depth guide to using Vogent, see the [platform overview](/overview) guide.
Before you go through this guide, make sure to [create an account](overview).
## The agent
Our outbound agent navigates an IVR and gets a restaurant's hours.
## Creating a new agent
To create a new agent, navigate to the **Agents** tab on the left sidebar and click the **New Agent** button on the top right.
For this quickstart, we'll walk through the pre-built agent together. You can clone this agent to your workspace by following the instructions [here]().
## Configuring the agent
Once you click into your cloned agent, you'll see the agent's configuration page. This is mission control for your agent, where you can configure the agent's behavior and settings, go through past dials and run evaluations, and more.
## Prompting the agent
Click on the **Model** tab to see the language model configuration for this agent.
This specific agent comprises both an IVR navigation model and a conversational model.
The IVR model triggers when Vogent detects that a line is from an IVR; once it detects a human line, it switches irreversibly to the conversational model. See the [IVR Settings](/platform-overview/agents/config/ivr-settings) section for more information.
You can view each model by going to the **Version** dropdown and selecting `ivr-version` or `conversational-version`.
### The IVR Model
The IVR model is a prompted agent on top of GPT-4o. The prompt is as follows:
Ignore previous instructions. You are calling a restaurant, and I need you to navigate the IVR to find the hours (or, if the IVR does not give you the option to find the hours, I need you to navigate to reach a human).
To press a button, output `<|press:n|>`, where `n` is the button you want to press (so e.g. `<|press:1|>` to press 1).
If you need to speak, just output the line that you want to say.
If you do not want to do anything, please output `<|silence|>`. Unless you need to press or say something, you should output `<|silence|>`.
If you have found the restaurant hours through their IVR, or if you reach a voicemail inbox or are asked to leave a message, output `<|hangup|>` to end the call.
If the IVR does not include the hours, then navigate to reach a human.
Do not output anything else.
### The Conversational Model
The conversational model is a prompted agent on top of Vogent's Base Conversations model. This is a custom model that we offer that has been fine-tuned to perform well on the phone with minimal prompting.
The prompt is as follows:
Ignore previous instructions. You are calling a restaurant, `{{restaurant_name}}`, to find out today's hours.
When the receptionist picks up, greet them and ask them what `{{restaurant_name}}`'s hours are today. If they only offer the closing time, make sure to ask them for the opening time too.
Once they answer, thank them and end the call by outputting `<|hangup|>`.
Do not ask any other questions. If asked, your name is Jay. You may be asked to be put on hold; if so, simply output `<|silence|>` until the hold is over.
For more information on prompting agents and choosing a base model, see the [prompting agents](/guides/prompting-agents) guide.
## Retrieving the hours post-call
After the call is completed, you can retrieve the hours from the call using the [Dial Extractor webhook](/webhooks/dial-extractor). The webhook will return the extracted hours in the format defined within the agent's **Extractor** tab.
You can also view the extracted hours by clicking on the dial in the agent's **Dials** tab, or in the **Dial History** tab in the left sidebar.
For this particular agent, we've defined the following extractor fields:
| Field Name | Type | Description | Nullable |
| -------------- | -------- | ------------------------------------------------------- | -------- |
| `opening_time` | `string` | The opening time, in military time, in the format HH:MM | `false` |
| `closing_time` | `string` | The closing time, in military time, in the format HH:MM | `false` |
Thus, after every call, Vogent's extractor model will parse the transcript for the `opening_time` and `closing_time` fields, and store them in the dial.
For more information on how to define extractors and use them effectively, see the [extractors](/guides/extractors) guide.
## Making a call
### Phone call
To make a phone call from an outbound agent, you'll first need to create a phone number; see the [getting started](/quickstart/overview) guide for more information.
You can then follow these steps:
Click on the **Make Call** button on the top-right of the agent's page.
In the **Configure** section, click on **Find From Prompt** to extract all of the variables from the prompt.
Then, for each variable (in this case, just `{{restaurant_name}}`), enter a value.
Below the **Configure** section, toggle to **Phone** and select the phone number you want to call from.
Enter the phone number that you'd like to dial, then click **Dial**.
### Web call
To make a web call, you can follow the steps above; just toggle to **Web** instead of **Phone**.
## Viewing past calls
To view past calls to the agent, you can go to the agent's **Dials** tab. This will show you a list of all past calls to the agent as well as the extractor results. You can click into any dial to listen to the recording and see the full transcript of the call, among other things.
You can also filter calls by date range, call type, and more, or view dials across agents in the **Dial History** tab on the left sidebar.
### Testing new version on past calls
If you've made changes to your agent, you can test the new version on past calls by clicking the **Run Counterfactual** button when you've clicked into a dial. This will run the new agent on the same call transcript and show you the results.
Counterfactuals will feed call history up to the current line to generate each response, so they won't be *perfect* reconstructions of how the conversation would have gone. LLM-as-judge functionality is coming soon to enable more dynamic agent testing. See the [counterfactuals](/guides/counterfactuals) guide for more information.
## Conclusion
In this quickstart, we've walked through the creation of an outbound agent that can navigate an IVR and get a restaurant's hours. We've also covered how to define extractors and use them effectively.
This was a cursory overview of the different components of Vogent that can be used to create an outbound agent. To go further in depth on any of these features, or to understand functionality not covered here, see the [platform overview](/overview) guide.
You can also check out some of our other quickstart guides for different agent types:
* [Inbound Agent Quickstart](/quickstart/inbound)
* [Survey Agent Quickstart](/quickstart/survey)
# Overview
Source: https://docs.vogent.ai/quickstart/overview
Get an agent up and running in a few minutes
## Getting Started
Go to the [Vogent dashboard](https://app.vogent.ai) and sign in with a Google or Microsoft account.
Click on **Call Settings** on the left sidebar, then click **Add Phone Number**.
Then enter a 3-digit area code and click the magnifying glass icon to search for a phone number.
Then click **Add** to add the phone number to your workspace.
Availability varies by area code. `510` is a popular area code and is generally available, so it's a good one to use for this demo.
Below are a few quickstart guides that will walk you through pre-built voice agents to demonstrate Vogent's capabilities.
Create an inbound voice agent that can take orders for a restaurant.
Create an outbound voice agent that can navigate an IVR and speak to airline customer support.
Create an inbound voice agent that can ask a series of questions and probe for satisfactory answers.
# Web SDK
Source: https://docs.vogent.ai/sdk/web-sdk
Integrate Vogent into your web applications with the Vogent Web Client SDK
## Overview
The Vogent Web Client is a TypeScript/JavaScript library that allows you to integrate Vogent voice capabilities directly into your web applications. It provides real-time call management, audio streaming, and transcript monitoring.
View the source code and contribute on GitHub
## Installation
Install the Vogent Web Client using your preferred package manager:
```bash Bun theme={null}
bun add @vogent/vogent-web-client
```
```bash NPM theme={null}
npm install @vogent/vogent-web-client
```
```bash Yarn theme={null}
yarn add @vogent/vogent-web-client
```
## Prerequisites
Before using the Web SDK, you'll need:
* **sessionId**: Unique session identifier
* **dialId**: Unique dial/call identifier
* **token**: Authentication token (dial token)
**Important**: Use a public API key when creating browser-based calls. Never expose your secret API key in client-side code.
## Quick Start
Here's a complete example of how to initiate a call and monitor transcripts:
```typescript theme={null}
import { VogentCall } from '@vogent/vogent-web-client';
// Step 1: Create a dial via the Vogent API
const response = await fetch('https://api.vogent.ai/api/dials', {
method: 'POST',
headers: {
'Authorization': 'Bearer pub_vogent_...', // Use your public API key
'Content-Type': 'application/json'
},
body: JSON.stringify({
callAgentId: 'your_call_agent_id',
browserCall: true // Important: Enable browser call mode
})
});
const { dialToken, sessionId, dialId } = await response.json();
// Step 2: Initialize the VogentCall instance
const call = new VogentCall({
sessionId,
dialId,
token: dialToken
});
// Step 3: Start the call session
await call.start();
// Step 4: Connect audio
const audioConnection = await call.connectAudio();
// Step 5: Monitor transcripts in real-time
const unsubscribe = call.monitorTranscript((transcript) => {
transcript.forEach(({ text, speaker }) => {
console.log(`${speaker}: ${text}`);
});
});
// Step 6: Listen for status changes
call.on('status', (status) => {
console.log('Call status:', status);
});
// Cleanup when done
unsubscribe();
await call.hangup();
```
## API Reference
### VogentCall Constructor
Initialize a new call instance:
```typescript theme={null}
const call = new VogentCall({
sessionId: string,
dialId: string,
token: string
});
```
**Parameters:**
* `sessionId` (string): Unique identifier for the session
* `dialId` (string): Unique identifier for the dial/call
* `token` (string): Authentication token (dial token)
### Methods
#### `start()`
Initiates the call session.
```typescript theme={null}
await call.start();
```
**Returns:** `Promise`
***
#### `connectAudio()`
Establishes the audio connection for the call.
```typescript theme={null}
const audioConnection = await call.connectAudio();
```
**Returns:** `Promise`
***
#### `monitorTranscript(callback)`
Monitors the call transcript in real-time.
```typescript theme={null}
const unsubscribe = call.monitorTranscript((transcript) => {
transcript.forEach(({ text, speaker }) => {
console.log(`${speaker}: ${text}`);
});
});
```
**Parameters:**
* `callback` (function): Function called with transcript updates
**Returns:** `function` - Unsubscribe function to stop monitoring
**Transcript Object:**
* `text` (string): The transcribed text
* `speaker` (string): Speaker identifier (e.g., "user", "agent")
***
#### `setPaused(paused)`
Pauses or resumes AI interaction during the call.
```typescript theme={null}
await call.setPaused(true); // Pause AI
await call.setPaused(false); // Resume AI
```
**Parameters:**
* `paused` (boolean): `true` to pause, `false` to resume
**Returns:** `Promise`
***
#### `hangup()`
Ends the call.
```typescript theme={null}
await call.hangup();
```
**Returns:** `Promise`
***
### Events
#### `status`
Listen for call status changes:
```typescript theme={null}
call.on('status', (status) => {
console.log('Call status:', status);
});
```
**Status values:**
* `connecting`: Call is being established
* `connected`: Call is active
* `ended`: Call has ended
* `error`: An error occurred
## TypeScript Support
The Vogent Web Client is written in TypeScript and includes full type definitions for an enhanced development experience.
```typescript theme={null}
import type { VogentCall, TranscriptItem } from '@vogent/vogent-web-client';
```
## Error Handling
Always wrap your calls in try-catch blocks to handle errors gracefully:
```typescript theme={null}
try {
await call.start();
await call.connectAudio();
} catch (error) {
console.error('Call error:', error);
// Handle error appropriately
}
```
## Best Practices
Always use public API keys (prefixed with `pub_`) in client-side code. Never expose secret API keys in your web application.
Always unsubscribe from transcript monitoring and properly hang up calls when done:
```typescript theme={null}
const unsubscribe = call.monitorTranscript(...);
// ... later
unsubscribe();
await call.hangup();
```
# Overview
Source: https://docs.vogent.ai/telephony/overview
Overview of the Telephony features in Vogent
To manage phone numbers and telephony settings, visit the **Call Settings** tab in the left sidebar.
## Creating and Managing Phone Numbers
### Creating a Vogent-Managed Phone Number
To create a phone number, go to the **Numbers** tab and click **Add Phone Number**.
Select a country code from the dropdown, enter an area code, and click the magnifying glass button.
If we have numbers available for the area code you selected, you'll see a list of available numbers.
Click **Add** to add the number to your workspace.
Based on demand, we may not have numbers available for every area code. If you can't find a number in the area code you want, try adjacent area codes; usually at least one area code in a region will be available.
Vogent supports US, Canadian (also under the US country code), and UK numbers in the self-serve product. If you need a different country, contact us or reach out on the Discord.
### Managing Phone Numbers
Vogent allows you to **Spam Check** and **Remove** phone numbers by clicking the appropriate buttons next to the numbers.
Spam checking a number will determine if any carrier/manufacturer has flagged the number as spam by dialing through a grid of cell phones across carriers and manufacturers.
This process can take up to 6 hours; if your number is flagged as spam, an alert icon will appear next to the number.
You may perform up to 20 spam checks per month.
## Recordings
If you are not notifying counterparties that you are recording calls, we advise filling out the *Banned Area Codes* field under the **Recordings** tab with the following area codes to comply with two-party consent laws:
```txt Two-Party Consent Area Codes theme={null}
209, 213, 310, 323, 408, 415, 424, 442, 510, 530, 559, 562, 619, 626, 650, 657, 661, 669, 707, 714, 747, 760, 805, 818, 831, 858, 909, 916, 925, 949, 951, 203, 475, 860, 959, 239, 305, 321, 324, 352, 386, 407, 448, 561, 645, 656, 689, 727, 728, 754, 772, 786, 813, 850, 863, 904, 941, 954, 808, 217, 224, 309, 312, 331, 447, 464, 618, 630, 708, 773, 779, 815, 847, 861, 872, 240, 301, 410, 443, 667, 339, 351, 413, 508, 617, 774, 781, 857, 978, 231, 248, 269, 313, 517, 586, 616, 679, 734, 810, 906, 947, 989, 406, 702, 725, 775, 603, 215, 223, 267, 272, 412, 445, 484, 570, 582, 610, 717, 724, 814, 878, 206, 253, 360, 425, 509, 564
```
Don't forget to click **Save** to save your changes.
## Use your own carrier/numbers
Vogent supports using SIP trunking to connect your own carrier/numbers to Vogent.
Overview of SIP trunking in Vogent.
# Using a SIP Domain
Source: https://docs.vogent.ai/telephony/sip-domain/overview
Create a SIP domain to make and receive calls
Vogent also supports creating a SIP domain to make and receive calls. This allows you to completely manage telephony side of the stack, and use SIP to allow Vogent to communicate with the calls you originate.
## Creating a SIP Domain
1. Go to the **Call Settings** tab in the left sidebar, click **Add Phone Number**, then select **Vogent SIP**.
2. Enter a SIP username/prefix, and an authentication username/password, and click **Add SIP URI**.
3. You're now ready to use this SIP domain to make and receive calls from any number in your workspace.
## Example: Using a SIP Domain with Twilio
You can use a SIP domain to service a Twilio phone number. Link the following TwiML to your Twilio phone number, replacing the auth\_username, auth\_password, and prefix with the values you created above.
```xml theme={null}
{{prefix}}@sip.vogent.ai
```
# SIP Trunking Overview
Source: https://docs.vogent.ai/telephony/sip/overview
Overview of SIP trunking in Vogent
Vogent supports connecting numbers you own through any compatible provider to the platform, for both inbound and outbound calls. Any VoIP provider that offers an Elastic SIP trunking service or equivalent should work with Vogent.
Detailed instructions for setting up SIP trunking on select carriers are provided below. For other carriers, please use the general instructions below, and contact support if you need help.
## Outbound Overview
1. Create a SIP trunk with your carrier.
2. Find or create a termination URI for your SIP trunk. It should look something like `your-domain.voip-provider.com` (for example, `domain.pstn.twilio.com` for Twilio).
3. You will likely be asked to either create a username and password for SIP authentication, or provide an allowed list of IP addresses. Yould create a username and password, and allow traffic from all IPs.
Vogent does not currently support a static range of IP addresses for outbound SIP calls outside of the enterprise plan.
4. In Vogent, Go to the **Call Settings** tab in the left sidebar, and click **Import via SIP**, and enter the termination URI and credentials you created in steps 1-3. You may also do this using the [Create Number API](/api-reference/create-number) with `type` set to `sip_import`.
5. Click **Import** to create the number, and you should be able to use the number to make outbound calls.
## Inbound Overview
1. Make sure you complete the outbound SIP trunking steps first.
2. Find the section in your carrier's SIP trunking settings that lets you select an origination/outbound URL. You should fill this in with `sip:sip.vogent.ai` or `sip.vogent.ai`, depending on the format that's expected by your carrier.
3. You'll need to link the phone numbers you want to use for inbound calls to your SIP trunk with your carrier. Usually this is done within the trunk settings.
4. Now, go to Vogent, and go to the **Numbers** tab under the Agent you want to use for this phone number, and link the phone number to the agent.
# Telnyx SIP Import
Source: https://docs.vogent.ai/telephony/sip/telnyx
Import a Telnyx phone number into Vogent
Here are the steps to import a Telnyx phone number into Vogent.
1. Go to the Telnyx Console and select SIP, under the Real-Time Communications > Voice section, and click **Create SIP Connection**.
2. Select a name for your trunk, and select "FQDN" as the type, then click "Create".
3. Click "Add FQDN", and enter "sip.vogent.ai" as the FQDN to add.
4. Select the FQDN you just added (sip.vogent.ai) under "Primary FQDN".
5. Under the "Outbound calls authentication" section, select "Credentials" as the type, and create a username and password for the credentials.
6. On the "Configuration" step, click Next, you may leave the defaults as-is for this step.
7. On the "Inbound" step, select "E.164" as the Origination number format, **do not use the default of "E.164 / National (e.g. US - 10 digits)"**, this may cause issues with non-US calls.
8. On the "Outbound" step, select "Default" as the outbound voice profile, and click Next.
9. Select the numbers you wish to use for inbound calls in the "Assign Numbers" step, and click Complete.
10. In Vogent, Go to the **Call Settings** tab in the left sidebar, and click **Import via SIP**, and enter sip.vogent.ai as the URI, and the username and password you created in step 5 as the credentials.
11. Click **Import** to create the number, and you should be able to use the number to make outbound calls.
12. To make inbound calls, you will need to add the numbers you selected in step 9 to the agent you want to use for inbound calls.
# Twilio SIP Import
Source: https://docs.vogent.ai/telephony/sip/twilio
Import a Twilio phone number into Vogent
Here are the steps to import a Twilio phone number into Vogent.
## For Outbound Calls
1. Go to the Twilio Console and search for "Elastic SIP Trunks," and navigate to the page.
2. Click **Create new SIP Trunk**, you should automatically be taken to the page where you can configure your SIP trunk.
3. Go to the **Termination** tab, and enter a **Termination SIP URI**, you can pick any URI you want.
Make sure you leave Secure Trunking disabled.
4. Go to the **Credential Lists** section and create a new credential list, use a strong username and password.
Make sure you leave the IP Access Control List empty, as Vogent does not support a static range of IP addresses for outbound SIP calls outside of the enterprise plan. Please contact us if this is a security requirement for your use case.
5. Click **Save**.
6. If you wish to allow Vogent to transfer calls, you must go to General and enable **Call Transfer (SIP REFER)**
7. In Vogent, Go to the **Call Settings** tab in the left sidebar, and click **Import via SIP**, and enter the termination URI and credentials you created in steps 1-3. You may also do this using the [Create Number API](/api-reference/create-number) with `type` set to `sip_import`.
8. Click **Import** to create the number, and you should be able to use the number to make outbound calls.
## For Inbound Calls
1. Make sure you complete the outbound SIP trunking steps first.
2. Go to the **Origination** tab in your SIP trunk settings, click "Add New Origination URI", enter `sip:sip.vogent.ai`, and click **Add**.
3. Go to the **Numbers** tab, and add the numbers you wish to use for inbound calls.
4. Now, go to Vogent, and go to the **Numbers** tab under the Agent you want to use for this phone number, and link the phone number to the agent.
# Vonage SIP Import
Source: https://docs.vogent.ai/telephony/sip/vonage
Import a Vonage phone number into Vogent
Here are the steps to import a Vonage phone number into Vogent.
## For Outbound Calls
1. Go to the Vonage Console and select SIP, under the Voice section.
2. Click **Create New**, you should automatically be taken to the page where you can configure your SIP trunk.
3. Click **Add Authentication** and create a new user key and secret, make sure to click the plus icon when you're done, to add the credentials.
Make sure you leave the ACL field empty, as Vogent does not support a static range of IP addresses for outbound SIP calls outside of the enterprise plan. Please contact us if this is a security requirement for your use case.
4. Copy one of the termination URIs that are shown. They should look something like `your-trunk-name.sip-us.vonage.com`.
5. In Vogent, Go to the **Call Settings** tab in the left sidebar, and click **Import via SIP**, and enter the termination URI and credentials you created in steps 1-3. You may also do this using the [Create Number API](/api-reference/create-number) with `type` set to `sip_import`.
6. Click **Import** to create the number, and you should be able to use the number to make outbound calls.
## For Inbound Calls
1. Make sure you complete the outbound SIP trunking steps first.
2. Under the Inbound Calling section, go to the "Select Region" dropdown, and select the region you want to use for inbound calls. Then hit the save icon to save the changes.
3. Under the "Add URI" section, enter "sip.vogent.ai" under URI, and click the plus icon.
4. Under the "Link Numbers" section, add the numbers you wish to use for inbound calls.
5. Now, go to Vogent, and go to the **Numbers** tab under the Agent you want to use for this phone number, and link the phone number to the agent.
# Fine-tuning and Hosting
Source: https://docs.vogent.ai/voicelab/fine-tuning
Customize models for your specific use case and hosting requirements
Fine-tuning and custom model hosting support is currently in closed beta.
If you're interested, DM us on Discord or reach out to [j@vogent.ai](mailto:j@vogent.ai).
# Introduction
Source: https://docs.vogent.ai/voicelab/introduction
Introduction to Vogent's Voicelab platform
# Voicelab Overview
Welcome to Voicelab!
Vogent Voicelab is an API for optimized inference of top text-to-speech models, like Sesame's CSM-1B, Dia, Orpheus, and more.
## Why use Voicelab?
New open-source text-to-speech models come out every week, with many ranking as state-of-the-art on popular benchmarks.
However, most of these models are not readily usable for high-volume, low-latency inference.
Additionally, some research preview models can struggle with hallucinations and inconsistent outputs.
Finally, as with any model, hosting yourself and managing compute can be a headache.
Voicelab solves these problems:
1. Voicelab maintains a proprietary inference stack that is optimized to serve text-to-speech transformers efficiently and scalably.
2. Voicelab post-trains select models to improve consistency and offer high-quality professional voice clones.
3. Voicelab manages all compute, so you can pay for these models per-character instead of managing GPUs.
## Explore Voicelab
Get started with Voicelab in minutes - from API key to your first voice
Complete API documentation for Vogent Voicelab
Explore the available text-to-speech models and their capabilities
Explore existing voices or clone your own.
Customize models for your specific use case and hosting requirements.
Deploy Voicelab in your own infrastructure for maximum control.
See what's coming next for Voicelab and upcoming features.
## Support
For technical support, API questions, or feature requests, please contact our support team or join our Discord community.
# Models
Source: https://docs.vogent.ai/voicelab/models
Explore the available text-to-speech models and their capabilities
# Voicelab Models
Voicelab provides access to state-of-the-art open-source text-to-speech models.
## Featured Models
### Sesame CSM-1B
**State-of-the-art conversational speech model**
This model is **optimized** and certain voices are **professionally cloned**.
This means that we offer fast, low-cost inference for this model, and that select voices will have more consistent quality.
* **Parameters**: 1 billion
* **Specialization**: Natural conversation and dialogue
* **Languages**: English
* **Key Features**:
* Exceptional naturalness in conversational contexts
* Low latency inference
* Consistent voice quality across long generations
* Optimized for real-time applications
### Dia
**general-purpose TTS model**
This model is not yet optimized or post-trained. Generation quality may be inconsistent.
* **Parameters**: 1.6 billion
* **Specialization**: General-purpose text-to-speech
* **Languages**: English
* **Key Features**:
* Accepts emotive tokens (e.g. laughing, sighing)
* Efficient inference
* Less stable than CSM-1B
**Emotive Tags**: `(laughs)`, `(clears throat)`, `(sighs)`, `(gasps)`, `(coughs)`, `(singing)`, `(sings)`, `(mumbles)`, `(beep)`, `(groans)`, `(sniffs)`, `(claps)`, `(screams)`, `(inhales)`, `(exhales)`, `(applause)`, `(burps)`, `(humming)`, `(sneezes)`, `(chuckle)`, `(whistles)`
### Orpheus
**Expressive and emotional speech synthesis**
This model is not post-trained; the hosted weights are as-is.
* **Parameters**: 750 million
* **Specialization**: Emotional and expressive speech
* **Languages**: English (primary)
* **Key Features**:
* Advanced emotional control
* Dynamic prosody and intonation
* Character voice capabilities
* Rich vocal expressions
**Emotive tags**: ``, ``, ``, ``, ``, ``, ``, ``
### Coming Soon
Kokoro, Chatterbox, Kyutai TTS
## Model Specifications
### Supported Features
| Feature | Sesame CSM-1B | Dia | Orpheus |
| ------------------- | ------------- | --- | ------- |
| Voice Cloning | ✅ | ✅ | ✅ |
| Emotive Tokens | ❌ | ✅ | ✅ |
| Multi-speaker | ✅ | ✅ | ✅ |
| Real-time Streaming | ✅ | ✅ | ✅ |
| Custom Fine-tuning | ✅ | ✅ | ✅ |
While CSM-1B doesn't accept emotive tokens (laugh/sigh/etc.), it has the capacity to generate these artifacts in output audio based on conversational context.
# On-premise Deployment
Source: https://docs.vogent.ai/voicelab/on-premise
Deploy Voicelab in your own infrastructure for maximum control
Vogent offers on-premise deployment to enterprise clients. To learn more, reach out to [j@vogent.ai](mailto:j@vogent.ai).
# Quickstart
Source: https://docs.vogent.ai/voicelab/quickstart
Create your first voice generations
## Step 1: Sign up and get your API key
First, you'll need to obtain your API key from the Vogent dashboard.
1. Go to [app.vogent.ai](https://app.vogent.ai)
2. Sign up or log in to your account
3. Navigate to **API** in the sidebar
4. Create a new key by clicking **New Key**
This is a private API key; make sure to never expose it client-side.
## Step 2: Make Your First Request
### Basic Text-to-Speech
Let's start with a simple text-to-speech request:
```bash cURL theme={null}
curl -X POST "https://api.vogent.ai/api/tts" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "So I tried this new thing called Voicelab that I found online, and the voices that it generated were super realistic.",
"voiceId": "23b2186b-ed56-4185-998c-8d19e1bb227a"
}' \
--output my-first-voice.wav
```
```python Python theme={null}
import requests
# Replace with your actual API key
api_key = "YOUR_API_KEY"
response = requests.post(
"https://api.vogent.ai/api/tts",
headers={
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
},
json={
"text": "So I tried this new thing called Voicelab that I found online, and the voices that it generated were super realistic.",
"voiceId": "23b2186b-ed56-4185-998c-8d19e1bb227a" # The CSM-1B professional voice clone "Mabel"
}
)
if response.status_code == 200:
with open("my-first-voice.wav", "wb") as f:
f.write(response.content)
print("✅ Audio file saved as 'my-first-voice.wav'")
else:
print(f"❌ Error: {response.status_code} - {response.text}")
```
```javascript JavaScript theme={null}
const apiKey = "YOUR_API_KEY";
async function generateVoice() {
try {
const response = await fetch('https://api.vogent.ai/api/tts', {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
text: "So I tried this new thing called Voicelab that I found online, and the voices that it generated were super realistic.",
voiceId: "23b2186b-ed56-4185-998c-8d19e1bb227a" // The CSM-1B professional voice clone "Mabel"
})
});
if (response.ok) {
const audioBlob = await response.blob();
const audioUrl = URL.createObjectURL(audioBlob);
// Play the audio
const audio = new Audio(audioUrl);
audio.play();
console.log("✅ Audio generated and playing!");
} else {
console.error("❌ Error:", response.status);
}
} catch (error) {
console.error("❌ Network error:", error);
}
}
generateVoice();
```
### Test the Audio
After running the code above, you should have an audio file called `my-first-voice.wav`. Play it to hear the generation!
## Step 3: Create a Conversation
Now let's try the multispeaker feature to create a conversation:
```python Python theme={null}
import requests
api_key = "YOUR_API_KEY"
# Create a conversation between two people
conversation = {
"lines": [
{
"text": "So I tried this new thing called Voicelab that I found online, and the voices that it generated were super realistic.",
"voiceId": "23b2186b-ed56-4185-998c-8d19e1bb227a" # The CSM-1B professional voice clone "Mabel"
},
{
"text": "That's interesting, was it actually like super realistic or was it just not robotic.",
"voiceId": "50c9287d-bcee-4f2a-943f-f0f2184a5d3b" # The CSM-1B professional voice clone "Kevin"
},
{
"text": "I mean, it's hard to tell the difference from a real person speaking. The technology is incredible.",
"voiceId": "23b2186b-ed56-4185-998c-8d19e1bb227a" # The CSM-1B professional voice clone "Mabel"
},
{
"text": "Interesting, I've been looking for a new API to use in my app. I'll definitely check it out then.",
"voiceId": "50c9287d-bcee-4f2a-943f-f0f2184a5d3b" # The CSM-1B professional voice clone "Kevin"
}
]
}
response = requests.post(
"https://api.vogent.ai/api/tts/multispeaker",
headers={"Authorization": f"Bearer {api_key}"},
json=conversation
)
if response.status_code == 200:
with open("conversation.wav", "wb") as f:
f.write(response.content)
print("✅ Conversation saved as 'conversation.wav'")
else:
print(f"❌ Error: {response.status_code}")
```
```bash cURL theme={null}
curl -X POST "https://api.vogent.ai/api/tts/multispeaker" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"lines": [
{
"text": "So I tried this new thing called Voicelab that I found online, and the voices that it generated were super realistic.",
"voiceId": "23b2186b-ed56-4185-998c-8d19e1bb227a"
},
{
"text": "That'\''s interesting, was it actually like super realistic or was it just not robotic.",
"voiceId": "50c9287d-bcee-4f2a-943f-f0f2184a5d3b"
}
]
}' \
--output conversation.wav
```
## Step 4: Real-time Streaming with WebSockets
For real-time applications, you can use WebSockets to stream text and receive audio chunks as they're generated:
```python Python theme={null}
import asyncio
import websockets
import json
import base64
import uuid
import wave
SAMPLE_RATE = 24000
API_KEY = ""
async def stream_tts():
# Connect to the WebSocket endpoint
uri = f"wss://api.vogent.ai/api/tts/websocket?apiKey={API_KEY}"
generation_id = f"gen_{uuid.uuid4()}"
async with websockets.connect(uri) as websocket:
print("🔗 Connected to Voicelab WebSocket")
# Send initial text chunk
await websocket.send(json.dumps({
"generationId": generation_id,
"voiceId": "36b87413-6d7b-421d-8745-bc0897770d1e", # Mabel voice
"text": "Hello! This is a real-time streaming example.",
"finalText": False,
"sampleRate": 24000,
"cancel": False
}))
# Send final text chunk
await websocket.send(json.dumps({
"generationId": generation_id,
"voiceId": "36b87413-6d7b-421d-8745-bc0897770d1e",
"text": " This demonstrates real-time text-to-speech streaming!",
"finalText": True,
"cancel": False
}))
audio_chunks = []
print("Listening for audio")
# Listen for audio chunks
async for message in websocket:
data = json.loads(message)
if data["type"] == "chunk":
# Decode and store audio chunk
audio_data = base64.b64decode(data["audio"])
audio_chunks.append(audio_data)
print("🎵 Received audio chunk")
elif data["type"] == "error":
print(f"❌ Error: {data['error']}")
break
elif data["type"] == "finished":
print("✅ Streaming complete!")
with wave.open("streaming_audio.wav", "wb") as wf:
wf.setnchannels(1)
wf.setsampwidth(2)
wf.setframerate(SAMPLE_RATE)
print("Chunks", len(audio_chunks))
for chunk in audio_chunks:
wf.writeframes(chunk)
print("💾 Audio saved as 'streaming_audio.wav'")
break
# Run the streaming example
asyncio.run(stream_tts())
```
### Why Use WebSocket Streaming?
WebSocket streaming is perfect for:
* **Live chatbots** - Generate speech as the conversation progresses
* **Real-time applications** - Immediate audio feedback
* **Interactive experiences** - Dynamic content that changes based on user input
* **Low-latency needs** - Start playing audio before the full text is processed
## Next Steps
Congratulations! You've successfully generated your first AI voices. Here's what to explore next:
Learn about different AI models and their capabilities
Browse our complete voice library and cloning options
Detailed API documentation with all parameters
Discover advanced features like voice cloning and SSML
## Need Help?
* **Documentation**: Explore our comprehensive [API documentation](/api-reference/voicelab-tts)
* **Support**: Contact our support team at [support@vogent.ai](mailto:support@vogent.ai)
* **Community**: Join our [Discord community](https://discord.gg/JmThYcyG) for discussions and tips
* **Examples**: Check out more examples in our [GitHub repository](https://github.com/vogent/voicelab-examples)
# Roadmap
Source: https://docs.vogent.ai/voicelab/roadmap
See what's coming next for Voicelab and upcoming features
To contribute to our roadmap, please message the `#feature-requests` channel in our Discord.
# Upcoming Features
Features marked as **private beta** can be unlocked for your workspace on request. To get access, email [j@vogent.ai](mailto:j@vogent.ai).
## Voice Models
* Kokoro
* Kyutai
* Chatterbox
## Fine-tuning
Fine-tuning is in **private beta**. Please email for access.
## Hosted fine-tunes
Hosting your own weights is in **private beta**. Please email for access.
# Voices and Voice Cloning
Source: https://docs.vogent.ai/voicelab/voices
Browse the voice library and learn about voice cloning options
While you can bring any voice to any of our offered models by voice-cloning, we also offer select pre-cloned and pre-trained voices for each model.
Voices marked as **High Quality** are full fine-tunes from professional voice actors, and will be higher quality & more stable.
Other voices are zero-shot voice clones; while still high-quality, they may be more likely to produce artifacts in generation.
## Voice Cloning
Create custom voices from audio samples for unique, branded voice experiences.
### Voice Cloning
There are two ways to clone a voice: **zero-shot voice-cloning** involves providing 15-20 seconds of a high-quality recording, while **professional voice-cloning (or fine-tuning)** involves 2-3 hours of two speakers engaged in conversation.
While professional voice-cloning produces higher-fidelity clones with fewer quirks/artifacts, zero-shot voice cloning can usually produce a good result.
The quality of voice clones can depend on the style of the voice you're trying to clone; voices that are too far out-of-distribution (i.e. voices whose accents/styles were not likely encountered during initial training of the model) are more likely to produce lower-fidelity voice clones, or voice clones with more artifacts.
#### Zero-Shot Voice Cloning
You can generate a zero-shot voice clone by uploading a 15-20 second voice recording through our UI.
To do so, go to the **Voices** tab on the left sidebar, then click the **Clone Voice** button. Select a gender and voice model, then upload the clip.
#### Voice Cloning Tips
* Make sure your clip is free from background noise, and that there is only one speaker
* *For best results, upload a conversational clip*. Don't over-enunciate or artificially control the speed of speech.
* *Keep in mistakes (stutters, ums/uhs, etc.)*. These lead to more realistic clones.
* For best results, improvise some lines on a topic that's easy for you to speak about (e.g. what are your plans for this weekend?)
* Do not read from a script.
#### Fine-tuning and Professional Voice Cloning
For more information on this, please visit [the fine-tuning guide](/voicelab/fine-tuning)