> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.vapi.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.vapi.ai/_mcp/server.

# Path to production

> Take a Vapi assistant from a first test call to production. Choose a model preset, publish a version, test it with Simulations, and monitor live calls.

## Overview

A working first call is the start. Before real customers call your assistant, publish a version, test it, and set up a way to catch problems. This page walks through that path and links to the detailed guide for each step.

**The path to production:**

1. **Build an assistant**: Create an assistant, choose a model preset, and try it in Chat.
2. **Publish and test**: Define what success looks like, publish a version, then test your setup with Simulations.
3. **Go live**: Get a phone number, assign it to your assistant, and place a controlled call.
4. **Monitor**: Review calls and get alerts when quality drops.
5. **Iterate**: Change a draft, publish, and retest. As your team grows, manage your configuration as code.

## Prerequisites

* [A Vapi account](https://dashboard.vapi.ai)

## 1. Build an assistant

In the [Dashboard](https://dashboard.vapi.ai), open **Assistants**. To start from a template, select the down arrow next to **Create Assistant**, then choose a template. To start from scratch, select **Create Assistant**. Then choose the transcriber, model, and voice.

[Model Presets](/assistants/model-intelligence/presets) bundle a transcriber, model, and voice for a specific goal. New assistants use **Balanced** by default. Assistants created from a template use the preset that best fits the template.

| Preset                | Choose it when                                 |
| --------------------- | ---------------------------------------------- |
| **Balanced**          | You're not sure which preset fits. Start here. |
| **High Intelligence** | Conversations are complex or high-stakes.      |
| **Ultra Fast**        | Response speed matters most.                   |
| **Cost Saver**        | Calls are simple and high-volume.              |

To compare individual components, use the [Performance Metrics](/assistants/model-intelligence/overview) shown for latency, cost, and quality.

Vapi saves your edits as a **draft**. To try draft changes, select the down arrow next to **Talk** in the assistant editor, then select **Chat**. Chat uses the configuration shown in the editor. See [Test draft changes in Chat](/assistants/versioning/versioning-assistants#test-draft-changes-in-chat).

## 2. Publish and test

One good test call doesn't prove an assistant is ready. Define what success looks like, publish a version, then use [Simulations](/observability/simulations-overview) to test your setup.

#### Define success with structured outputs

[Structured outputs](/assistants/structured-outputs) extract specific data from each conversation, such as whether the caller's issue was resolved or an appointment was booked. Simulations use structured outputs as their success criteria. Attach the same structured outputs to your assistant in the **Artifact Plan** section so they also run on every call. Start with the [Structured outputs quickstart](/assistants/structured-outputs-quickstart).

#### Publish a version

Select **Publish**, review the changes, then select **Next**. Review the version and traffic settings, then select **Publish**. To use the current default settings without reviewing them, select the down arrow next to **Publish**, then select **Quick Publish**. Publishing creates a new version and makes it the **current** version. See [Versioning assistants](/assistants/versioning/versioning-assistants).

#### Test your setup with Simulations

A simulation runs an AI tester through a complete conversation with your assistant and returns a pass or fail result. Save the conversations that matter most as a simulation suite, then run the suite again after every change. Start with the [Simulations quickstart](/observability/simulations-quickstart).

> **Note**
>
> Simulations test the assistant's latest published version, not your draft. Publish your changes before you run a simulation suite.

> **Warning**
>
> Simulations run unmocked tools for real. Use sandbox integrations or [mock tools](/observability/simulations-advanced#mock-tool-responses) that could create bookings, send messages, or affect real customers.

To check a single decision, such as which tool the assistant calls and with which arguments, add [Evals](/observability/evals-quickstart).

To plan which conversations to cover, see [Testing voice agents](/test/voice-testing) and [Plan test coverage](/test/plan-test-coverage).

## 3. Go live

When the assistant passes your simulations, connect it to real callers.

#### Get a phone number

Create a [free Vapi number](/free-telephony), or import a number from [Twilio](/phone-numbers/import-twilio), [Telnyx](/telnyx), or [DIDWW](/phone-numbers/didww). With free Vapi numbers, only inbound calls are supported. Import a number to make outbound or international calls.

#### Assign the number to your assistant

In the [Dashboard](https://dashboard.vapi.ai), open **Phone Numbers** and select the number. Under **Inbound Settings**, choose your assistant, then select **Save**. Inbound calls use the assistant's current published version.

#### Place a controlled call

Call the number yourself to check the full phone path, including audio and live integrations, before customers do.

When the call ends, open it in [**Calls**](/observability/logs/call-logs) under **Logs** and check the **Structured Outputs** section to see whether the call met your success criteria. Results appear a few seconds after the call ends.

> **Note**
>
> Outbound and web calls also use the current version by default. To use a specific version, pass `assistantVersion` with `assistantId` when you [create a call](/api-reference/calls/create).

## 4. Monitor

After launch, watch real calls so you find problems before customers report them.

* **Review calls:** Open [**Calls**](/observability/logs/call-logs) under **Logs** to see each call's transcript, recording, and how it ended. To understand an ended call, see [Call ended reasons](/calls/call-ended-reason).
* **Track outcomes:** Your [structured outputs](/assistants/structured-outputs) extract the same data from every live call, so you can see which calls met your success criteria.
* **Set up alerts:** [Monitors](/observability/monitoring-quickstart) check your call data against thresholds you set and alert your team by email, Slack, or webhook. Effectiveness and compliance monitors use structured outputs.
* **Track trends:** Build charts of call metrics with [Boards](/observability/boards-quickstart).

## 5. Iterate

Use what you learn from production to improve the assistant.

1. Turn a confirmed production failure into a [regression test](/test/run-and-maintain-tests#turn-production-issues-into-regression-tests).
2. Edit the draft and try the change in Chat.
3. Publish a new version and rerun your simulation suite.

> **Warning**
>
> After the assistant has a phone number, a published version takes live calls right away, before you rerun your simulations. If a new version causes problems, [restore an earlier version](/assistants/versioning/versioning-assistants#restore-a-previous-version). Restoring creates a new current version immediately. To test changes before they reach live calls, use [config as code](/config-as-code).

### Manage your configuration as code

As your team grows, use [config as code (GitOps)](/config-as-code) to keep assistants, squads, tools, structured outputs, and simulations as files in git. Every change goes through a pull request, simulation suites can run against the pull request before it merges, and you promote changes from a development org to production instead of editing production directly. See [Development, staging and production](/config-as-code#development-staging-and-production).

## Next steps

#### [Simulations quickstart](/observability/simulations-quickstart)

Run your first automated conversation test.

#### [Versioning](/assistants/versioning)

Learn how drafts, versions, and restores work.

#### [Monitoring quickstart](/observability/monitoring-quickstart)

Get alerts when call quality drops.

#### [Debugging voice agents](/debugging)

Find and fix the cause of a failed call.

#### [Config as code (GitOps)](/config-as-code)

Review, test, and promote changes with git.