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 |
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.
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))
} 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.
Related Pages
Start Sending DLT-Free OTPs Today
No registration, no paperwork. Sign up and send your first OTP in under 5 minutes.