DLT-Free OTP

OTP Delivery Without DLT Registration

Send OTP verification codes via SMS at ₹0.25/message. No DLT registration, no template approvals, no waiting. Our pre-registered routes deliver OTPs in under 2 seconds across all Indian networks.

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

How StartMessaging Makes DLT Irrelevant

StartMessaging is a fully DLT-registered OTP provider. We have already completed entity registration, sender ID setup, and template approvals on the DLT platform.

When you send an OTP through our API, the message is routed through our pre-approved DLT channels. Telecom operators see a valid, registered message — so your OTPs get delivered just like any other DLT-compliant SMS.

This means you get full DLT compliance without any of the registration burden. No entity forms, no document uploads, no template approvals, no waiting.

StartMessaging DLT-Free vs. Traditional SMS

Feature StartMessaging DLT-Free Traditional SMS
Setup Time 5 Minutes 2 to 4 Weeks
Entity Registration Not Required Required (GST, PAN, Docs)
Template Approvals Not Required Required for every template
Sender ID (Header) Instant (Shared) Required (takes 3-5 days)
Upfront Costs Free to start ₹5,000+ operator fees
Complexity Simple REST API Complex operator portals
How It Works

Simple DLT-Free Delivery

Sign Up & Generate Key

Create your free account and get your API key instantly. No paperwork required.

Call the API

POST to /v1/otp/send. We route the OTP through our pre-registered DLT templates.

Instant Delivery

Operators receive a compliant SMS. Your user gets the code in under 2 seconds.

Send an OTP 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))
}
FAQ

DLT Free OTP — Frequently Asked Questions

What is DLT registration?

DLT (Distributed Ledger Technology) is a framework mandated by TRAI (Telecom Regulatory Authority of India) for all commercial SMS senders in India. It requires businesses to register their entity, sender IDs, and message templates on a DLT platform before sending any SMS.

Is it legal to send OTPs without DLT registration?

Yes. StartMessaging is a registered entity on the DLT platform. When you use our API, your OTPs are sent through our pre-approved DLT-registered channels. You are essentially using our infrastructure, which is fully compliant.

Why is DLT registration difficult?

DLT registration involves multiple steps: entity registration with documents, sender ID (header) registration, and template approval for every unique message. The process takes 2-4 weeks, and any errors require resubmission.

How does StartMessaging handle DLT compliance?

We are registered on the DLT platform ourselves. When you send an OTP through our API, it goes through our pre-registered templates and sender IDs, so you do not need to do any DLT setup yourself.

Will my OTPs be delivered reliably without my own DLT registration?

Yes. Since we use our own DLT-registered templates, your OTPs are treated as legitimate transactional messages by telecom operators. We also use multi-provider failover to maximize delivery rates.

Can I customize the OTP message text?

Currently, OTPs are sent using our pre-approved templates optimized for delivery. The templates include your OTP code and are designed to be clear and professional.

SMS & Auth API

Start Sending DLT-Free OTPs Today

No registration, no paperwork. Sign up and send your first OTP in under 5 minutes.