Developer Hub

API Documentation

Integrate enterprise-grade SMS capabilities into your applications with our fast, secure, and developer-friendly REST APIs.

Getting Started

BulkSMS by SoftMaji provides a powerful REST API to programmatically send SMS, check balances, and track delivery. Whether you're building an OTP system, notification engine, or marketing tool, our API scales with you.

Note: You must have an active account and approved DLT templates before sending messages. Sign up here.

Authentication

All API requests must be authenticated using your unique API Key. You can generate or revoke keys from your dashboard.

Pass the key in the Authorization header as a Bearer token:

Authorization: Bearer YOUR_SECRET_API_KEY

Base URL

All endpoints are relative to the following base URL:

https://bulksms.softmaji.in/api

POST

/send

Send a single or bulk SMS message. Supports transactional (OTP) and promotional routes.

Parameter Type Required Description
to string Yes Recipient mobile number (e.g., 919999999999).
message string Yes URL-encoded message content.
sender_id string Yes Your approved 6-char DLT Header (e.g., SOFTMJ).
template_id string Yes Approved DLT Template ID.
route string No Default: 'dlt'. Options: 'promotional', 'trans'.

Example Request (cURL)

curl -X POST "https://bulksms.softmaji.in/api/send" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "to": "919XXXXXXXXX",
    "message": "Your OTP is 123456",
    "sender_id": "SOFTMJ",
    "template_id": "1207161234567890"
  }'
GET

/balance

Retrieve your current account balance and credit validity.

curl -X GET "https://bulksms.softmaji.in/api/balance" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sample Response

{ "status": "success", "balance": 5000.00, "currency": "INR", "validity": "2025-12-31" }
GET

/status

Check the delivery status of a specific message ID.

curl -X GET "https://bulksms.softmaji.in/api/status?id=MSG123456789" \
  -H "Authorization: Bearer YOUR_API_KEY"

Webhooks (Real-time DRs)

Instead of polling for status, configure a webhook URL in your dashboard. We will push delivery reports to your server in real-time.

Payload Format (POST)

{
  "message_id": "MSG123456789",
  "status": "DELIVERED",
  "delivered_at": "2025-12-24 10:30:05",
  "mobile": "919XXXXXXXXX"
}

Error Codes

Code Description
401Unauthorized: Invalid API Key.
402Payment Required: Insufficient credits.
400Bad Request: Missing parameters or invalid template ID.
429Too Many Requests: Rate limit exceeded.