With SMS.to’s Gateway API, you can easily send SMS messages to customers in Hong Kong and around the world. Our API is quick to set up, cost-effective, and offers a range of features that help to streamline your communication needs.
*No credit card required

Our SMS Gateway is designed with developers in mind. Choose your programming language and start building with our adaptable SMS APIs.

The SMS.to Gateway is perfectly equipped to manage instant notifications, be it for OTP, 2FA, or general alerts.

We offer a robust, reliable service. Our Gateway is built to handle traffic redundancy, ensuring that no message is lost in the process, regardless of the volume.

Join the SMS.to community for free. Get your API key and you'll be ready to take full advantage of our SMS Gateway in less than 5 minutes.
Looking for cost-effective and flexible SMS bulk services in Hong Kong? Explore bulk purchase discounts by contacting sales. Our team is ready to assist in finding the ideal solution for your company.
Fill in the details below to calculate your
SMS campaign cost
SMS TO
estimated cost
Whether you run a fintech app, an online store or a customer service team in Hong Kong, SMS.to gives you one place to send transactional and marketing SMS. Protect accounts with OTP codes, confirm orders and payments, and keep customers informed with reminders and updates.
Sender ID rules differ by country and network. Our team checks what is supported in Hong Kong, including alphanumeric and numeric senders and any registration steps, before you go live, and helps you stay within local opt-in and content rules.
See the current per-message price for Hong Kong on the pricing page, or talk to sales about volume rates. You can also check numbers before sending with HLR and MNP Lookup to cut failed deliveries and costs.
Build SMS into your app, website or CRM for Hong Kong with a clean REST API, secure API keys and real-time delivery webhooks. Our docs include copy-and-paste examples in cURL, PHP, Node.js, Ruby, Python, Java and Go, and our support team helps you move from test to production.
curl --location 'https://api.sms.to/sms/send' \
--header 'Authorization: Bearer ' \
--header 'Content-Type: application/json' \
--data '{
"message": "This is test and \n this is a new line",
"to": "+35799999999999",
"bypass_optout": true,
"sender_id": "SMSto",
"callback_url": "https://example.com/callback/handler"
}'
'https://api.sms.to/sms/send',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"message": "This is test and \\n this is a new line",
"to": "+35799999999999",
"bypass_optout": true,
"sender_id": "SMSto",
"callback_url": "https://example.com/callback/handler"
}',
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer ',
'Content-Type: application/json'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
var https = require('follow-redirects').https;
var fs = require('fs');
var options = {
'method': 'POST',
'hostname': 'api.sms.to',
'path': '/sms/send',
'headers': {
'Authorization': 'Bearer ',
'Content-Type': 'application/json'
},
'maxRedirects': 20
};
var req = https.request(options, function (res) {
var chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function (chunk) {
var body = Buffer.concat(chunks);
console.log(body.toString());
});
res.on("error", function (error) {
console.error(error);
});
});
var postData = JSON.stringify({
"message": "This is test and \n this is a new line",
"to": "+35799999999999",
"bypass_optout": true,
"sender_id": "SMSto",
"callback_url": "https://example.com/callback/handler"
});
req.write(postData);
req.end();
require "uri"
require "json"
require "net/http"
url = URI("https://api.sms.to/sms/send")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer "
request["Content-Type"] = "application/json"
request.body = JSON.dump({
"message": "This is test and \n this is a new line",
"to": "+35799999999999",
"bypass_optout": true,
"sender_id": "SMSto",
"callback_url": "https://example.com/callback/handler"
})
response = https.request(request)
puts response.read_body
import http.client
import json
conn = http.client.HTTPSConnection("api.sms.to")
payload = json.dumps({
"message": "This is test and \n this is a new line",
"to": "+35799999999999",
"bypass_optout": True,
"sender_id": "SMSto",
"callback_url": "https://example.com/callback/handler"
})
headers = {
'Authorization': 'Bearer ',
'Content-Type': 'application/json'
}
conn.request("POST", "/sms/send", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\r\n \"message\": \"This is test and \\n this is a new line\",\r\n \"to\": \"+35799999999999\",\r\n \"bypass_optout\": true,\r\n \"sender_id\": \"SMSto\",\r\n \"callback_url\": \"https://example.com/callback/handler\"\r\n}");
Request request = new Request.Builder()
.url("https://api.sms.to/sms/send")
.method("POST", body)
.addHeader("Authorization", "Bearer ")
.addHeader("Content-Type", "application/json")
.build();
Response response = client.newCall(request).execute();
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://api.sms.to/sms/send"
method := "POST"
payload := strings.NewReader(`{`+"
"+`
"message": "This is test and \n this is a new line",`+"
"+`
"to": "+35799999999999",`+"
"+`
"bypass_optout": true,`+"
"+`
"sender_id": "SMSto",`+"
"+`
"callback_url": "https://example.com/callback/handler"`+"
"+`
}`)
client := &http.Client {
}
req, err := http.NewRequest(method, url, payload)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("Authorization", "Bearer ")
req.Header.Add("Content-Type", "application/json")
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
SMS integrations for your preferred platform
Get free Call & SMS credits on Sign-Up