Join over 100,000 happy developers who have discovered how easy it is to integrate our SMS API with their website, app, software or CRM application. Simply send a mobile number and message to our gateway and the SMS text will be delivered in seconds.

We support all languages (including PHP, .NET, C#, Java, Python, Ruby) – you simply open a webpage on a URL to get started.

 

Free API to send through our SMS gateway

Our Platinum Partner Operator status guarantees the highest quality text service at up to 8,000 messages a second. What’s more, our SMS API can personalise messages, receive delivery receipts, schedule messages and pull results from mobile forms and surveys into your app. Our SMS gateway can also handle tickets, enabling you to send individual vouchers or tickets. Try sending a message using our API today.

Receive text messages online

Receive text messages from an inbox with our inbound SMS API. Using your free API key, you can get the latest messages from one or more inboxes. Messages can either be returned as either JSON or XML for easy inclusion in your own app, CRM or system. Test our inbound SMS API and register for a free API key today.

Fully supported SMS gateway

Cut and paste our SMS API code and your free API key to start sending and receiving text messages in minutes. Our API gateway is fully supported with detailed documentation and full developer SMS code examples. See how you can integrate into our SMS API gateway and read all of our supporting documents here.

Manage your account using our clever API features

Using our SMS API, you can do much more than just send and receive text messages. You can manage contacts, create or delete contact groups, form a short URL, retrieve SMS or MMS balances, and retrieve message reports. Textlocal’s SMS API is the most versatile and flexible API gateways on the planet. Sign up for a free API key and try our gateway in minutes.

Easily integrate with our API

Refer to the code below to see how easily you can integrate our SMS API with your own software, CRM application or website in a language you already use.

Send SMS

Sorry, we do not have an example in the language you have chosen.
<%
	uname = "youremail@address.com"
	hash = "Your API hash"
	address = "http://api.txtlocal.com/send/?"
	message = "This is your message"
	message = Server.urlencode(message)
	numbers = "447123456789"
	sender = "Jims Autos"
	url = address & "username=" & uname & "&hash=" & hash & "&numbers=" & numbers & "&message=" & message & "&sender=" & sender
	set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")
	xmlhttp.open "POST", url, false
	xmlhttp.send ""
	msg = xmlhttp.responseText
	response.write(msg)
	set xmlhttp = nothing
%>
<%
	uname = "youremail@address.com"
	hash = "Your API hash"
	address = "http://api.txtlocal.com/send/?"
	message = "This is your message"
	message = Server.urlencode(message)
	numbers = "447123456789"
	sender = "Jims Autos"
	url = address & "username=" & uname & "&hash=" & hash & "&numbers=" & numbers & "&message=" & message & "&sender=" & sender
	set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")
	xmlhttp.open "GET", url, false
	xmlhttp.send ""
	msg = xmlhttp.responseText
	response.write(msg)
	set xmlhttp = nothing
%>
<%@ Import Namespace="System.Net" %>
<%@ Import Namespace="System.IO" %>

<script runat="server" language="VB">

    Sub Page_Load(sender As Object, e As EventArgs)

        Dim Username As String = "YourEmail@Domain.com"
        Dim Hash As String = "YourHash"
        Dim SenderName As String = "MyName"
        Dim Number As String = "447123456789"
        Dim Message As String = "This is an API message"
        Dim URL As String = "http://api.txtlocal.com/send/?"
        Dim PostData As String = "username=" & Username & "&hash=" & Hash & "&sender=" & SenderName & "&numbers=" & Number & "&message=" & Message
        Dim req As HttpWebRequest = WebRequest.Create(URL)
        req.Method = "POST"
        Dim encoding As New ASCIIEncoding()
        Dim byte1 As Byte() = encoding.GetBytes(PostData)
        req.ContentType = "application/x-www-form-urlencoded"
        req.ContentLength = byte1.Length
        Dim newStream As Stream = req.GetRequestStream()
        newStream.Write(byte1, 0, byte1.Length)

        Try
            Dim resp As HttpWebResponse = req.GetResponse()
            Dim sr As New StreamReader(resp.GetResponseStream())
            Dim results As String = sr.ReadToEnd()
            sr.Close()
            html.Text = results
        Catch wex As WebException
	  Response.Write("SOMETHING WENT AWRY!
Status: " & wex.Status & "Message: " & wex.Message & "")
        End Try
    End Sub

</script>
<%@ Import Namespace="System.Net" %>
<%@ Import Namespace="System.IO" %>

<script runat="server" language="VB">

    Sub Page_Load(sender As Object, e As EventArgs)

        Dim Username As String = "youremail@domain.com"
        Dim Hash As String = "YourHash"
        Dim SenderName As String = "MyName"
        Dim Number As String = "447123456789"
        Dim Message As String = "This is an API message"

        Dim URL As String = "http://api.txtlocal.com/send/?username=" & Username & "&hash=" & Hash & "&sender=" & SenderName & "&numbers=" & Number & "&message=" & Message
        Dim req As HttpWebRequest = WebRequest.Create(URL)

        Try
            Dim resp As HttpWebResponse = req.GetResponse()
            Dim sr As New StreamReader(resp.GetResponseStream())
            Dim results As String = sr.ReadToEnd()
            sr.Close()

            html.Text = results
        Catch wex As WebException
	  Response.Write("SOMETHING WENT AWRY!
Status: " & wex.Status & "Message: " & wex.Message & "")
        End Try
    End Sub

</script>
using System;
using System.Collections.Generic;
using System.Net;
using System.Collections.Specialized;

namespace sendSMS
{
    class sendSMS
    {
        public string sendSMS()
        {
            String message = HttpUtility.UrlEncode("This is your message");
            using (var wb = new WebClient())
            {
                byte[] response = wb.UploadValues("http://api.txtlocal.com/send/", new NameValueCollection()
                {
                {"username" , "youremail@address.com"},
                {"hash" , "Your API hash"},
                {"numbers" , "447123456789"},
                {"message" , message},
                {"sender" , "Jims Autos"}
                });
                string result = System.Text.Encoding.UTF8.GetString(response);
                return result;
            }
        }
    }
}
using System;
using System.Collections.Generic;
using System.Net;
using System.Collections.Specialized;
using System.IO;

namespace sendSMS
{
	class sendSMS
	{
		public string sendSMS()
		{
		String result;
		string userName = "youremail@address.com";
		string hash = "Your API hash";
		string numbers = "447123456789"; // in a comma seperated list
		string message = "This is your message";
		string sender = "Jims Autos";

		String url = "http://api.txtlocal.com/send/?username=" + userName + "&hash=" + hash + "&numbers=" + numbers + "&message=" + message + "&sender=" + sender;
		//refer to parameters to complete correct url string

		StreamWriter myWriter = null;
		HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(url);

		objRequest.Method = "POST";
		objRequest.ContentLength = Encoding.UTF8.GetByteCount(url);
		objRequest.ContentType = "application/x-www-form-urlencoded";
		try
		{
			myWriter = new StreamWriter(objRequest.GetRequestStream());
			myWriter.Write(url);
		}
		catch (Exception e)
		{
			return e.Message;
		}
		finally
		{
			myWriter.Close();
		}

		HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse();
		using (StreamReader sr = new StreamReader(objResponse.GetResponseStream()))
		{
			result = sr.ReadToEnd();
			// Close and clean up the StreamReader
			sr.Close();
		}
		return result;
		}
	}
}
function SendSMS(Username, Password, Sender, Numbers,
      Message: String):string;
    const
      URL = 'http://api.txtlocal.com/send/?username=%s&hash=%s&sender=%s&numbers=%s&message=%s';
      ResponseSize = 1024;
    var
      hSession, hURL: HInternet;
      Request: String;

      ResponseLength: Cardinal;
    begin
      hSession := InternetOpen('DrBob42', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
      try
        Request := Format(URL,[Username,Password,Sender,Numbers,HttpEncode(Message)]);
        hURL := InternetOpenURL(hSession, PChar(Request), nil, 0,0,0);
        try
          SetLength(Result, ResponseSize);
          InternetReadFile(hURL, PChar(Result), ResponseSize,
            ResponseLength);
          SetLength(Result, ResponseLength)
        finally
          InternetCloseHandle(hURL)
        end
      finally
        InternetCloseHandle(hSession)
      end
    end;
function getURLContent(const Url: string): string;
var
  NetHandle: HINTERNET;
  UrlHandle: HINTERNET;
  Buffer: array[0..1024] of Char;
  BytesRead: dWord;
begin
  Result := '';
  NetHandle := InternetOpen('Delphi 5.x', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);

  if Assigned(NetHandle) then
  begin
    UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);

    if Assigned(UrlHandle) then
      { UrlHandle valid? Proceed with download }
    begin
      FillChar(Buffer, SizeOf(Buffer), 0);
      repeat
        Result := Result + Buffer;
        FillChar(Buffer, SizeOf(Buffer), 0);
        InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead);
      until BytesRead = 0;
      InternetCloseHandle(UrlHandle);
    end
    else
      { UrlHandle is not valid. Raise an exception. }
      raise Exception.CreateFmt('Cannot open URL %s', [Url]);

    InternetCloseHandle(NetHandle);
  end
  else
    { NetHandle is not valid. Raise an exception }
    raise Exception.Create('Unable to initialize Wininet');
end;

  u := 'http://api.txtlocal.com/send/?' + 'username=user' + '&hash=hash' + '&message=message' + '&sender=sender' + '&numbers=447123456789';
  GetUrlContent(u);
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

public class sendSMS {
	public String sendSms() {
		try {
			// Construct data
			String user = "username=" + "youremail@address.com";
			String hash = "&hash=" + "Your API hash";
			String message = "&message=" + "This is your message";
			String sender = "&sender=" + "Jims Autos";
			String numbers = "&numbers=" + "447123456789";

			// Send data
			HttpURLConnection conn = (HttpURLConnection) new URL("http://api.txtlocal.com/send/?").openConnection();
			String data = user + hash + numbers + message + sender;
			conn.setDoOutput(true);
			conn.setRequestMethod("POST");
			conn.setRequestProperty("Content-Length", Integer.toString(data.length()));
			conn.getOutputStream().write(data.getBytes("UTF-8"));
			final BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
			final StringBuffer stringBuffer = new StringBuffer();
			String line;
			while ((line = rd.readLine()) != null) {
				stringBuffer.append(line);
			}
			rd.close();

			return stringBuffer.toString();
		} catch (Exception e) {
			System.out.println("Error SMS "+e);
			return "Error "+e;
		}
	}
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

public class sendSMS {
	public String sendSms() {
		try {
			// Construct data
			String user = "username=" + URLEncoder.encode("youremail@address.com", "UTF-8");
			String hash = "&hash=" + URLEncoder.encode("Your API hash", "UTF-8");
			String message = "&message=" + URLEncoder.encode("This is your message", "UTF-8");
			String sender = "&sender=" + URLEncoder.encode("Jims Autos", "UTF-8");
			String numbers = "&numbers=" + URLEncoder.encode("447123456789", "UTF-8");

			// Send data
			String data = "http://api.txtlocal.com/send/?" + user + hash + numbers + message + sender;
			URL url = new URL(data);
			URLConnection conn = url.openConnection();
			conn.setDoOutput(true);

			// Get the response
			BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
			String line;
			String sResult="";
			while ((line = rd.readLine()) != null) {
			// Process line...
				sResult=sResult+line+" ";
			}
			rd.close();

			return sResult;
		} catch (Exception e) {
			System.out.println("Error SMS "+e);
			return "Error "+e;
		}
	}
}
#!/usr/bin/perl

use strict;
use LWP::UserAgent;
use HTTP::Request::Common;

my $username = 'youremail@address.com';
my $hash = 'Your API hash';
my $sender = "Jims Autos";
my $numbers = "447123456789";
my $message = "This is your message";
my $ua = LWP::UserAgent->new();

my $res = $ua->request
(
 POST 'http://api.txtlocal.com/send/?',
 Content_Type  => 'application/x-www-form-urlencoded',
 Content       => [
			'username'    => $username,
			'hash'    => $hash,
			'numbers' => $numbers,
			'message'    => $message,
			'sender'       => $sender
                  ]
);

if ($res->is_error) { die "HTTP Errorn"; }
print "Response:nn" . $res->content . "nn";
#!/usr/bin/perl

use LWP::Simple;

my $user = "username=" . 'youremail@address.com';
my $hash = "&hash=" . "Your API hash";
my $message = "&message=" . "This is your message";
my $sender = "&sender=" . "Jims Autos";
my $number = "&numbers=" . "447123456789";

my $getString = join "", "http://api.txtlocal.com/send/?", $user, $hash , $message , $sender , $number;
my $contents = get($getString);
print "$contents";
<?php
	// Textlocal account details
	$username = 'youremail@address.com';
	$hash = 'Your API hash';

	// Prepare data for POST request
	$data = array('username' => $username, 'hash' => $hash);

	// Send the POST request with cURL
	$ch = curl_init('http://api.txtlocal.com/get_templates/');
	curl_setopt($ch, CURLOPT_POST, true);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	$response = curl_exec($ch);
	curl_close($ch);

	// Process your response here
	echo $response;
?>
<?php
	// Textlocal account details
	$username = urlencode('youremail@address.com');
	$hash = urlencode('Your API hash');

	// Prepare data for POST request
	$data = 'username=' . $username . '&hash=' . $hash;

	// Send the GET request with cURL
	$ch = curl_init('http://api.txtlocal.com/get_templates/?' . $data);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	$response = curl_exec($ch);
	curl_close($ch);

	// Process your response here
	echo $response;
?>
<?php
	require('textlocal.class.php');

	$textlocal = new Textlocal('youremail@address.com', 'Your API Hash');

	$numbers = array(447123456789);
	$sender = 'Jims Autos';
	$message = 'This is your message';

	$response = $textlocal->sendSms($numbers, $message, $sender);
	print_r($response);
?>
#!/usr/bin/env python

import urllib.request
import urllib.parse

def sendSMS(uname, hashCode, numbers, sender, message):
    data =  urllib.parse.urlencode({'username': uname, 'hash': hashCode, 'numbers': numbers,
        'message' : message, 'sender': sender})
    data = data.encode('utf-8')
    request = urllib.request.Request("http://api.txtlocal.com/send/?")
    f = urllib.request.urlopen(request, data)
    fr = f.read()
    return(fr)

resp =  sendSMS('user', 'hash', '447123456789',
    'Jims Autos', 'This is your message')
print (resp)
#!/usr/bin/env python

import urllib.request
import urllib.parse

def sendSMS(uname, hashCode, numbers, sender, message):
    params = {'username': uname, 'hash': hashCode, 'numbers': numbers,
        'message' : message, 'sender': sender}
    f = urllib.request.urlopen('http://api.txtlocal.com/send/?'
        + urllib.parse.urlencode(params))
    return (f.read(), f.code)

resp, code = sendSMS('user', 'hash', '447123456789',
    'Jims Autos', 'Test with an ampersand (&) and a £5 note')
print (resp)
require "rubygems"
require "net/https"
require "uri"
require "json"

requested_url = 'http://api.txtlocal.com/send/?'

uri = URI.parse(requested_url)
http = Net::HTTP.start(uri.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)

res = Net::HTTP.post_form(uri, 'username' => 'youremail@address.com', 'hash' => 'Your API Hash', 'message' => 'This is your message', 'sender' => 'Ben', 'numbers' => '447123456789')
response = JSON.parse(res.body)
puts (response)
require "rubygems"
require "net/https"
require "uri"
require "json"

uname = "youremail@address.com"
hash = "Your API Hash"
numbers = "447123456789"
message = "This is your message"
sender = "Jims Autos"

requested_url = 'http://api.txtlocal.com/send/?' + "username=" + uname + "&hash=" + hash + "&numbers=" + numbers + "&message=" + URI.escape(message) + "&sender=" + sender

uri = URI.parse(requested_url)
http = Net::HTTP.start(uri.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)

res = http.request(request)
response = JSON.parse(res.body)
puts (response)
Public Sub Send()
	Dim username As String
	Dim password As String
	Dim result As String
	Dim myURL As String
	Dim Sender As String
	Dim numbers As String
	Dim Message As String
	Dim postData As String
	Dim winHttpReq As Object
	username = "youremail@address.com"
	hash = "Your API hash"
	Sender = "Jims Autos"
	numbers = "447123456789"
	Message = "This is your message"

	Set winHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")

	myURL = "http://api.txtlocal.com/send/?"
	postData = "username=" + username + "&hash=" + hash + "&message=" + Message + "&numbers=" + numbers + "&sender=" + Sender

	winHttpReq.Open "POST", myURL, False
	winHttpReq.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
	winHttpReq.Send (postData)

	SendSMS_textlocal = winHttpReq.responseText
End Sub
Public Sub Send()
	Dim username As String
	username = "username=" + "youremail@address.com"
	Dim hash As String
	hash = "&hash=" + "Your API hash"
	Dim message As String
	message = "&message=" + "This is your message"
	Dim sender As String
	sender = "&sender=" + "Jims Autos"
	Dim numbers As String
	numbers = "&numbers=" + "447123456789"

	Set MyRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
	MyRequest.Open "GET", "http://api.txtlocal.com/send/?" + username + hash + message + sender + numbers
	MyRequest.Send
	MsgBox MyRequest.ResponseText
End Sub
Imports System.Web
Imports System.IO
Imports System.Net
Imports System.Text
Imports System.Resources

Public Class sendSMS

    Public Function sendSMS()
        Dim uname = "youremail@address.com"
        Dim hash = "Your API hash"
        Dim message = "This is your message"
        Dim numbers = "447123456789"
        Dim strPost As String
        Dim sender = "Jims Autos"
        Dim url As String = "http://api.txtlocal.com/send/?"
        Dim strPost As String

        strPost = url + "username=" + uname _
        + "&hash=" + hash _
        + "&numbers=" + numbers _
        + "&message=" + WebUtility.UrlEncode(message) _
        + "&sender=" + sender

        Dim request As WebRequest = WebRequest.Create(strPost)
        request.Method = "POST"
        Dim byteArray As Byte() = Encoding.UTF8.GetBytes(strPost)
        request.ContentType = "application/x-www-form-urlencoded"
        request.ContentLength = byteArray.Length
        Dim dataStream As Stream = request.GetRequestStream()
        dataStream.Write(byteArray, 0, byteArray.Length)
        dataStream.Close()

        Dim response As WebResponse = request.GetResponse()
        dataStream = response.GetResponseStream()
        Dim reader As New StreamReader(dataStream)
        Dim responseFromServer As String = reader.ReadToEnd()
        Console.WriteLine(responseFromServer)
        Console.ReadLine()

        reader.Close()
        dataStream.Close()
        response.Close()

        If responseFromServer.Length > 0 Then
            Return responseFromServer
        Else
            Return CType(response, HttpWebResponse).StatusDescription
        End If
    End Function
End Class
Imports System.Net
Imports System.Web
Imports System.Collections.Specialized
Imports System.IO
Imports System.Text

Public Class sendSMS

    Public Function sendSMS()

        Dim uname = "youremail@address.com"
        Dim hash = "Your API hash"
        Dim message = "This is your message"
        Dim numbers = "447123456789"
        Dim strGet As String
        Dim sender = "Jims Autos"
        Dim url As String = "http://api.txtlocal.com/send/?"

        strGet = url + "username=" + uname _
        + "&hash=" + hash _
        + "&numbers=" + numbers _
        + "&message=" + WebUtility.UrlEncode(message) _
        + "&sender=" + sender

        Dim webClient As New System.Net.WebClient
        Dim result As String = webClient.DownloadString(strGet)
        Console.WriteLine(result)
        Return result
    End Function
End Class

Caution: Some users opt to place their request inside a code loop, while testing we highly recommend setting the test parameter to true, as occasionally an infinite loop can occur and users can consume all their credits very quickly.

Parameters

sender

Use this field to specify the sender name for your message. This must be at least 3 characters in length but no longer than 11 alphanumeric characters or 13 numeric characters.

message

The message content. This parameter should be no longer than 765 characters. See Helpful Information for message length details. The message also must be URL Encoded to support symbols like &.

Login Parameters
username

The email address used to log into Textlocal.

hash

Your secure hash can be found within Messenger in the main navigation under “Help->All Documentation“. Alternatively you can use the password parameter instead and use your Textlocal password in plain text.

apiKey

This can be used instead of the username/hash/password. You can create them in your Messenger Control Panel (click here) for each application, and limit the usage of them by host IP Address.

Optional Parameters
numbers

Comma-delimited list of mobile numbers in international format (i.e. 447123456789). Maximum of 10,000 numbers and error code 33 will be returned if exceeded.

group_id

This parameter can be used in place of the numbers parameter in order to send to an entire contact group. This parameter should contain the ID of the relevant group, which can found either within Messenger (in the “Reports” – “Advanced Reports” – “List of Group ID’s” section) or by running the get_groups command. Additionally group 5 contains “contacts” and group 6 contains “opt-outs”.

simple_reply

Set to true to enable the Simple Reply Service for the message. This will override any sender value, as a Simple Reply Service number will be used instead.

schedule_time

This parameter can be used to specify a schedule date/time for your message, which should be provided in Unix timestamp format. Times should be provided in GMT.

receipt_url

Use this field to specify an alternative URL to which the delivery receipt(s) will be sent. See handling receipts documentation.

custom

This value will be set against the message batch and will passed back in the delivery receipts. This allows you to match delivery receipts to their corresponding messages.

optouts

Can be set to true in order to check against your own opt-outs list and Textlocal’s global opt-outs database. Your message will not be sent to numbers within these lists. If not provided defaults to false.

validity

Can be set, up to 72 hours in advance, to say after which time, you don’t want the message delivered. This should be in a Unix timestamp format.

unicode

Set this value to true to specify that your message body will contain unicode characters. See Encoding/Decoding Unicode Documentation

test

Set this field to true to enable test mode, no messages will be sent and your credit balance will be unaffected. If not provided defaults to false

Note: While both numbers and group_id are optional parameters, one or the other must be included in the request for the message to be sent.
You can also send Link Tracked Surveys out via the API. View Sending Surveys via the API for more information.

API features

Send to contact groups

Send bulk text messages via POST or send multiple messages with GET to contact groups already saved on the platform.

Simple contact management

Create or retrieve contacts from your Textlocal account with our SMS API. Add bulk contacts or create contact groups using C#, Java, PHO, Python and Ruby.

Get text messages from your inbox

Use your free account API to retrieve text messages from your online account. Reponses are given either by JSON or XML.

Create custom reports

Retrieve the history of a single or group message send. Our API will return results by JSON or XML and can even be used to report on the status of Email to SMS and campaigns sent through our SMS gateway.

Read our SMS API documents

Our SMS API is the world’s most scalable and reliable API for sending and receiving bulk, personalised text messages. It’s also the most supported too. With detailed documentation and a world class mobile development team based in the UK. Read our documents to see how you can start using our API.

Before coming to Textlocal our system ran using Twilio, which we found had numerous delivery problems with certain networks. Messages would get delayed and then sent through after other messages on a frequent basis, confusing our customer base. The Textlocal admin is very easy to use and has a wide range of features that put other providers to shame. Would highly recommend them for someone looking for a UK provider.

—Michael Austin, Borntohula Limited

  • Borntohula Limited – API, reliable text delivery speed