Twilio Voice Calls & Recordings
Place, redirect and end phone calls through Twilio Programmable Voice, start or pause call recordings, and pull call logs, webhook events, recordings and conference participants afterwards. Outbound calls run from inline TwiML or your webhook URL.
Connect this API to an AI agent Browse all specs
What you can do with Twilio Voice Calls & Recordings via MCP
Every endpoint below becomes a governed tool your AI agent (Claude, ChatGPT, or a customer-facing VX agent) can call — with scoped permissions, sandbox testing, and audit logs.
| Method | Path | Operation | Description |
|---|---|---|---|
| GET | /2010-04-01/Accounts/{AccountSid}/Calls.json |
listCalls | List calls, filtered by number, status or start time |
| POST | /2010-04-01/Accounts/{AccountSid}/Calls.json |
createCall | Place an outbound call that runs TwiML or a webhook URL |
| GET | /2010-04-01/Accounts/{AccountSid}/Calls/{Sid}.json |
getCall | Get one call's status, duration, price and numbers |
| POST | /2010-04-01/Accounts/{AccountSid}/Calls/{Sid}.json |
updateCall | Redirect a live call to new TwiML, or end it |
| GET | /2010-04-01/Accounts/{AccountSid}/Calls/{CallSid}/Events.json |
listCallEvents | List the webhook requests and responses for a call |
| POST | /2010-04-01/Accounts/{AccountSid}/Calls/{CallSid}/Recordings.json |
startCallRecording | Start recording a live call |
| GET | /2010-04-01/Accounts/{AccountSid}/Calls/{CallSid}/Recordings.json |
listCallRecordings | List the recordings of one call |
| POST | /2010-04-01/Accounts/{AccountSid}/Calls/{CallSid}/Recordings/{Sid}.json |
updateCallRecording | Pause, resume or stop a call recording |
| GET | /2010-04-01/Accounts/{AccountSid}/Recordings.json |
listRecordings | List recordings in the account by date or call |
| GET | /2010-04-01/Accounts/{AccountSid}/Recordings/{Sid}.json |
getRecording | Get a recording's details, duration and media link |
| GET | /2010-04-01/Accounts/{AccountSid}/Conferences.json |
listConferences | List conference calls by name, status or date |
| GET | /2010-04-01/Accounts/{AccountSid}/Conferences/{Sid}.json |
getConference | Get one conference's status and times |
| GET | /2010-04-01/Accounts/{AccountSid}/Conferences/{ConferenceSid}/Participants.json |
listConferenceParticipants | List who is in a conference (muted, on hold) |
Authentication
twilioBasic
HTTP Basic
How to get a credential
- Sign in to the Twilio Console (a free trial works; trial accounts can only call verified numbers).
- Recommended: open Account → API keys & tokens, create a Standard API key, and use the key SID (
SK...) as the username and its secret as the password. - Or use your Account SID (
AC...) as the username and the Auth Token as the password. - Note your Account SID: every path needs it as
AccountSid.
Permissions used
Standard API keys and the Auth Token can call every operation in this spec.
| Area | Operations |
|---|---|
| Calls | listCalls, getCall, createCall, updateCall, listCallEvents |
| Recordings | startCallRecording, updateCallRecording, listCallRecordings, listRecordings, getRecording |
| Conferences | listConferences, getConference, listConferenceParticipants |
Common errors
- 401 Unauthorized (code 20003): wrong SID/secret pair, or the key belongs to another account.
- 404 Not Found (code 20404): wrong
AccountSidor resource SID. - 400 Bad Request:
Fromis not a Twilio number you own,Tois not E.164, or a trial account called an unverified number (code 21219). - 429 Too Many Requests (code 20429): too many concurrent requests; retry with backoff.
Store the pair as a VX Agents basic auth credential (username = SID, password = secret or Auth Token).
Usage guide
Setup
- Credential: Twilio API key SID + secret (or Account SID + Auth Token) as basic auth.
- Pin
AccountSid(starts withAC) as a preset: every operation needs it in the path. - Pin your Twilio voice number as
FromforcreateCallif you always call from the same line.
Place and manage a call
createCallwithToandFromin E.164 (+14155550123) and one of:Twiml(for example<Response><Say>Your table is ready.</Say></Response>),Url(your TwiML webhook) orApplicationSid. AddRecord=trueto record the whole call,StatusCallbackto get status updates, andMachineDetection=Enableto detect voicemail.getCallwith the returnedsidto followstatus(queued,ringing,in-progress,completed,busy,no-answer,failed,canceled),durationandprice.- While it is live:
updateCallwith newTwimlorUrlto redirect it, orStatus=completedto hang up (canceledfor a call still queued or ringing). startCallRecordingon a live call;updateCallRecordingwithStatuspaused,in-progressorstopped.
Before createCall, updateCall or starting a recording, show the number, message and effect to the user and get a yes: calls ring real phones, cost money, and recording may need the other party's consent.
Look back
listCallsbyTo,From,Statusor start time (StartTime>= after,StartTime<= before, asYYYY-MM-DD).listCallEventsshows each webhook request and response for a call, which helps debug TwiML errors.listCallRecordings(one call) orlistRecordings(account, by date orConferenceSid), thengetRecording. Media is at the recordinguriwith.jsonswapped for.mp3or.wav(send the same credential if the account requires auth for media).listConferences,getConferenceandlistConferenceParticipants(filterMuted,Hold).
Good to know
- Bodies are form-encoded; field names are PascalCase.
- Lists page with
PageSize(max 1000) and thenext_page_uriin the response. - Trial accounts can only call verified numbers and play a trial message first.
- The old Recording Transcriptions API is deprecated and not included.
Source: Twilio Voice API reference (https://www.twilio.com/docs/voice/api/call-resource), checked 2026-10-19.
How to use this spec
- Create a free VX Agents account (sandbox tools included).
- Open the marketplace and connect “Twilio Voice Calls & Recordings” to an agent.
- Expose it as an MCP server for Claude/ChatGPT, or chat with it directly.