SMS HTTP API: Send an SMS with a Single HTTP Request
Our SMS HTTP API sends a DLT-compliant SMS from any software that can call a link. Put your API key, sender ID, number and message in one GET or POST request. The reply comes back as plain text: a broadcast ID, or a short error code.

An SMS HTTP API is a web address that sends an SMS when your software calls it. Our URL API at /httpapi/send takes api_key, sender_id, phonenumber, message and route as parameters, by GET or POST, and replies in plain text. It suits ERPs, billing software, devices and scripts that cannot build JSON.
Send an SMS over HTTP from your code
Call /httpapi/send on our API host by GET or POST. The reply is one line of plain text: a broadcast ID, or a negative code from the table below. Replace YOUR_KEY and the header with your own, and keep the message identical to an approved DLT template.
# GET: open the URL in a browser, or call it with cURL curl "https://whitelabled.securesmsc.com/httpapi/send?api_key=YOUR_KEY&sender_id=AGRIPY&route=T&phonenumber=9812345678&message=Your%20login%20OTP%20for%20AgriPay%20is%20482913.%20It%20is%20valid%20for%2010%20minutes.%20Do%20not%20share%20it%20with%20anyone.%20-%20AgriPay" # Reply (plain text): a broadcast ID on success, or a negative code such as -10
# POST form fields: comma-separated numbers, and the key stays out of URL logs curl -X POST "https://whitelabled.securesmsc.com/httpapi/send" \ --data-urlencode "api_key=YOUR_KEY" \ --data-urlencode "sender_id=VVSCHL" \ --data-urlencode "route=T" \ --data-urlencode "phonenumber=9812345678,9898012345,9443012345" \ --data-urlencode "message=Dear parent, term 2 fee of Rs 18,500 for Kavin, Class 7B is due on 15-11-2026. Pay at the school office or online. - Vidya Vikas School"
$reply = trim(file_get_contents("https://whitelabled.securesmsc.com/httpapi/send?" . http_build_query([ "api_key" => getenv("SMS_API_KEY"), "sender_id" => "AGRIPY", "route" => "T", "phonenumber" => "9812345678", "message" => "Your login OTP for AgriPay is 482913. It is valid for 10 minutes. Do not share it with anyone. - AgriPay", ]))); if (str_starts_with($reply, "-")) { error_log("SMS refused, code " . $reply); // see the reply codes below } else { echo "Broadcast ID: " . $reply; }
import os, requests r = requests.post("https://whitelabled.securesmsc.com/httpapi/send", data={ "api_key": os.environ["SMS_API_KEY"], "sender_id": "AGRIPY", "route": "T", "phonenumber": "9812345678", "message": "Your login OTP for AgriPay is 482913. It is valid for 10 minutes. Do not share it with anyone. - AgriPay", }, timeout=15) reply = r.text.strip() print("Refused, code" if reply.startswith("-") else "Broadcast ID", reply)
# Unicode text goes in text=, not message= (message= returns -40) curl -X POST "https://whitelabled.securesmsc.com/httpapi/send" \ --data-urlencode "api_key=YOUR_KEY" \ --data-urlencode "sender_id=KPUMPS" \ --data-urlencode "route=T" \ --data-urlencode "phonenumber=9812345678" \ --data-urlencode "text=<your approved Tamil or Hindi template, with the values filled in>" # Unicode SMS: 70 characters per part, 67 when split
Reply codes and what to check
| Reply | Meaning | What to check |
|---|---|---|
-5 | Missing or invalid mobile number | Send 10-digit numbers, or 91 plus 10 digits, with no spaces or dashes. |
-6 | Missing message | The message or text parameter is empty. |
-7 | Invalid API key or login | Copy the key again from the panel and remove any space around it. |
-10 | Invalid sender ID | Use your approved header exactly, such as KOVAIM, with no VM- prefix or -S suffix. |
-12 | Not enough credits | Recharge, and check your balance with /api/getcredits before large or scheduled sends. |
-17 | Invalid route | Use route=T or route=P, in capital letters. |
-18 | Route T used with the promotional sender | Send service messages from your service header. |
-19 | Route P used without the promotional sender | With route=P, use the promotional sender set on your account. |
-20 | International SMS not enabled | Ask us to enable international SMS on your account. |
-40 | Unicode text sent in message | Send Tamil, Hindi or emoji text in the text parameter. |
-41 | The route cannot carry this message | Check the route and template type with our support team. |
One URL, any language
Call it from a browser, cURL, PHP, Python, an Excel macro or an ERP.
Plain-text reply
A broadcast ID on success, or a code such as -10 that names the problem.
No template ID needed
Your text is matched against the templates saved under your header.
Unicode and scheduling
Send Tamil or Hindi with text=, and pick a send time with schedule=.
HTTP API or REST API: which one to use
We offer two ways to send SMS from code. The v2 REST API takes JSON with a Bearer key and returns structured responses, which suits new apps. The SMS HTTP API is older and simpler: every value goes in the URL or in form fields, and the reply is one line of text. If your software has a field called SMS URL or gateway URL, this is the API it expects.
Tally SMS modules, Zoho CRM webhooks, FortiAuthenticator, and many school, hospital and billing systems work this way. One difference matters for security. v2 keys are locked to the IP addresses you allow, while the HTTP API has no per-key IP lock, so keep its URL out of web pages, apps and public code.
Send your first SMS in three steps
Open an account, buy credits from 5,000 SMS and copy your API key from API Management in the panel. Make sure your 6-character header and at least one content template are approved on DLT and added under that header in the panel. Then build the URL below with your own values and open it in a browser. You should get a broadcast ID back, and the SMS on your phone a few seconds later.
Parameters
Send these as URL parameters with GET, or as form fields with POST. Every request needs api_key, sender_id, phonenumber and route, plus either message or text.
- api_key: your key from the panel (username and password also work)
- sender_id: your approved header, such as KOVAIM, without the operator prefix or the -S suffix
- phonenumber: one or more mobile numbers separated by commas (to and sendTo also work)
- message: plain English text that matches your DLT template
- text: use in place of message for Tamil, Hindi or any other Unicode text
- route: T for service and transactional SMS, P for promotional SMS
- flash: 1 for a flash SMS that opens straight on the screen
- schedule: a later send time as YYYY-MM-DD HH:MM:SS in IST
Numbers, replies and delivery reports
On routes T and P the platform reads the last 10 digits of each number, so 9812345678 and 919812345678 reach the same phone. Strip spaces and dashes before sending, because a space inside a number breaks it.
A successful request returns a broadcast ID as plain text. Save it with your own record. When each number reaches a final status, the platform can call the delivery report URL you set on the Webhooks page of the panel, with messageid, status, number and date, where date is the IST send time. Answer that call with any 2xx status. To keep scheduled sends from stopping, check your balance with /api/getcredits.
DLT rules for every HTTP API request
The URL does not carry a DLT template ID. The platform compares your message with the approved templates saved under your sender ID, and a message that matches none of them fails, with the reason in your MIS report. Keep the fixed words of each template exactly as approved and change only the {#var#} parts, each up to 30 characters.
Use route=T for OTPs, alerts and other service messages, which reach DND numbers at any hour. Use route=P with your promotional sender for offers, which go only to non-DND or consented numbers during the allowed daytime hours. Any link in either kind must be whitelisted on DLT.
Sending outside India too?
We also send SMS and WhatsApp messages to customers abroad, with help on each country's sender ID and consent rules.
How it works
Get your API key
Open an account, buy credits from 5,000 SMS and copy the key from API Management.
Approve header and templates
We help register your header and templates on DLT, then add them in the panel.
Build the request
Put api_key, sender_id, route, phonenumber and message in the URL or form.
Check the reply
Store the broadcast ID, or fix the request using the error code.
Frequently asked questions
What is an SMS HTTP API?
An SMS HTTP API is a web address that sends an SMS when your software calls it with the right parameters. You pass your API key, sender ID, mobile number, message and route in the URL or as form fields, and the API replies with a broadcast ID or an error code. Any language or tool that can make a web request can use it.
Should I use GET or POST?
Both work. GET is handy for a quick test in a browser. Use POST for long messages or many numbers, because URLs have length limits, and because POST keeps your API key out of web server logs and browser history.
Do I need to send a DLT template ID?
No. The HTTP API does not read a template ID. The platform matches each message against the approved templates saved under your sender ID in the panel, so one URL can send OTPs, alerts and reminders. A message that matches no template fails, and the reason shows in your MIS report.
How do I send SMS in Tamil or Hindi?
Put the text in the text parameter instead of message. Unicode text sent in message returns -40. A Unicode SMS holds 70 characters per part, or 67 per part when it is split, so long Tamil or Hindi messages use more credits than English ones.
What does the SMS HTTP API cost?
There is no fee for the API itself. You pay per delivered SMS: ₹0.20 on Starter for up to 10,000 a month, or ₹0.15 on Business for up to 1,00,000, plus 18% GST. The minimum purchase is 5,000 SMS, and credits stay valid for a year.
Can I get delivery reports through the HTTP API?
Yes. Set a delivery report URL on the Webhooks page of the panel. When each number reaches a final status, the platform calls it with the broadcast ID, status, number and IST send time. You can also see every status in the MIS report in the panel.
Related pages

Zabbix SMS Alerts
Webhook media type, no GSM modem
Read more →
SMS API
REST API, webhooks, SDK samples
Read more →
API Reference
Parameters, responses and status codes
Read more →
Tally SMS Integration
Already use a Tally SMS module, or buying one from a Tally partner? Point its gateway URL to our HTTP API,…
Read more →Send your first SMS today
From ₹0.15 per delivered SMS, credits valid for a year, and DLT help from a real person.