The SMS channel delivers messages to your subscribers’ mobile devices through your configured SMS provider integrations.
SMS is outbound-only in Novu. You can send SMS through workflows, but Novu does not receive or route inbound SMS replies. For two-way messaging, use a supported agent channel (Slack, Teams, WhatsApp, Telegram, or email) or handle inbound SMS with your provider’s webhooks directly.
How SMS delivery works in Novu
Here’s the typical flow for sending an SMS notification through Novu:
Add an SMS provider
Start by adding an SMS provider in the Integration Store on your Novu dashboard. You can connect one or more integrations for the different or the same providers.To learn how to add an SMS provider, refer to the guide for that provider.Add the SMS channel to your workflow
Next, include an SMS step in your workflow. This step defines when and how an SMS should be sent as part of your notification workflow.Define the SMS content
Within the SMS step editor, write the message body. The editor supports dynamic data for personalized content.Store subscriber phone number
Novu automatically sends the notification to the phone number stored on the subscriber’s profile. You must ensure that this field is set for any subscriber who needs to receive SMS messages. You can store subscribers phone number using the Novu API, or SDK.Trigger the workflow
Trigger the workflow from your application code by sending an event to Novu.
Novu automatically:
- Resolves the subscriber.
- Selects the correct provider.
- Renders the SMS template.
- Delivers the message through the configured SMS integration.
Some countries restrict using verified from sender IDs (name). Kindly check the country- and provider-specific requirements first.
Configuring SMS providers
To add an SMS provider from the Integration Store, you must configure settings and credentials that are specific to that SMS provider.
Default sender settings
The From field, which is displayed as the sender of the SMS, is a required default setting for any SMS provider that you connect. You can override this field during trigger if necessary.
Provider authentication
You must provide credentials specific to your SMS provider, such as:
- API key
- Auth token
- Account SID
- Username
- Password.
Each provider has different requirements.
Override SMS settings
You can override the SMS settings when triggerring a notification by passing the overrides object. The overrides object field supports an sms property and from, to, and content field overrides. This lets you send a message to a different recipient, from a different sender, or with a different content.
Node.js
Python
Go
PHP
.NET
Java
cURL
import { Novu } from '@novu/api';
const novu = new Novu({
secretKey: "<NOVU_SECRET_KEY>",
// Required if using EU region
// serverURL: "https://eu.api.novu.co",
});
await novu.trigger({
workflowId: "workflowId",
to: {
subscriberId: "subscriberId",
},
overrides: {
sms: {
to: '+123012345678',
from: 'Novu Team',
content: 'This SMS message is from overrides',
},
},
});
import os
import novu_py
from novu_py import Novu
with Novu(secret_key=os.getenv("NOVU_SECRET_KEY", "")) as novu:
novu.trigger(trigger_event_request_dto=novu_py.TriggerEventRequestDto(
workflow_id="workflowId",
to={"subscriber_id": "subscriberId"},
overrides={
"sms": {
"to": "+123012345678",
"from": "Novu Team",
"content": "This SMS message is from overrides",
},
},
))
import (
"context"
"os"
novugo "github.com/novuhq/novu-go"
"github.com/novuhq/novu-go/models/components"
)
s := novugo.New(novugo.WithSecurity(os.Getenv("NOVU_SECRET_KEY")))
_, err := s.Trigger(context.Background(), components.TriggerEventRequestDto{
WorkflowID: "workflowId",
To: components.CreateToSubscriberPayloadDto(components.SubscriberPayloadDto{
SubscriberID: "subscriberId",
}),
Overrides: map[string]map[string]any{
"sms": {
"to": "+123012345678",
"from": "Novu Team",
"content": "This SMS message is from overrides",
},
},
}, nil)
use novu;
use novu\Models\Components;
$sdk = novu\Novu::builder()
->setSecurity('<NOVU_SECRET_KEY>')
->build();
$sdk->trigger(
triggerEventRequestDto: new Components\TriggerEventRequestDto(
workflowId: 'workflowId',
to: new Components\SubscriberPayloadDto(subscriberId: 'subscriberId'),
overrides: [
'sms' => [
'to' => '+123012345678',
'from' => 'Novu Team',
'content' => 'This SMS message is from overrides',
],
],
),
);
using Novu;
using Novu.Models.Components;
using System.Collections.Generic;
var sdk = new NovuSDK(secretKey: "<NOVU_SECRET_KEY>");
await sdk.TriggerAsync(triggerEventRequestDto: new TriggerEventRequestDto() {
WorkflowId = "workflowId",
To = To.CreateSubscriberPayloadDto(new SubscriberPayloadDto() {
SubscriberId = "subscriberId",
}),
Overrides = new Overrides() {
Sms = new Dictionary<string, object>() {
{ "to", "+123012345678" },
{ "from", "Novu Team" },
{ "content", "This SMS message is from overrides" },
},
},
});
import co.novu.Novu;
import co.novu.models.components.*;
import java.util.Map;
Novu novu = Novu.builder()
.secretKey("<NOVU_SECRET_KEY>")
.build();
novu.trigger()
.body(TriggerEventRequestDto.builder()
.workflowId("workflowId")
.to(To2.of(SubscriberPayloadDto.builder()
.subscriberId("subscriberId")
.build()))
.overrides(TriggerEventRequestDtoOverrides.builder()
.sms(Map.of(
"to", "+123012345678",
"from", "Novu Team",
"content", "This SMS message is from overrides"))
.build())
.build())
.call();
curl -L -X POST 'https://api.novu.co/v1/events/trigger' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: ApiKey <NOVU_SECRET_KEY>' \
-d '{
"name": "workflowId",
"to": {
"subscriberId": "subscriberId"
},
"overrides": {
"sms": {
"to": "+123012345678",
"from": "Novu Team",
"content": "This SMS message is from overrides"
}
}
}'
Target a specific provider
By default, Novu uses your primary SMS provider. If you want to bypass this and force a specific, active integration for a trigger, then use the integrationIdentifier.
This is useful if you have multiple active integrations for different purposes. For example, you might have one integration for transactional SMS and one for security SMS. You can find the integrationIdentifier in the Integration Store of the Novu dashboard.
Node.js
Python
Go
PHP
.NET
Java
cURL
import { Novu } from '@novu/api';
const novu = new Novu({
secretKey: "<NOVU_SECRET_KEY>",
// Required if using EU region
// serverURL: "https://eu.api.novu.co",
});
await novu.trigger({
workflowId: "workflowId",
to: {
subscriberId: "subscriberId",
},
overrides: {
sms: { integrationIdentifier: 'infobip-abcdef', },
},
});
import os
import novu_py
from novu_py import Novu
with Novu(secret_key=os.getenv("NOVU_SECRET_KEY", "")) as novu:
novu.trigger(trigger_event_request_dto=novu_py.TriggerEventRequestDto(
workflow_id="workflowId",
to={"subscriber_id": "subscriberId"},
overrides={
"sms": {
"integrationIdentifier": "infobip-abcdef",
},
},
))
import (
"context"
"os"
novugo "github.com/novuhq/novu-go"
"github.com/novuhq/novu-go/models/components"
)
s := novugo.New(novugo.WithSecurity(os.Getenv("NOVU_SECRET_KEY")))
_, err := s.Trigger(context.Background(), components.TriggerEventRequestDto{
WorkflowID: "workflowId",
To: components.CreateToSubscriberPayloadDto(components.SubscriberPayloadDto{
SubscriberID: "subscriberId",
}),
Overrides: map[string]map[string]any{
"sms": {
"integrationIdentifier": "infobip-abcdef",
},
},
}, nil)
use novu;
use novu\Models\Components;
$sdk = novu\Novu::builder()
->setSecurity('<NOVU_SECRET_KEY>')
->build();
$sdk->trigger(
triggerEventRequestDto: new Components\TriggerEventRequestDto(
workflowId: 'workflowId',
to: new Components\SubscriberPayloadDto(subscriberId: 'subscriberId'),
overrides: [
'sms' => [
'integrationIdentifier' => 'infobip-abcdef',
],
],
),
);
using Novu;
using Novu.Models.Components;
using System.Collections.Generic;
var sdk = new NovuSDK(secretKey: "<NOVU_SECRET_KEY>");
await sdk.TriggerAsync(triggerEventRequestDto: new TriggerEventRequestDto() {
WorkflowId = "workflowId",
To = To.CreateSubscriberPayloadDto(new SubscriberPayloadDto() {
SubscriberId = "subscriberId",
}),
Overrides = new Overrides() {
Sms = new Dictionary<string, object>() {
{ "integrationIdentifier", "infobip-abcdef" },
},
},
});
import co.novu.Novu;
import co.novu.models.components.*;
import java.util.Map;
Novu novu = Novu.builder()
.secretKey("<NOVU_SECRET_KEY>")
.build();
novu.trigger()
.body(TriggerEventRequestDto.builder()
.workflowId("workflowId")
.to(To2.of(SubscriberPayloadDto.builder()
.subscriberId("subscriberId")
.build()))
.overrides(TriggerEventRequestDtoOverrides.builder()
.sms(Map.of("integrationIdentifier", "infobip-abcdef"))
.build())
.build())
.call();
curl -L -X POST 'https://api.novu.co/v1/events/trigger' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: ApiKey <NOVU_SECRET_KEY>' \
-d '{
"name": "workflowId",
"to": {
"subscriberId": "subscriberId"
},
"overrides": {
"sms": {
"integrationIdentifier": "infobip-abcdef"
}
}
}'
Supported providers
Here are the SMS providers that are currently supported by Novu. Select any provider to see its detailed setup guide.
46elks
Learn how to use the 46elks provider to send SMS notifications using Novu.
Africa's Talking
Learn how to use the Africa’s Talking provider to send SMS notifications using Novu.
AWS SNS
Learn how to use the AWS SNS provider to send SMS notifications using Novu.
Azure SMS
Learn how to use the Azure SMS provider to send SMS notifications using Novu.
BulkSMS
Learn how to use the BulkSMS provider to send SMS notifications using Novu.
Clickatell
Learn how to use the Clickatell provider to send SMS notifications using Novu.
Clicksend
Learn how to use the Clicksend provider to send SMS notifications using Novu.
Firetext
Learn how to use the Firetext provider to send SMS notifications using Novu.
Gupshup
Learn how to use the Gupshup provider to send SMS notifications using Novu.
Infobip - SMS
Learn how to use the Infobip - SMS provider to send SMS notifications using Novu.
Kannel
Learn how to use the Kannel provider to send SMS notifications using Novu.
Kudosity
Learn how to use the Kudosity provider to send SMS notifications using Novu.
MessageBird
Learn how to use the MessageBird provider to send SMS notifications using Novu.
Nexmo
Learn how to use the Nexmo provider to send SMS notifications using Novu.
Plivo
Learn how to use the Plivo provider to send SMS notifications using Novu.
Sendchamp
Learn how to use the Sendchamp provider to send SMS notifications using Novu.
SimpleTexting
Learn how to use the SimpleTexting provider to send SMS notifications using Novu.
SMS Central
Learn how to use the SMS Central provider to send SMS notifications using Novu.
SMS Webhook
Learn how to send SMS through your own HTTP API using Novu.
SMS77
Learn how to use the SMS77 provider to send SMS notifications using Novu.
SNS
Learn how to use the SNS provider to send SMS notifications using Novu.
Telnyx
Learn how to use the Telnyx provider to send SMS notifications using Novu.
Termii
Learn how to use the Termii provider to send SMS notifications using Novu.
Twilio
Learn how to use the Twilio provider to send SMS notifications using Novu.