Configure GPT-Live
Configure GPT-Live
Create an assistant that checks appointment availability and reads back the results. You’ll configure the speaker and reasoner, connect a lookup tool, and make a test call.
For help deciding what to put in each prompt, read Design your assistant. For feature restrictions, use Limitations and FAQs.
Jump to: Create an assistant · Model settings · Personality · Voices · Tools · Calls · Analysis
Before you start
- Enable GPT-Live for your Vapi organization.
- Have a browser and microphone ready for a test call.
- For API requests, use a Vapi private API key on your server or local machine.
- If you bring an OpenAI key, it needs access to GPT-Live and the reasoner you select.
- Prepare an HTTPS availability endpoint using the tool response contract.
The example uses a placeholder endpoint. Replace it with your handler before testing a lookup. It returns availability only. Booking requires a separate tool.
Create an assistant
Choose the dashboard or API. Both paths create an assistant with an availability lookup and an end-call tool.
Dashboard
API
Create the assistant
Open Assistants, select Create Assistant, and choose GPT-Live. Choose Marin as the voice.
Set the speaker and reasoner prompts
In Speaker, enter:
In Reasoner, enter:
Add the tools
Create a function tool named lookupAvailability with the description “Check available appointment slots. Does not reserve or book a slot.” Add these required arguments:
Set the tool’s Server URL to your HTTPS handler.
Attach the function tool and an endCall tool to the assistant. You can also create a saved tool through Create Tool and select it in the dashboard.
Make a test call
Open the saved assistant in the dashboard and select Talk. Allow microphone access, then ask for availability on an explicit date in a specific time zone.
Check that your handler receives the right values and the assistant reads back the returned slots. Ask to book a time. It should explain that booking isn’t connected. Finish with “Please end the call” and confirm that the call ends.
Model settings
These fields belong to the assistant object. See Create Assistant for the full schema.
Prompt defaults and overrides
Set model.speaker.instructions for the spoken conversation and model.reasoner.instructions for task procedures.
- Explicit speaker instructions take precedence over
model.systemPromptand system messages inmodel.messages. If you omit the speaker instructions, Vapi uses that legacy configuration. - Omitting reasoner instructions uses Vapi’s default reasoner prompt. Custom instructions replace that prompt entirely.
- An explicit empty string stays empty. Updating one prompt doesn’t update the other.
Personality packs append guidance to the speaker prompt. Set model.speaker.personalityPacks to an array of the IDs above and test one pack at a time.
Personality and language
Personality packs append speaking-style guidance to your speaker prompt. Add this inside the assistant’s model object:
Available IDs are eager-listener, idle-hummer, bouncy, and unhurried. See Speaking style for what each pack encourages and how to combine personality with pacing. These are prompt instructions, not fixed speed controls.
Write the speaker prompt and firstMessage in the language you want the assistant to use. For Bossa or Tempo, you can include:
Keep tool and delegation instructions in the prompt too. Try names, dates, and product terms in real calls, and add pronunciation guidance where needed.
Voices
Choose any of these 22 voices with voice.provider: "openai" and voice.voiceId. Save the assistant and start a new call to change voices. In-call voice changes aren’t supported.
Voices with regional tags
Use the tags to narrow your choices, then listen to the samples. Bossa and Tempo previews are in Brazilian Portuguese. The other previews are in English. Test your preferred voice with your own prompts to hear how it handles the accent and vocabulary you need.
More voices
You can also choose any of these voices. Select a preview to listen.
Greetings and duration
Use a text greeting if the assistant should begin the conversation.
Generated speech may vary from the supplied greeting. A text greeting is not a guarantee of exact prerecorded playback.
Connect your tools
Handle Vapi’s tool-calls server message at your HTTPS endpoint. Read message.toolCallList, validate each function’s arguments, and query your availability service.
Return a result for each request using its actual toolCallId:
Replace the sample result with your service’s data. If the lookup fails, return the failure so the assistant can explain it. See Server authentication to protect the endpoint.
Supported tool types are function, apiRequest, endCall, dtmf, and transferCall. Give tools unique resolved function names. Save reusable tools and attach them through model.toolIds, or include definitions in model.tools.
Use function or API request tools to connect external data sources. For phone actions, check transfer and keypad support.
Slow and asynchronous requests
A synchronous function waits for your handler’s result. Set async: true on a function tool to let the conversation continue while that request completes. Return the final result through the original request, using the matching toolCallId.
If your handler returns “queued” before the work finishes, add a status lookup tool. Tell the reasoner when to check it. A later callback doesn’t automatically update the conversation.
Tools can run concurrently. Keep dependent actions in order: check availability, confirm the caller’s choice, then book. Your service should validate those requirements too.
Connect a call
Start with dashboard Talk, then connect your intended call channel. GPT-Live supports browser WebRTC, native Twilio, Vapi SIP, and raw WebSocket audio. See connection limits before changing an existing setup.
Phone calls
For inbound Twilio calls, import a Twilio phone number and assign your assistant to it. For SIP, follow the SIP guide.
For an outbound Twilio test, send this body to Create Call:
Replace the customer phone number with one you control. phoneNumberId is the Vapi ID of the imported Twilio phone number.
WebSocket configuration
Send this body to POST https://api.vapi.ai/call with your Vapi private API key:
Connect to transport.websocketCallUrl in the response. Send and receive binary audio frames containing signed 16-bit little-endian samples at 24 kHz. Convert your microphone audio to that format before sending it.
Set 24000 explicitly. The default WebSocket rate is too low for GPT-Live. Browser WebRTC and phone connections negotiate their own audio formats.
Close the WebSocket to end the call, or have the assistant invoke endCall. Incoming JSON call-control commands are not supported by this GPT-Live connection. See WebSocket transport for the general transport, applying the restrictions above.
Review and monitor calls
Completed GPT-Live calls use Vapi’s shared post-call processing. Configure the features you need, then inspect the results after a test call finishes.
Keep transcript collection enabled for transcript-based checks. Audio-based checks require a recording. See recording and data restrictions before relying on those artifacts.
Retrieve a completed call with your private API key:
Review the transcript and recording alongside tool results. A missing analysis result isn’t a pass. Check attached output IDs, processing, and available artifacts. Creating a scorecard doesn’t automatically configure a monitor.
When testing a migration, keep the previous assistant available so you can route new calls back. End test calls through the call interface, endCall, or by closing your WebSocket. Check any external work still running. Ending the call doesn’t undo it.
Cost
Review Vapi call costs for your configuration. Reasoning, tools, and telephony can contribute to the total. OpenAI’s model pricing describes provider charges rather than the complete cost of a Vapi call.