Build Apps that communicate with everyone in the world

Simple SMS API by developer for developer
Sign up

No contracts. Pay for what you use. Scale up on demand.

Effective

Reach any phone, anywhere, with the speed and power of our APIs and carrier network.

Reliable

Local carrier connectivity around the world that scales up or down with your usages.

Long Messages

Avoid the 160-char maximum and deliver up to 9 multi-part messages as one SMS.

Trusted by companies like ...

Not just another Messaging API. A powerful software platform to simplify your development and deliver solutions.

Packages (Thailand)

฿0.35 / sms
฿50,000
142,857 sms
Unlimited
Sender Name
฿0.40 / sms
฿20,000
50,000 sms
Unlimited
Sender Name
฿0.45 / sms
฿10,000
22,222 sms
Unlimited
Sender Name
฿0.50 / sms
฿1,000
2,000 sms
Unlimited
Sender Name
* Get the same rate in next purchase
** Prices do not include 7% VAT
We support sending messages to all countries in the world
For international rates click here

Use cases

Marketing Campaigns

Targeted, localized campaigns and promotions.

Alerts

Urgent message delivery. A high performance, reliable SMS platform.

Verify

Two-factor authentication (2FA) and One-time password (OTP) solutions to safeguard key transactions.

Notifications

Share delivery updates, appointment reminders, transaction confirmations and more.

Usage

curl -i -X POST "https://api.apitel.co/sms" \ -H "Content-Type:application/json" \ -d \ '{ "to": "+661234567890", "from": "ATSMS", "text": "A text message", "apiKey": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "apiSecret": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }'
const fetch = require('node-fetch'); const body = { to: '+661234567890', from: 'ATSMS', text: 'A text message', apiKey: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', apiSecret: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' }; fetch('https://api.apitel.co/sms', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) }) .then(res => res.json()) .then(json => console.log(json)) .catch(err => console.error(err));
<?php $data = array( "to" => "+661234567890", "from" => "ATSMS", "text" => "A text message", "apiKey" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "apiSecret" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" ); $data_string = json_encode($data); $ch = curl_init('https://api.apitel.co/sms'); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data_string)) ); $result = curl_exec($ch); $http_code = curl_getinfo( $ch, CURLINFO_HTTP_CODE ); if ( $http_code == "200" ){ echo 'Successful! Server responded with:'.$result; }else{ echo 'Failed! Server responded with:'.$result; } curl_close( $ch ); ?>
require 'net/http' require 'uri' require 'json' uri = URI.parse("https://api.apitel.co/sms") header = {'Content-Type': 'application/json'} body = { to: "+661234567890", from: "ATSMS", text: "A text message", apiKey: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", apiSecret: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" } http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Post.new(uri.request_uri, header) request.body = body.to_json response = http.request(request) if response.is_a?(Net::HTTPSuccess) puts "Successful! Server responded with: #{response.body }" else puts "Failed! Server responded with: #{response.body }" end
import requests body = { 'to': "+661234567890", 'from': "ATSMS", 'text': "A text message", 'apiKey': "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", 'apiSecret': "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" } r = requests.post('https://api.apitel.co/sms', json=body) if r.status_code >= 200 and r.status_code < 300: print('Successful! Server responded with:', r.json()) else: print('Failed! Server responded with:', r.json())
import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import java.io.IOException; // This example requires Apache HTTP Components dependency, // you can access the full documentation for more examples from link below. // http://hc.apache.org/httpcomponents-client-ga // http://hc.apache.org/httpcomponents-client-ga/examples.html public class SendSmsMain { public static void main(String[] args) throws IOException { SendSms(); } public static void SendSms() throws IOException { HttpClient httpclient = HttpClients.createDefault(); HttpPost httppost = new HttpPost("https://api.apitel.co/sms"); String body = "{\"to\":\"+661234567890\"" + ", \"from\":\"ATSMS\"" + ",\"text\":\"A text message\"" + ",\"apiKey\":\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"" + ",\"apiSecret\":\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"}"; httppost.setEntity(new StringEntity(body, "UTF-8")); httppost.addHeader("Content-Type", "application/json"); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); String responseBody = entity != null ? EntityUtils.toString(entity) : null; int status = response.getStatusLine().getStatusCode(); if (status >= 200 && status < 300) { System.out.println("Successful! Server responded with:" + responseBody); } else { System.out.println("Failed! Server responded with:" + responseBody); } } }
using System; using System.Net.Http; using System.Text; using System.Threading.Tasks; namespace apitel_test { class Program { static void Main(string[] args) { SendSmsAsync().Wait(); } private static async Task SendSmsAsync() { using (HttpClient client = new HttpClient()) { var url = "https://api.apitel.co/sms"; var body = "{\"to\":\"+661234567890\"" + ", \"from\":\"ATSMS\"" + ",\"text\":\"A text message\"" + ",\"apiKey\":\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"" + ",\"apiSecret\":\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"}"; var payload = new StringContent(body, Encoding.UTF8, "application/json"); var response = await client.PostAsync(url, payload); using (HttpContent content = response.Content) { string result = await content.ReadAsStringAsync(); if (response.StatusCode == System.Net.HttpStatusCode.OK) { Console.WriteLine("Successful! Server responded with:" + result); } else { Console.WriteLine("Failed! Server responded with:" + result); } } } } } }