SMS API — India

SMS OTPs at ₹0.25 — No DLT Required

Send transactional SMS across all Indian networks with 99.9% delivery, sub-second speed, and zero DLT registration hassle. Pre-registered compliant routes handle everything for you.

✦ No credit card required · Free plan available · Setup in 5 minutes

Why Choose StartMessaging for SMS?

Most SMS providers in India require DLT registration — a complex process that can take weeks. StartMessaging operates through pre-registered DLT routes, letting you send transactional SMS instantly at just ₹0.25 per message. Our routing engine dynamically selects the fastest delivery path.

  • ₹0.25 per transactional SMS
  • No DLT registration required
  • 99.9% delivery rate
  • Sub-second delivery speed
  • All Indian networks supported
SMS Logs Dashboard
99.9%
Average Delivery Rate
< 2s
Delivery Speed
10M+
Messages Processed Daily
0
DLT Setup Hours
Send an SMS in One API Call

Works with every language. Just a single POST request.

curl -X POST https://api.startmessaging.com/otp/send \
  -H "Content-Type: application/json" \
  -H "X-API-Key: sm_live_your_api_key_here" \
  -d '{
    "phoneNumber": "+919876543210",
    "templateId": "YOUR_TEMPLATE_ID",
    "variables": {
      "otp": "123456",
      "appName": "YourApp"
    }
  }'
const response = await fetch("https://api.startmessaging.com/otp/send", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-API-Key": "sm_live_your_api_key_here",
  },
  body: JSON.stringify({
    phoneNumber: "+919876543210",
    templateId: "YOUR_TEMPLATE_ID",
    variables: {
      otp: "123456",
      appName: "YourApp",
    },
  }),
});

const data = await response.json();
console.log(data);
import requests

response = requests.post(
    "https://api.startmessaging.com/otp/send",
    headers={
        "Content-Type": "application/json",
        "X-API-Key": "sm_live_your_api_key_here",
    },
    json={
        "phoneNumber": "+919876543210",
        "templateId": "YOUR_TEMPLATE_ID",
        "variables": {
            "otp": "123456",
            "appName": "YourApp"
        },
    },
)

data = response.json()
print(data)
$ch = curl_init("https://api.startmessaging.com/otp/send");

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => [
        "Content-Type: application/json",
        "X-API-Key: sm_live_your_api_key_here",
    ],
    CURLOPT_POSTFIELDS => json_encode([
        "phoneNumber" => "+919876543210",
        "templateId" => "YOUR_TEMPLATE_ID",
        "variables" => [
            "otp" => "123456",
            "appName" => "YourApp"
        ]
    ]),
]);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
import java.net.http.*;
import java.net.URI;

HttpClient client = HttpClient.newHttpClient();

String body = """
    {
      "phoneNumber": "+919876543210",
      "templateId": "YOUR_TEMPLATE_ID",
      "variables": {
        "otp": "123456",
        "appName": "YourApp"
      }
    }
    """;

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.startmessaging.com/otp/send"))
    .header("Content-Type", "application/json")
    .header("X-API-Key", "sm_live_your_api_key_here")
    .POST(HttpRequest.BodyPublishers.ofString(body))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
package main

import (
  "bytes"
  "encoding/json"
  "fmt"
  "net/http"
  "io"
)

func main() {
  payload, _ := json.Marshal(map[string]interface{}{
    "phoneNumber": "+919876543210",
    "templateId":  "YOUR_TEMPLATE_ID",
    "variables": map[string]string{
      "otp":     "123456",
      "appName": "YourApp",
    },
  })

  req, _ := http.NewRequest("POST", "https://api.startmessaging.com/otp/send", bytes.NewBuffer(payload))
  req.Header.Set("Content-Type", "application/json")
  req.Header.Set("X-API-Key", "sm_live_your_api_key_here")

  resp, _ := http.DefaultClient.Do(req)
  defer resp.Body.Close()

  body, _ := io.ReadAll(resp.Body)
  fmt.Println(string(body))
}

High-Reliability Carrier Routing

We route directly through Tier 1 operators for maximum deliverability.

Direct Routes

Global Cloud

TRAI Compliant

Jio/Airtel Failover

FAQs

SMS API — Frequently Asked Questions

Why don't I need DLT registration?

StartMessaging operates through pre-registered DLT compliant routes with major Indian telecom operators. This means your transactional messages are sent through already-registered sender IDs and templates, eliminating the need for you to go through the DLT registration process yourself. This saves weeks of setup time.

What types of SMS can I send?

Our SMS API supports transactional messages (OTPs, alerts, confirmations). All messages are sent through pre-registered DLT routes at ₹0.25/SMS. For promotional SMS, DLT registration is required per TRAI regulations — contact us for assistance with the registration process.

What is the delivery rate?

Our transactional SMS delivery rate is 99.9% across all major Indian networks including Jio, Airtel, Vi, and BSNL. We use intelligent routing to select the fastest delivery path. Average delivery time is under 2 seconds. You receive real-time delivery receipts via webhook.

SMS & Auth API

Start Sending SMS at ₹0.25

Free plan. No DLT registration. No credit card required.