Twilio SMS inside Notifly workflows, on your own account.
Notifly does not resell SMS. You connect your Twilio account with its Account SID and Auth token, and the SMS steps of your Notifly workflows are sent through it: your numbers, your Twilio logs, your Twilio bill.
Notifly adds the rest: one trigger for SMS, email, in-app, push and chat; digest, delay and throttle steps so a user is not texted twice for the same thing; subscriber preferences checked before each send; and an activity feed that records what Twilio answered.
What you need from Twilio
These are the fields the dashboard asks for when you connect Twilio, quoted from the create form.
| Field | Required | Stored | Notes |
|---|---|---|---|
| Account SID | Required | As entered | |
| Auth token | Required | Encrypted at rest | |
| Data residency region | Optional | As entered | Select EU if your Twilio account uses EU data residency (IE1). Use region-specific credentials. US (default) or EU (Ireland); US (default) is preselected. |
| From | Required | As entered |
- Data residency region. EU (Ireland) sends through Twilio's ie1 region via the dublin edge; US (default) uses Twilio's default endpoint.
- From. The sender of every SMS from this integration. A trigger can set another one with
overrides.providers.twilio.from.
Connect Twilio in the dashboard
- Sign in at app.notifly.io, open Integration Store in the sidebar and choose Connect Provider.
- In the Connect Integration sheet, open the SMS tab (or search across channels), find Twilio and choose Connect.
- Pick the environment the integration belongs to. Development and Production keep separate integrations, so you can point each at a different Twilio account or key.
- Fill in Delivery Provider Credentials with the fields in the table above, then choose Create Integration.
- A new integration starts switched on as both Active Integration and Primary Integration, so SMS steps in that environment send through Twilio by default. If the environment already has a primary SMS integration, the dashboard asks before replacing it.
Trigger a Twilio SMS from your code
Your backend triggers a workflow; Notifly renders the SMS step and sends it with Twilio. The phone number in to is saved on the subscriber, so later triggers only need the subscriberId.
// npm install @notiflyio/api@0.1.26
import { Notifly } from "@notiflyio/api";
const notifly = new Notifly({ security: { secretKey: process.env.NOTIFLY_SECRET_KEY } });
await notifly.trigger({
workflowId: "login-code",
to: { subscriberId: "user_123", phone: "+15551234567" },
payload: { code: "482913" },
overrides: {
// Merged into the options of Twilio's messages.create for this send.
providers: { twilio: { validityPeriod: 300 } },
},
});Prefer plain HTTP? The same trigger is POST https://api.notifly.io/v1/events/trigger with an Authorization: ApiKey header and a body of { "name", "to", "payload" }.
What reaches Twilio
- One messages.create call per SMS. With the rendered body, the subscriber's phone as
toand your From number. - Your Twilio options. Anything under
overrides.providers.twiliois merged into that call, such asstatusCallbackorvalidityPeriod. - A SID you can join on. The Message SID Twilio returns is stored on the Notifly message.
- No phone, no call. A subscriber without a phone number is skipped and recorded, not sent to Twilio.
What Notifly adds on top of Twilio
Workflows around the send
One trigger runs a workflow: this provider’s step can sit beside in-app, email, SMS, push and chat steps, behind digest, delay and throttle steps.
Subscriber preferences, enforced at send
Before each step runs, the subscriber’s workflow and channel preferences are checked; an opted-out step is skipped and the reason is recorded.
An in-app Inbox next to it
The same workflow can write to the Notifly Inbox, a real-time in-app feed you embed with the React component or the JavaScript SDK.
Per-trigger provider parameters
Anything the trigger passes under overrides.providers.<provider id> is merged into the request Notifly sends to the provider, per workflow or per step.
Activity you can debug
Every message gets execution details in the activity feed, including the response or error the provider returned.
Secrets encrypted at rest
API keys, tokens and service accounts are stored encrypted with AES-256; new and re-saved credentials use authenticated AES-256-GCM. The table above marks which of this provider’s fields that covers.
Several accounts, one primary
Connect more than one account on this channel. The primary integration is the default; another active integration takes the send when its conditions match the subscriber or the tenant in the trigger’s context.
Go deeper in the docs
Frequently asked questions
Does Notifly support Twilio's EU (Ireland) region?
Yes. Set Data residency region to EU (Ireland) and Notifly creates the Twilio client on the ie1 region through the dublin edge. As the form says, use credentials created for that region. US (default) leaves the client on Twilio's default endpoint; no other region value is accepted.
Which Twilio credentials does Notifly need?
Your Account SID, your Auth token and a From number from your own Twilio account. The Auth token is stored encrypted at rest; the Account SID is stored as entered. Every SMS step in that environment is then sent by your account, on your Twilio pricing.
Where does the recipient's phone number come from?
From the subscriber's phone, which the trigger's to object can set or update in the same call; a phone field in the trigger payload takes precedence over it. When neither is available, Notifly skips the SMS step and records Subscriber missing phone number in the activity feed instead of calling Twilio.
Can I pass other Twilio message options?
Yes. Anything under overrides.providers.twilio is merged into the options Notifly passes to Twilio's messages.create, in the camelCase the Twilio library expects: for example statusCallback for your own status webhook, or validityPeriod to drop stale codes. overrides.steps.<stepId>.providers.twilio targets one SMS step.
How do I match a Notifly SMS to Twilio's message logs?
Notifly stores the Message SID Twilio returns as the message's provider id and records Twilio's response in the step's activity entry, so a Notifly message and a Twilio log line share the same SID. A refused send records Twilio's error there instead.
Bring your provider account. Keep your sender reputation.
One POST /v1/events/trigger — email, SMS, push, in-app, and chat. 10,000 events a month, free.