C# Integration API :Unlimited SMS Using Android Mobile

Convert your Android phone into an SMS gateway. Save money by using your phone to send and receive SMS messages via a simple programmable API

C# SMS GATEWAY

C# Script

Just create a file named Gateway.cs in your project and paste the following code into it.

You also need to add Newtonsoft.Json NuGet package to your project.
You can get the API key from your : Account interface.

using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using System.Web;
using Gateway_Sample_Application.Properties;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace SMS
{
    static class API
    {
        private static readonly string Server = "https://app.sms8.io";
        private static readonly string Key = "YOUR API KEY";

        public enum Option
        {
            USE_SPECIFIED = 0,
            USE_ALL_DEVICES = 1,
            USE_ALL_SIMS = 2
        }

        /// <summary>
        /// Send single message to specific mobile number.
        /// </summary>
        /// <param name="number">The mobile number where you want to send message.</param>
        /// <param name="message">The message you want to send.</param>
        /// <param name="device">The ID of a device you want to use to send this message.</param>
        /// <param name="schedule">Set it to timestamp when you want to send this message.</param>
        /// <param name="isMMS">Set it to true if you want to send MMS message instead of SMS.</param>
        /// <param name="attachments">Comma separated list of image links you want to attach to the message. Only works for MMS messages.</param>
        /// <param name="prioritize">Set it to true if you want to prioritize this message.</param>
        /// <exception>If there is an error while sending a message.</exception>
        /// <returns>The dictionary containing information about the message.</returns>
        public static Dictionary<string, object> SendSingleMessage(string number, string message, string device = "0",
            long? schedule = null, bool isMMS = false, string attachments = null, bool prioritize = false)
        {
            var values = new Dictionary<string, object>
            {
                { "number", number },
                { "message", message },
                { "schedule", schedule },
                { "key", Key },
                { "devices", device },
                { "type", isMMS ? "mms" : "sms" },
                { "attachments", attachments },
                { "prioritize", prioritize ? 1 : 0 }
            };

            return GetObjects(GetResponse($"{Server}/services/send.php", values)["messages"])[0];
        }

        /// <summary>
        /// Send multiple messages to different mobile numbers.
        /// </summary>
        /// <param name="messages">The array containing numbers and messages.</param>
        /// <param name="option">Set this to USE_SPECIFIED if you want to use devices and SIMs specified in devices argument.
        /// Set this to USE_ALL_DEVICES if you want to use all available devices and their default SIM to send messages.
        /// Set this to USE_ALL_SIMS if you want to use all available devices and all their SIMs to send messages.</param>
        /// <param name="devices">The array of ID of devices you want to use to send these messages.</param>
        /// <param name="schedule">Set it to timestamp when you want to send this message.</param>
        /// <param name="useRandomDevice">Set it to true if you want to send messages using only one random device from selected devices.</param>
        /// <exception>If there is an error while sending messages.</exception>
        /// <returns>The array containing messages.</returns>
        public static Dictionary<string, object>[] SendMessages(List<Dictionary<string, string>> messages,
            Option option = Option.USE_SPECIFIED, string[] devices = null, long? schedule = null,
            bool useRandomDevice = false)
        {
            var values = new Dictionary<string, object>
            {
                { "messages", JsonConvert.SerializeObject(messages) },
                { "schedule", schedule },
                { "key", Key },
                { "devices", devices },
                { "option", (int)option },
                { "useRandomDevice", useRandomDevice }
            };

            return GetObjects(GetResponse($"{Server}/services/send.php", values)["messages"]);
        }

        /// <summary>
        /// Send a message to contacts in specified contacts list.
        /// </summary>
        /// <param name="listID">The ID of the contacts list where you want to send this message.</param>
        /// <param name="message">The message you want to send.</param>
        /// <param name="option">Set this to USE_SPECIFIED if you want to use devices and SIMs specified in devices argument.
        /// Set this to USE_ALL_DEVICES if you want to use all available devices and their default SIM to send messages.
        /// Set this to USE_ALL_SIMS if you want to use all available devices and all their SIMs to send messages.</param>
        /// <param name="devices">The array of ID of devices you want to use to send these messages.</param>
        /// <param name="schedule">Set it to timestamp when you want to send this message.</param>
        /// <param name="isMMS">Set it to true if you want to send MMS message instead of SMS.</param>
        /// <param name="attachments">Comma separated list of image links you want to attach to the message. Only works for MMS messages.</param>
        /// <exception>If there is an error while sending messages.</exception>
        /// <returns>The array containing messages.</returns>
        public static Dictionary<string, object>[] SendMessageToContactsList(int listID, string message,
            Option option = Option.USE_SPECIFIED, string[] devices = null, long? schedule = null, bool isMMS = false,
            string attachments = null)
        {
            var values = new Dictionary<string, object>
            {
                { "listID", listID },
                { "message", message },
                { "schedule", schedule },
                { "key", Key },
                { "devices", devices },
                { "option", (int)option },
                { "type", isMMS ? "mms" : "sms" },
                { "attachments", attachments }
            };

            return GetObjects(GetResponse($"{Server}/services/send.php", values)["messages"]);
        }

        /// <summary>
        /// Get a message using the ID.
        /// </summary>
        /// <param name="id">The ID of a message you want to retrieve.</param>
        /// <exception>If there is an error while getting a message.</exception>
        /// <returns>The dictionary containing information about the message.</returns>
        public static Dictionary<string, object> GetMessageByID(int id)
        {
            var values = new Dictionary<string, object>
            {
                { "key", Key },
                { "id", id }
            };

            return GetObjects(GetResponse($"{Server}/services/read-messages.php", values)["messages"])[0];
        }

        /// <summary>
        /// Get messages using the Group ID.
        /// </summary>
        /// <param name="groupID">The group ID of messages you want to retrieve.</param>
        /// <exception>If there is an error while getting messages.</exception>
        /// <returns>The array containing messages.</returns>
        public static Dictionary<string, object>[] GetMessagesByGroupID(string groupID)
        {
            var values = new Dictionary<string, object>
            {
                { "key", Key },
                { "groupId", groupID }
            };

            return GetObjects(GetResponse($"{Server}/services/read-messages.php", values)["messages"]);
        }

        /// <summary>
        /// Get messages using the status.
        /// </summary>
        /// <param name="status">The status of messages you want to retrieve.</param>
        /// <param name="deviceID">The deviceID of the device which messages you want to retrieve.</param>
        /// <param name="simSlot">Sim slot of the device which messages you want to retrieve. Similar to array index. 1st slot is 0 and 2nd is 1.</param>
        /// <param name="startTimestamp">Search for messages sent or received after this time.</param>
        /// <param name="endTimestamp">Search for messages sent or received before this time.</param>
        /// <exception>If there is an error while getting messages.</exception>
        /// <returns>The array containing messages.</returns>
        public static Dictionary<string, object>[] GetMessagesByStatus(string status, int? deviceID = null,
            int? simSlot = null, long? startTimestamp = null,
            long? endTimestamp = null)
        {
            var values = new Dictionary<string, object>
            {
                { "key", Key },
                { "status", status },
                { "deviceID", deviceID },
                { "simSlot", simSlot },
                { "startTimestamp", startTimestamp },
                { "endTimestamp", endTimestamp }
            };

            return GetObjects(GetResponse($"{Server}/services/read-messages.php", values)["messages"]);
        }

        /// <summary>
        /// Resend a message using the ID.
        /// </summary>
        /// <param name="id">The ID of a message you want to resend.</param>
        /// <exception>If there is an error while resending a message.</exception>
        /// <returns>The dictionary containing information about the message.</returns>
        public static Dictionary<string, object> ResendMessageByID(int id)
        {
            var values = new Dictionary<string, object>
            {
                { "key", Key },
                { "id", id }
            };

            return GetObjects(GetResponse($"{Server}/services/resend.php", values)["messages"])[0];
        }

        /// <summary>
        /// Resend messages using the Group ID.
        /// </summary>
        /// <param name="groupID">The group ID of messages you want to resend.</param>
        /// <param name="status">The status of messages you want to resend.</param>
        /// <exception>If there is an error while resending messages.</exception>
        /// <returns>The array containing messages.</returns>
        public static Dictionary<string, object>[] ResendMessagesByGroupID(string groupID, string status = null)
        {
            var values = new Dictionary<string, object>
            {
                { "key", Key },
                { "groupId", groupID },
                { "status", status }
            };

            return GetObjects(GetResponse($"{Server}/services/resend.php", values)["messages"]);
        }

        /// <summary>
        /// Resend messages using the status.
        /// </summary>
        /// <param name="status">The status of messages you want to resend.</param>
        /// <param name="deviceID">The deviceID of the device which messages you want to resend.</param>
        /// <param name="simSlot">Sim slot of the device which messages you want to resend. Similar to array index. 1st slot is 0 and 2nd is 1.</param>
        /// <param name="startTimestamp">Resend messages sent or received after this time.</param>
        /// <param name="endTimestamp">Resend messages sent or received before this time.</param>
        /// <exception>If there is an error while resending messages.</exception>
        /// <returns>The array containing messages.</returns>
        public static Dictionary<string, object>[] ResendMessagesByStatus(string status, int? deviceID = null,
            int? simSlot = null, long? startTimestamp = null,
            long? endTimestamp = null)
        {
            var values = new Dictionary<string, object>
            {
                { "key", Key },
                { "status", status },
                { "deviceID", deviceID },
                { "simSlot", simSlot },
                { "startTimestamp", startTimestamp },
                { "endTimestamp", endTimestamp }
            };

            return GetObjects(GetResponse($"{Server}/services/resend.php", values)["messages"]);
        }

        /// <summary>
        /// Add a new contact to contacts list.
        /// </summary>
        /// <param name="listID">The ID of the contacts list where you want to add this contact.</param>
        /// <param name="number">The mobile number of the contact.</param>
        /// <param name="name">The name of the contact.</param>
        /// <param name="resubscribe">Set it to true if you want to resubscribe this contact if it already exists.</param>
        /// <returns>A dictionary containing details about a newly added contact.</returns>
        public static Dictionary<string, object> AddContact(int listID, string number, string name = null,
            bool resubscribe = false)
        {
            var values = new Dictionary<string, object>
            {
                { "key", Key },
                { "listID", listID },
                { "number", number },
                { "name", name },
                { "resubscribe", resubscribe ? '1' : '0' },
            };
            JObject jObject = (JObject)GetResponse($"{Server}/services/manage-contacts.php", values)["contact"];
            return jObject.ToObject<Dictionary<string, object>>();
        }

        /// <summary>
        /// Unsubscribe a contact from the contacts list.
        /// </summary>
        /// <param name="listID">The ID of the contacts list from which you want to unsubscribe this contact.</param>
        /// <param name="number">The mobile number of the contact.</param>
        /// <returns>A dictionary containing details about the unsubscribed contact.</returns>
        public static Dictionary<string, object> UnsubscribeContact(int listID, string number)
        {
            var values = new Dictionary<string, object>
            {
                { "key", Key },
                { "listID", listID },
                { "number", number },
                { "unsubscribe", '1' }
            };
            JObject jObject = (JObject)GetResponse($"{Server}/services/manage-contacts.php", values)["contact"];
            return jObject.ToObject<Dictionary<string, object>>();
        }

        /// <summary>
        /// Get remaining message credits.
        /// </summary>
        /// <exception>If there is an error while getting message credits.</exception>
        /// <returns>The amount of message credits left.</returns>
        public static string GetBalance()
        {
            var values = new Dictionary<string, object>
            {
                { "key", Key }
            };
            JToken credits = GetResponse($"{Server}/services/send.php", values)["credits"];
            if (credits.Type != JTokenType.Null)
            {
                return credits.ToString();
            }

            return "Unlimited";
        }

        /// <summary>
        /// Send USSD request.
        /// </summary>
        /// <param name="request">USSD request you want to execute. e.g. *150#</param>
        /// <param name="device">The ID of a device you want to use to send this message.</param>
        /// <param name="simSlot">Sim you want to use for this USSD request. Similar to array index. 1st slot is 0 and 2nd is 1.</param>
        /// <exception>If there is an error while sending a USSD request.</exception>
        /// <returns>A dictionary containing details about USSD request that was sent.</returns>
        public static Dictionary<string, object> SendUssdRequest(string request, int device, int? simSlot = null)
        {
            var values = new Dictionary<string, object>
            {
                { "key", Key },
                { "request", request },
                { "device", device },
                { "sim", simSlot }
            };

            JObject jObject = (JObject)GetResponse($"{Server}/services/send-ussd-request.php", values)["request"];
            return jObject.ToObject<Dictionary<string, object>>();
        }

        /// <summary>
        /// Get a USSD request using the ID.
        /// </summary>
        /// <param name="id">The ID of a USSD request you want to retrieve.</param>
        /// <exception>If there is an error while getting a USSD request.</exception>
        /// <returns>A dictionary containing details about USSD request you requested.</returns>
        public static Dictionary<string, object> GetUssdRequestByID(int id)
        {
            var values = new Dictionary<string, object>
            {
                { "key", Key },
                { "id", id }
            };

            return GetObjects(GetResponse($"{Server}/services/read-ussd-requests.php", values)["requests"])[0];
        }

        /// <summary>
        /// Get USSD requests using the request text.
        /// </summary>
        /// <param name="request">The request text you want to look for.</param>
        /// <param name="deviceID">The deviceID of the device which USSD requests you want to retrieve.</param>
        /// <param name="simSlot">Sim slot of the device which USSD requests you want to retrieve. Similar to array index. 1st slot is 0 and 2nd is 1.</param>
        /// <param name="startTimestamp">Search for USSD requests sent after this time.</param>
        /// <param name="endTimestamp">Search for USSD requests sent before this time.</param>
        /// <exception>If there is an error while getting USSD requests.</exception>
        /// <returns>The array containing USSD requests.</returns>
        public static Dictionary<string, object>[] GetUssdRequests(string request, int? deviceID = null,
            int? simSlot = null, int? startTimestamp = null, int? endTimestamp = null)
        {
            var values = new Dictionary<string, object>
            {
                { "key", Key },
                { "request", request },
                { "deviceID", deviceID },
                { "simSlot", simSlot },
                { "startTimestamp", startTimestamp },
                { "endTimestamp", endTimestamp }
            };

            return GetObjects(GetResponse($"{Server}/services/read-ussd-requests.php", values)["requests"]);
        }

        /// <summary>
        /// Get all enabled devices.
        /// </summary>
        /// <exception>If there is an error while getting devices.</exception>
        /// <returns>The array containing all enabled devices</returns>
        public static Dictionary<string, object>[] GetDevices()
        {
            var values = new Dictionary<string, object>
            {
                { "key", Key }
            };

            return GetObjects(GetResponse($"{Server}/services/get-devices.php", values)["devices"]);
        }

        private static Dictionary<string, object>[] GetObjects(JToken messagesJToken)
        {
            JArray jArray = (JArray)messagesJToken;
            var messages = new Dictionary<string, object>[jArray.Count];
            for (var index = 0; index < jArray.Count; index++)
            {
                messages[index] = jArray[index].ToObject<Dictionary<string, object>>();
            }

            return messages;
        }

        private static JToken GetResponse(string url, Dictionary<string, object> postData)
        {
            var request = (HttpWebRequest)WebRequest.Create(url);
            var dataString = CreateDataString(postData);
            var data = Encoding.UTF8.GetBytes(dataString);

            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = data.Length;
            ServicePointManager.Expect100Continue = true;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            using (var stream = request.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);
            }

            var response = (HttpWebResponse)request.GetResponse();

            if (response.StatusCode == HttpStatusCode.OK)
            {
                using (StreamReader streamReader = new StreamReader(response.GetResponseStream()))
                {
                    var jsonResponse = streamReader.ReadToEnd();
                    try
                    {
                        JObject jObject = JObject.Parse(jsonResponse);
                        if ((bool)jObject["success"])
                        {
                            return jObject["data"];
                        }

                        throw new Exception(jObject["error"]["message"].ToString());
                    }
                    catch (JsonReaderException)
                    {
                        if (string.IsNullOrEmpty(jsonResponse))
                        {
                            throw new InvalidDataException(
                                "Missing data in request. Please provide all the required information to send messages.");
                        }

                        throw new Exception(jsonResponse);
                    }
                }
            }

            throw new WebException($"HTTP Error : {(int)response.StatusCode} {response.StatusCode}");
        }

        private static string CreateDataString(Dictionary<string, object> data)
        {
            StringBuilder dataString = new StringBuilder();
            bool first = true;
            foreach (var obj in data)
            {
                if (obj.Value != null)
                {
                    if (first)
                    {
                        first = false;
                    }
                    else
                    {
                        dataString.Append("&");
                    }

                    dataString.Append(HttpUtility.UrlEncode(obj.Key));
                    dataString.Append("=");
                    dataString.Append(obj.Value is string[]
                        ? HttpUtility.UrlEncode(JsonConvert.SerializeObject(obj.Value))
                        : HttpUtility.UrlEncode(obj.Value.ToString()));
                }
            }

            return dataString.ToString();
        }
    }
}

