This software is in pre-release status and not currently supported. We are looking for community feedback on what type of CLI tool would be the most useful for Twilio users.
sudo apt-get install libsecret-1-dev
sudo yum install libsecret-devel
sudo pacman -S libsecret
Eventually, the plan is to have self-contained packages for *nix systems and an installer for Windows with no need for manually installing prerequisites.
npm install -g twilio-cli
brew tap twilio/brew && brew install twilio
npm outdated -g twilio-cli
npm update -g twilio-cli
This is for caching your credentials for your existing Twilio account (aka Project) locally. You will be prompted for a shorthand identifier for your Twilio project. This is referred to as the "project ID", which is just an easy to remember, short string to identify the project. (If you've used
git before, it's like the name you assign to a remote like "origin".)
Note, while you are prompted for your Account SID and Auth Token, these are not saved. An API Key is created (look for "twilio-cli for [username] on [hostname]" in the console) and stored in your system's keychain.
For details on how to work with multiple Twilio accounts/projects or use environment variables, see the projects section.
Lists all available commands.
Lists all your phone numbers.
--help to any command to get help (e.g.
twilio phone-numbers:list --help)
You can set a webhook on a phone number like so:
twilio phone-numbers:update [PN sid or E.164] --sms-url http://url
That sets the primary SMS url. There are also options for setting the voice url, fallback urls, and methods for each. Run
twilio phone-numbers:update --help for a full list of options.
When you set a webhook, if you specify a URL that uses the host name of
127.0.0.1, the twilio-cli will automatically create an ngrok tunnel for you and set your webhook to the new ngrok URL. For example:
twilio phone-numbers:update [PN sid or E.164] --sms-url http://localhost:5000/handle_sms
All command output is sent to
stdout (whereas logging messages are sent to
By default, the output is formatted in human readable form in a columnar format like so:
SID Phone Number Friendly Name PNxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +1209242XXXX SIP testing PNxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +1646887XXXX Congress hotline PNxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +1209337XXXX DAVID'S TWILIO CONTACT
list commands will allow you to specify a
--properties option to specify which columns you'd like to display. For example, to display only the Phone Number and SMS Url columns, you would pass
--properties "phoneNumber, smsUrl".
Note that the default list of properties varies by command and is subject to change with each release. Use the
--properties option to explicitly control which columns to output.
Also note that the column names must match the JSON property names in the Twilio API.
On any command, you can add
-o json to change the output format to JSON. When you choose JSON, the command will send the entire API response to
stdout as JSON. You can then pipe to tools like jq to parse the JSON.
To change the output format to tab separated values (TSV), add
-o tsv to the command line. This format is useful for loading into spreadsheets or for other machine processing. Like the default, columnar output format, you can use the
--properties option to specify which columns you would like included.
All debug, informational, warning, and error information is sent to
stderr. This is so it can be easily separated from the command output. You can decide what level of logging you'd like by using the
-l option. The valid levels of logging messages are
When you run
twilio login (an alias for
twilio projects:add), it stores your credentials and associates them with the provided project ID. The first project added will default to being the "active" project. The active project is used for all subsequent commands.
To add additional projects, run
twilio login again but provide a different project ID (like,
my_other_proj). Then, when you run subsequent commands, just include
-p my_other_proj in the command (e.g.
twilio phone-numbers:list -p my_other_proj).
Alternatively, you may switch which project is active using the
twilio projects:use command. To see the full list of local projects (including which project is active), run
You can also use credentials stored in environment variables:
TWILIO_ACCOUNT_SID= your Account SID from your console
TWILIO_API_KEY= an API Key created in your console
TWILIO_API_SECRET= the secret for the API Key (you would have received this when you created an API key)
TWILIO_ACCOUNT_SID= your Account SID from your console
TWILIO_AUTH_TOKEN= your Auth Token from your console
NOTE: Option 2 should only be used in cases where you are unable to make use of option 1 (which are uncommon).
The CLI will attempt to load credentials in the following order of priority:
twilio-cli can be extended via plugins.
At this time, only two plugins exist:
twilio debugger plugin: The debugger plugin will display Twilio Debugger logs directly in your terminal.
Plugins for the CLI can be installed using the
twilio plugins command.
Install the plugin by it's package name:
twilio plugins:install @twilio/plugin-debugger
Now, you can run your plugin command from the cli:
twilio debugger:logs:list --help
Note: if you're using autocomplete see below, you'll need to run
twilio autocomplete after installing a plugin and open a new terminal window. The cli needs to re-build it's cache.
Want to write your own plugin? See this document.
To enable autocomplete of CLI commands in bash or zsh, run:
And follow the instructions.
./bin/runfrom the repo directory to run the CLI.
Please file a GitHub issue in this repository for any feedback you may have.