OneSignal Help & Documentation

Welcome to the OneSignal New IA developer hub. You'll find comprehensive guides and documentation to help you start working with OneSignal New IA as quickly as possible, as well as support if you get stuck. Let's jump right in!

Get Started    Discussions

SMS Quickstart

Setup instructions for SMS


Feature in Beta :hammer:

We are still hard at work on this feature and welcome all feedback!


OneSignal’s SMS feature allows you to create and send SMS easily to your users. To send SMS from OneSignal, you will need:

  1. An account with Twilio (SMS platform)
  2. Twilio SID and Auth Token to setup OneSignal
  3. Import Subscriber Phone numbers

Acquiring Phone Numbers

From phone numbers: Phone numbers to send SMS from
Acquire From phone numbers on Twilio or use your phone numbers (but you can only send SMS within your country using your number).

To/Audience Phone Numbers:
Twilio and OneSignal require all user phone numbers to be in the E.164 format. More details on the format can be found on Wikipedia.


For Twilio trial accounts (that is, if you have not upgraded your Twilio account), recipient phone numbers need to be registered on Twilio before they can receive SMS

Setup Flow

Step 1 Platform Selection

For a new application, choose the SMS channel from the list of platforms.

To add SMS to an existing application, go to the Application Settings → Platform, choose the SMS channel from the list of platforms.

Step 2 Twilio Account Setup

Enter the Twilio Account SID and Auth Token to allow OneSignal to fetch the From phone numbers and send SMS.

OneSignal Configuration Screen - Twilio Details

You can get these account details from your Twilio Account Dashboard.

Twilio Console

Step 3 Select Default “From” Phone number

Once the Twilio account is successfully verified, OneSignal will automatically fetch all the From phone numbers associated with your Twilio account.

You can choose a “default” phone number from your registered numbers to send SMS. You can also choose a different From phone number on the SMS creation page if you prefer to not use the default From Number.

Step 4 Add SDK Code

If you have not done so, we always recommend updating the OneSignal SDK to the latest version to get access to the latest features.


SMS vs Push Records

SMS and Push subscribers will have separate OneSignal Player IDs (user records). This is to manage the case where a user opts-out of one you can still send messages to the other.


Note on Network Latency

If there are networking issues, functions may take 30+ seconds to return. In the code examples below we provide callbacks to track when these return.

Make sure to keep functions from blocking the user interface, otherwise your app may appear unresponsive to the user.

Setting the User's SMS number

The setSMSNumber method allows you to set the user's SMS number with the OneSignal SDK. We offer several overloaded versions of this method.

[OneSignal setSMSNumber:@"+123456789"];

If you have a backend server, we strongly recommend using Identity Verification with your users. Your backend can generate an SMS authentication token and send it to your app or website. The following code also includes callbacks:

String smsNumber = "+123456789";
String smsAuthHash = "..."; // SMS auth hash generated from your server
OneSignal.setSMSNumber(smsNumber, smsAuthHash, new OneSignal.OSSMSUpdateHandler() {
  public void onSuccess(JSONObject result) {
    // SMS successfully synced with OneSignal

  public void onFailure(OneSignal.OSSMSUpdateError error) {
    // Error syncing SMS, check error.getType() and error.getMessage() for details
NSString *smsHashToken = @"..."; //generated on your backend server
NSString *smsNumber = @"+123456789";
[OneSignal setSMSNumber:smsNumber withSMSAuthHashToken:smsHashToken withSuccess:^(NSDictionary *results) {
  // SMS successfully synced with OneSignal
} withFailure:^(NSError *error) {
  // Error syncing SMS, check error.getType() and error.getMessage() for details
let smsHashToken = "..." //generated on your backend server
let smsNumber = "+123456789"
OneSignal.setSMSNumber(smsNumber, withSMSAuthHashToken: smsHashToken, withSuccess: {
    //The SMS number has successfully been set.
}) { (error) in
    //Encountered an error while setting the SMS number.

Logging Out

If your app or website implements logout functionality, you can call logoutSMSNumber to dissociate the SMS from the device:

[OneSignal logoutSMSNumber];

SMS Subscription Observer

App only - We have also added an sms subscription observer to track changes to SMS subscriptions (ie. the user sets their SMS number or logs out). In order to subscribe to SMS subscription changes you can implement the following:

OneSignal.addSMSSubscriptionObserver(stateChanges -> {
    // Work with state changes          
[OneSignal addSMSSubscriptionObserver:self];
OneSignal.add(self as OSSMSSubscriptionObserver)

Now, whenever the email subscription changes, this method will be called:

OSSMSSubscriptionObserver subscriptionObserver = new OSSMSSubscriptionObserver() {
   public void  public void onSMSSubscriptionChanged(OSSMSSubscriptionStateChanges stateChanges) {
-(void)onOSSMSSubscriptionChanged:(OSSMSSubscriptionStateChanges *)stateChanges {
func onOSSMSSubscriptionChanged(_ stateChanges: OSSMSSubscriptionStateChanges!) { 

Step 5 Optional Steps

Import SMS Subscribers
Before you send an SMS, you need to import your phone number subscribers to OneSignal. Learn more about the various ways you can import phone number subscribers here.

Test the Twilio-OneSignal configuration
With a verified Twilio account and From number list fetched, you can immediately start sending SMS to your audience using OneSignal. However, if you wish to first test if the Twilio-OneSignal integration is successful, you can use the Test Configuration step to verify. Simply enter a phone number and click on Send Test Message to get an automated test SMS on the phone number entered.

Updated 15 days ago

SMS Quickstart

Setup instructions for SMS

Suggested Edits are limited on API Reference Pages

You can only suggest edits to Markdown body content, but not to the API spec.