iconTrusted by 10,000+ businesses

Turn SMS into revenue

Transform customer experience and drive sales by instantly connecting with your audience.

Trusted by 10 000+ businesses

Get the right message across

Our conversational commerce portal lets you engage with customers exactly when they want you to.

Reach millions with
1:1 engagement

Become the master of your SMS strategy by grabbing your Free SMS Playbook and achieve an astounding 98% read rate.

Convert more
customers at scale

Increase engagement with personalized SMS automations that trigger based on customer behavior.

Expand the conversation with
rich content

Attach personalized, rich content to your text messages with our prebuilt landing page templates.

Predict your most
valuable customers

Segment and retarget those most likely to purchase by analyzing data and customer behavior.

Or build it with our APIs

Create a scalable messaging solution in minutes.


											
using System.Net.Http.Headers;
using System.Text;

public class Program
{
    public static async Task Main()
    {
        var apiKey = "";
        var apiSecret = "";

      
        var apiCredentials = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{apiKey}:{apiSecret}"));

        
        var jsonSendRequest =
            "{ \"messages\" : [ { \"content\" : \"Hello SMS World from C#\", \"destination\" : \">>Your test phone number<<\" } ] }";

        using var httpClient = new HttpClient();

        var request = new HttpRequestMessage(HttpMethod.Post, "https://rest.smsportal.com/BulkMessages")
        {
            Content = new StringContent(jsonSendRequest, Encoding.UTF8, "application/json"),
            Headers =
            {
                Authorization = new AuthenticationHeaderValue("Basic", apiCredentials),
            }
        };

        try
        {
            var response = await httpClient.SendAsync(request);


            if (response.IsSuccessStatusCode)
            {
                Console.WriteLine("Success:");
                Console.WriteLine(await response.Content.ReadAsStringAsync());
            }
            else
            {
                Console.WriteLine("Failure:");
                Console.WriteLine(await response.Content.ReadAsStringAsync());
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("Something went wrong during the network request.");
            Console.WriteLine(e);
        }
    }
}
												
											

											
import java.util.Base64;
import java.util.Base64.Encoder;
import java.nio.charset.StandardCharsets;
import java.io.IOException;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.net.URISyntaxException;

public class JavaExample {
    public static void main(String[] args) throws URISyntaxException {

        String apiKey = "";
        String apiSecret = "";
        String accountApiCredentials = apiKey + ":" + apiSecret;

        Encoder base64Encoder = Base64.getUrlEncoder();
        byte[] credentialBytes = accountApiCredentials.getBytes(StandardCharsets.UTF_8);
        String base64Credentials = base64Encoder.encodeToString(credentialBytes);

        HttpClient client = HttpClient.newHttpClient();
        String requestBody = "{ \"messages\" : [ { \"content\" : \"Hello SMS World from Java\", \"destination\" : \">>Your test phone number<<\" } ] }";
        HttpRequest request = HttpRequest.newBuilder()
            .uri(new URI("https://rest.smsportal.com/BulkMessages"))
            .header("Authorization", String.format("Basic %s", base64Credentials))
            .header("Accept", "application/json")
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(requestBody))
            .build();

        try {
            HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());

            if (response.statusCode() == 200) {
                System.out.println("Success:");
                System.out.println(response.body());
            } else {
                System.out.println("Failure:");
                System.out.println(response.body());
            }
        } catch (Exception e) {
            System.out.println("Something went wrong during the network request.");
            e.printStackTrace();
        }
    }
}												
											

											
$apiKey = '';
$apiSecret = '';
$accountApiCredentials = $apiKey . ':' . $apiSecret;

$base64Credentials = base64_encode($accountApiCredentials);
$authHeader = 'Authorization: Basic ' . $base64Credentials;

$sendData = '{ "messages" : [ { "content" : "Hello SMS World from PHP", "destination" : ">>Your test phone number<<" } ] }';

$options = array(
    'http' => array(
        'header' => array("Content-Type: application/json", $authHeader),
        'method' => 'POST',
        'content' => $sendData,
        'ignore_errors' => true
    )
);

$sendResult = file_get_contents('https://rest.smsportal.com/bulkmessages', false, stream_context_create($options));

$status_line = $http_response_header[0];
preg_match('{HTTP\/\S*\s(\d{3})}', $status_line, $match);
$status = $match[1];

if ($status === '200') {
    echo "Success:\n";
    var_dump($sendResult);
} else {
    echo "Failure:\n";
    var_dump($sendResult);
}												
											

											
import requests
from requests.auth import HTTPBasicAuth

apiKey = ''
apiSecret = ''

basic = HTTPBasicAuth(apiKey, apiSecret)

sendRequest = {
    "messages": [{"content": "Hello SMS World from Python", "destination": ">>Your test phone number<<"}]
}

try:
    sendResponse = requests.post("https://rest.smsportal.com/bulkmessages",
                                 auth=basic,
                                 json=sendRequest)

    if sendResponse.status_code == 200:
        print("Success:")
        print(sendResponse.json())
    else:
        print("Failure:")
        print(sendResponse.json())
except Exception as e:
    print(e)												
											

											
package main

import (
	"bytes"
	b64 "encoding/base64"
	"fmt"
	"io/ioutil"
	"net/http"
)

