₹0.15/SMS on Business planFree DLT registration helpInternational SMS worldwide
Talk to sales+91 95851 60363 Get started
SMS HTTP API

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.

GET or POSTPlain-text replyFrom ₹0.15 per SMS
Developer writing code on a laptop
✓✓
DeliveredVM-AGRIPY-S · DLR received
API
GET /httpapi/sendReply: broadcast ID
Quick answer

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.

₹0.15per SMS, Business plan
160characters per English SMS part
5,000SMS minimum purchase

Get pricing & plans

We'll call within working hours with the right plan and check your DLT or sender ID status.

Code samples

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
GET or POST. Plain-text reply.
Replies

Reply codes and what to check

SMS HTTP API reply codes
ReplyMeaningWhat to check
-5Missing or invalid mobile numberSend 10-digit numbers, or 91 plus 10 digits, with no spaces or dashes.
-6Missing messageThe message or text parameter is empty.
-7Invalid API key or loginCopy the key again from the panel and remove any space around it.
-10Invalid sender IDUse your approved header exactly, such as KOVAIM, with no VM- prefix or -S suffix.
-12Not enough creditsRecharge, and check your balance with /api/getcredits before large or scheduled sends.
-17Invalid routeUse route=T or route=P, in capital letters.
-18Route T used with the promotional senderSend service messages from your service header.
-19Route P used without the promotional senderWith route=P, use the promotional sender set on your account.
-20International SMS not enabledAsk us to enable international SMS on your account.
-40Unicode text sent in messageSend Tamil, Hindi or emoji text in the text parameter.
-41The route cannot carry this messageCheck 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=.

Direct operator connectivity
JioAirtelViBSNLTRAI DLT compliant · 6+ redundant routes

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.

International

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.

Get started

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.

FAQ

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.

Send your first SMS today

From ₹0.15 per delivered SMS, credits valid for a year, and DLT help from a real person.

Chat on WhatsApp