Send Single Message

try
{
    // Send a message using the primary device.
    SMS.API.SendSingleMessage("+11234567890", "This is a test of single message.");

    // Send a message using the Device ID 1.
    Dictionary<string, object> message = SMS.API.SendSingleMessage("+11234567890", "This is a test of single message.", "1");
    
    // Send a prioritize message using Device ID 1 for purpose of sending OTP, message reply etc…
    Dictionary<string, object> message = SMS.API.SendSingleMessage("+11234567890", "This is a test of single message.", "1", null, false, null, true);
    
    // Send a MMS message using the Device ID 1.
    string attachments = "https://example.com/images/footer-logo.png,https://example.com/downloads/sms-gateway/images/section/create-chat-bot.png";
    Dictionary<string, object> message = SMS.API.SendSingleMessage("+11234567890", "This is a test of single message.", "1", null, true, attachments);
	
    // Send a message using the SIM in slot 1 of Device ID 1 (Represented as "1|0").
    // SIM slot is an index so the index of the first SIM is 0 and the index of the second SIM is 1.
    // In this example, 1 represents Device ID and 0 represents SIM slot index.
    Dictionary<string, object> message = SMS.API.SendSingleMessage("+11234567890", "This is a test of single message.", "1|0");

    // Send scheduled message using the primary device.
    long timestamp = (long) DateTime.UtcNow.AddMinutes(2).Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
    Dictionary<string, object> message = SendSingleMessage(textBoxNumber.Text, textBoxMessage.Text, null, timestamp);
    
    MessageBox.Show("Successfully sent a message.");
}
catch (Exception exception)
{
    MessageBox.Show(exception.Message, "!Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

Send Bulk Messages

List<Dictionary<string, string>> messages = new List<Dictionary<string, string>>();
for (int i = 1; i <= 12; i++)
{
    var message = new Dictionary<string, string>
    {
        { "number", "+11234567890" },
        { "message", "This is a test #{$i} of C# version. Testing bulk message functionality." }
    };
    messages.Add(message);
}

try
{
    // Send messages using the primary device.
    SMS.API.SendMessages(messages);

    // Send messages using default SIM of all available devices. Messages will be split between all devices.
    SMS.API.SendMessages(messages, SMS.API.Option.USE_ALL_DEVICES);

    // Send messages using all SIMs of all available devices. Messages will be split between all SIMs.
    SMS.API.SendMessages(messages, SMS.API.Option.USE_ALL_SIMS);

    // Send messages using only specified devices. Messages will be split between devices or SIMs you specified.
    // If you send 12 messages using this code then 4 messages will be sent by Device ID 1, other 4 by SIM in slot 1 of 
    // Device ID 2 (Represendted as "2|0") and remaining 4 by SIM in slot 2 of Device ID 2 (Represendted as "2|1").
    SMS.API.SendMessages(messages, SMS.API.Option.USE_SPECIFIED, new [] {"1", "2|0", "2|1"});
    
    // Send messages on schedule using the primary device.
    long timestamp = (long) DateTime.UtcNow.AddMinutes(2).Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
    Dictionary<string, object>[] messages = SMS.API.SendMessages(messages, Option.USE_SPECIFIED, null, timestamp);
    
    // Send a message to contacts in contacts list with ID of 1.
    Dictionary<string, object>[] messages = SMS.API.SendMessageToContactsList(1, "Test", SMS.API.Option.USE_SPECIFIED, new [] {"1"});

    // Send a message on schedule to contacts in contacts list with ID of 1.
    Dictionary<string, object>[] messages = SMS.API.SendMessageToContactsList(1, "Test #1", Option.USE_SPECIFIED, null, timestamp);
    
    string attachments = "https://example.com/images/footer-logo.png,https://example.com/downloads/sms-gateway/images/section/create-chat-bot.png";
    List<Dictionary<string, string>> mmsMessages = new List<Dictionary<string, string>>();
    for (int i = 1; i <= 12; i++)
    {
        var message = new Dictionary<string, string>
        {
            { "number", "+11234567890" },
            { "message", "This is a test #{$i} of C# version. Testing bulk MMS message functionality." },
            { "type", "mms" },
            { "attachments", attachments }
        };
        mmsMessages.Add(message);
    }
    
    // Send messages using all SIMs of all available devices. Messages will be split between all SIMs.
    SMS.API.SendMessages(messages, SMS.API.Option.USE_ALL_SIMS);
    
    MessageBox.Show("Success");
}
catch (Exception exception)
{
    MessageBox.Show(exception.Message, "!Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

Get remaining message credits

try
{
    string credits = SMS.API.GetBalance();
    MessageBox.Show($"Message Credits Remaining: {credits}");
}
catch (Exception exception)
{
    MessageBox.Show(exception.Message, "!Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

Get messages and their current status

try 
{
    // Get a message using the ID.
    Dictionary<string, object> message = SMS.API.GetMessageByID(1);

    // Get messages using the Group ID.
    Dictionary<string, object>[] messages = SMS.API.GetMessagesByGroupID(")V5LxqyBMEbQrl9*J$5bb4c03e8a07b7.62193871");
    
    // Get messages received in last 24 hours.
    long timestamp = (long) DateTime.UtcNow.AddHours(-24).Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
    messages = GetMessagesByStatus("Received", null, null, timestamp);
    
    // Get messages received on SIM 1 of device ID 8 in last 24 hours.
    messages = GetMessagesByStatus("Received", 8, 0, timestamp);
}
catch (Exception exception)
{
    MessageBox.Show(exception.Message, "!Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

Resend messages

try 
{
    // Resend a message using the ID.
    Dictionary<string, object> message = SMS.API.ResendMessageByID(1);

    // Resend messages using the Group ID and Status.
    Dictionary<string, object>[] messages = SMS.API.ResendMessagesByGroupID("LV5LxqyBMEbQrl9*J$5bb4c03e8a07b7.62193871", "Failed");
    
    // Resend pending messages in last 24 hours.
    long timestamp = (long) DateTime.UtcNow.AddHours(-24).Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
    messages = ResendMessagesByStatus("Pending", null, null, timestamp);
    
    // Resend pending messages sent using SIM 1 of device ID 8 in last 24 hours.
    messages = ResendMessagesByStatus("Pending", 8, 0, timestamp);
}
catch (Exception exception)
{
    MessageBox.Show(exception.Message, "!Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

Manage Contacts

try {
    // Add a new contact to contacts list 1 or resubscribe the contact if it already exists.
    Dictionary<string, object> contact = SMS.API.AddContact(1, "+11234567890", "Test C#", true);
    
    // Unsubscribe a contact using the mobile number.
    Dictionary<string, object> contact = UnsubscribeContact(1, "+11234567890");
}
catch (Exception exception)
{
    MessageBox.Show(exception.Message, "!Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

Send USSD request

try {
    // Send a USSD request using default SIM of Device ID 1.
    Dictionary<string, object> ussdRequest = SendUssdRequest("*150#", 1);
    
    // Send a USSD request using SIM in slot 1 of Device ID 1.
    Dictionary<string, object> ussdRequest = SendUssdRequest("*150#", 1, 0);
    
    // Send a USSD request using SIM in slot 2 of Device ID 1.
    Dictionary<string, object> ussdRequest = SendUssdRequest("*150#", 1, 1);
}
catch (Exception exception)
{
    MessageBox.Show(exception.Message, "!Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

Get USSD requests

try {
    // Get a USSD request using the ID.
    Dictionary<string, object> ussdRequest = GetUssdRequestByID(1);
    
    // Get USSD requests with request text "*150#" sent in last 24 hours.
    Dictionary<string, object>[] ussdRequests = GetUssdRequests("*150#", null, null, time() - 86400);
}
catch (Exception exception)
{
    MessageBox.Show(exception.Message, "!Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

Get Devices

try {
    // Get all enabled devices for sending messages.
    Dictionary<string, object> devices = GetDevices();
}
catch (Exception exception)
{
    MessageBox.Show(exception.Message, "!Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

Trusted by 3,781+ happy users who have sent or received more than 1,000,000+ messages.

Help Center

Frequently Asked Questions

If you still cannot find the answer to your question, send us an Email or ask in chat box .

The SMS8 application works only on Android phones at the moment since Apple doesn't allow you to install a custom SMS messaging app

SMS8 gateway application can run on any of the following Android verions: KitKat, Oreo, Lollipop, Pie, Marshmallow, 10, Nougat .
So you can install the application on your old Android phone which you don't use anymore.

Yes, your mobile device needs to be permanently connected to internet, using mobile data or wireless.

You can send SMS messages using the phone numbers added to the platform. Choose the sender ID or let it be sent randomly.

SMS8.io has a Free Plan . If your requirements are higher, you can upgrade to one of our Premium Plans.
An additional cost would be the SMS Plan from your Network Provider, which often includes unlimited SMS messages.