func main() {

	var apiKey string = ""
	var apiSecret string = ""

	accountApiCredentials := b64.StdEncoding.EncodeToString([]byte(apiKey + ":" + apiSecret))

    client := &http.Client{}

    jsonSendRequest := "{ \"messages\" : [ { \"content\" : \"Hello SMS World\", \"destination\" : \">>Your test phone number<<\" } ] }"

	sendReq, _ := http.NewRequest("POST", "https://rest.smsportal.com/bulkmessages", bytes.NewBuffer([]byte(jsonSendRequest)))
	sendReq.Header.Add("Content-Type", "application/json")
	sendReq.Header.Add("Authorization", fmt.Sprintf("Basic %s", accountApiCredentials))

	sendResp, err := client.Do(sendReq)

	if err == nil {
		defer sendResp.Body.Close()
		sendRespBody, _ := ioutil.ReadAll(sendResp.Body)

		if sendResp.StatusCode == 200 {
			fmt.Println("Success:")
			fmt.Println(string(sendRespBody))
		} else {
			fmt.Println("Failure:")
			fmt.Println(string(sendRespBody))
		}
	} else {
		fmt.Println("Something went wrong during the network request.")
		fmt.Println(err)
	}
}												
											

											
const axios = require('axios');

let apiKey = '';
let apiSecret = '';
let accountApiCredentials = apiKey + ':' + apiSecret;

let buff = new Buffer.from(accountApiCredentials);
let base64Credentials = buff.toString('base64');

let requestHeaders = {
    headers: {
        'Authorization': `Basic ${base64Credentials}`,
        'Content-Type': 'application/json'
    }
};

let requestData = JSON.stringify({
    messages: [{
        content: "Hello SMS World from NodeJS",
        destination: ">>Your test phone number<<"
    }]
});

axios.post('https://rest.smsportal.com/bulkmessages', requestData, requestHeaders)

    .then(response => {
        if (response.data) {
            console.log("Success:");
            console.log(response.data);
        }
    })
    .catch(error => {
        if (error.response) {
            console.log("Failure:");
            console.log(error.response.data);
        } else {
            console.log("Something went wrong during the network request.");
        }
    });												
											

											
require 'net/https'
require 'uri'

apiKey = ''
apiSecret = ''

uri = URI.parse("https://rest.smsportal.com/bulkmessages")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

sendRequestBody = '{"messages": [{"content": "Hello SMS World from Ruby", "destination": ">>Your test phone number<<"}}]'

request = Net::HTTP::Post.new(uri.request_uri)
request.basic_auth(apiKey, apiSecret)
request.body = sendRequestBody
request.content_type = 'application/json'

sendResponse = http.request(request)

if sendResponse.code == '200'
    puts 'Success:'
    puts sendResponse.body
else
    puts 'Failure:'
    puts sendResponse.body
end												
											

											
$apiKey = "";
$apiSecret = "";
$accountApiCredentials = "$($apiKey):$($apiSecret)";

$credentialBytes = [System.Text.Encoding]::UTF8.GetBytes($accountApiCredentials)
$base64Credentials =[Convert]::ToBase64String($credentialBytes)

$body = '{ "messages" : [ { "content" : "Hello SMS World from Powershell", "destination" : ">>Your test phone number<<" } ] }'

$sendEndpoint = "https://rest.smsportal.com/bulkmessages";
$sendHeaders = @{
    'Authorization' = "Basic $($base64Credentials)"
    'Content-Type' = 'application/json'
}

try
{
    $sendresponse = Invoke-WebRequest -Uri $sendEndpoint -Method Post -Headers $sendHeaders -Body $body -ErrorAction Stop;

    $sendResponseBody = $sendresponse.Content | ConvertFrom-Json
    $sendResponseBody
}
catch
{
    $reader = New-Object System.IO.StreamReader($_.Exception.Response.GetResponseStream())
    $reader.BaseStream.Position = 0
    $reader.DiscardBufferedData()
    $errorResponse = $reader.ReadToEnd() | ConvertFrom-Json

    $errorResponse
}												
											

Integrate with an API built for simplicity.

Build the perfect messaging solution with our easy integration APIs and optimise for scale.

Choose your plan

Choose your SMS plan and sending location

TO

Free

Try our Free plan and start testing. Ideal for getting started and exploring all of the SMSPortal products & functionality.

 

$0

100 Free SMS

Recommended

Standard

Choose your ideal plan or bundle size and Pay-as-you-Go. No Subscriptions, No Contracts and pay only for what you need.

From

$0.08

per message

Enterprise

High volume senders can enjoy the Enterprise plan and receive account feature benefits, pricing and VIP support.

 

Get in touch

per SMS volume

10,000+ companies choose us

Retail

Send targeted messages to your customers with special offers, coupons, and reminders. SMS boasts a 98% open rate, ensuring that your messages will be read. Our platform is designed with retailers in mind, enjoy features like automated SMS, Rich-content and real-time analytics.

Ecommerce

Boost sales and engagement for your e-commerce business. Send transactional messages, discounts, and recommend products to keep your customers engaged. Real-time tracking analytics lets you see how customers behave and optimizes your marketing campaigns for better results.

Finance

When it comes to the finance industry, trust and reliability are key. SMS from trusted brands has a proven ROI. With features like 2-factor authentication and fraud alerts, SMS can help boost security and protect your customers' sensitive information. Trust us to help you grow your finance business.

icon paper aeroplane

Unlock the potential of SMS

Be the master of your SMS strategy with our tactical Playbook to drive repeat purchases and sales.