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

Bulk SMS API for India: REST, Webhooks and DLT Support

Our bulk SMS API for India lets your app send OTPs, alerts and campaigns with one HTTPS request. It accepts DLT entity and template IDs, returns a message ID straight away and posts delivery reports to your webhook as they arrive.

Free DLT helpNo monthly feeJio · Airtel · Vi · BSNL
Developer writing code on a laptop
✓✓
DeliveredVM-PAYQIK-S · DLR received
₹
₹0.15 / SMSbilled on delivery
Quick answer

A bulk SMS API lets your software send SMS with an HTTPS request. In India, each request must carry your DLT entity ID, template ID and approved sender ID. Our REST and HTTP API returns a message ID, posts delivery reports to your webhook, and supports Unicode, scheduling and high-volume OTP traffic.

₹0.15per SMS, Business plan
₹0setup or monthly fee
2–7 daystypical DLT approval

Get pricing & plans

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

Code samples

Send your first SMS from code

Pass your sender ID, the DLT template ID and the filled message. Delivery reports arrive at your webhook URL.

WordPressWooCommerceShopifyZoho CRMHubSpotZapierPabbly ConnectGoogle SheetsTally exportsCustom CRM / ERP
# Send an SMS with your DLT template
curl -X POST "https://api.smsgatewayproviders.com/v1/sms" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d sender="ACMEIN" \
  -d to="9198XXXXXXXX" \
  -d template_id="1107XXXXXXXXXXXXXXX" \
  -d message="482913 is your login OTP for AcmeIn. Valid for 10 minutes. - AcmeIn" \
  -d dlr_url="https://yourapp.in/webhooks/dlr"
$ch = curl_init("https://api.smsgatewayproviders.com/v1/sms");
curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => ["Authorization: Bearer YOUR_API_KEY"],
  CURLOPT_POSTFIELDS => http_build_query([
    "sender" => "ACMEIN", "to" => "9198XXXXXXXX",
    "template_id" => "1107XXXXXXXXXXXXXXX",
    "message" => "482913 is your login OTP for AcmeIn. Valid for 10 minutes. - AcmeIn",
  ]),
]);
echo curl_exec($ch);
const res = await fetch("https://api.smsgatewayproviders.com/v1/sms", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.SMS_KEY}` },
  body: new URLSearchParams({
    sender: "ACMEIN", to: "9198XXXXXXXX",
    template_id: "1107XXXXXXXXXXXXXXX",
    message: "482913 is your login OTP for AcmeIn. Valid for 10 minutes. - AcmeIn",
  }),
});
console.log(await res.json()); // { status: "queued", id: "..." }
import requests

r = requests.post(
    "https://api.smsgatewayproviders.com/v1/sms",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    data={"sender": "ACMEIN", "to": "9198XXXXXXXX",
          "template_id": "1107XXXXXXXXXXXXXXX",
          "message": "482913 is your login OTP for AcmeIn. Valid for 10 minutes. - AcmeIn"},
)
print(r.json())
Endpoint shown is an example. Your exact API URL and key are in the panel.

REST, HTTP and XML

Use HTTPS REST, simple HTTP GET/POST or XML, whichever suits your stack.

DLR webhooks

Delivery status is pushed to your URL, so you never poll for results.

DLT fields built in

Pass entity ID and template ID with each request for clean operator checks.

High throughput

The platform handles up to about 10,000 SMS a second at peak.

Direct operator connectivity
JioAirtelViBSNLTRAI DLT compliant · 6+ redundant routes

How our bulk SMS API in India works

You create an API key in the panel and call our endpoint over HTTPS. Each request carries the sender ID, one or more mobile numbers, the message text and your DLT details. The API checks the request, queues the message and returns a unique message ID for each number.

Store that message ID against your own record, such as an order or login attempt. When the operator reports the final status, we post it to your webhook with the same ID, so you can update your system without extra calls.

Pick the style that suits your stack. The REST API takes JSON over HTTPS. The simple HTTP API takes the same fields as URL parameters, which suits older ERP and billing software. The XML API serves systems that already exchange XML. All three support scheduling, Unicode and personalised variables.

DLT parameters every request needs

If the text does not match the template, the operator rejects it. Copy templates from the panel instead of retyping them in code.

  • Entity ID: your Principal Entity ID from the DLT portal.
  • Template ID: the ID of the approved template this message uses.
  • Sender ID: the 6-character header linked to that template.
  • Message text that matches the template exactly, with each {#var#} replaced by its value.
  • A Unicode flag for Tamil, Hindi or other non-English text.

Delivery reports and error handling

Your webhook receives the message ID, mobile number, status and time. Reply with HTTP 200 quickly and process the data in the background. Use the message ID to ignore duplicates if a report arrives twice.

Split errors into two groups. Timeouts and server errors are safe to retry after a short wait that grows each time. Validation errors, such as a wrong template ID, invalid number or low balance, will fail again, so log them and alert your team. Watch the rate-limit response too: slow down, then retry. For campaigns, send many numbers in one request instead of one call per number.

OTP best practice and SMS pumping protection

OTP traffic needs a template on a service or transactional header, so it reaches DND numbers at any hour. SMS pumping is a fraud where bots trigger OTPs to many numbers to run up your bill. It often shows up as a sudden spike in OTP requests with very few codes entered. A few rules stop most of it.

  • Use 4 to 6 digit codes that expire in 5 to 10 minutes, with one active code per user.
  • Add a resend cooldown and a daily cap per number, per IP and per device.
  • Put a captcha or similar check before the OTP request on signup pages.
  • Allow only the country codes you serve and block the rest.
  • Track OTPs sent against OTPs verified and alert on sudden drops.
  • Keep API keys on your server, never inside app or browser code.
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

Sign up and get a key

Create an account and generate an API key from the panel settings.

Add your DLT details

Load your entity ID, sender IDs and template IDs so the API can use them.

Test and set your webhook

Send a test SMS to your own number and confirm the delivery report reaches your URL.

Go live with limits

Switch production traffic on, with OTP rate limits and error alerts in place.

FAQ

Frequently asked questions

How do I integrate an SMS API into my website or app?

Generate an API key in the panel, then make an HTTPS request from your server with the sender ID, mobile number, message text, entity ID and template ID. Any language that can call a URL works, including PHP, Python, Node.js, Java and .NET. Test with your own number first, then set up your delivery report webhook.

Does the API support DLT entity ID and template ID?

Yes. Every request can carry your DLT entity ID and template ID along with the sender ID. The message text must match the approved template, with variables filled in. If you store templates in the panel, you can copy the exact text into your code to avoid mismatch rejections.

How do I get delivery reports through the API?

Add a webhook URL in your account. When the operator confirms delivery or failure, we post the message ID, number, status and timestamp to that URL. Your server should reply with HTTP 200 quickly and process the data afterwards. Reports are also visible in the panel.

What is SMS pumping and how can I prevent it?

SMS pumping is fraud where bots request OTPs for large numbers of phone numbers to inflate your SMS spend. Prevent it with resend cooldowns, daily caps per number and IP, a captcha before OTP requests, blocking country codes you do not serve, and alerts when the ratio of verified to sent OTPs drops.

Can I send Tamil or Hindi SMS through the API?

Yes. Send the text in UTF-8 and set the Unicode option in your request. Unicode messages hold 70 characters in one part and 67 per part once split, so check length before you register the template. The same template rules apply as for English messages.

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