Skip to main content

Voice API

Explore Twilio’s Programmable Voice API and create custom call experiences with speech recognition, call recording, conference calling and more.

Sign up and start building

Try a phone call from the Voice API

  • What’s happening
  • Technical version

When you start the phone call, this code makes a request to the Twilio Voice API providing both a phone number to call, and a server location that will provide TwiML instructions on how to route the phone call.

This call logic relies on a number of TwiML verbs including <Say> to speak audio to the caller, <Gather> to take dialpad input from the user, and <Play> to play audio back to the user.

Demo available in the U.S. and Canada.

  • PHP
  • Node
  • Python
  • Ruby
  • Java
  • .NET (C#)

// Update the path below to your autoload.php,
// see
require_once '/path/to/vendor/autoload.php';

use Twilio\Rest\Client;

// Your Account Sid and Auth Token from
$token  = "your_auth_token";
$twilio = new Client($sid, $token);

$call = $twilio->calls
               ->create("+15558675310", // to
                  "+15017122661",       // from
                  array("url" => "")

// Install the C# / .NET helper library from

using System;
using Twilio;
using Twilio.Rest.Api.V2010.Account;

class Program 
  static void Main(string[] args)
    // Find your Account Sid and Token at
    const string authToken = "your_auth_token";

    TwilioClient.Init(accountSid, authToken);

    var call = CallResource.Create(
      url: new Uri(""),
      to: new Twilio.Types.PhoneNumber("+15558675310"),
      from: new Twilio.Types.PhoneNumber("+15017122661")

// Install the Java helper library from

import com.twilio.Twilio;
import com.twilio.type.PhoneNumber;


public class Example {
  // Find your Account Sid and Token at
  public static final String AUTH_TOKEN = "your_auth_token";

  public static void main(String[] args) {
    Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
    Call call = Call.creator(
        new com.twilio.type.PhoneNumber("+15558675310"),
        new com.twilio.type.PhoneNumber("+15017122661"),

// Download the helper library from
// Your Account Sid and Auth Token from
const authToken = "your_auth_token";
const client = require("twilio")(accountSid, authToken);

    url: "",
    to: "+15558675310",
    from: "+15017122661",
  .then((call) => console.log(call.sid))
# Download the helper library from
from import Client

# Your Account Sid and Auth Token from
auth_token = 'your_auth_token'
client = Client(account_sid, auth_token)

call = client.calls.create(

# Download the helper library from
require 'rubygems'
require 'twilio-ruby'

# Your Account Sid and Auth Token from
auth_token = 'your_auth_token'
@client =, auth_token)

call = @client.calls.create(
          url: '',
          to: '+15558675310',
          from: '+15017122661'

puts call.sid

Powerful Voice API primitives

  • Programmatic call control

    Your app instructs Twilio in real time on how a call should proceed — build nearly any workflow you can imagine.

    View Voice API docs
      <Dial action="/forward">
  • <Say> text and <Gather> keypad input

    The basics of most call flows start with the ability to speak strings of text and gather DTMF keypad input.

    View Docs
      <Gather action="/process-keypad-input">
        <Say language="en-gb">
          Ahoy! Choose an option.
          For Sales press 1.
          For Support press 2.
  • <Queue> and <Conference> built in

    TwiML provides intelligent Conference and Queue primitives to take the heavy lifting out of building seamless call experiences.

    View Docs
  • <Dial> a WebRTC‑powered <Client>

    Connect a call to a web or mobile app using the Twilio Client SDK. Your TwiML specifies to which client username to connect the call.

    View Docs
      <Say language="en-gb">
        Ahoy! Please hold while we
        connect you to an agent.
      <Queue url="/support-hold">
  • Call progress notifications

    Get webhooks notifying of call progress events as any call progresses through key events, such as Initiated, Ringing, Answered, and Completed.

    View Docs
          statusCallbackEvent="initiated ringing answered completed"

The Twilio advantage

Communicate reliably

Experience a 99.95% uptime SLA made possible with automated failover and zero maintenance windows.

Operate at scale

Extend the same app you write once to new markets with configurable features for localization and compliance.

Many channels

Use the same platform you know for voice, SMS, video, chat, two-factor authentication, and more.

No shenanigans

Get to market faster with pay‑as‑you‑go pricing, free support, and the freedom to scale up or down without contracts.