Turn SMS into Revenue with the #1 sms messaging and automations brand and start converting customers.
Promotional, Transactional & Conversational Texts
Track & Convert your customers
An easy way to contact you
Adding rich content to SMS
Your business in a box
Turn customer Journeys into Revenue
Read More
Explore our targeted SMS solutions for diverse industries including retail, e-commerce, financial services, lead generation and more.
Streamline communications and ensure secure transactions.
Enhance your lead generation campaign strategies.
Making Healthcare better, with better communication.
Engage your audience and amplify your reach.
Turning travel into a stress-free journey with SMS.
Turn Shoppers into loyal customers with personalized SMS.
Get started with a set of comprehensive guides and documentation to help you start sending as quickly as possible.
Future-forward perspectives on our products
Be the master of your SMS strategy
A comprehensive set of guides to navigate our control panel
Drive revenue and enhance your customer engagement.
Integrate with one of our platform partners.
Information & data security is our priority
Transform customer experience and drive sales by instantly connecting with your audience.
Trusted by 10 000+ businesses
Our conversational commerce portal lets you engage with customers exactly when they want you to.
Become the master of your SMS strategy by grabbing your Free SMS Playbook and achieve an astounding 98% read rate.
Increase engagement with personalized SMS automations that trigger based on customer behavior.
Attach personalized, rich content to your text messages with our prebuilt landing page templates.
Segment and retarget those most likely to purchase by analyzing data and customer behavior.
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 }
Build the perfect messaging solution with our easy integration APIs and optimise for scale.
Choose your SMS plan and sending location
Try our Free plan and start testing. Ideal for getting started and exploring all of the SMSPortal products & functionality.
100 Free SMS
Choose your ideal plan or bundle size and Pay-as-you-Go. No Subscriptions, No Contracts and pay only for what you need.
From
per message
High volume senders can enjoy the Enterprise plan and receive account feature benefits, pricing and VIP support.
per SMS volume
Capitec enjoys all the benefits that come with SMSPortal's Messaging APIs and Tier 1 Network. Our APIs are quick and easy to implement, yet robust enough to support the scale of messaging at an enterprise level.
Woolworths use SMSPortal to increase customer engagement with a more immersive and interactive brand experience. They continue to elevate the retail experience with rich and engaging messaging using SMSPortal's Platform.
Send the right message, at the right time, to the right customer.
Understand your customer with feedback and analytics.
Connect all your tools and save time with our integration options.
Know exactly who to target with customer data and behavior.
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.
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.
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.