Twilio Inc. FAQs | Comparably
Twilio Inc. Claimed Company
Twilio has democratized communications channels like voice, text, chat, video, and email by virtualizing the world’s communications infrastructure through APIs read more
EMPLOYEE
PARTICIPANTS
286
TOTAL
RATINGS
2496

Twilio Inc. FAQs

Twilio Inc.'s Frequently Asked Questions page is a central hub where its customers can always go to with their most common questions. These are the 703 most popular questions Twilio Inc. receives.

Frequently Asked Questions About Twilio Inc.

  • We support sending and receiving picture messages between Twilio US short codes and major US carriers (AT&T, Verizon, T-Mobile, Sprint). The majority of our short codes also support MMS over US Cellular, but there are a small subset of short codes that do not.

    Customers applying for a new short code can indicate that they want MMS on the application; existing short code customers can have MMS added to their short code by contacting their account manager. Adding MMS to a short code costs a one-time fee of $500.

    Short code provisioning can vary considerably depending primarily on the time that it takes for mobile carriers to review and approve your short code. On average, short code provisioning takes 8-12 weeks from the time that you make your initial payment to when the short code is live on major carriers, but in some cases can take longer.

    UK and Canada short codes do not currently support picture messaging.

    For more information, see:

    How to send an MMS message

    Pricing for sending MMS messages over short codes

    Supported carriers for MMS

    View Article
  • Alphanumeric Sender ID allows you to send Twilio Programmable SMS messages to supported countries from a personalized sender ID (like a business or organization name), instead of your E.164 formatted Twilio Phone number. This guide explains how alphanumeric sender IDs work, and how to use them with Twilio SMS messaging.

    The following topics are discussed in this guide. Click a topic to skip directly to this information:

    Benefits of Alphanumeric Sender ID

    Twilio requirements

    Send SMS messages using an Alphanumeric Sender ID

    Sending limitations

    Sender ID registration

    What characters can I use in my Alphanumeric Sender ID?

    How much does Alphanumeric Sender ID messaging cost?

    Can users respond to my messages that use Alphanumeric Sender ID?

    How do users opt out of messages sent with an Alphanumeric Sender ID

    Benefits of Alphanumeric Sender ID

    Some of the key advantages of using Alphanumeric Sender IDs include:

    Higher message deliverability: In many countries, regulatory bodies are increasingly clamping down on illegitimate A2P (application-to-person) SMS use cases to curb unwanted messaging.

    Once the legitimacy of an A2P use case has been vetted, Twilio handles fluctuating telecom logic, regulations, and carrier-specific rules across 150 countries to ensure your A2P messages reach their destination.

    Improved brand recognition: Every SMS sent using a recognizable Alphanumeric Sender ID reinforces your branding.

    Increased open rates: With increasing cases of spam and fraud, what appears as the sender of the message is a key factor message recipients take into account when deciding if they should open a message or not. If the sender is an international number, or a number with which they’re not familiar, the chance of a message recipient opening the message is next to none.

    With Alphanumeric Sender IDs, receivers immediately recognize the sender, know the message is legitimate, and are 80\% more likely to open the message.

    Twilio requirements

    Alphanumeric Sender ID is automatically supported on all new upgraded (paid) Twilio accounts. It is not supported for free trial accounts.

    You can validate that Alphanumeric Sender is enabled on your account by following these steps:

    Login to your project at www.twilio.com/console.

    From the left side navigation bar, clickProgrammable SMS SMS STOP keyword filtering.

    Click Settings.

    Verify that "Alphanumeric Sender ID" is set to Enabled.

    If you continue to experience issues after validating that you are attempting to send messages to a supported country, your account is upgraded, and Alphanumeric Sender ID is enabled, please contact Twilio Support.

    Notice: Spoofing of brands or companies with Alphanumeric Sender ID is not allowed. You must comply with Twilio’s Acceptable Use Policy and Messaging Policy at all times.

    Send SMS messages using an Alphanumeric Sender ID

    To send SMS messages using an Alphanumeric Sender ID, use the desired ID for the From parameter in your API requests. For examples of how this looks in code, please see Changing the sender ID for sending SMS messages.

    You can also enable an Alphanumeric Sender ID on a Twilio Messaging Service. The Alphanumeric Sender ID will be selected automatically when sending to a supported country (unless you have SMS-capable numbers from that country in your Messaging Service pool, in which case Twilio will use those).

    Sending limitations

    This feature is only available for upgraded (paid) Twilio accounts sending messages to supported countries. Some supported countries have additional requirements like going through a pre-registration process ( see which countries require pre-registration ) or only allowing messages that are transactional in nature (one-time passwords, account notifications) to be sent using an Alphanumeric Sender ID.

    Alphanumeric Sender ID messages sent to an unsupported country will fail with an HTTP 400 error response from Twilio. In this case, we recommend that you fallback to a Twilio international mobile number.

    Additionally, recipients cannot reply directly to messages sent out using an Alphanumeric Sender ID.

    Sender ID registration

    Alphanumeric Sender IDs can be registered one of two ways:

    Dynamic registration

    Pre-registration

    Dynamic Registration countries allow you to use an alphanumeric sender ID on-demand. All you'll need to do is submit the desired sender ID in the From parameter of your API request, instead of using an E.164 formatted Twilio phone number.

    Here’s an example cURL script - notice the From parameter updated in line 4.

    curl -XPOST https://api.twilio.com/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages.json \

    -d "Body=Hello from MyCompany" \

    -d "To=+12685551234" \

    -d "From=MyCompany" \

    -u 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:your_auth_token'

    For full details, see Sending Messages: Use an alphanumeric sender ID (Twilio Docs).

    Pre-Registration countries require you submit a request at our Alphanumeric Sender ID registration site. Be sure to indicate which country you want to register your ID for. When we receive your request, our Sender ID team will review it, and be in touch to update you on the progress.

    Once the Sender ID registration is complete, you can use any Twilio phone number associated with your account as the From parameter in the API request, and Twilio will dynamically replace the Sender ID when we detect the registered country as the sending destination.

    Here are examples of common requirements when submitting a Pre-Registration request:

    The desired Sender ID

    Intended purpose - one-time passwords, account notifications, promotional messaging, etc.

    Company name

    Company website

    Projected SMS traffic (monthly)

    Some countries have additional requirements; for example, in Indonesia, each telecommunication provider requires a Letter of Appointment (LOA) which authorizes Twilio to register and send branded messages on the sender’s behalf. In addition, a screenshot(s) of the page where end users insert their account details and phone number is required, as shown in the illustration below.

    Notice: For the full list of supported countries and pre-registration requirements, see International Support for Alphanumeric Sender ID.

    Please note that this feature is currently unsupported in the North American mainland countries of Canada, the US, and Mexico.

    What characters can I use in my Alphanumeric Sender ID?

    Alphanumeric Sender ID supports up to 11 characters from the following categories:

    Upper-case letters A-Z

    Lower-case letters a-z

    Numbers 0-9

    Spaces

    Your ID must include at least one letter, and cannot be composed only of numbers. Non-ASCII special characters and punctuation are not allowed.

    Notice: India is an exception to this rule; alphanumeric sender IDs must be exacly six characters. For more information, see Twilio's India SMS guidelines.

    How much does Alphanumeric Sender ID messaging cost?

    There is no price difference for using an Alphanumeric Sender ID vs a standard Twilio phone number. Please see our Programmable SMS Pricing site for complete pricing information.

    Notice: Some countries like Russia and Czech Republic have a monthly charge and/or a one-time set-up fee associated with the use of Alphanumeric Sender ID. For full details, see International Support for Alphanumeric Sender ID.

    Can users respond to my messages that use Alphanumeric Sender ID?

    No, recipients of messages sent with an Alphanumeric Sender ID will not be able to respond to you directly. Because of this limitation, we recommend only using Alphanumeric Sender IDs for one-way outbound messages (such as one-time passwords and account notifications). You may also include a contact number, email, and/or website address in your outgoing messages sent via Alphanumeric Sender ID if you wish to receive responses.

    How do users opt out of messages sent with an Alphanumeric Sender ID

    Because you can only use Alphanumeric Sender ID for one-way messaging, inbound messages sent to your Alphanumeric Sender ID will not be received on your Twilio project. Due to this limitation, Twilio's does not work for users responding to alphanumeric sender ID messages.

    Customers receiving text messages from your Alphanumeric Sender ID should have opted in to your service, and been informed how to opt out before you sent the first message. We recommend you provide your users with a clear description in your Terms of Service about how many messages they should expect to receive, and how they can opt out.

    We also highly recommend offering your users the ability to opt out of receiving SMS messages from your service by:

    Writing to your support team

    Calling your support phone line

    Texting another phone number or short code

    View Article
  • Twilio Free Trial projects have some restrictions to how they can be used. This guide lists the important limitations you may run up against when testing your Twilio Application. For additional help setting up your trial project, see How Does Twilio's Free Trial Work.

    Notice: Free trial projects are given a small balance for limited testing. Upgrading your project removes these trial limitations, and any remaining free trial balance. The beginning balance on an upgraded project will be limited to the amount funded while upgrading, or the amount of a promo code used to upgrade.

    Product Links:

    Phone Numbers

    Programmable Messaging

    Programmable Voice

    Elastic SIP Trunking

    Programmable Video

    Verify and Authy

    Test Credentials

    Phone Numbers

    We only allow one Twilio number per trial account. To get a different phone number than the one Twilio assigned you automatically, you need to release the current number you have on the Numbers page first.

    Phone numbers in Beta are made available to trial accounts. Check out this article on international numbers and their capabilities to find out which numbers are currently in Beta.

    If you upgrade your account, your trial number will be carried over and charged monthly according to current Voice or SMS rates.

    If your phone number is unused in your trial account for more than 30 days, it may be removed, as we unfortunately do not have an unlimited supply of phone numbers. That said, after returning to your Trial account you can purchase a new phone number at any time and start using your new number right away. Otherwise, if you are particularly attached to a phone number, you can upgrade your account by simply adding your credit card.

    Programmable Messaging

    Outbound messages and <Message> TwiML replies can only be sent to a validated phone number. Before attempting to send or reply to messages, be sure to verify the number. Some high cost and premium access numbers aren't reachable by default; for help enabling messages to a desired country, please see our Global SMS on Trial Accounts article.

    You will be able to send SMS from your SMS-enabled Twilio phone number, but not from your verified personal number. This rule also applies after the trial.

    When you send an SMS from your free trial phone number, it will begin with “Sent from a Twilio Trial account”. This message will be removed once your account has been upgraded.

    Alphanumeric Sender IDs cannot be used with trial accounts.

    Programmable Voice

    Outbound trial calls can only be placed to a validated phone number. Before attempting to place an outbound call, be sure to verify the number.

    Some high cost and premium access numbers aren't reachable by default; for help enabling calling to countries outside of the US and Canada, please see our Geographic Permissions article.

    Calls to and from your free trial phone number will play a short trial message before your TwiML is executed.

    Trial accounts can only use your account's Twilio number, or a verified caller-ID, as the caller-ID (From number) when making outgoing calls.

    Outbound trial calls are limited to 10 minutes.

    Incoming calls on a trial account can't be recorded unless they're forwarded elsewhere with a <Dial> TwiML command with the record attribute.

    A maximum of 5 total inbound and/or outbound concurrent calls are possible. When 5 calls are active, any further requests will be rejected with Error 10004: Call concurrency limit exceeded for account.

    Elastic SIP Trunking

    You can fully configure an Elastic SIP Trunk for testing and placing actual calls to and from your business.

    Outbound trial calls can only be placed to a validated phone number. Before attempting to place an outbound call, be sure to verify the number.Phone numbers from 218 countries can be verified and reached on a trial account; for help enabling calls to a desired country, please see our Geographic Permissions article.

    Trial accounts are limited to a maximum of 1 Elastic SIP Trunk.

    Trial accounts are limited to a maximum of 1 Phone Number.

    Trial SIP trunks can only be used to place calls using your account’s Twilio number, or a Verified Caller-ID, as the Caller-ID/From number for all calls.

    Calls to and from your free trial phone number will play a short trial message before connecting the parties.

    A maximum of 4 total inbound and/or outbound concurrent calls are possible. When 4 calls are active, any further requests will be rejected.

    Programmable Video

    There are currently no specific restrictions for video.

    Verify and Authy

    Maximum of 25 Calls made per day via theAuthy or Verify API endpoints.

    Maximum of 35 SMS sent per day via theAuthy or Verify API endpoints

    Maximum of 100 Calls and SMS per month via theAuthy or Verify API endpoints

    Maximum of 50 Authy API registrations per minute.

    Test Credentials

    Each Twilio project has a set of test credentials that can be used with specifically programmed numbers to freely test application flows for purchasing phone numbers, sending SMS, and placing calls. For full details, see Test Credentials (Twilio Docs).

    View Article
  • Due to legalities, costs, and demand fluctuations, we’re not able to offer phone numbers in every country. Check out this list of which countries we do and don’t stock numbers in. If you don’t see your country on the list, we suggest looking into the following options:

    Purchase a number in another country

    Even if Twilio doesn’t have phone numbers in your country, you can still use a number from a different country to reach you and your customers.

    If you want to use Twilio to place and/or receive voice calls, head to our list of voice-enabled numbers to see if there’s another country where you’d want to purchase a number to make international calls from.

    If you want to use Twilio to send and/or receive SMS text messages, head to our list of SMS-enabled numbers and look for a “Yes” under the “Global SMS Enabled” column. That means we’ll most likely be able to send SMS to your country.

    Notice: To double-check that you’ll be able to make calls and send SMS to your country from these international numbers, make sure your country is searchable for in our SMS or Voice pricing pages.

    Use a Custom Alphanumeric Sender ID for Outbound SMS

    Alphanumeric Sender ID is a feature that allows you to send one-way SMS using your brand or business name. This feature is only available when sending messages to specific countries, and some countries may have pre-registration and/or transactional message requirements.For more information, please see International support for Alphanumeric Sender ID.

    To make this work, please see Getting Started with Alphanumeric Sender ID for Twilio Programmable SMS.

    Notice: Alphanumeric Sender IDs are only for outbound one-way messages. They do not support incoming messages.

    Use a Verified Caller ID for Outbound Calls

    Using a Verified caller ID allows you to validate a non-Twilio phone number to be used as a caller ID when placing outbound calls from Twilio. This can be a good solution for placing calls that appear to be from a local number, even if we don't offer Twilio numbers locally.

    To make this work, all you need to do is verify a number that you own. You can then use this verified phone number as the “From” number when you make outbound voice calls from our platform.

    Notice: Any calls made back to your number would continue to be handled by your regular carrier.

    Sign up to get notified when we expand to your country

    Hopefully the above options will allow you to successfully use Twilio while we continue working to expand internationally. Since your feedback and requests are important to improve our international offerings, we would also ask that you submit a request for any phone numbers we don't offer via Console.

    To request a new number, make a request within your Twilio project. Fill out the form, and then check theNotify Me When Availablebox and click Submit. We'll be sure to keep you updated as we offer new phone numbers to Twilio.

    View Article
  • Twilio phone numbers may be called or texted to by outside users, just like any other phone number. To help ensure against calls and messages that aren’t intended for you, we wait for a minimum of two months before recycling phone numbers, so that the former owner can update their records. In addition, we monitor each reserved number until it reaches an acceptably low number of contacts.

    That said, some customers may still see unwanted contacts on their Twilio number. If you experience these issues, here are some tips:

    Incoming Calls

    Unwanted incoming calls to your Twilio number can be blocked in a number of ways: Using a blank webhook, responding with the <Reject> verb, or even a "virtual blacklist". Full details can be found in our article How Can I Stop Receiving or Block Phone Calls?

    Incoming Messages

    To prevent all incoming messages and corresponding charges, remove the webhook URL from your Twilio phone number. More details can be found in our article Is there a way to block incoming SMS on my Twilio phone number?

    Change your Twilio Phone Number

    If none of the above options work for your use case, you can always release your Twilio number, and then buy a new number on your project.

    View Article
  • Twilio takes reports of unwanted calls or messages very seriously and we work vigilantly to protect our customers and combat unauthorized or fraudulent use of the Twilio platform.

    Report suspected abuse at https://www.twilio.com/help/abuse or [email protected].

    We will investigate and contact you as soon as possible.

    View Article
  • All newly purchased Twilio numbers will automatically respond to incoming SMS and MMS messages with a default sample message. Read onfor instructions on changing this behavior.

    For Twilio Programmable Voice and Elastic SIP Trunking number configuration, please see Configuring Phone Numbers to Receive Voice Calls.

    For help releasing or deleting phone numbers from your Twilio project, please see Cancel or release a Twilio number.

    Configure a Phone Number to Block Incoming Messages

    While specific messages can't be blocked, all incoming messages to a Twilio number can be ignored. For more information, please see our article Is there a way to block incoming SMS on my Twilio phone number?

    For instructions on configuring your phone number to receive messages without an auto-response, please see our article Receive SMS and MMS Messages without Responding.

    Configure a Phone Number to Reply toIncoming Messageswith a Custom Response

    Twilio Phone numbers require instructions for handling incoming SMS and MMS messages. To get these instructions, Twilio checks the configuration of each phone number when an inbound communication arrives. Here are the different options, and how to configure your phone number for each of them:

    Webhook : Webhooks are applications at external URLs that respond Twilio's HTTP requests with coded instructions. This option is recommended forTwilio users who want a completely customizable Twilio application. For more information, please see our Webhooks Glossary page.

    TwiML Bin : TwiML Bins allow you to write TwiML that Twilio will host for you - so you can quickly prototype a solution without spinning up a web server. This option is recommended forTwiliousers who want to get a prototype up and running quickly, or those without their own web hosting. For more information, please see this TwiML Bins blog post.

    Function (Beta) : Functions are Twilio-hosted Node.js webhooks for responding to Twilio's HTTP requests with coded instructions. This option is recommended forTwilio users who don't have their own web hosting, and want a versatile solution that can be as simple or complex as needed. For more information, please see Building apps with Twilio Functions (Beta).

    Studio Flow :Twilio Studio is a flowchart-style visual interface to design, deploy, and scale customer communications. This option is recommended forTwilio users who aren't familiar with code, don't have their own web hosting, or just want to get up and running as quickly as possible. For more information, please see Getting Started with Twilio Studio.

    Proxy Service (Beta) : Twilio Proxy lets you build a masked communications experience for your users, without exposing their personal information. For more information, please see the Twilio Proxy landing page.

    TwiML App : TwiML Applications are a reusable set of URLs and other configuration data for responding to Twilio. They allows you to update the app only, and have these changes automatically roll out to each configured phone number. For more information, please see our Applications REST API Resource page.

    Messaging Service : Messaging Services allow you to create a group of phone numbers that respond the same way to incoming messages. For more information, please see our Messaging Services documentation.

    Flex : Twilio's Flex programmable cloud contact center offerscustomers a fully customizable omnichannel agent UI that deploys instantly. For more information, please see Getting Started with Twilio Flex.

    How do you respond?Your Twilio response will vary depending on your use case and business needs. For more information on how Twilio Programmable Messaging works, please see our tutorial Receive and Reply to SMS and MMS Messages.

    Respond with a Webhook

    Update via Console

    Access the Active Numbers page in Console.

    Click the desired phone number to modify.

    Scroll to the Messaging section, and then modify the phone number’s routing.When finished, click Save.

    Add and Configure a New Phone Number with Twilio Flex

    CONFIGURE WITH: Webhooks, TwiML Bins, Functions, Studio, or Proxy

    A MESSAGE COMES IN: Webhook

    INPUT FIELD: Enter the URL for your Twilio response code.

    Update via an API request

    The Webhook can also be updated by submitting an HTTP POST with the SmsUrl parameter to the IncomingPhoneNumber REST API Resource. Here's an example cURL script for updating my webhook:

    curl -XPOST https://api.twilio.com/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/IncomingPhoneNumbers/PNXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.json \

    --data-urlencode "SmsUrl=http://www.mysite.com/twilio" \

    -u 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:your_auth_token'

    This example will update the webhook on phone number PNXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX to point incoming requests to www.mysite.com/twilio. To make this script work for you, make the following updates, and then paste it into a terminal window:

    Line 1:update with your Twilio Account SID (ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX) and the incoming phone number's SID (PNXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX).

    Line 2: update with your Twilio webhook app's URL.

    Line 3:update with your Account SID and Auth Token.

    For additional help, please see IncomingPhoneNumbers in API Explorer, or our IncomingPhoneNumber REST API resource documentation.

    Respond with a TwiML Bin

    Access the Active Numbers page in Console.

    Click the desired phone number to modify.

    Scroll to the Messaging section, and then modify the phone number’s routing.When finished, click Save.

    CONFIGURE WITH: Webhooks, TwiML Bins, Functions, Studio, or Proxy

    A MESSAGE COMES IN: TwiML

    DROP-DOWN MENU: Select the previously saved TwiML Bin.

    NOTE: A new TwiML Bin may not be immediately visible; try refreshing the page if you don't see it at first.

    Respond with a Function(Beta)

    Access the Active Numbers page in Console.

    Click the desired phone number to modify.

    Scroll to the Messaging section, and then modify the phone number’s routing.When finished, click Save.

    CONFIGURE WITH: Webhooks, TwiML Bins, Functions, Studio, or Proxy

    A MESSAGE COMES IN: Function

    DROP-DOWN MENU: Select the previously saved function.

    NOTE: A new Function may not be immediately visible; try refreshing the page if you don't see it at first.

    When finished, click Save.

    Respond with a Studio Flow

    Access the Active Numbers page in Console.

    Click the desired phone number to modify.

    Scroll to the Messaging section, and then modify the phone number’s routing:

    CONFIGURE WITH: Webhooks, TwiML Bins, Functions, Studio, or Proxy

    A MESSAGE COMES IN: Studio Flow

    DROP-DOWN MENU: Select the previously saved flow.

    NOTE: A new flow may not be immediately visible; try refreshing the page if you don't see it at first.

    Respond with a Proxy Service (Beta)

    Access the Active Numbers page in Console.

    Click the desired phone number to modify.

    Scroll to the Messaging section, and then modify the phone number’s routing.When finished, click Save.

    CONFIGURE WITH: Webhooks, TwiML Bins, Functions, Studio, or Proxy

    A MESSAGE COMES IN: Proxy Service

    DROP-DOWN MENU: Select the previously saved proxy.

    NOTE: A new proxy may not be immediately visible; try refreshing the page if you don't see it at first.

    Respond with a TwiML App

    Access the Active Numbers page in Console.

    Click the desired phone number to modify.

    Scroll to the Messaging section, and then modify the phone number’s routing.When finished, click Save.

    CONFIGURE WITH: TwiML App

    TWIML APP: Select the previously saved TwiML App.

    NOTE: A new app may not be immediately visible; try refreshing the page if you don't see it at first.

    Respond with a Messaging Service

    Access the Active Numbers page in Console.

    Click the desired phone number to modify.

    Scroll to the Messaging section, and then modify the phone number’s routing.When finished, click Save.

    CONFIGURE WITH: Messaging Service

    TWIML APP: Select the previously saved Messaging Service.

    NOTE: A new service may not be immediately visible; try refreshing the page if you don't see it at first.

    Respond with Twilio Flex

    Twilio Flex requires some additional phone number configuration steps. For full details, please see .

    View Article
  • You can create TwiML Apps to be used with your custom Twilio applications via Console, or the REST API. TwiML Apps point to a webhook, and can be used just like a normal webhook URL. They are also a requirement for Twilio Client capability tokens.

    Create a TwiML App in Console

    Login to your project at www.twilio.com/console.

    Click eitherProgrammable Voice Configuring Phone Numbers to Receive and Respond to SMS and MMS Messages >TwiML> TwiML Apps or Programmable Messaging> Tools > TwiML Apps.

    Click the red + sign icon, or Create new TwiML App.

    Fill out the TwiML App form as desired, and then click Save.

    Properties - Friendly name: Enter the desired name for your app

    Voice - Request URL: Enter the URL for your voice app webhook, and then select HTTP POST or GET. Click Show optional settings to add a fallback url, callback url, or enable caller name lookups.

    Messaging - Request URL: Enter the URL for your sms app webhook, and then select HTTP POST or GET. Click Show optional settings to add a fallback url or callback url.

    Create a TwiML App via the REST API

    TwiML apps can also be created via an HTTP POST request to the Applications resource. For full details, including sample code, please see our API documentation for the Applications Instance resource.

    Configure a TwiML App on a Twilio Phone Number

    A TwiML app can also be configured on a Twilio phone number for handling incoming calls, faxes, or messages. For complete instructions, please see the appropriate article:

    Configuring Phone Numbers to Receive Calls

    View Article
  • Twilio offers Voice and SMS enabled phone numbers globally. These phone numbers are either generally available (GA) or in Beta. In addition, you can request early access to the latest numbers added to Twilio in Preview before they're available via the Console or API.

    You can view regulatory requirements for all Twilio phone numbers at this page.

    Dual Functionality (Voice and SMS enabled) Phone Numbers

    Twilio phone numbers from the following countries have dual functionality and can be used to make/receive phone calls as well as to send/receive messages.International permissions can be enabled for Voice and SMS respectively.

    Country

    Beta/GA

    Phone Number

    Type

    Domestic

    Calls Only

    Domestic

    SMS Only

    Australia

    GA

    Mobile

    Yes

    Yes

    Belgium

    GA

    Mobile

    No

    Yes

    Canada

    GA

    Local

    No

    No

    Chile

    Preview

    Local

    No

    Yes

    Chile

    Preview

    Geo - Local

    Yes

    Yes

    DenmarkNOW IN BETA

    Beta

    Mobile

    No

    No

    Germany

    GA

    Mobile

    No

    No

    Israel

    GA

    Mobile

    No

    No

    Puerto Rico

    GA

    Local

    No

    No

    South AfricaNOW IN BETA

    Beta

    Mobile

    No

    Yes

    United Kingdom

    GA

    Mobile

    No

    No

    United Kingdom

    GA

    Local

    No

    No

    United States

    GA

    Local

    No

    No

    Voice Enabled Only Phone Numbers

    Twilio phone numbers from the following countries are able to make and receive voice calls. International dialing can be enabled from the global permissions page for Voice.

    Country

    Beta/GA

    Phone Number

    Type

    Domestic

    Calls Only

    AlgeriaNOW IN GA

    GA

    National

    No

    Argentina

    GA

    Local

    Yes

    Australia

    GA

    Local

    No

    Barbados

    GA

    Local

    Yes

    Belgium

    GA

    Local

    No

    Belgium

    Preview

    National

    No

    Benin

    GA

    Mobile

    No

    Bosnia and HerzegovinaNOW IN GA

    GA

    National

    Yes

    Brazil

    GA

    Local

    No

    Bulgaria

    GA

    Local

    No

    Burkina Faso

    Preview

    Local

    No

    Cambodia

    Preview

    Local

    No

    Cayman Islands

    GA

    Local

    No

    Chile

    GA

    Local

    No

    Colombia

    GA

    Local

    No

    Costa Rica

    Preview

    National

    No

    Cyprus

    GA

    Local

    No

    Czech Republic

    GA

    Local

    No

    Czech Republic

    GA

    National

    No

    Dominican Republic

    GA

    Local

    No

    EcuadorNOW IN GA

    GA

    Local

    No

    El Salvador

    GA

    Local

    No

    Estonia

    GA

    Local

    No

    Estonia

    GA

    National

    No

    Finland

    GA

    Local

    No

    Finland

    GA

    National

    No

    France

    GA

    Local

    No

    Ghana

    GA

    Mobile

    No

    Greece

    GA

    Local

    No

    GrenadaNOW IN GA

    GA

    Local

    No

    Hungary

    GA

    Local

    No

    Iceland

    GA

    Local

    No

    Indonesia

    GA

    Local

    No

    Isle of Man

    Preview

    Mobile

    No

    Israel

    GA

    Local and National

    No

    Jamaica

    GA

    Local

    No

    Japan

    GA

    National

    No

    Kenya

    GA

    Local

    No

    Latvia

    GA

    Local

    No

    Lithuania

    GA

    Local

    No

    Macau

    GA

    Mobile

    No

    Madagascar

    Preview

    Mobile

    Yes

    Mali

    Beta

    Local

    No

    Malta

    GA

    National

    No

    Malaysia

    GA

    Mobile

    Yes

    Mauritius

    GA

    Mobile

    No

    Mexico

    GA

    Local

    No

    Moldova

    Preview

    Local

    No

    New Zealand

    GA

    Local

    No

    NicaraguaNOW IN BETA

    Beta

    Local

    No

    Pakistan

    Preview

    Local

    No

    Panama

    GA

    Local

    No

    Peru

    GA

    Local

    No

    Philippines

    GA

    Local

    No

    Poland

    GA

    Local

    No

    Portugal

    GA

    National

    No

    Romania

    GA

    Local

    No

    SingaporeNOW IN BETA

    Beta

    National

    No

    Slovakia

    GA

    Local

    No

    Slovenia

    GA

    Local

    No

    South Africa

    Beta

    Local

    No

    South AfricaNOW IN BETA

    Beta

    National

    No

    South Korea

    Preview

    National

    Yes

    Spain

    GA

    Local

    No

    Spain

    GA

    National

    No

    Sri Lanka

    Preview

    Mobile

    Yes

    SudanNOW IN BETA

    Beta

    Local

    No

    Sweden

    GA

    Local

    No

    Sweden

    GA

    National

    No

    Switzerland

    GA

    Local

    No

    TaiwanNOW IN BETA

    Beta

    Local

    No

    Tajikistan

    Preview

    Local

    No

    Thailand

    GA

    Local

    Yes

    Trinidad and Tobago

    GA

    Local

    No

    Tunisia

    Beta

    National

    No

    Turkey

    Preview

    National

    No

    Uganda

    Beta

    National

    Yes

    Ukraine

    Preview

    National

    Yes

    United Kingdom

    GA

    Local and National

    No

    Uruguay

    Preview

    Local

    Yes

    Venezuela

    Preview

    Local

    Yes

    Vietnam

    Beta

    Local

    No

    SMS Enabled Only Phone Numbers

    Twilio phone numbers from the following countries are able to send and receive SMS. Some of these numbers are both domestic and global SMS enabled, while some can only be used to send domestic messages.International SMS permission can be enabled here.

    Country

    Beta/GA

    Phone Number

    Type

    Domestic SMS

    Only

    Australia

    GA

    Mobile

    Yes

    Austria

    GA

    Mobile

    No

    Bangladesh

    Preview

    Local

    Yes

    Chile

    GA

    Mobile

    Yes

    Czech Republic

    GA

    Mobile

    Yes

    DenmarkNOW IN BETA

    Beta

    Mobile

    No

    Estonia

    GA

    Mobile

    No

    FinlandNOW IN BETA

    Beta

    Mobile

    No

    Guatemala

    Preview

    Mobile

    Yes

    Hong Kong

    GA

    Mobile

    Yes

    Hungary

    GA

    Mobile

    No

    Israel

    GA

    Mobile

    No

    Latvia

    GA

    Mobile

    No

    Lithuania

    GA

    Mobile

    Yes

    Malaysia

    GA

    Mobile

    Yes

    Mexico

    Preview

    Mobile

    No

    Netherlands

    GA

    Mobile

    No

    Philippines*NOW IN BETA

    Beta

    Mobile

    Yes

    Poland

    GA

    Mobile

    No

    Portugal

    GA

    Mobile

    No

    Singapore

    Beta

    Mobile

    No

    Slovakia

    Preview

    Mobile

    No

    South KoreaNOW IN BETA

    Beta

    Mobile

    Yes

    Switzerland

    GA

    Mobile

    No

    Spain

    GA

    Mobile

    No

    TaiwanNOW IN BETA

    Preview

    Mobile

    Yes

    United Kingdom

    GA

    Mobile

    No

    Note: While global SMS enabled numbers can generally be used to reach other international destinations, using such numbers to reach +1 destinations (US and Canada) is not supported. You may receive 400 response with error 21612 when attempting to do so.

    *Philippines Mobile: Users must opt-in to receive messages. Peer-to-peer messages prohibited.

    Toll FreePhone Numbers

    Twilio offers toll free phone numbers from the following countries. These numbers are designed to be used for inbound voice calls, are domestically reachable only, and are not accessible from payphones. The exception is US Toll Free numbers which can be reached from Canada and include SMS capabilities.

    Country

    Beta/GA

    Phone Number

    Type

    Domesticcalls

    Only

    Argentina

    Beta

    Toll Free

    Yes

    Australia *

    GA

    Toll Free

    Yes

    Austria

    Beta

    Toll Free

    Yes

    Belarus

    Beta

    Toll Free

    Yes

    Belgium

    Preview

    Toll Free

    Yes

    Botswana

    Beta

    Toll Free

    Yes

    Bulgaria

    Beta

    Toll Free

    Yes

    Brazil

    Beta

    Toll Free

    Yes

    Canada

    GA

    Toll Free

    Yes

    Chile

    Preview

    Toll Free

    Yes

    Colombia

    Beta

    Toll Free

    Yes

    Costa Rica

    Preview

    Toll Free

    Yes

    Czech Republic

    Preview

    Toll Free

    Yes

    Denmark

    Beta

    Toll Free

    Yes

    Ecuador

    Preview

    Toll Free

    Yes

    Egypt

    Preview

    Toll Free

    Yes

    Finland

    Beta

    Toll Free

    Yes

    France

    Preview

    Toll Free

    Yes

    Hong Kong

    GA

    Toll Free

    Yes

    Hungary

    Preview

    Toll Free

    No

    IndiaNOW IN BETA

    Beta

    Toll Free

    Yes

    Indonesia

    Beta

    Toll Free

    Yes

    Ireland

    Beta

    Toll Free

    Yes

    Israel

    Beta

    Toll Free

    Yes

    Japan

    GA

    Toll Free

    Yes

    Jordan

    Preview

    Toll Free

    Yes

    Malaysia

    Beta

    Toll Free

    Yes

    Mexico

    Beta

    Toll Free

    Yes

    New Zealand

    GA

    Toll Free

    Yes

    PanamaNOW IN BETA

    Beta

    Toll Free

    Yes

    Paraguay

    Preview

    Toll Free

    Yes

    PeruNOW IN BETA

    Beta

    Toll Free

    Yes

    Philippines

    Beta

    Toll Free

    Yes

    Poland

    Beta

    Toll Free

    Yes

    Qatar

    Preview

    Toll Free

    Yes

    Romania

    Beta

    Toll Free

    Yes

    Saudi Arabia

    Preview

    Toll Free

    Yes

    Serbia

    Beta

    Toll Free

    Yes

    Singapore

    Preview

    Toll Free

    Yes

    Slovakia

    Beta

    Toll Free

    Yes

    South Africa

    Beta

    Toll Free

    Yes

    South Korea

    Beta

    Toll Free

    Yes

    Spain

    Beta

    Toll Free

    Yes

    Sri Lanka

    Preview

    Toll Free

    Yes

    Taiwan

    Beta

    Toll Free

    Yes

    Thailand

    Beta

    Toll Free

    Yes

    Uganda

    Beta

    Toll Free

    Yes

    United Kingdom

    GA

    Toll Free

    Yes

    United States

    GA

    Toll Free

    Yes

    Uruguay

    Preview

    Toll Free

    Yes

    Venezuela

    Beta

    Toll Free

    Yes

    * Toll Free (1800) and Shared Cost (1300) numbers available in Australia. Callers will bear some burden when calling Shared Cost numbers.

    The rest of the world..

    Twilio is in the process of providing phone numbers in more countries as quickly as we can. Each country has different regulations regarding the purchase and sale of telephone numbers, so we are not able to provide a timeline on when numbers in a specific country will be available.

    You can make outbound voice calls from any country in the world by validating the caller ID of a phone number you already own in that country.

    View Article
  • Porting is the transfer of a phone number between two telephone service providers on behalf of an end-user. The process involves providing the right documentation to prove ownership of the number as well as coordination between the existing provider and the new provider with regard to the number's porting date.

    When a port request is submitted to Twilio we will port both Voice and SMS by default. If you wish to leave SMS capabilities with the existing provider, please notify our porting team at [email protected] prior to your port's completion. If you wish to leave Voice capabilities with the existing provider and only use Twilio for SMS, please read more about our Hosted SMS product (developer preview) instead.

    View Article
  • Stuck Executions

    For Inbound Calls to a Studio Flow, occasionally an Execution will become stuck, remaining in active status until manually ended. A stuck Execution occurs when an inbound call has ended, but Studio is still waiting for a final webhook event to mark the Execution as complete.

    To avoid stuck Executions follow these best practices.

    Enable Concurrent Calls

    Concurrent Calls is a Studio Flow setting that allows the same Caller ID to have more than one active call in the same Flow at the same time, such as multiple calls from a call center or hotel. This setting is on by default for all new Flows.

    However, for older Flows (or copies of older Flows) created before October 1, 2018, Concurrent Calls is not enabled by default. If an Execution becomes stuck, and Concurrent Calls is not enabled for that Flow, future calls from that same number will be blocked and callers will hear an out-of-service message.

    Follow this guide to enable Concurrent Calls on older Flows.

    Set the Status Callback and Fallback URLs

    The most common cause of a stuck Execution is when Studio does not receive a final webhook from Programmable Voice that a call has ended. To address this, always set the Studio Flow Webhook URL for A Call Comes In, Call Status Changes, and the Primary Handler Fails fields on your Twilio phone number configuration.

    Follow this guide to configure your Twilio phone number for Incoming Calls.

    Answer Calls Quickly

    For most Flows, Studio answers calls immediately with no ringing. However, if the Flow is designed to delay answering and the caller hangs up while the call is still in ringing status, Studio is unable to answer the call properly, and it creates a stuck Execution.

    To avoid this, always answer an Incoming Call quickly with an immediate Say/Play widget as the first step in your Flow. If you need to do additional processing or data lookups via an HTTP Request or Run Function widget, add those after the Say/Play widget.

    delete any Executions that fall outside

    Note: Callers hear silence while HTTP Request and Run Function widgets are executing, so be sure they complete as quickly as possible.

    Manually Ending an Execution

    As long as Concurrent Calls is enabled for your Flow, stuck Executions have no negative side effects. However, if necessary, you can manually end them through Twilio Console or by deleting them via the REST API.

    To find stuck Executions in Twilio Console, filter your Execution logs to view only Active Executions. Stop any Executions that are obviously too old, typically those that were created more than 4 hours earlier.

    To find stuck Executions via the REST API, filter them by date/time and then your date/time range, typically those that were created more than 4 hours earlier.

    View Article
  • The Twilio cloud platform offers a number of useful communications solutions, but is mainly focused on developers. Due to this nature, many third party (non-Twilio) companies have built applications to streamline the experience for end users. In this article, you'll find helpful tips and policies for supporting third party applications and services.

    What Does "Third Party" Mean?

    We use the term "third party" to describe any application or service that utilized Twilio's services, but was built by another non-Twilio company. These products may be used to facilitate communications like phone calls, sending SMS/MMS messages, video calling, live chat, and more. Here are some common examples:

    CRMs like Agile,Zoho,vTiger CRM,Hubspot, etc.

    Automation and integration services like Zapier,Microsoft Flow,IFTTT, etc.

    Digital marketing services like ClickFunnels

    Photo Booth software like Social Booth, dslrBooth, Sparkbooth, etc.

    PBX and SBC hardware/software for SIP trunking like Asterisk, 3CX, Free PBX, etc.

    Cisco WiFi

    And more

    Please note thatthis is not an exhaustive list. If you had to download and/or purchase non-Twilio software, or are required to pay another non-Twilio service provider, then chances are you're using a third party product.

    What do third party applications commonly need to work with Twilio?

    In order to use these applications and services, you will likely need the following three pieces of Twilio-supplied information:

    A Twilio Account SID and Auth Token: The Account SID and project Auth Token serve as your API access credentials; you get these automatically when signing up for a Twilio account. Find them under "Project Info" in the Twilio Console.

    A Twilio phone number: Free with a trial account, but needs to be picked out. For help getting a number, see our article here.

    Please note that Elastic SIP Trunks require some addition configuration. For more information, please see our Elastic SIP Trunking setup guide.

    General Troubleshooting

    If you are using a third party application and you are experience problems like call quality issues, dropped calls, undelivered SMS messages, dropped video calls, etc., you may be able to troubleshoot some of these issues yourself.

    If you have your own Twilio account, you can login to Console, and check a number of locations for possible issues:

    Check the Console Dashboard to make sure your account is active and has a positive balance.

    Check Console Settings to verify you're using the correct live account Account SID and Auth Token credentials.

    Check the Phone Numbers page, and make sure you're using a valid phone number on your account, with the correct formatting, and that you have valid webhooks for receiving calls and SMS messages.

    Check the Debugger to look for recent issues and errors on your account.

    Check the Call logs and/or SMS logs to verify your requests were received and processed.

    Check Twilio's Status page to make sure there are no issues our outages affecting your service.

    If you do not manage your own Twilio account, we recommend that you start by contacting the support team of the third party application. They will then be able to contact Twilio support directly with information about their software that is not available to end users, which will aid in our diagnosis and resolution of the problem.

    Further Support

    Outside of your Twilio account status and service troubleshooting, our help is likely to be limited. We are unable to provide support for any third party applications or products for issues like account status, and instructions on how to use or configure these products. Since you're a Twilio customer, and we want you to be successful, we must refer you to the application or service vendor to help answer these questions. They are in the best position to provide you timely and accurate information about the use and configuration of their application.

    View Article
  • There are two types of phone numbers listed within your Twilio project, verified phone numbers and Twilio phone numbers. Each has different acquisition methods, costs, and capabilities through Twilio. Please read on for full details.

    Twilio Phone Numbers

    Acquisition: Twilio phone numbers must be purchased through Twilio's Console site or the REST API. Twilio will operate this number on your behalf.

    Cost: Twilio has a regular recurring charge for this number, and will bill your account monthly.

    Capabilities: Twilio phone number capabilities are visible before you purchase a phone number. Once you own a Twilio number on your project, the capabilities will be listed in the Console Manage Numbers page.

    Verified Phone Numbers

    Acquisition: A verified phone number is one that you have acquired outside of Twilio, like the number for your wireless phone, or the landline in your home or office. This number has not been ported into Twilio, and will continue to be serviced by the original provider. To configure a verified phone number on your Twilio Project, please see Adding a Verified Outbound Caller ID With Twilio.

    Cost: Twilio does not charge for this number, your original provider will continue billing for it as normal.

    Capabilities: Verified phone numbers can only be used with Twilio as a Caller ID for placing outbound calls.

    Please note: Outgoing SMS and MMS messages are not supported. Incoming calls and messages to verified numbers will continue to route through your original provider.

    View Article
  • An application SID is the unique identification for a TwiML App; a collection of urls and configuration options. Inside a TwiML App, you can specify URLs for handling your Twilio Programmable Voice, Fax, and Messaging communications, as well as URLs for status callbacks and fallbacks. TwiML Apps are required for using Twilio Client in-browser calling.

    Using TwiML Apps instead of individual URLs can also make managing multiple phone numbers easier. Users can simply update URL(s) in a TwiML App, rather than having to update the configuration for each of your phone numbers.

    You can create and manage TwiML Apps from the voice and SMS sections ofTwilio Console:

    https://www.twilio.com/console/voice/twiml/apps

    https://www.twilio.com/console/sms/runtime/twiml-apps

    For help managing applications via the REST API, see REST API: Applications (Twilio Docs).

    View Article
  • The Twilio for WhatsApp API supports sending and receiving media messages with WhatsApp users. The API works exactly like sending MMS messages with Twilio, however there are some rules and restrictions that are unique to WhatsApp.

    Usage Example

    To send a media message with WhatsApp, include the MediaUrl parameter with your HTTP POST request. This is exactly like sending an MMS message with Twilio Programmable SMS.

    Here’s an example cURL script:

    curl -XPOST https://api.twilio.com/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages.json \

    --data-urlencode "To=whatsapp:+13105555555" \

    --data-urlencode "From=whatsapp:+12125551234" \

    --data-urlencode "Body=Thanks for contacting me on WhatsApp! Here is a picture of an owl." \

    --data-urlencode "MediaUrl= https://demo.twilio.com/owl.png " \

    -u 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:your_auth_token'

    This example will contact the WhatsApp destination (310) 555-5555from the sender (212) 555-1234 via the WhatsApp app, and includes the image owl.png, and the following message:

    Thanks for contacting me on WhatsApp! Here is a picture of an owl.

    To make this script work for you, make the following updates, and then paste it into a terminal window:

    Line 1update with your Account SID.

    Line 2 update with a valid destination.

    Line 3 update with a valid WhatsApp sender number.

    Unless your Twilio number has been enabled for WhatsApp in production, use your WhatsApp Sandbox number for sending messages.

    Line 4update with your desired message.

    Note: A free-form message like this is only possible during a 24 hour user-initiated session. Unprompted messages have template requirements. For more information, see the Rules and Limitations section below.

    Line 5 update with a valid media file url.

    Line 6 update with your Account SID and Auth Token.

    For full details, including sample code from our Helper Library SDKs, please see Twilio API for WhatsApp (Twilio Docs).

    Rules and Limitations

    You can send media messages to any WhatsApp user who has sent you a message within the past 24 hours.

    If a user has not sent a message to your WhatsApp number within the past 24 hours, you cannot send them a media message through WhatsApp. This means media files are not allowed in pre-approved templates.

    This is because WhatsApp only allows sending media on session messages. WhatsApp divides outgoing messages into two categories: template messages and session messages. Template messages are the initial messages you send to users, and must follow a pre-approved template cleared by WhatsApp. Once a user starts a “session” by sending you a message, you can exchange free-form messages with them for 24 hours. For more detail, please see Rules and Best Practices for WhatsApp Messaging on Twilio.

    Supported File Types

    The Twilio API for WhatsApp supports sending and receiving images, audio, and PDF files. The following formats are currently supported:

    Images

    JPG, JPEG, PNG

    Audio

    MP3, OGG, AMR

    Documents

    PDF

    Video

    MP4 (with H.264 video codec and AAC audio)

    You can send media messages up to 5 MB in size. At this time, Twilio will not transcode media for outgoing WhatsApp messages, so if you need to send a media object that is larger than 5 MB, please reduce the file size before sending it to Twilio.

    Notice: MP4 video files which do not include an audio track (silent videos) may fail with error 63005, due to a bug on WhatsApp's side. This bug persists as of February 2020. To work around this issue, please add an audio track (with AAC codec) to any MP4 video sent via WhatsApp. The audio track can contain silence.

    Troubleshooting

    If a WhatsApp media message was not delivered, there are a few likely explanations:

    The media message was not sent during an active session with the user (see Rules and Limitations above).

    Twilio encountered an error when trying to get your media.

    Your message including media is larger than 5 MB.

    The content-type headers of your media attachment do not match the file extension (for example, content-type is image/jpg but file extension is .png).

    Pricing

    Adding a media attachment to a message does not affect the message price. Media messages have the same pricing as a standard Session message to the same destination country. For more information, see Twilio API for WhatsApp pricing.

    Related Topics

    Getting Started with Twilio for WhatsApp (Beta)

    Troubleshooting the Twilio Sandbox for WhatsApp (Beta)

    Troubleshooting Undelivered Twilio for WhatsApp Messages

    View Article
  • Twilio makes HTTP requests to your server to fetch your app's TwiML instructions. Some users prefer to know which IP address the request from Twilio is coming from in order to open up specific ports in a firewall. However, due to the fluid nature ofour cloud architecture, we don't have a set range of IPs that requests are sent from or know in advance what they will be.

    Because Twilio's requests will be coming from different IP addresses, we instead recommend that you validate that a request came from Twilio by other means. Please see our documentation on securing your application for more details.

    If the inability to have a request come from a static IP address is a serious concern for your enterprise, please contact our sales department to discuss your security needs and other options which might be available.

    Notice: Twilio will be expanding our media IP Pool in Fall of 2019. Elastic SIP, SIP Interface, Client, and Mobile Voice customers will want to take action now to avoid service disruption. For full details, please see Notice: Twilio SIP and Client Voice Media IP Pool Expansion (September 2019).

    See also: All About Twilio IP Addresses

    View Article
  • Changing the "From" number or Sender ID for outgoing SMS messages can be accomplished by changing the From parameter in your API requests.

    Please note, if you are sending messages using a Twilio number from a different country as your recipients, the Sender ID shown on the user's device may be different than your Twilio number. For more info, see Why do some SMS recipients see a Sender ID that is not my Twilio number?

    Here's how to change the From parameter you use through Twilio:

    Twilio Phone Numbers and Hosted SMS numbers

    Any SMS-enabled Twilio phone number or Hosted SMS number on your account can be used to send SMS messages. To use a phone number for sending messages, input your phone number in the From parameter of your API request using E.164 formatting.

    Here’s an example cURL script - notice the From parameter updated in line 4. For full details, please see our Programmable SMS REST API documentation.

    curl -XPOST https://api.twilio.com/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages.json \

    -d "Body=Hello from my phone number" \

    -d "To=+12685551234" \

    -d "From=+12685555555" \

    -u 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:your_auth_token'

    SMS support for your number can be checked via a number of methods:

    Console: SMS support for Twilio Phone Numbers can be viewed at www.twilio.com/console/phone-numbers. Supported numbers will have an SMS icon under the CAPABILITIES heading.

    API: A GET request to the IncomingPhoneNumbers API Resource will also return SMS support information for your Twilio Phone Numbers. Our response will include a Capabilities property with boolean true/false values for SMS and MMS capabilities.

    Note: You can not spoof messages from your own cell phone number. The From parameter can only display a Twilio number on your project, or an Alphanumeric Sender ID (where available).

    Alphanumeric Sender IDs

    An alphanumeric sender ID of up to 11 characters can be used for sending messages to all supported countries where pre-registration is not required. To use an alphanumeric sender ID for sending messages, input your ID in the From parameter of your API request.

    Here’s an example cURL script - notice the From parameter updated in line 4. For full details, please see our Programmable SMS REST API documentation.

    curl -XPOST https://api.twilio.com/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages.json \

    -d "Body=Hello there" \

    -d "To=+12685551234" \

    -d "From=MyCompany" \

    -u 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:your_auth_token'

    If the country you want to send to requires Alpha Sender Pre-Registration, you will not be able to use this method. To register an Alphanumeric Sender ID to that country, please submit your request by completing this registration form.

    Note: Alphanumeric Sender ID messages are one-way only, it is not possible to reply to messages sent from Alpha Sender IDs. For full details, please see our article for Getting started with Alphanumeric Sender ID.

    Twilio Short Codes

    Short codes send Twilio Programmable SMS messages in the same way. To use a short code for sending messages, input your short code number in the From parameter of your API Request. Note that short codes do not have a leading plus sign or country code, and should be formatted exactly as they appear on Twilio.

    Here’s an example cURL script - notice the From parameter updated in line 4. For full details, please see our Programmable SMS REST API documentation.

    curl -XPOST https://api.twilio.com/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages.json \

    -d "Body=Hello from 123456" \

    -d "To=+13105551234" \

    -d "From=123456" \

    -u 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:your_auth_token'

    Note: Short codes have different throughput options and purchase requirements than standard Twilio phone numbers. For full details, please see our article What is a short code.

    View Article
  • Your test credentials can be found underyour Project > Project Settings > API Credentials next to your LIVE Credentials.

    Learn more about Test Credentials.

    The Test Account SID and Test Auth Token are to be used with Twilio’s Magic Numbers to test your application's REST API requests. When using these test credentials, requests will be made to Twilio's API, responses will be returned normally, but no action will taken by Twilio.

    View Article
  • When you create a new TwiML Bin in the Console we create a unique URL that you can use to reference that TwiML Bin. This URL can be used to configure webhooks for Voice or SMS applications. When a request comes in for a TwiML Bin, we make sure that request is signed properly. This mechanism exists to protect the content of your TwiML Bins from others. If you need to review the content of a TwiML Bin, you can view your list of TwiML Bins and click on the one you’d like to review.

    If you need to access your TwiML Bin URL outside of Twilio, you have the option of signing the HTTP request. Below isan example of a Node.js script that does this. You would invoke this script by running:

    node script.js https://handler.twilio.com/twiml/EHxxx

    const crypto = require('crypto')

    , request = require('request')

    const url = process.argv[2] + '?AccountSid=' + process.env.TWILIO_ACCOUNT_SID

    const twilioSig = crypto.createHmac('sha1', process.env.TWILIO_AUTH_TOKEN).update(new Buffer(url, 'utf-8')).digest('Base64')

    request({url: url, headers: { 'X-TWILIO-SIGNATURE': twilioSig }}, function(err, res, body) {

    console.log(body)

    })

    Where your TwiML BinURL comes in handy is when you’d like to reference this TwiML Bin in another TwiML document. For instance, let’s say that you’d like to customize a “good-bye” message when a call in completed. You might construct a TwiML Bin that looks like this:

    <?xml version="1.0" encoding="UTF-8"?>

    <Response>

    <Say>

    Good Bye

    </Say>

    </Response>

    Let’s say that the URL for this TwiML Bin was https://handler.twilio.com/twiml/EHxxx. Now, you can reference this TwiML Bin when you construct the TwiML document to place a call:

    <?xml version="1.0" encoding="UTF-8"?>

    <Response>

    <Dial action="https://handler.twilio.com/twiml/EHxxx">

    +180055512121

    </Dial>

    </Response>

    View Article
  • Twilio provides its customers with a Role Based Access Control (RBAC) feature to limit each user's access and capabilities in Console. Customers can use this feature to secure their Twilio investments by limiting the Console access for their projects.

    Each Twilio project has only one owner; defaulting to the email account originally used to setup the account. The owner has full permissions for your project, butadditional users may be added to your project with varying levels of permissions. Each new user needs to be assigned one of the following roles:

    Administrator: Full access to invite and revoke access for new users, see billing history and make changes, and change project settings.

    Developer: Access to only the required project details for developing with Twilio - API credentials, phone numbers, development tools, logs, and usage.

    Billing Manager: Access to only the required project details for handling billing requests - logs, usage, and billing history and settings.

    Support: Access to only logs and usage.

    Notice: The Support role is not available on all projects.

    Below is a table of the the permissions each user may have access to based on their role:

    Administrator

    Developer

    Billing Manager

    Support

    API Credentials

    X

    X

    Manage Numbers

    X

    X

    Dev Tools

    X

    X

    Logs

    X

    X

    X

    X

    Usage

    X

    X

    X

    X

    Billing History & Settings

    X

    X

    Project Settings

    X

    User Management

    X

    View Article
  • Each new call from Twilio must be sent with a separate API call. To initiate calls to a list of recipients, you must make a REST API request for each party you would like to call. You can build an array of the different recipients and iterate through each number.

    View Article
  • Each new SMS message from Twilio must be sent with a separate REST API request. To initiate messages to a list of recipients, you must make a request for each number to which you would like to send a message. The best way to do this is to build an array of the recipients and iterate through each phone number.

    View Article
  • Twilio Voice is designed to enhance and augment person to person communications. You may not make or receive unsolicited phone calls, use Twilio for Use cases such as unsolicited marketing (aka spam) or emergency services. These use cases violate Twilio's Acceptable Use Policy and are not allowed.

    View Article
  • A Twilio app can allow users to have SMS conversations with other users, just like they would have normally on their phone, while still keeping your app involved in the conversation. There are several strategies for achieving this, but we think that the following is the cleanest and easiest to manage technique.

    The Scenario

    Two users, "Monkey" and "Unicorn" want to be able to send SMS messages back and forth without exposing their real phone numbers to the other user.

    First, we will buy a Twilio number. Next we set up our Twilio application so that when Monkey sends an SMS to that particular Twilio number, it forwards the message to Unicorn. We also need to specify in the app's logic that When Unicorn replies to that number, the reply should go to Monkey.

    Using this same logic, we can add more Twilio numbers and allow SMS messaging between Monkey and other users, like her friends Pigeon and Owl. When Monkey sends messages to Number A, those messages are forwarded to Unicorn. If Pigeon sends an SMS to Number B, the application realizes that the message is meant for Monkey. If Owl sends a message to Number C, the application knows to forward the message to Monkey.

    Scaling the Concept

    But wait! In order for this to work, wouldn't you need thousands of numbers?! One for each pair of friends? Well, not exactly.

    While Monkey and Unicorn only ever use a single number to forward their SMS messages to each other, other pairs of friends can use that same number to message each other because the application knows that if the Unicorn sends an SMS message to number A it is meant for Monkey, but if Owl sends an SMS message to number A, that message is meant for Laser Cat.

    Scaling this concept will require multiple Twilio numbers, but you will only ever need to have as many numbers as people who a single user can contact. Therefore, if you limit every user to 100 friends in their "address book", you would only ever need 100 numbers, even if you had 100,000 users.

    View Article
  • Just like SMS, when Twilio receives an MMS on your Twilio number, it makes a synchronous HTTP request to the message request URL configured for that number, and it expects to receive TwiML in response. In addition to the regular SMS parameters, the "MediaContentType" and"MediaUrl" parameters will also be sent. Since there can be up to 10 images in one MMS, the "MediaUrl" parameter is structured as "MediaUrl0", "MediaUrl1", "MediaUrl2" and etc. In PHP, for example, you can use:

    $_REQUEST['MediaUrl0']

    to retrieve the first image. To learn more, check out our documentation here.

    View Article
  • Twilio offers users a number of methods for passing custom information in HTTP query strings and SIP URIs. Please read on for more details.

    TwiML

    If you have custom headers or tracking details youwant associated with yourrequests, youcan pass the details in the voice request URL. Then, when the API call is answered, youwill receive a callback to their server with those details.

    For example, if you have two custom headers, let's call themcustomParameterandcustomValue, youwould construct the voice request URL like this:

    https://website.com/twiml.php?customParameter=xxxxxxxxx&customValue=true

    Note: Twilio's request to this URL must still be responded to with valid TwiML call processing instructions.

    <Dial><Sip> TwiML

    Any SIP headers can be sent by appending them to the end of the <Sip> TwiML noun URI with the X-prefix.

    For example, you could configure

    <Dial><Sip>sip:[email protected]?X-customHeader1=value1&X-customHeader2=value2</Sip></Dial>

    to sendX-customHeader1 and X-customHeader2 onall originated calls.

    You can send multiple params and value as part of the sameX-header

    For example, you could configure

    <Dial><Sip>sip:[email protected]?X-customName=Bob\%2CShield\%2BTitle\%2DManager&X-otherHeader=true</Sip></Dial>

    UUI (User-to-User Information) header can be sent without prependingX-

    <Dial><Sip>sip:[email protected]?User-to-User=1234\%2Bencoding\%2Dhex&X-otherHeader=true</Sip></Dial>

    For more details, see below...

    Sending SIP X-Headers

    Receiving SIP X-Headers

    Custom Headers

    Client (JavaScript)

    Twilio.Device.connect() has an optionalparamsargument which allows for a JavaScript object to be passed to the application as POST/GET parameters.

    For example, the following code will pass the paramsapp=Supportandlocation=Seattleto the Twilio application associated with this Device's capability token.

    var connection = Twilio.Device.connect({ app:"Support", location:"Seattle"});

    To deliverparameters to a Client instance using version 1.6 or later, use the <Parameter> noun of the <Client> verb and these parameters will be added toConnection.customParameters. For example:

    <?xml version="1.0" encoding="UTF-8"?>

    <Response>

    <Dial>

    <Client>

    <Identity>alice</Identity>

    <Parameter name="foo" value="bar"/>

    <Parameter name="baz" value="123"/>

    </Client>

    </Dial>

    </Response>

    device.on('incoming', connection => {

    assert.equal(connection.customParameters.get('foo'), 'bar');

    assert.equal(connection.customParameters.get('baz'), '123');

    });

    Note: The following restrictions apply to the Parameter noun:

    Parameter name must be a string, up to 32 bytes.

    Parameter value must be a string, up to 128 bytes.

    Up to 8 parameters can be sent per <Dial>.

    Client 1.x/2.x (Mobile)

    There is no method to pass custom information via mobile SDK version 1.x/2.x on Android or iOS.

    Programmable Voice SDK Android 3.0 (Mobile)

    Custom parameters can be addedtoCallInvitevia thegetCustomParamaters()method:

    <?xml version="1.0" encoding="UTF-8"?>

    <Response>

    <Dial answerOnBridge="false" callerId="client:alice">

    <Client>

    <Identity>bob</Identity>

    <Parameter name="caller_first_name" value="alice" />

    <Parameter name="caller_last_name" value="smith" />

    </Client>

    </Dial>

    </Response>

    callInvite.getCustomParameters()returns a map of key-value pair passed in the TwiML.

    "caller_first_name" -> "alice"

    "caller_last_name" -> "smith"

    Programmable Voice SDK iOS 3.0 (Mobile)

    Custom parameters can be added using thecustomParametersproperty ofTVOCallInvite.

    <?xml version="1.0" encoding="UTF-8"?>

    <Response>

    <Dial callerId="client:alice">

    <Client>

    <Identity>bob</Identity>

    <Parameter name="caller_first_name" value="alice" />

    <Parameter name="caller_last_name" value="smith" />

    </Client>

    </Dial>

    </Response>

    callInvite.customParameters:

    {

    "caller_first_name" = "alice";

    "caller_last_name" = "smith";

    }

    View Article
  • Twilio projects can be closed manually from Console at any time. This guide covers everything you need to know for cancelling your Twilio service, and refunding any remaining balance on your project.Continue reading for an explanation of how this process works, and what to expect.

    Important information

    Closing an upgraded Twilio project instantly triggers the following changes:

    Only the OWNER or ADMINISTRATOR user roles can close a Twilio project.

    Your project is permanently closed, and can't be reopened.

    Your project and any project-owned subaccounts will immediately stop working:

    You will no longer be able to successfully submit API requests

    You will no longer be able to receive or respond to calls and messages

    Any Authy of Verify applications will no longer function.

    All project and project-owned subaccount data will be automatically be deleted in 30 days.

    Notice: Users who want to discontinue use of Twilio, but keep their project and data accessible, can manually perform a "soft close". This is achieved by releasing and/or cancelling all phone numbers and subscriptions, essentially putting the project into a "dormant" state. This process allows users to retain access to their project data (including usage history, Functions, Assets, Studio Flows, etc.), with the option to return to Twilio in the future. For full details, see Stop Recurring Charges.

    Closing a project doesn't mean that we close your user account. You'll still be able to login, and can create a new project under this login.Any other pre-existing Twilio projects that you have will also remain intact. If you want to delete your user account, please contact Twilio support.

    Close your project

    Access the Project Settings page in Console.

    Click Authenticate to make changes at the bottom of the screen.

    positive balance

    Enter your password, and then click Verify to authenticate..

    Click Close Project at the bottom of the screen.

    Select the desired options to continue:

    Upgraded project: Select "DELETE ALL PROJECT DATA AND SETTINGS", and then click Continue.

    Trial project:Check each box to acknowledge, and then click Close Project.

    Refund your balance

    When closing an upgraded Twilio project with a, we will automatically begin processing a full refund of your remaining balance. Please note, this process may take up to 10 business days.

    Since Trial projects don't have a user-supplied balance, Twilio does not refund any remaining positive balance when they are closed.

    View Article
  • The Twilio Client JavaScript SDK uses WebRTC for real-time communications to power browser-based communications. For the most current compatibility list of desktop and mobile browsers, see Twilio Client JS SDK: Supported Browsers (Twilio Docs).

    Notice: In addition to mobile browser support, we also offer the Twilio Programmable Voice SDKs for developing native Android and iOS apps.

    View Article
  • Twilio Studio allows you to drag and drop widgets to build a number of different Programmable Messaging flows. Here are steps for creating a simple SMS message forwarding flow, and configuring it for use on your Twilio number.

    Notice: At this time, Studio does not support forwarding SMS to an email address. For examples of non-Studio options for forwarding to email, please see our article Forwarding SMS Messages to your Email Inbox.

    Create an SMS Message Forwarding Flow

    Access the Studio Dashboard in Console.

    Click the + sign icon Console to create a new Studio flow.

    Enter the desired name for your flow, and then click Next.

    Select "Start from scratch", and then click Next.

    From the "Widget Library" on the right, drag and drop a Send Message widget into the flow.

    Click and drag the Trigger widget’s Incoming Message lead to connect it to the Send Message widget.

    Click the Send Message widget to display the widget's options on the right. Enter the following in the MESSAGE BODY field:

    NEW MESSAGE FROM: {{trigger.message.From}}

    BODY: {{trigger.message.Body}}

    In the SEND MESSAGE widget options, scroll to and click to expandMESSAGING & CHAT CONFIG. Enter the desired destination forwarding number in the SEND MESSAGE TO field, and then click Save.

    Note: We recommend using E.164 formatting for this number. Check our Lookup tool if you’re unsure what this should look like.

    Click Publish.

    Activate a Flow on a Twilio Number

    When your flow is published, it can then be configured to handle incoming phone calls or text messages for Twilio phone numbers that support these products. Here’s how to add your flow to a phone number:

    Access the Active Numbers page in .

    Click the desired phone number to modify.

    Scroll to the Voice & Faxsection, and then modify the phone number’s routing:

    ACCEPT INCOMING: Voice Calls

    CONFIGURE WITH: Webhooks, TwiML Bins, Functions, Studio, or Proxy

    A CALL COMES IN: Studio Flow

    DROP-DOWN MENU: Select the previously saved flow.

    NOTE: A new flow may not be immediately visible; try refreshing the page if you don't see it at first.

    Click Save.

    View Article
  • Twilio provides several tools for investigating the interaction between your application and Twilio, including the Debugger, Alerts, and Request Inspector in our Project Console site. These tools allow developers can use to quickly see how well their application is performing.

    Debugger

    The Debugger contains a detailed log of activity within your application. This log can help you dive deeper and and understand what Twilio resources were impacted and by whom. A detailed log, such as the one exposed via Events can be useful in understanding the root cause of a problem.

    Call Logs

    Alerts

    Alerts are flagged on specific Twilio requests that generate an error or warning. Calls and Messages with alerts are highlighted in red, making them easy to spot in your Call Logs and SMS Logs.

    Clicking the timestamp of an alerted call or message will give you a more details view of the alert flagged.

    Request Inspector

    The Request Inspector lists all requests made between Twilio and your application for a call. To view the Request Inspector, just access your, and click a recent call (Request inspector data is kept for 90 days after the call was created).

    You can also use the Request Replay feature to replay a request and see a side-by-side difference between the saved request and the new request. The replayed request is identical to the original; Twilio will send all the same header and request information.

    View Article
  • You've tried sending an SMS message, but it didn't arrive. Fear not! This article is designed to help you walk through troubleshooting steps to diagnose, and hopefully fix, the problem.

    Outbound API Message Requests

    When Twilio receives a valid API request to send an outbound SMS message, we return a 200 OK response, and create a record of the message in your logs. To validate that we successfully received and processed your request, check your Twilio project’s Programmable SMS logs for the outbound message record via either Console, or the REST API. If you aren't seeing a record of your message, then there was likely an incident, or an issue with with your API request.

    First, check the Twilio Status Page to see if an active incident could be causing your issues.

    Next, try sending your message again, and check for similar results. You can send your message via a REST API request, or through the API Explorer in Console. For an invalid request, Twilio returns a 400 Bad Request response, with an error code and message explaining what the issue is. This type of REST API error generally returns a 2XXXX error code. Here are the most common problems we see:

    Error 20003 : Be sure that you are using the correct Account SID and Auth Token. Please note that using the Test Credentials will produce a response indicating that the message has been sent, but the message will not actually be sent.

    Error 21408 : You need to enable SMS permissions for this country on the Global SMS Permissions page.

    Error 21606 : You are attempting to use a "From" number which is not capable of sending SMS messages to your "To" number. Two common reasons for this:

    You might be trying to send SMS from a phone number which is only enabled for voice. This list shows which Twilio phone numbers are SMS enabled. All other Twilio phone numbers are not capable of sending SMS messages.

    You might be trying to send SMS from a number you have verified with Twilio. Twilio will only allow you to do this with phone calls, not SMS. You can learn more here.

    Error 21610 : You are attempting to send a message to a number that has opted out of receiving messages using a STOP keyword.

    Error 21612. This error can have two explanations:

    The carrier you are sending to is not a supported carrier. Twilio supports most carriers worldwide, but there are still carriers which we do not yet support. To determine if Twilio supports a particular carrier, please search for the country on the SMS Pricing page and scroll to the section labeled "All SMS Pricing for..." If the carrier does not appear on that list, Twilio cannot send SMS messages to that carrier at this time.

    The "To" phone number is not properly formatted. We suggest all "To" numbers should use E.164 formatting to help ensure proper routing.

    If your error is not listed here, you can find the list of 2XXXX REST API errors along with instructions for resolving these issues in our API Errors and Warnings Dictionary.

    Messages Marked “Failed” or “Undelivered”

    These message statuses indicate Twilio has received a delivery receipt indicating that the message was not delivered. Check your message’s status and look for an error code in your Twilio project’s Programmable SMS logs via either Console, or the REST API. Failed or undelivered messages generally return a 30XXX error code. Here are the most common problems we see:

    Error 30008 "Message Delivery - Unknown error" : The destination carrier has returned a generic error message.

    Error 30005 "Message Delivery - Unknown destination handset" : The destination carrier is reporting the To number is unknown, or no longer in service.

    Error 30003 "Message Delivery - Unreachable destination handset" : The destination carrier is reporting the 'To' number is unreachable - the device is likely powered down, out of the service area, or may not accept your messages.

    Error 30007 "Message Delivery - Carrier Violation" : The destination carrier is filtering out your messages for delivery.

    Error 30004 "Message Delivery - Message blocked" : Your message has been blocked from reaching the destination.

    Error 30006 "Message Delivery - Landline or unreachable carrier" : The destination is a landline phone, or the destination carrier can't be reached.

    If your error is not listed here, you can find the list of 30XXX Messaging errors along with instructions for resolving these issues in our API Errors and Warnings Dictionary.

    Messages Marked "Sent" or "Delivered"

    These message status indicate Twilio has received a confirmation indicating the message was sent, or a delivery receipt indicating the message was sent or delivered. The first step to troubleshooting this issue is to attempt to replicate the problems. Attempt to send another test message to this user via a REST API request, or through the API Explorer in Console. Pay close attention to your request, and double check to verify you are attempting to send messages to the correct phone number in the correct E.164 format. If you see similar results, continue troubleshooting with the following checklist:

    Check the Twilio Status Page to see if an active incident could be causing your issues.

    Is the destination device powered on?

    Does the device have sufficient signal? If not power the device off, wait 30 seconds, and then power it back up.

    Is the device connected to the home carrier's network? We cannot guarantee message delivery on devices roaming internationally, or off-network.

    Can the device receive non-Twilio SMS?

    Can the device receive messages from another Twilio number ( non-Alphanumeric Sender ID ), or with a shorter one-segment ( non-concatenated ) body?

    Can other devices using the same mobile carrier receive your messages?

    If you can rule out all of the above issues, Twilio's Support team can help investigate what went wrong with delivering your message. Please collect 3 or more message SIDs in your SMS logs from the last 24 hours that show these same issues, and Open a support request.

    View Article
  • Incoming Twilio Programmable SMS Messages can be forwarded to an email inbox with just a few lines of code. Here are two examples to get you up and running quickly.

    Forward Incoming SMS Messages using Twilio Functions

    If you don't already have hosting for your code, Twilio Functions can be used to host your Node.js scripts. Our Dev team has put together a helpful guide showing how to use SendGrid in conjunction with Functions to forward messages to your email, complete with sample code. You can find the tutorial here: Forward incoming SMS messages to email with Node.js, SendGrid and Twilio Functions.

    Forward Incoming SMS Messages using Webhooks

    To host your own code as a Twilio webhook, you can use any language you like. The following example uses PHP. Here's what it takes to make this code work:

    Modify the code below to update the From and To email addresses.

    Publish this file to a Twilio-accessible URL on your web server.

    Update your Twilio Phone Number's webhook with your application's URL.

    <?php

    /**

    * This section ensures that Twilio gets a response.

    */

    header('Content-type: text/xml');

    echo '<?xml version="1.0" encoding="UTF-8"?>';

    echo '<Response></Response>'; //Place the desired response (if any) here

    /**

    * This section actually sends the email.

    */

    /* Your email address */

    $to = "[email protected]";

    $subject = "Message from {$_REQUEST['From']} at {$_REQUEST['To']}";

    $message = "You have received a message from {$_REQUEST['From']}. Body: {$_REQUEST['Body']}";

    $headers = "From: [email protected]"; // Who should it come from?

    mail($to, $subject, $message, $headers);

    Any of the parameters which are part of the Twilio Request can also be used.

    View Article
  • Every Twilio call has a status value which describes the current state of the call. The call status may change over the course of the call, and it's value is submitted to your server in realtime with each TwiML request Twilio makes to your server.

    Outbound Call Status Progression

    When placing outbound calls with the REST API this is a typical sequence of status values:

    Queued

    Twilio has received your request to create the call. All new calls are created with a status of queued.

    Initiated

    Twilio has dialed the call.

    Ringing

    The destination number has started ringing.

    In-progress

    The call has been connected, and the connection is currently active.

    Completed

    The connected call has now been disconnected. Completed calls will remain in this state in going forward.

    Notice: A completed call indicates that a connection was established, and audio data was transferred. This could be seen when a phone is answered by a person, an IVR phone tree menu, or even a voicemail. Completed calls, regardless of the outcome, are charged against your project balance.

    Final Call Statuses

    After a call has finished, the following final status options are possible:

    Busy

    Twilio dialed the number, but received a busy response.

    No-answer

    Twilio dialed the number but no one answered before thetimeout parameter value elapsed. This can be configured for each call, but by default is set to 60 seconds on outbound API calls, and 30 seconds on outbound <Dial> calls.

    Canceled

    Prior to being answered, an outbound call was cancelled via an HTTP POST request to the REST API, or an incoming call was disconnected by the calling party

    Failed

    Twilio's carriers could not connect the call. Possible causes include the destination is unreachable, or the number may have been input incorrectly.

    Notice: A call status of busy, no-answer, canceled, or failed will not be charged against your project balance. However, a completed parent or child call related to a call with these statuses would still be charged.

    Track Call Statuses

    If you want to track the status of your outbound calls, you can use the StatusCallbackEvent parameter to get notifications back to your application every time a call moves to a different status. For more information, please see our article Tracking the Status of an Outbound Call.

    View Article
  • To place a call, your application needs to make an HTTP POST request to Twilio’s Calls API resource with three required pieces of information; A recipient, a caller, and some TwiML Instructions for running your call.

    Recipient: The To parameter consisting of the desired destination phone number (using E.164 formatting ) for receiving this call.

    Caller: The From parameter consisting of a valid Twilio phone number, or a verified Caller ID (using E.164 formatting ).

    TwiML Instructions: One of the following to tell us where to request TwiML instructions -

    The Url parameter consisting of a web address that responds to our requests with TwiML.

    The ApplicationSidparameter consisting of a TwiML App SID containing a web address that responds to our requests with TwiML.

    Here’s an example cURL script:

    curl -XPOST https://api.twilio.com/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Calls.json \

    --data-urlencode "To=+13105555555" \

    --data-urlencode "From=+12125551234" \

    --data-urlencode "Url= https://demo.twilio.com/welcome/voice/ " \

    -u 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:your_auth_token'

    This example will place an outbound call from the sender(212) 555-1234(+12125551234) to the phone number (310) 555-5555(+13105555555), and then execute the TwiML script at https://demo.twilio.com/welcome/voice/. To make this script work for you, make the following updates, and then paste it into a terminal window:

    Line 1 update with your Account SID

    Line 2update with a valid destination

    Line 3update with a valid caller number

    Line 4update with a valid TwiML URL or App SID url

    Line 5update with your Account SID and Auth Token

    Additional optional parameters can be added in your request for recording the call, sending DTMF keypresses, requesting status change updates, and more. For full details on each of the available options, please see Call Parameters (Twilio Docs).

    TwiML Instructions

    Once the call is connected, Twilio will make an HTTP Request to the Url or ApplicationSid included in your initial API request. Twilio's request contains a number of parameters, including the To and From numbers, the Call SID to identify your call, and more.

    In response to our request, we expect TwiML commands to tell us how to run the call. Here are some examples:

    a <Dial> verb to connect the destination callee to a Twilio Conference, Client instance, SIP endpoint, or another phone number.

    a <Gather> verb to collect speech of DTMF keypress inputs from the destination callee.

    a <Say> or <Play> verb to read a script with our text-to-speech engine or play a pre-recorded audio file for the destination callee.

    TwiML responses can be formatted in XML and nested in the root <Response> element, or they can be returned programmatically using one of our Server-side SDKs. For more information on the voice TwiML commands, their parameters, and code samples, please see What is TwiML (Twilio Docs).

    Notice: TwiML instructions must be accessible by Twilio's proxy servers. Local files on your desktop are likely unaccessible via these methods, but Twiilio can host XML-formatted TwiML responses via TwiML Bins, or Node.js responses via Twilio Functions.

    API Explorer

    Another convenient tool for sending messages is the API Explorer in Console. Just login to your Twilio account, and then select Runtime > API Explorer. From here, you can place a call using the fields and drop-down menus. You can even see the code change in real-time as your adjust the parameters. Click here to try it yourself: API Explorer - Make a Call.

    Additional Resources

    Making Calls (Twilio Docs)

    Twilio Programmable Voice API reference

    Recording a Phone Call with Twilio

    Using a non-Twilio number as the caller ID for outgoing calls

    Setting Up Call Forwarding

    Troubleshooting Twilio Voice Calls

    View Article
  • When you login to your Twilio account, you will be viewing your most recent Project by default. To begin the porting process for a subaccount, you will need to navigate to the intended subaccount and then go to the porting page.

    View Article
  • When an agent doesn’t close out a task before they leave for the day, this can have a negative impact on your stats. Here are some suggestions to help reduce the impact of this type of issue:

    Create a maximum task lifetime (listed in seconds) with the Timeout parameter when creating your task. This allows you to make a task automatically cancel once it has exceeded the timeout value.

    Automatically close all open tasks assigned to the worker when they log off for the day. Twilio will automatically make requests to the Workspace's EventCallbackURL when the worker changes status; you can use this to trigger a request to close open tasks when the worker is off shift.

    If the worker had previously accepted reservations in their queue, you can also update the reservations to reject them and send them back to the queue, or redirect them to another TwiML document such as a voicemail.

    View Article
  • If you're managing multiplecustomersvia subaccounts, you can change the subaccount status to "closed" toirreversiblyclose it. If a subaccount is closed, it means that:

    Twilio will release all phone numbers assigned to it.

    You never be able to use this subaccount to make and receive phone calls or send and receive SMS messages again.

    It cannot be opened again.

    It will be shown as "closed" in your management dashboard when you log in to https://www.twilio.com/user/account

    It will appear in your Accounts List via the API, and you will still have access to historical data for that subaccount unless automatic deletion of closed subaccounts is enabled.If you have enabled automatic deletion of closed subaccounts through the Console Subaccounts settings page, we will delete all subaccount data 30 days after closure. This includes previously closed subaccounts, which will no longer appear on the Console.

    Twilio has automatically enabled this setting for all new projects created after July 5, 2018, as well as all projects without any subaccounts.

    For all other projects, project owners can turn this setting on through the Console Subaccounts settings page.

    Note: If you want to temporarily suspend one of your subaccounts, you can change its status to " suspended " instead of "closed."

    Currently, all subaccount management must be done via the REST API. To close a subaccount, you'll want to make an HTTP POST request to that subaccount's Account Instance resource.

    If you have a small number of subaccounts to manage, you can use Twilio's API Explorer, which acts like a UI wrapper for the API.

    Warnings:This is a destructive procedure, so please be sure that you have the correct Account SID. You are also going to want to double check that you are, in fact, not using that subaccount, since setting the status to "Closed" will release any numbers that you have in that subaccount, and will also make any of the UI logs that are part of that subaccount inaccessible.

    Steps to Close A Subaccount with the API Explorer:

    Visit the "Accounts" section of Twilio's API Explorer, and then select Modify an Account.

    Choose the correct Account SID for the subaccount

    Set the "Status" to Closed.

    Click Make Request.

    After refreshing the page, the subaccount should now no longer show up in the drop down or anywhere else in your project.

    View Article
  • Unlike voice, there's no way to block specific SMS messages or sending parties. You can disable SMS completely for one Twilio number, but you cannot selectively reject messages.

    If you would like to block all SMS, you can remove the URL from the SMS section of your phone number settings in the console. To disable incoming SMS on all Twilio phone numbers associated with a Messaging Service, simply uncheck the "Process Inbound Messages" checkbox under Inbound Settings section on the configuration page.

    Or Simply click on this link here > Select The Phone Number > Scroll to Messaging to "A Message Comes In" > Remove the WebHook URL.

    After doing this you will not be charged for, nor will you receive, SMS to your Twilio number(s).

    We understand that many customers are worried about abuse, so if your project is ever subject to abuse you can contact us and we will work with you to resolve the issue as soon as possible.

    View Article
  • Sometimes you may need to get numbers with similar patterns (such as xxx-xxx-0001,xxx-xxx-0002, etc).You can use the Twilio Console or the API to search for consecutive numbers:

    Use the Buy ANumber pagein the console to find numbers in the area code that you're looking for, then based on the return result, narrow down your search to look specifically for numbers in a prefix of that area code where we have multiple numbers available. You can use the characters such as * or \% to help with the search. To learn more about how to search for a number in the console, check out How to search for phone numbers.

    Take advantage of the "AreaCode" and "Contains" parameters in the Available Phone Numbers List resource to help you find consecutive numbers.

    If you need more than 100 consecutive numbers and cannot find that many in our system, please contact our sales team for further assistance.

    View Article
  • First, let’s make sure you are in the right place. Are you looking for raw call and sms logs? Or, are you actually looking for analytics? If you are looking for metrics, reporting, data analysis, etc., please check out our FAQ on doing analytics on Twilio data.

    If you’re looking to do a raw export, you’ve come to the right place.

    Exporting fewer than 1000 records

    To retrieve the last 1000 call records from your logs:

    Copy this URL into a text editor:

    https://api.twilio.com/2010-04-01/Accounts/AC12345/Calls.csv?PageSize=1000

    'AC12345' is a fake Account SID, so please replace it with your own Account SID

    Paste the modified URL from your text editor into the URL bar of your browser and press "Enter"

    You'll be prompted for two fields: "Username" and "Password." For "Username," enter your account SID. For "Password," enter your auth token.

    Congratulations, you just made a GET request to the Calls list resource ! A CSV should now be downloading. You can download your SMS logs by repeating the same process but using this URL instead:

    https://api.twilio.com/2010-04-01/Accounts/AC12345/Messages.csv?PageSize=1000

    This makes a GET request to the Messages List resource.

    Refining this search

    The request we just made above asks Twilio to download all calls or messages from your project. But what if you just wanted to look at a subset of these records?

    For example, let's say you want to look only at calls to your Twilio number (781) 333-4444, or all messages sent on June 1st, 2012. Twilio supports filters such as "To", "From", "StartTime" (for calls), "DateSent" (for SMS messages), and more. You can append these to your query like this:

    https://api.twilio.com/2010-04-01/Accounts/AC12345/Messages.csv?DateSent=2012-06-01&PageSize=1000

    To see all your filtering options for exporting logs, see our Calls list documentation and our Messages list documentation.

    Getting lots of data

    If you are going to be downloading lots of data from the Twilio API, we highly suggest that you use one of the official Twilio Helper Libraries to do this.

    Here is a simple example of how the PHP Helper Library can be used to download data a CSV of SMS your records. If you find this example timing out, or taking to long, try shortening the time interval of the DateSent filters.

    <?php

    /**

    * Download the library from: https://github.com/twilio/twilio-php

    * Copy the 'Twilio' folder into a directory containing this file.

    */

    require __DIR__ . '/Twilio/autoload.php';

    use Twilio\Rest\Client;

    /* Your Twilio account sid and auth token */

    $account_sid = "ACXXXXXXXXX";

    $auth_token = "YYYYYYYYYYYY";

    /* Download data from Twilio API */

    $client = new Client($account_sid, $auth_token);

    $messages = $client->messages->stream(

    array(

    'dateSentAfter' => '2015-05-01',

    'dateSentBefore' => '2015-06-01'

    )

    );

    /* Browser magic */

    $filename = $account_sid."_sms.csv";

    header("Content-Type: application/csv");

    header("Content-Disposition: attachment; filename={$filename}");

    /* Write headers */

    $fields = array( 'SMS Message SID', 'From', 'To', 'Date Sent', 'Status', 'Direction', 'Price', 'Body' );

    echo '"'.implode('","', $fields).'"'."\n";

    /* Write rows */

    foreach ($messages as $sms) {

    $row = array(

    $sms->sid,

    $sms->from,

    $sms->to,

    $sms->dateSent->format('Y-m-d H:i:s'),

    $sms->status,

    $sms->direction,

    $sms->price,

    $sms->body

    );

    echo '"'.implode('","', $row).'"'."\n";

    }

    If you prefer not to use the official Helper Libraries, then you're going to need to design your application to make use of the built-in nextpageuri attribute which Twilio's API provides. The nextpageuri is a URL which keeps track of which call or SMS was the last record you fetched and is designed to guide your application through the paging process.

    You can use the API Explorer to see examples of the nextpageuri in both XML and JSON.

    There isn't a nextpageuri in .CSV format, so if you plan on getting extremely recent records in CSV, you will need to pull the records in either XML or JSON and convert the results to CSV.

    View Article
  • This article reflects Twilio's current support capabilities for custom SMS sender IDs, or alphanumeric sender ID worldwide. Click the country's name for guidelines on sending Twilio Programmable SMS messages to this locale (where available).

    Notice: Some countries may require registration of the desired alphanumeric sender ID prior to sending messages from this ID. These countries are are marked Pre-Registration Required in the table below. In pre-registration countries, delivery quality may be lower for messages sent using a standard SMS-capable Twilio phone number, as carriers in these countries often impose carrier filtering on non-registered message traffic.

    To start the pre-registration process, please visit Twilio's Alphanumeric Sender ID registration page, select the country you would like to request an Alphanumeric Sender ID for, and complete the form. If the country you want is not available, please search for the country from the table below)

    COUNTRY

    ALPHANUMERIC SENDER ID SUPPORTED?

    Afghanistan

    Yes

    Albania

    Yes

    Algeria

    Yes

    American Samoa

    No

    Andorra

    Yes

    Angola

    Yes

    Anguilla

    Yes

    Antigua & Barbuda

    Yes

    Argentina

    No

    Armenia

    Yes - Pre-Registration Required

    Aruba

    Yes

    Australia

    Yes

    Austria

    Yes

    Azerbaijan

    Yes

    Bahamas

    No

    Bahrain

    Yes

    Bangladesh

    Yes

    Barbados

    Yes

    Belarus

    Yes only for non Belarus based companies - Pre-Registration Required*

    Belgium

    No

    Belize

    No

    Benin

    Yes

    Bermuda

    Yes

    Bhutan

    Yes

    Bolivia

    Yes

    Bosnia and Herzegovina

    Yes

    Botswana

    Yes

    Brazil

    No

    Brunei

    Yes

    Bulgaria

    Yes

    Burkina Faso

    Yes

    Burundi

    Yes

    Cambodia

    Yes

    Cameroon

    Yes

    Canada

    No

    Cape Verde

    Yes

    Cayman Islands (UK)

    No

    Central African Republic

    Yes

    Chad

    Yes

    Chile

    No

    China **

    No

    Colombia

    No

    Comoros

    Yes

    Congo (Republic of the Congo)

    No

    Congo (Democratic Republic of the Congo)

    Yes

    Cook Islands

    Yes

    Costa Rica

    No

    Croatia

    Yes

    Cuba

    Yes - Pre-Registration Required

    Cyprus

    Yes

    Czech Republic

    Yes - Pre-Registration Required

    Denmark

    Yes

    Diego Garcia

    No

    Djibouti

    Yes

    Dominica

    Yes

    Dominican Republic

    No

    Ecuador

    No

    Egypt

    Yes - Pre-Registration Required

    El Salvador

    No

    Equatorial Guinea

    Yes

    Estonia

    Yes

    Ethiopia

    Yes

    Falkland Islands

    Yes

    Faroe Islands

    Yes

    Fiji

    Yes

    Finland

    Yes

    France

    Yes

    French Guiana

    No

    French Polynesia

    Yes

    Gabon

    Yes

    Gambia

    Yes

    Georgia

    Yes

    Germany

    Yes

    Ghana

    Yes

    Gibraltar

    Yes

    Greece

    Yes

    Greenland

    Yes

    Grenada

    Yes

    Guadeloupe & Martinique

    Yes

    Guam

    No

    Guatemala

    No

    Guernsey

    Yes

    Guinea

    Yes

    Guinea-Bissau

    Yes

    Guyana

    Yes

    Haiti

    Yes

    Honduras

    No

    Hong Kong

    Yes

    Hungary

    No

    Iceland

    Yes

    India

    Yes - Pre-Registration Required

    Indonesia

    Yes - Pre-Registration Required

    Iran

    No

    Iraq

    Yes

    Ireland

    Yes

    Isle of Man

    Yes

    Israel

    Yes

    Italy

    Yes

    Ivory Coast (Cte d'Ivoire)

    Yes

    Jamaica

    Yes

    Japan

    Numeric Pre-Registration, Limited Availability - Talk to Sales

    Jersey

    Yes

    Jordan

    Yes - Pre-Registration Required

    Kazakhstan

    Yes - Pre-Registration Required

    Kenya

    Yes - Pre-Registration Required

    Kuwait

    Yes - Pre-Registration Required

    Kyrgyzstan

    No

    Laos (Lao People's Democratic Republic)

    No

    Latvia

    Yes

    Lebanon

    Yes

    Lesotho

    Yes

    Liberia

    Yes

    Libya

    Yes

    Liechtenstein

    Yes

    Lithuania

    Yes

    Luxembourg

    Yes

    Macau (PRC)

    Yes

    Macedonia

    Yes

    Madagascar

    Yes

    Malawi

    Yes

    Malaysia

    No

    Maldives

    Yes

    Mali

    No

    Malta

    Yes

    Martinique

    Yes

    Mauritania

    Yes

    Mauritius

    Yes

    Mayotte

    Yes

    Mexico

    No

    Moldova

    Yes

    Monaco

    No

    Mongolia

    Yes

    Montenegro

    Yes

    Montserrat

    Yes

    Morocco

    No

    Mozambique

    Yes

    Myanmar

    No

    Namibia

    No

    Nauru

    No

    Nepal

    No

    Netherlands

    Yes

    Netherlands Antilles

    Yes

    New Caledonia

    Yes

    New Zealand

    No

    Nicaragua

    No

    Niger

    Yes

    Nigeria

    Yes - Pre-Registration Available for Nigeria-based companies

    Norway

    Yes

    Oman

    Yes - Pre-Registration Required

    Pakistan

    No

    Palestine

    Yes - Pre-Registration Required

    Panama

    No

    Papua New Guinea

    Yes

    Paraguay

    Yes

    Peru

    No

    Philippines

    Yes - Pre-Registration Required

    Poland

    Yes

    Portugal

    Yes

    Puerto Rico

    No

    Qatar

    Yes - Pre-Registration Required

    Runion

    Yes

    Romania

    Yes

    Russia

    Yes - Pre-Registration Required

    Rwanda

    Yes

    Samoa

    Yes

    San Marino

    Yes

    Sao Tome and Principe

    Yes

    Saudi Arabia

    Yes only for non Saudi Arabia based companies - Pre-Registration Required*

    Senegal

    Yes

    Serbia

    Yes

    Seychelles

    Yes

    Sierra Leone

    Yes

    Singapore

    Yes

    Slovakia

    Yes

    Slovenia

    Yes

    Solomon Islands

    Yes

    Somalia

    Yes

    South Africa

    No

    South Korea

    No

    South Sudan

    Yes

    Spain

    Yes

    Sri Lanka

    Yes - Pre-Registration Required

    St. Kitts and Nevis

    Yes

    St. Lucia

    Yes

    Saint Vincent and the Grenadines

    Yes

    Sudan

    Yes

    Suriname

    Yes

    Swaziland

    Yes

    Sweden

    Yes

    Switzerland

    Yes

    Syria

    No

    Taiwan

    No

    Tajikistan

    Yes

    Tanzania

    Yes - Pre-Registration Required

    Thailand

    Yes - Pre-Registration Required

    Timor-Leste (East Timor)

    Yes

    Togo

    Yes

    Tonga

    Yes

    Trinidad and Tobago

    Yes

    Tunisia

    Yes

    Turkey

    Yes - Pre-Registration Required

    Turkmenistan

    Yes

    Turks and Caicos Islands

    Yes

    Uganda

    Yes

    Ukraine

    Yes

    United Arab Emirates

    Yes - Pre-Registration Required

    United Kingdom

    Yes

    United States

    No

    Uruguay

    No

    Uzbekistan

    Yes

    Vanuatu

    Yes

    Venezuela

    No

    Vietnam

    Yes - Pre-Registration Required

    Virgin Islands (British Virgin Islands)

    Yes

    Yemen

    No

    Zambia

    Yes

    Zimbabwe

    Yes

    *Saudi Arabia offers pre-registration options for either transactional or promotional messages.

    **For messages to China, pre-registration of message body template is recommended.

    There's a monthly fee of $6.00 USD for Czech Republic Sender ID pre-registration.

    There's a monthly fee of $230.00 USD for Russia Sender ID pre-registration.

    View Article
  • SMS/Messages is a deprecated resource that we no longer maintain and update. Newly released features are only available in the /Messages resource, sowe highly encourage you to move onto the new /Messages resource for your application. The change normally involves a quick helper library update and a few lines of code changes. Check out the sample code on how to use the new endpoint to send messages.

    For your reference, below is a sample list of features that are available only in the /Messages resource:

    Send concatenated messages with up to 1600 characters

    Receive message delivery status information of your messages

    Send MMS messages in the US and Canada

    Take advantage of the “MaxPrice” parameter to control message costs

    Utilize Copilot features in Messaging Services

    Access to detailed delivery steps in the SMS log within Console

    View Article
  • Are you having trouble reading your Twilio invoice? Is any of the data confusing? Well, you've come to the right place. This guide will explain how to access and read your Twilio invoice.

    Console

    Access your Invoice

    Twilio Invoices can be retrieved at any time from the Billing Overview page in Console. For more details, see When and Where Can I Find my Invoice.

    Invoice Overview

    In the following sections, we'll introduce and explain the different components of your Twilio invoice:

    Company Name and Address

    Invoice Summary

    Product Usage Summary

    Account Usage Summary

    Payment Instructions

    Tax Details

    Bucket Details

    Usage Details

    Notice: Between June and December of 2019, Twilio will begin rolling out a series of visual and informative upgrades to your invoices. If you read about something here that you haven’t received yet, keep an eye out for a release coming to you soon!

    Company Name and Address

    The top left of the invoice will show your business name, the service month, and your service address. The top right of the front page will show Twilio’s business name and address.

    Invoice Summary

    The front page of your invoice has a summary section, with a brief run-through of your account's attributes. The invoice amount, currency of the invoice, and due date are all highlighted in a box for your ease.

    TheBilling Preferences page in Console allows you to add or edit a PO number, business name, business tax ID, and more. For full details, see How do I Update my Billing Settings.

    If you’ve entered any of this information,those details would also show up here in the Invoice Summary section. Please note, depending on your country's taxation requirements, you may see a Tax ID number, VAT number, or GST number.

    Product Usage Summary

    The product usage summary on the front page of your invoice summarizes usage across all items, linked accounts, and sub-accounts, to show a high-level summary per product group.

    Each product listed represents the total usage costs billed in this invoice, along with the following non-product line items:

    Credits represent the total amount of sales reversed.

    Promos represent the total amount of promotional money added to your account.

    Taxes represents the total taxes charged for services billed, based on the taxation requirements in your country.

    Note: If you are not in a country we current tax, you would see a statement explaining the same and no tax line items. To see if Twilio collects taxes in your country, please see the Taxes section of our Support Help Center.

    Account Usage Summary

    Customers with multiple projects on their invoice (sometimes referred to as multi-account invoicing) will also see the Usage Summary per Account section. This section of the invoice summarizes the month's usage for each project or linked account on invoices beginning in October of 2019.

    Notice:Users looking for a detailed split of usage per sub-account can see this information in the Invoice CSV supplement beginning in October of 2019.

    To adjust the account name for any linked projects, update the Business Name in Console. For full details, see How do I Update my Billing Settings.

    After the usage summary section(s), the invoice would mention statutory requirements, such as tax note and exchange rate (where applicable). Not every customer, based on account details, country, or currency, will need those disclaimers, so do not be surprised if you do not see them.

    Payment Instructions

    The payment instructions page contains information required to pay by wire, as well as remittance instructions.Depending on your country and currency, you may see customized payment instructions.

    Tax Details

    The taxes section tabulates the breakdown of services consumed by tax type, the taxes charged based on the products consumed, and the effective taxes on each item.Some services and account promotions may not be taxed; you will find details on these here.

    This section will look different depending on what country you're in:

    Customers who consume Twilio services in Australia, Singapore, Japan, and countries in Europe, will see a similar explanation for the tax charged.

    Customers who consume Twilio services in locales we are not required to charge taxes will not see this section.

    Customers who consume Twilio services in the US will see the tax types charged shown in the Usage Details section.

    To see if Twilio collects taxes in your country, please see the Taxes section of our Support Help Center.

    Bucket Details

    If you have signed up for a bucket pricing strategy, such as a bucket of US SMS, you will find a section explaining the bucket's information. This section starts with the label of your bucket, followed by a summary of the bucket usage for this month, and then lastly, the details of the usage in the month.

    Bucket pricing is available for Twilio customers billed by invoice. For more information, please talk to your Account Manager, or reach out to our Sales team.

    Usage Details

    The usage details section gives you a per account breakdown of the services used, credits applied, promos applied, and taxes charged on this invoice. Within the services section, items are grouped by products and countries (example: SMS grouped by destination country).

    Usage Details begin with a total of the services used for each account. Some examples of items included here are:

    Recurring charges such as phone numbers rental fees, short code renewals, etc., which are charged on a regular basis (monthly, quarterly, semi-annual, annual)

    Charges for using Twilio products like Programmable SMS and Voice calls.

    Billing adjustments such as minimum spend commitment adjustments.

    Monthly charges for services such as enterprise plan or premium support.

    At the end of the account's usage details, we list and credits, promotions, and taxes charged.

    If you'd like to see how your Twilio usage has changed from month to month, or you're interested in manipulating your invoicing data to gain additional insights into your usage and spend, download the CSV supplement. You'll also be able to see split usage per subaccount in the CSV starting in October 2019.

    Usage Details FAQ

    Since seeing the usage details may prompt some additional questions, we are taking this opportunity to answer some common queries here:

    Q: Why am I being charged for phone numbers, even though I didn't purchase any this month?

    A: Phone numbers have a monthly rental fee that is charged each month until the phone number is released. For more information, see How much does a phone number cost.

    Q: When and why are taxes charged?

    A: Twilio calculates and charges taxes at the end of each month for usage incurred throughout the previous month. Taxes are assessed based on your business address provided. For more information, see When Does Twilio Charge Taxes.

    Q: What is the adjustment charge on my invoice?

    A: Some users may see "minimum commit" or "min spend adjustment" on their invoice (example: Messaging - Quarterly Minimum Spend). These adjustments are added to ensure your account is meeting the minimum spend amount that was agreed upon between you and Twilio in your order form. These commitments allow us to provide your with more favorable pricing.

    Q: I see charges for more SMS than I sent. Why is that?

    A: Long SMS are broken into smaller segments of 160 characters each by the telecom carriers.Each segment is charged at the rate of one SMS. The invoice shows the total segments used. For more information, see How much does it cost to send a message with more than 160 characters.

    Q:Why do I see differences between my invoice and the Console product logs?

    A:For invoicing purposes, Twilio always uses the UTC timezone. User accounts set to use a local (non-UTC) timezone will likely see differences in the usage captured in Console product logs on the first and last days of the month. For help switching to or from UTC, see Change the timezone in your Twilio project.

    The billing system at Twilio works in 5 decimals places, i.e. $0.00001 precision. However, for simplicity, invoices are rounded to two decimals, i.e. $0.01 precision. This might cause a mismatch in fractions of a cent for a line item between invoices, the Usage Center page on, or Usage API.

    Q: What does "Non-geographic" mean for some of the usage on my invoice?

    A: Invoices show most usage grouped by the associated country - phone numbers by the country code, messages and voice by the destination, etc. Usage on software products (Taskrouter, Flex, Proxy, etc.) and billing adjustments (credits, minimum spend adjustment, etc.) are not associated to a specific country, and therefore listed as Non-geographic.

    Future features

    Upcoming design launches include a redesigned tax summary, a summary of information of your min spend, and a statement of account.

    View Article
  • Twilio phone numbers are billed via a Monthly Recurring Charge (MRC) from the time they are provisioned. They may vary in price depending on a number of factors, including:

    Phone number type: Mobile, National, Toll-Free, etc.

    Phone number capabilities: Voice calls, SMS messaging, SIP Trunking, etc.

    Phone number country: What country the phone number is based in.

    In addition to the phone number’s MRC, we also bill for your usage with the phone number. Continue reading for more in-depth breakdown of how our phone number billing works.

    This article covers the below topics. Click a topic to skip ahead to the corresponding section:

    How can I see what a phone number costs?

    When am I charged for a phone number?

    How is SMS and Voice usage charged?

    How much was I charged for Phone Numbers and Usage?

    How can I see what a phone number costs?

    Every Twilio phone number you provision has a monthly recurring charge attached. This monthly cost is displayed in a number of locations:

    When searching for phone numbers in Console, the monthly recurring charge for each phone number returned is listed as theMonthly Fee:

    How Does Twilio's Pricing Work?

    After clicking Buy to provision a phone number in Console, the monthly recurring charge is listed at the top of the window.The phone number viewed in this example costs $1.00 per month:

    Phone number pricing can also be found on our pricing site, as well as via the Pricing API.

    When am I charged for a phone number?

    When you provision a Twilio phone number, you are billed for the full monthly price of the phone number up front. We do not offer prorated phone number billing.

    Phone numbers are billed on the same day the phone number was provisioned every month, unless this day doesn’t occur every month like the 31st. In these months, your project would be billed the MRC on the last day of the month (February 28th, March 31st, April 30th, etc.) until you release the phone number.

    How is SMS and Voice usage charged?

    When you use a phone number’s capabilities (make a phone call, send a message, etc.), you’ll be charged through Twilio’s pay-as-you-go pricing, in addition to the phone number's monthly recurring charge (MRC).

    If you don’t make any phone calls, or use any of the capabilities, you’ll still be charged the monthly phone number charge.

    The latest Voice and SMS pricing can be retrieved programmatically using Twilio’s Pricing API. For more information, please see the full Twilio pricing site.

    How much was I charged for Phone Numbers and Usage?

    Charges for your project’s phone numbers and services can be seen on the Usage Summary page in Console.

    Here’s what a month with additional voice usage costs might look like:

    Here’s what a month with only phone number MRCs (no usage billing) might look like. As you can see, even if you do not use the phone numbers for sending messages, calling, etc., you will still be liable for the phone number’s MRC.

    Your Twilio usage can all be found via the Usage Records API.

    Related Topics

    Cancel or release a Twilio number

    View Article
  • Twilio Functions (Beta) provide a complete runtime environment for executing your Node.js scripts. Functions integrates popular package managers like NPM, and provides a low latency Twilio-hosted environment for your application. Read on for more information on how to use Functions with your Twilio project.

    Node.js versions

    Building apps with Functions

    What information is in the context object?

    What information is the in the event object?

    How do I use the callback to return from a Function?

    How do I generate TwiML?

    How do I call 3rd party HTTP APIs?

    Notice:Twilio Functions is currently in beta, and has not yet been finalized. Support requests for beta and pre-release products are generally handled by our engineering team, and as such, response times are not guaranteed. For more information on Support limitations for beta and pre-release products, please see Twilio Beta Product Support.

    Node.js versions

    Functions currently defaults to the following versions of Node.js:

    Scripts deployed via Console use Node 8

    Scripts deployed via the REST API use Node 10

    Notice: Twilio will be moving any Functions that are newly created or edited in Console over to Node 10 on January 30, 2020. Any existing deployed Functions will continue to run on Node 8, unless they are modified and redeployed after the January 30th changeover. For full details, please see Twilio Functions NodeJS v10 upgrade (Twilio Docs).

    Building apps with Functions

    Here's an example of what a Functions script looks like:

    exports.handler = function(context, event, callback) {

    // code

    // invoke callback function

    }

    The handler method is the starting point of your function, and accepts the following 3 arguments:

    The context object includes information about your Runtime, such as configuration variables.

    The event object includes information about a specific invocation, including HTTP parameters from the HTTP request.

    The callback Function completes execution of your code.

    When writing code for your Function, you can reference the Twilio Node helper library using the Twilio global:

    var twiml = new Twilio.twiml.MessagingResponse()

    What information is in the Context object?

    On the Functions Configuration page in Console, you can configure environmental variables for your app. These key/value pairs are attached to the context parameter.

    For example, setting the following key value pairs:

    Functions Landing Page (Twilio.com)

    Results in this context object response:

    {

    NAME: 'Phil',

    CITY: 'London'

    }

    You can also allow your project credentials (Account Sid and Auth Token) to be accessible via the context object. This enables you to invoke thegetTwilioClient method on the context object for a fully-initialized Twilio REST API client.

    var client = context.getTwilioClient()

    client.messages.create({to: '+12025551212', from: '+12065551212', body: "hello world!"})

    For more details, please see Enable and Configure Credentials and Environmental Variables with Twilio Functions.

    What information is the in the Event object?

    GET and POST parameters are attached to the event object. For instance, if an HTTP request to your Function looked like this:

    curl -XPOST -d "c=d" https://your-domain-1234.twil.io/path?a=b

    The event object would look like this:

    {

    a: 'b',

    c: 'd'

    }

    If a POST parameter and GET parameter have the same name, the POST parameter will take precedence.

    How do I use the Callback to return from a Function?

    When you're ready to return from your Function, you invoke callback. In non-error situations the first parameter is null and the second parameter is the value you want to return.

    If you return a TwiML object, Functionswill ensure that this is turned into XML and content-type is set to text/xml.

    var twiml = new Twilio.twiml.MessagingResponse()

    callback(null, twiml)

    If you return a JavaScript object, Functionswill convert to JSON and set the content-type to application/json.

    callback(null, {token: "abcdef"})

    If you return a String, Functionswill return a String and set the content-type to text/plain.

    callback(null, "OK")

    If you return a String as the first parameter, Functionswill return the string as text/plain and set the response code to HTTP 500.

    callback("NOT OK")

    How do I generateTwiML?

    If you're building Voice or SMS applications, you'll often want to generate TwiML. There are two kinds of TwiML: Voice TwiML and Messaging TwiML.You can use the Twilio Node helper library to programmatically generate both of these kinds of TwiML.

    Voice TwiML

    var twiml = new Twilio.twiml.VoiceResponse()

    twiml.dial().sip("sip:[email protected]")

    console.log(twiml.toString())

    //<Response><Dial><Sip>sip:[email protected]</Sip></Dial></Response>

    Messaging TwiML

    var twiml = new Twilio.twiml.MessagingResponse()

    twiml.message("Hello SMS")

    console.log(twiml.toString())

    // <Response><Message>Hello SMS</Message></Response>

    How do I call3rd party REST APIs?

    If youwant to use 3rd party REST APIs in your Functions, we recommend adding the Got NPM module. For help adding this modules in Functions, see Add or Modify Node Modules with Twilio Functions.

    Here's an example of using Got to make a GET request:

    var got = require('got');

    got('https://swapi.co/api/people/?search=r2', {json: true})

    .then(function(response) {

    console.log(response)

    twiml.message(response.body.results[0].url)

    callback(null, twiml);

    })

    .catch(function(error) {

    callback(error)

    })

    Sometimes you'll want to POST data to an API. Here is an example of sending a POST with a JSON payload and setting the Accept header to application/json:

    var got = require('got');

    var requestPayload = {foo: 'bar'};

    got.post('https://your-api.com/endpoint',

    { body: JSON.stringify(requestPayload),

    headers: {

    'accept': 'application/json'

    },

    json: true

    }).then(function(response) {

    console.log(response.body)

    callback(null, response.body);

    }).catch(function(error) {

    callback(error)

    });

    Note: Due to the asynchronous nature of Node, please remember to execute your callback only after your HTTP request has finished. Executing callback terminates the execution of your Function, including any in-flight async code.

    Additional Resources

    Twilio Runtime - Functions (Twilio Docs)

    Functions Google Group

    View Article
  • Your Twilio project can initiate phone calls at a speed of one call per second. You can make requests to Twilio as fast as you like, and Twilio will queue the calls, releasing them at a rate of one per second. If you run into this limit, please contact us.

    View Article
  • You may receive alert emails from Twilio when there’s an error generated by an application you’re running.

    These Alert triggers provide a way for you to get notifications on any potential issues with your application. By default Twilio has three triggers in place when a project is initially created: emails will be sent to the project owner when the 1st, 10th and 100th application error occurs each day.

    When you receive an email like this, check out the Debugger for detailed error codes and descriptions, or you may want to reach out to whomever developed your Twilio application if you do not maintain it yourself. Read through the article Debugging your application to learn tools in the Console that can help you debug your application.

    If you do not need these default triggers, you can click on the “Delete this Trigger” button to remove it after selecting the trigger. To learn about how to create or update a trigger, refer to the article Create or change Twilio Monitor Alert triggers.

    View Article
  • Developing Twilio applications has never been easier. In addition to our Helper Library SDKs, we have a number of flexible tools to help users create apps - even if you have little to no code experience! This guide covers a number of options for users to create their own Twilio applications.

    Twilio Studio

    Twilio Studio is our no-code required visual interface for creating omni-channel Twilio applications using Programmable Messaging (SMS, WhatsApp, Facebook, etc.), Voice, Chat, and more. The flowchart-style UI allows you to quickly drag and drop widgets to build a custom communications app that meets your needs. We also give users the option to trigger Studio flows via API requests, and enhance your Studio flows with Functions.

    For more information, see Getting Started with Twilio Studio.

    Twilio CodeExchange

    The Twilio CodeExchange site hosts a number of sample code templates for common use cases in multiple languages. These templates could be a great start for building your own customized Twilio application.

    See what you can build at twilio.com/code-exchange.

    Serverless Twilio

    Twilio offers a number of hosted products to help get your application up and running, without worrying about servers or infrastructure needs.

    TwiML Binsprovide hosting for your basic TwiML scripts. TwiML Bins work with our easy to use XML-based TwiML markup language, and are a great solution for quickly publishing a simple call forwarding or text message response application. They also support Mustache Templates for more advanced features. For more information, see TwiML Bins (Twilio Docs).

    Twilio Assets (Beta) lets you store up to 100MB of static files. Assets are useful for storing media to be sent with Programmable Messaging or Faxes, audio files for hold music or voicemail on your Programmable Voice calls, or your Flex customization plugins. For more information, see Getting Started with Twilio Assets (Beta).

    The Functions (Beta) product can host your more complex Node.js scripts. With Functions, you can set environmental variables, add NPM packages, and manage it all via our Serverless API.For more information, see Getting Started with Twilio Functions (Beta).

    Twilio's Flex programmable contact center product can also be used in Twilio-hosted instance. Flex utilizes Twilio's existing APIs to deliver a fully customizable cloud solution for your important customer communications. For more information, see Getting Started with Twilio Flex.

    Twilio partners

    If time or development costs are a concern, you may want to consider a working with a Twilio partner for a customized or pre-built solution. We have featured a number of developers and Twilio-powered applications on our Partner Solutions site.

    Need more help?

    If you need additional help, or have more questions about build options, please feel free to reach out to us directly:

    For technical questions and troubleshooting, please contact our Support team.

    For pricing plans and expert services, please contact our Sales team.

    View Article
  • Currently we accept payment in US Dollars and British Pounds (for UK only). Effective August 30th, 2019, we will support Japanese Yen as well (only for customers with verified Japanese phone numbers.)

    Your project balance and prices for phone numbers, SMS messages and voice minutes will be displayed in one of these currencies (USD, GBP, JPY), depending on your account's currency.

    View Article
  • An application error means that the code Twilio is attempting to fetch at the URL that you have specified on your servers is either unavailable or has errors in it. This code is being fetched based on the incoming URL that you have specified on your phone number or in your application for instructions on how to handle a call.

    To handle an error like this, you should view your Twilio project's debugger logs for details on the errors your application is running into.

    View Article

Curious about Twilio Inc.?

Anonymously Ask Twilio Inc. Any Question

Ask Anonymous Question

×
Rate your company