> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cymph.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Twilio (SMS)

> Send execution notifications from Cymph as text messages through Twilio.

## What Cymph uses it for

Cymph connects to Twilio to **send SMS notifications** when a playbook execution changes state or is handed over to someone else. The same message that goes to Slack or Microsoft Teams is sent as a text to a list of phone numbers you maintain in the organisation's notification settings.

Twilio is a notification target only. Cymph never reads messages, never receives replies, and Twilio is neither a content source nor a deployment target.

## Notification events

| Event | Sent when |
| - | - |
| **Execution started** | A playbook execution begins |
| **Execution completed** | An execution finishes successfully |
| **Execution failed** | An execution ends in failure |
| **Execution canceled** | An execution is cancelled |
| **Task reassigned** | A task within an execution is handed to another person |

Only execution-level events are sent to the organisation's channels. Personal notices, such as a step becoming unblocked for its assignee, go to that person by email and in-app and are not texted.

Each event is one SMS per recipient. Line breaks in the notification are flattened to `|` and the text is cut at 600 characters so a message stays within a few billable segments.

## Requirements

| Field | Description |
| - | - |
| **Account SID** | The Twilio account identifier, `AC` followed by 32 characters |
| **Auth Token** | The account's auth token. Stored encrypted and never shown again after saving |
| **Sender phone number** | A phone number **owned by this Twilio account**, in international E.164 format, e.g. `+14155552671` |

There is no instance URL — Cymph connects to Twilio's API at `https://api.twilio.com`.

Both values are on the **Account Info** panel of the [Twilio Console](https://console.twilio.com) home page.

> [!NOTE]
>
> Only phone numbers purchased on the account can be used as the sender. Alphanumeric sender IDs, short codes and Messaging Services are not supported.

## Setting it up

Sending SMS takes two steps, in two places: the **integration** holds the credentials and the sender, and the organisation's **notification settings** hold the recipients and the switch.

**1. Add the integration**

In a workspace, open **Integrations → Add Integration → Twilio**, enter the Account SID, Auth Token and sender number, and click **Test** before saving. See [Manage integrations](/integrations/manage.md).

**2. Choose the recipients**

From the navigation menu, open the **Organisation** page, click the name of your organisation, and go to the **Notifications** tab. Under **SMS (Twilio)**, switch the channel on, select the integration, and add the recipient numbers in international format. Up to **20** numbers are accepted, each must be unique, and at least one is required while the channel is on. Click **Save changes**.

Recipients are part of the organisation settings rather than the integration, so one Twilio account can serve different number lists over time, and the list is edited without touching the credentials.

> [!TIP]
>
> Use the same organisation page to combine channels. Slack, Teams and SMS are configured independently and can be enabled in any combination; a failure on one channel never stops the others.

## What Cymph reads and writes

| Purpose | Twilio API call |
| - | - |
| Test the credentials | `GET /2010-04-01/Accounts/{AccountSid}.json` |
| Check that the sender belongs to the account | `GET /2010-04-01/Accounts/{AccountSid}/IncomingPhoneNumbers.json?PhoneNumber=…` |
| Send a notification | `POST /2010-04-01/Accounts/{AccountSid}/Messages.json` |

The test sends nothing. When notifying, Cymph posts one message per recipient and keeps going if a number is rejected, so one bad number does not block the rest.

## Testing the connection

**Test Connection** validates the credentials against the account and confirms the sender number:

| Message | Meaning |
| - | - |
| **Valid Twilio configuration for *account*, sending from *number*** | Credentials accepted and the sender is a number of this account |
| **Not a valid Twilio Account SID** | The SID is not `AC` plus 32 characters |
| **Sender number must be in E.164 format** | The sender is not written as `+` followed by the country code and number |
| **Authorization failed** | Twilio rejected the SID and token pair |
| **Twilio account not found** | The SID is well-formed but no such account exists |
| ***number* is not a phone number of this Twilio account** | The credentials work, but the sender is not owned by the account |
| **Twilio rejected the request: …** | Twilio's own error message, for any other refusal |
| **Connection timed out** | No response within 5 seconds |

> [!NOTE]
>
> Twilio is a public service, so the outbound destination is fixed and no allowlisting of a customer endpoint applies. If your Cymph deployment restricts egress, `api.twilio.com` over HTTPS must be reachable — see [Networking](/deployment/networking.md#egress-control).

## Limitations

* Outbound SMS only. Inbound messages, delivery receipts and WhatsApp are not supported.
* Trial Twilio accounts can only text verified numbers and prefix every message with a trial notice.
* SMS carrier costs apply per segment; see the event list above for what triggers a message.

## Related

* [Slack](/integrations/notifications/slack.md) for channel notifications.
* Per-user email preferences live in [Notification settings](/settings/notifications.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.