Bulk SMS API for real-time messaging
A simple HTTP API to send OTPs, alerts and campaigns from any language or platform. Submit a request, get a message ID back, and check delivery whenever you need.
- HTTP GET
- any language
- Real time
- SMS delivery
- 6
- API actions
GET http://sms.bulksmsind.in/sendSMS
?username=demo&apikey=••••••
&sendername=BSMSIN&smstype=TRANS
&numbers=9876543210
&message=482913 is your OTP... The response includes the message ID (msgid).
Then: GET /getDLR?msgid=… → deliveredEndpoints
Base URL: http://sms.bulksmsind.in. All endpoints use HTTP GET with URL-encoded query parameters.
| Action | Endpoint | Parameters | Notes |
|---|---|---|---|
| Send single or multiple SMS | /sendSMS | username, apikey, sendername, smstype, numbers, message | numbers accepts one number or a comma-separated list. |
| Send scheduled SMS | /sendSMS | username, apikey, sendername, smstype, numbers, message, scheduled | scheduled in yyyymmddhhmm (IST), for example 201512311254. |
| Send group SMS | /sendSMSByGroupname | username, apikey, sendername, smstype, gname, message | gname is a contact group saved in your panel. |
| Balance check | /getSMSCredit | username, apikey | Returns your remaining SMS credits. |
| Delivery report | /getDLR | username, apikey, msgid | Delivery status of one message. |
| Date-wise report | /getDLRReport | username, apikey, from, to, sendername | from and to in yyyy-mm-dd. |
Parameters
| Parameter | Description | Example |
|---|---|---|
| username | Your panel username | demo |
| apikey | Your secret API key | xxxxxxxxxx |
| sendername | DLT-approved sender ID (header) | BSMSIN |
| smstype | Route type configured for your account | TRANS |
| numbers | One mobile number or a comma-separated list | 9876543210,9123456789 |
| message | URL-encoded text matching your DLT template | Your order #1001 is confirmed. |
| scheduled | Optional send time, IST, yyyymmddhhmm | 202610201030 |
| gname | Contact group name (group SMS) | VIP |
| msgid | Message ID returned when you send (delivery report) | MSG6d50a8916d |
| from, to | Report date range, yyyy-mm-dd | 2026-10-01 |
Code samples
Send an SMS in your language of choice.
curl -G "http://sms.bulksmsind.in/sendSMS" \
--data-urlencode "username=YOUR_USERNAME" \
--data-urlencode "apikey=YOUR_API_KEY" \
--data-urlencode "sendername=BSMSIN" \
--data-urlencode "smstype=TRANS" \
--data-urlencode "numbers=9876543210" \
--data-urlencode "message=Your order #1001 is confirmed. - ShopIn"<?php
$params = [
'username' => 'YOUR_USERNAME',
'apikey' => getenv('BSI_API_KEY'),
'sendername' => 'BSMSIN',
'smstype' => 'TRANS',
'numbers' => '9876543210',
'message' => 'Your order #1001 is confirmed. - ShopIn',
];
$url = 'http://sms.bulksmsind.in/sendSMS?' . http_build_query($params);
$response = file_get_contents($url);
echo $response; // contains the message IDconst params = new URLSearchParams({
username: 'YOUR_USERNAME',
apikey: process.env.BSI_API_KEY,
sendername: 'BSMSIN',
smstype: 'TRANS',
numbers: '9876543210',
message: 'Your order #1001 is confirmed. - ShopIn',
});
const res = await fetch(`http://sms.bulksmsind.in/sendSMS?${params}`);
console.log(await res.text()); // contains the message IDimport os, requests
params = {
"username": "YOUR_USERNAME",
"apikey": os.environ["BSI_API_KEY"],
"sendername": "BSMSIN",
"smstype": "TRANS",
"numbers": "9876543210",
"message": "Your order #1001 is confirmed. - ShopIn",
}
r = requests.get("http://sms.bulksmsind.in/sendSMS", params=params, timeout=15)
print(r.text) # contains the message IDBest practices
- Call the API from your server and keep the API key in an environment variable
- URL-encode the message, and keep it exactly as your DLT template
- Store the message ID and check delivery with getDLR
- Use TRANS for OTPs and alerts; keep promotions within 10 AM – 9 PM IST
- Rate-limit OTP requests per number to stop abuse
Prefer not to code?
Use a ready integration instead.
Frequently asked questions
Is the SMS API real time?
Yes. Each request is submitted for delivery immediately and the SMS is delivered in real time. Use getDLR with the message ID to confirm delivery.
How do I send to many numbers?
Pass a comma-separated list in the numbers parameter, or send to a contact group with sendSMSByGroupname.
How do I schedule an SMS?
Add scheduled=yyyymmddhhmm in Indian Standard Time, for example 202610201030 for 20 October 2026, 10:30 AM.
Do messages need DLT templates?
Yes. The message text must match a template approved on your DLT portal, sent from your approved sender ID.
Where do I find my API key?
In your Bulk SMS India panel under API. Keep it secret and call the API from your server, never from a browser or mobile app.
Is there a plugin so I don’t have to code?
Yes. Use our WooCommerce/WordPress plugin, Google Sheets add-on, or Pabbly Connect, Make and n8n.
