SMS API for developers that sends in minutes
Launch fast with a developer-friendly SMS API. Get a free sms api key and expand your customer reach.
Trusted by teams worldwide. Uptime designed for production use.
*No credit card required
+1,000 BUSINESSES USE SMS.to FOR THEIR needs
Why teams choose our SMS gateway API
Why teams choose our SMS gateway API
-
High deliverability with smart routing and delivery receipts.
-
Fast setup. Create a key and send your first text in minutes.
-
Two-way SMS with webhooks for real-time replies and DLRs.
-
Scales from one message to millions for transactional and marketing use.
-
Privacy-first design, GDPR aligned, and project-level access controls.
-
Global reach with local features like sender IDs and number types where available.
-
Developer support with SDKs, code samples and a status page.
Notification SMS
Send instant SMS notifications for order confirmations, transactions, reminders and activity
Appointment Reminders
Remind your customers of their appointments to reduce no-shows. Integrate with your CRM or Calendar
SMS Marketing & Newsletters
Effortlessly send bulk SMS to a global audience, reaching a multitude of recipients worldwide in no time
Surveys & Feedback Requests
Quickly connect with your customers using our 2-way SMS connectivity for swift and interactive communication
Cover customer journeys from login to loyalty
OTP and 2FA with a secure text messaging API
Send one-time passcodes reliably. Reduce drop-offs with fast delivery, short TTL control and verified sender options where supported. Add smart fallback to other channels like WhatsApp, Viber, RCS and Telegram if needed.
Real-time notifications via a text message service API
Confirm orders, alert on payments, and push delivery updates. Track delivery with DLR webhooks and keep customers informed without manual work.
Appointment and delivery reminders
Cut no-shows and missed drops. Schedule reminders and include short links you can track.
Bulk and campaign messaging via an SMS messaging API
Run promotions and updates at scale. Use your contact lists and custom fields. Track clicks with short-link analytics.
Surveys and two-way support with a texting API
Collect quick feedback or resolve issues in a simple thread. Route replies to your app or CRM using webhooks.
Prefer Postman? We can provide a ready collection for Send, Status and Webhook tests.
Ask us to enable this on your account.
Working in a CMS or backend framework?
Get the SDKs.
Seamless SMS Integration With Our SMS API
Our SMS API provides you with the tools to send and receive SMS messages programmatically, making it easy to incorporate SMS communication into your existing systems.
- Effortless Integration
- Enhanced Connectivity
- Seamless API
- Instant Messaging
- Programmatic Control
- Streamlined Communication
SMS API For Developers
Implement SMS marketing notifications, OTPs or reminders into your workflow and build apps that send SMS messages with our SMS API.
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))
}
GET API KEY →
Quickstart checklist:

Sign up and copy your API key.

Paste the code sample.

Send your first SMS and watch the DLR webhook fire.
Prefer Postman? We can provide a ready collection for Send, Status and Webhook tests.
Ask us to enable this on your account.
Working in a CMS or backend framework?
Get the SDKs.
Pricing that’s predictable as you grow
Pay as you go with volume discounts. No setup fees.
Get free SMS credits when you sign up. Rate limits and destination rules may apply. Tell us if you need higher limits for load testing.
Reliability, compliance and support you can show your stakeholders
- Uptime shown on our public status page.
- Retries and queuing so transient issues do not block you.
- Secure webhooks with signing tips and IP allowlisting patterns.
- Opt-in and opt-out tools to respect user preferences.
- Short-link tracking to measure engagement.
- Privacy. We follow GDPR and can provide a DPA on request. If you have compliance questions for your region, contact support and we will advise you.
About sender IDs and number rules:
In most countries you can use a sender ID, but many require registration or pre-approval for A2P traffic, including 10DLC in the US. If a sender is not registered or does not meet local rules, delivery and throughput may be reduced or blocked. We will guide you on the best setup for each market.
What Our Users Say
Seamless Integrations
With Your Favorite Tools
SMS integrations for your preferred platform
Ready to see your first messages land?
Start for free and send your first SMS today.
If you prefer a walkthrough, we can help you set up delivery settings, including your sender ID options, webhooks for delivery receipts and replies, and any country-specific requirements.
FAQ
It is a REST interface that lets your app send and receive text messages. You make HTTPS requests with your API key, and we deliver to carriers. You get delivery receipts and inbound messages via webhooks.
New users receive a bundle of free credits to try SMS.to from the web app (UI). These credits are intended for test messages to your own phone number so you can confirm delivery and see the flow. They are not a free, unlimited API allowance. To send via the API, you’ll need an active balance or plan after sign-up. If you’re evaluating the API, we’ll show you how to send a quick test to your number and what’s needed for production sending.
Use the free credits in the web app to send a few test messages to your own phone number and confirm delivery. These credits are UI-only. We don’t offer a separate free API sandbox. To test the API programmatically, add a small balance, send to your own number in a staging environment, and use a <code>callback_url</code> to observe delivery receipts before you go live.
Yes. You can receive replies and delivery events to your webhook URL. Examples are included.
Look at deliverability, pricing by country, webhook quality, number options (long numbers, toll-free numbers, short codes), support SLAs and uptime transparency. If you want omnichannel and smart fallback, that is a plus.
Yes. Free options are for testing only. Production sends follow your plan and local rules. Rate limits protect the platform. We can raise limits for valid load tests.
Yes. You can send OTPs, alerts, reminders and campaigns. Marketing sends must follow opt-in rules.
Yes. You can view delivery, clicks and response patterns to improve your message strategy.
We do not support anonymous sending. Create an account, verify your phone number, and use the free sign-up credits in the web app to send a few messages to your own number. These are real deliveries, not mock sends. To message other numbers or use the API, add a small balance or a plan and complete any required compliance steps.