Transactional SMS API India: The Complete Developer Guide (2026)
- TechTo Networks
- Aug 29, 2025
- 16 min read
The definitive technical reference for integrating a transactional SMS API in India — covering TRAI DLT compliance, REST endpoint structure, OTP delivery benchmarks, error handling patterns, webhook setup, multi-language SDK examples, and a frank comparison of every major provider. Written by engineers who run SMS infrastructure, for engineers who build on it.
Table of Contents
What Is a Transactional SMS API?
Transactional vs Promotional SMS — Technical Differences
TRAI DLT Compliance for Transactional SMS API in India
TechTo Networks API Architecture
Authentication & Security
API Endpoints & Request Structure
Multi-Language Code Samples
Delivery Reports & Webhook Integration
Error Codes & Retry Logic
OTP SMS API — Special Considerations
Performance Benchmarks & SLA
Industry Use Cases with API Patterns
Provider Comparison Table 2026
Pricing Breakdown
Pre-Launch Integration Checklist
FAQs
1. What Is a Transactional SMS API?
A transactional SMS API is a RESTful (or HTTP-based) interface that lets your application programmatically send non-promotional, system-triggered text messages to users — OTPs, payment alerts, order confirmations, account notifications — through a cloud SMS gateway, without managing physical telecom infrastructure.
The key distinction from promotional SMS is both technical and regulatory:
Transactional SMS bypasses India's DND (Do Not Disturb) registry. Your message reaches the recipient regardless of whether they've opted out of commercial communications — because the message is triggered by their own action (e.g., initiating a payment, creating an account).
Delivery is available 24×7. Promotional SMS is restricted to 9 AM–9 PM IST. Transactional has no time window restriction.
Content must match a pre-approved DLT template. TRAI's scrubbing engine validates every transactional message against your registered template before passing it to the operator.
Why It Matters for Indian Developers in 2026
India's A2P (Application-to-Person) SMS market hit ₹4,290 crore in 2025, with transactional and OTP messages accounting for 61% of total volume. As fintech, healthtech, and e-commerce scale into Tier-2 and Tier-3 cities — where SMS remains more reliable than push notifications or email — a fast, compliant transactional SMS API is core infrastructure, not a nice-to-have.
Metric | Value |
India A2P SMS market size | ₹4,290 crore (2025) |
Transactional/OTP share of volume | 61% |
Average SMS open rate | 98% within 3 minutes |
DND-registered numbers in India | ~230 million (still reached by transactional SMS) |
TRAI DLT enforcement since | September 2021 |
2. Transactional vs Promotional SMS — Technical Differences
Understanding this distinction is not just compliance hygiene — it directly affects your API endpoint selection, DLT template category, sender header suffix, and delivery behaviour.
Parameter | Transactional SMS | Promotional SMS |
API Route | Separate transactional endpoint | Separate promotional endpoint |
DND Bypass | ✅ Yes — always delivered | ❌ No — DND numbers blocked |
Delivery Window | 24 × 7 | 9 AM – 9 PM IST only |
Sender Header Suffix | No suffix constraint | Must NOT end in -P (promotional) suffix |
DLT Template Category | Transactional / OTP | Promotional |
Message Trigger | User or system event | Marketing schedule |
Content | Non-marketing: OTP, alerts, confirmations | Offers, discounts, campaigns |
Penalty for Misuse | TRAI fine + operator block | TRAI fine + operator block |
⚠️ Critical: Never embed promotional content (offer codes, discounts, sale announcements) inside a transactional template. TRAI's AI-based scrubbing engine, updated in 2023, flags template-content mismatches and can blacklist your sender header. Use separate templates and separate API calls for each message category.
3. TRAI DLT Compliance for Transactional SMS API in India
Every transactional SMS sent via API in India must pass through TRAI's Distributed Ledger Technology (DLT) scrubbing layer before reaching the telecom operator. This is not optional — messages from unregistered entities are silently blocked at the network level with no error returned to your API call. You get a 200 OK from some non-compliant gateways while your message is actually dead.
What You Must Register on DLT
1. Entity (Principal Entity / PE) Registration
Register your business on any major DLT portal — Jio Trubloq, Airtel DLT, Vi DLT, or BSNL SMPP. Your registration is shared across all operators automatically. Required documents: GST certificate or CIN/PAN, business address proof. One-time fee: ₹5,900 + GST (waived on some operators in 2026).
2. Sender Header (Sender ID)
A 6-character alphanumeric ID that appears as the SMS sender name (e.g., TXTNME, BNKALR, OTPVFY). Transactional headers must not end in -P. Annual fee: ~₹500 + GST per header. Headers unused for 90 days are auto-deactivated by operators — build a keep-alive check into your monitoring.
3. Message Template
Every unique message format — including OTPs — must be pre-approved as a DLT template with category set to Transactional or OTP. Variable fields use the {#var#} placeholder syntax. Approval takes 24–48 hours. Rejection reasons include: promotional content in a transactional template, missing header name, URL not whitelisted, template exceeds 1,000 characters.
Passing DLT IDs in Every API Call
Your API request must include both the PE ID and the Template ID in every message payload. Missing either one causes silent failure at the DLT scrubbing layer — not at the API layer.
{
"to": "919876543210",
"sender_id": "TXTNME",
"message": "Your OTP is {#var#}. Valid 10 mins. -TechToNetworks",
"template_id": "1707xxxxxxxxxx",
"pe_id": "1201xxxxxxxxxx",
"type": "transactional"
}
💡 TechTo DLT Assist: TechTo Networks handles entity registration, header approval, and template submission on your behalf — included free on all paid plans. Average go-live: 2 business days. Start registration →
4. TechTo Networks Transactional SMS API Architecture
Direct Operator Connectivity
TechTo Networks maintains direct SMPP connections to all four major Indian telecom operators — Jio, Airtel, Vodafone Idea (Vi), and BSNL — eliminating aggregator hops that add latency and reduce visibility into operator-level delivery reports. Most cheap resellers route through 2–3 aggregator layers; each hop adds 1–4 seconds of latency and obscures the true DLR (Delivery Report).
Infrastructure Stack
Multi-region deployment: Primary nodes in Mumbai (ap-south-1) with failover to Chennai and Delhi-NCR.
Load-balanced gateway cluster: Automatic traffic distribution across operator connections during peak hours (10 AM – 12 PM IST sees 3–4× normal volume for OTP-heavy fintech apps).
DLT scrubbing integration: Real-time template validation at the gateway layer before operator handoff, not after — so failed DLT scrubs are caught and surfaced to your application immediately.
Async delivery reports: Operator-level DLRs (not just gateway acknowledgements) pushed to your webhook within 2–15 seconds of delivery.
5. Authentication & Security
API Key Authentication
All requests authenticate using a Bearer token passed in the Authorization header. Keys are scoped — you can create separate keys for transactional, promotional, and OTP routes with different permission levels.
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Security Best Practices
Never expose API keys in client-side code. All transactional SMS API calls must be made server-side (Node.js backend, Python Flask/Django, Java Spring, .NET, PHP). If your key is compromised, rotate it immediately in the TechTo dashboard — old key is invalidated within 60 seconds.
IP Whitelisting: Lock your API key to specific server IPs for an extra layer of protection. Available in dashboard under Settings → API Security.
HMAC Request Signing: Enterprise plan supports HMAC-SHA256 signed requests — each request includes a timestamp-based signature that prevents replay attacks.
TLS 1.3 only: All API endpoints enforce TLS 1.3. Requests over HTTP or with invalid certificates are rejected.
Environment separation: Use separate API keys for sandbox (test) and production environments. Sandbox sends no real SMS and does not consume credits.
6. API Endpoints & Request Structure
Base URL: https://api.techtonetworks.com/v2
Send Single Transactional SMS
POST /sms/transactional
Request Headers
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Request Body
{
"to": "919876543210",
"sender_id": "TXTNME",
"template_id": "1707xxxxxxxxxx",
"pe_id": "1201xxxxxxxxxx",
"message": "Your OTP is 482910. Valid for 10 mins. Do not share. -TechToNetworks",
"type": "transactional",
"callback_url": "https://yourapp.com/webhooks/sms-dlr"
}
Response — Success
{
"status": "queued",
"message_id": "TN20260530-9182736",
"to": "919876543210",
"credits_used": 1,
"queued_at": "2026-05-30T10:42:05.312Z"
}
Response — DLT Scrub Failure
{
"status": "failed",
"error_code": "DLT_TEMPLATE_MISMATCH",
"error_message": "Message content does not match approved template ID 1707xxxxxxxxxx.",
"message_id": null
}
Send Bulk Transactional SMS (up to 10,000 per batch)
POST /sms/transactional/bulk
Request Body
{
"sender_id": "TXTNME",
"template_id": "1707xxxxxxxxxx",
"pe_id": "1201xxxxxxxxxx",
"type": "transactional",
"callback_url": "https://yourapp.com/webhooks/sms-dlr",
"messages": [
{
"to": "919876543210",
"message": "Hi Priya, your order #ORD-1042 has been shipped. Track: link.techtonetworks.com/abc -TechToNetworks"
},
{
"to": "918765432109",
"message": "Hi Arjun, your order #ORD-1043 has been shipped. Track: link.techtonetworks.com/def -TechToNetworks"
}
]
}
Check Message Status (Pull DLR)
GET /sms/status/{message_id}
Response
{
"message_id": "TN20260530-9182736",
"to": "919876543210",
"status": "DELIVERED",
"operator": "Jio",
"delivered_at": "2026-05-30T10:42:08.741Z",
"latency_ms": 3429
}
7. Multi-Language Code Samples
Python
import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.techtonetworks.com/v2"
def send_otp(mobile: str, otp: str) -> dict:
payload = {
"to": mobile,
"sender_id": "TXTNME",
"template_id": "1707xxxxxxxxxx",
"pe_id": "1201xxxxxxxxxx",
"message": f"Your OTP is {otp}. Valid for 10 mins. Do not share. -TechToNetworks",
"type": "transactional",
"callback_url": "https://yourapp.com/webhooks/sms-dlr"
}
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
response = requests.post(
f"{BASE_URL}/sms/transactional",
json=payload,
headers=headers,
timeout=10
)
response.raise_for_status()
return response.json()
# Usage
result = send_otp("919876543210", "482910")
print(result["message_id"])
Node.js (async/await)
const axios = require('axios');
const API_KEY = process.env.TECHTO_API_KEY;
const BASE_URL = 'https://api.techtonetworks.com/v2';
async function sendOtp(mobile, otp) {
const { data } = await axios.post(
`${BASE_URL}/sms/transactional`,
{
to: mobile,
sender_id: 'TXTNME',
template_id: '1707xxxxxxxxxx',
pe_id: '1201xxxxxxxxxx',
message: `Your OTP is ${otp}. Valid for 10 mins. Do not share. -TechToNetworks`,
type: 'transactional',
callback_url: 'https://yourapp.com/webhooks/sms-dlr'
},
{
headers: {
Authorization: `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
},
timeout: 10000
}
);
return data;
}
// Usage
sendOtp('919876543210', '482910')
.then(res => console.log(res.message_id))
.catch(err => console.error(err.response?.data));
PHP
<?php
function sendTransactionalSms(string $mobile, string $message): array {
$apiKey = getenv('TECHTO_API_KEY');
$payload = json_encode([
'to' => $mobile,
'sender_id' => 'TXTNME',
'template_id' => '1707xxxxxxxxxx',
'pe_id' => '1201xxxxxxxxxx',
'message' => $message,
'type' => 'transactional',
'callback_url' => 'https://yourapp.com/webhooks/sms-dlr'
]);
$ch = curl_init('https://api.techtonetworks.com/v2/sms/transactional');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer {$apiKey}",
'Content-Type: application/json'
],
CURLOPT_TIMEOUT => 10
]);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
Java (OkHttp)
import okhttp3.*;
import com.google.gson.*;
public class TechToSms {
private static final String API_KEY = System.getenv("TECHTO_API_KEY");
private static final String BASE_URL = "https://api.techtonetworks.com/v2";
private final OkHttpClient client = new OkHttpClient();
public String sendOtp(String mobile, String otp) throws Exception {
JsonObject body = new JsonObject();
body.addProperty("to", mobile);
body.addProperty("sender_id", "TXTNME");
body.addProperty("template_id", "1707xxxxxxxxxx");
body.addProperty("pe_id", "1201xxxxxxxxxx");
body.addProperty("message", "Your OTP is " + otp + ". Valid 10 mins. -TechToNetworks");
body.addProperty("type", "transactional");
RequestBody requestBody = RequestBody.create(
body.toString(), MediaType.get("application/json")
);
Request request = new Request.Builder()
.url(BASE_URL + "/sms/transactional")
.addHeader("Authorization", "Bearer " + API_KEY)
.post(requestBody)
.build();
try (Response response = client.newCall(request).execute()) {
return response.body().string();
}
}
}
cURL
curl -X POST https://api.techtonetworks.com/v2/sms/transactional \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "919876543210",
"sender_id": "TXTNME",
"template_id": "1707xxxxxxxxxx",
"pe_id": "1201xxxxxxxxxx",
"message": "Your OTP is 482910. Valid 10 mins. -TechToNetworks",
"type": "transactional"
}'
8. Delivery Reports & Webhook Integration
TechTo Networks provides operator-level DLRs — not gateway-level acknowledgements. This is a critical distinction: a gateway ACK only confirms the message was accepted by the gateway. An operator-level DLR confirms the message was actually delivered to the handset (or provides the specific operator error code if it wasn't).
Webhook Payload (Push DLR)
When you include callback_url in your API request, TechTo pushes the DLR to your endpoint via HTTP POST within 2–15 seconds of delivery:
{
"event": "sms.delivered",
"message_id": "TN20260530-9182736",
"to": "919876543210",
"status": "DELIVERED",
"operator": "Jio",
"delivered_at": "2026-05-30T10:42:08.741Z",
"latency_ms": 3429,
"credits_used": 1
}
Webhook Payload — Failed Delivery
{
"event": "sms.failed",
"message_id": "TN20260530-9182799",
"to": "919812345678",
"status": "FAILED",
"operator": "Airtel",
"error_code": "ABSENT_SUBSCRIBER",
"error_detail": "Handset unreachable. Subscriber may be out of network coverage.",
"failed_at": "2026-05-30T10:42:35.100Z"
}
Express.js Webhook Handler
const express = require('express');
const app = express();
app.use(express.json());
app.post('/webhooks/sms-dlr', (req, res) => {
const { event, message_id, to, status, operator, error_code } = req.body;
if (event === 'sms.delivered') {
// Mark OTP as delivered in your DB
db.updateOtpStatus(message_id, 'delivered');
} else if (event === 'sms.failed') {
// Log failure and optionally retry or fallback to voice OTP
console.error(`SMS failed: ${message_id} to ${to} on ${operator}: ${error_code}`);
if (error_code === 'ABSENT_SUBSCRIBER') {
scheduleRetry(message_id, to, 30_000); // retry after 30s
}
}
res.sendStatus(200); // Always acknowledge webhook
});
⚠️ Always return HTTP 200 immediately from your webhook handler, even if your processing logic hasn't completed. TechTo retries webhook delivery up to 5 times over 10 minutes if it receives a non-2xx response — which can cause duplicate DLR processing in your system.
9. Error Codes & Retry Logic
Common Transactional SMS API Error Codes
Error Code | HTTP Status | Meaning | Action |
DLT_TEMPLATE_MISMATCH | 422 | Message content doesn't match approved template | Fix template or message content |
INVALID_PE_ID | 422 | PE ID not registered or incorrect | Verify DLT entity registration |
INVALID_TEMPLATE_ID | 422 | Template ID not found or not approved | Re-register/approve template |
INVALID_MOBILE | 400 | Number format invalid or not Indian | Validate with E.164 format |
INSUFFICIENT_CREDITS | 402 | Account balance too low | Top up credits |
SENDER_HEADER_INACTIVE | 422 | Header unused 90+ days, auto-deactivated | Re-activate header in DLT portal |
RATE_LIMIT_EXCEEDED | 429 | TPS limit hit | Implement exponential backoff |
ABSENT_SUBSCRIBER | DLR | Handset unreachable | Retry after 30–60s; max 3 retries |
NUMBER_BLACKLISTED | DLR | User has explicitly opted out | Do not retry; remove from list |
Exponential Backoff for Rate Limiting
import time
import requests
def send_with_retry(payload: dict, max_retries: int = 3) -> dict:
for attempt in range(max_retries):
response = requests.post(
"https://api.techtonetworks.com/v2/sms/transactional",
json=payload,
headers={"Authorization": f"Bearer {API_KEY}"}
)
if response.status_code == 429:
wait = (2 ** attempt) + 0.5 # 0.5s, 1.5s, 2.5s
time.sleep(wait)
continue
return response.json()
raise Exception("Max retries exceeded")
10. OTP SMS API — Special Considerations
OTP delivery is the most latency-sensitive use case in transactional SMS. A 15-second OTP delivery feels like a broken product to an Indian fintech user accustomed to sub-5-second delivery from top banks.
OTP-Specific API Parameters
{
"to": "919876543210",
"sender_id": "TXTNME",
"template_id": "1707xxxxxxxxxx",
"pe_id": "1201xxxxxxxxxx",
"message": "Your OTP is 482910. Valid for 5 mins. Do not share. -TechToNetworks",
"type": "otp",
"priority": "high",
"ttl_seconds": 300,
"callback_url": "https://yourapp.com/webhooks/sms-dlr"
}
type: "otp" routes the message through TechTo's priority OTP queue — separate from standard transactional to avoid queue contamination during bulk transactional sends.
priority: "high" flags the message for the fastest available operator route at that instant.
ttl_seconds tells TechTo to discard the message if undelivered after this window — prevents stale OTPs arriving late and confusing users.
TRAI-Approved OTP Template Formats
Your OTP for {#var#} is {#var#}. Valid for {#var#} minutes. Do not share. -{#var#}
{#var#} is your one-time password for {#var#} on TechToNetworks. Valid {#var#} mins.
Use {#var#} for every variable field. Do not hardcode values that will differ between sends (amounts, names, URLs) — this is the most common cause of DLT template rejection.
OTP Delivery Benchmarks — TechTo Networks (May 2026)
Operator | P50 (median) | P95 | P99 |
Jio | 2.1s | 4.8s | 9.2s |
Airtel | 2.4s | 5.1s | 10.4s |
Vodafone Idea | 2.8s | 6.3s | 13.1s |
BSNL | 3.9s | 8.7s | 18.2s |
Measured from API request receipt to operator-confirmed DLR. Peak hours (10 AM–12 PM IST) see P95 ~20% higher.
Recommended OTP UX Pattern
Show "Resend OTP" only after waiting for a webhook confirmation of failure or after a 15-second timeout — not immediately. A resend triggered at 5 seconds (before the first SMS has even been delivered) causes duplicate OTPs, user confusion, and wasted credits.
11. Performance Benchmarks & SLA
Metric | TechTo Networks SLA |
API Uptime | 99.9% (monthly) |
API Response Time (P99) | < 300ms |
OTP Delivery P50 | < 3 seconds |
OTP Delivery P95 | < 8 seconds |
Bulk SMS Throughput | Up to 1,000 TPS (enterprise) |
DLR Webhook Latency | 2–15 seconds from delivery |
Sandbox Availability | 99.99% |
Support Response (Enterprise) | < 1 hour |
TechTo's architecture uses active-active multi-zone deployment — if the Mumbai primary node degrades, Chennai takes over within 800ms with no manual intervention. Unlike some competitors who route to a single data centre, this eliminates the "silent outage" scenario where your API calls succeed but messages are never dispatched.
12. Industry Use Cases with API Patterns
Fintech & Banking
Use: Account debit/credit alerts, KYC OTPs, suspicious activity warnings, UPI payment confirmations.
Pattern: Event-driven — trigger on every transaction event from your core banking system. Use type: "otp" for authentication, type: "transactional" for all other alerts. Maintain a separate DLT template per message category (debit, credit, OTP, fraud alert) — do not reuse a single template for all financial alerts.
Critical: Financial SMS must include the last 4 digits of account number only — never the full number. TRAI and RBI both flag full account numbers in SMS as a compliance risk.
E-Commerce & Logistics
Use: Order placed, payment confirmed, shipment dispatched, out for delivery, delivered, return initiated, refund processed.
Pattern: Use TechTo's bulk transactional endpoint with per-message variable substitution. Each order status event fires a separate API call with the order ID, status, and tracking URL. Keep tracking URLs on a TRAI-whitelisted domain — short URL domains (bit.ly, tinyurl) are blocked by TRAI's URL policy since 2023.
Healthcare
Use: Appointment reminders (24h, 2h before), lab report availability, prescription refill alerts, emergency ward updates.
Pattern: Schedule-triggered (not event-driven). Use the TechTo Scheduler endpoint for time-based delivery. For appointment reminders, send first at T-24h and again at T-2h using separate scheduled API calls — do not batch them; separate calls allow individual cancellation if the appointment is cancelled.
Education & EdTech
Use: Exam timetables, result availability, fee payment confirmation, admission status, attendance alerts.
Pattern: Mix of event-driven (result published → trigger API) and bulk transactional (fee due date → batch API). Use regional language Unicode templates for vernacular medium institutions — TechTo supports 21 Indian languages with automatic Unicode detection and character-count recalculation (Unicode SMS = 70 chars/part vs 160 for ASCII).
13. Transactional SMS API Provider Comparison India (2026)
Feature | TechTo Networks | MSG91 | 2Factor | SpringEdge | Fast2SMS | Gupshup |
Direct Operator Connect | ✅ All 4 | ✅ | ✅ | ✅ | Partial | ✅ |
OTP P50 Delivery | < 3s | < 3s | < 3s | < 3s | ~5s | ~4s |
DLT Assisted Setup | ✅ Free | Paid add-on | Partial | Partial | ❌ Self-serve | Partial |
Operator-Level DLR | ✅ | ✅ | ✅ | ✅ | Gateway-level only | ✅ |
Webhook DLR Push | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Sandbox / Test Mode | ✅ | ✅ | ✅ | ✅ | Limited | ✅ |
REST API Docs Quality | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
SDKs (languages) | 5 (Py/Node/Java/.NET/PHP) | 5+ | 3 | 3 | 2 | 4 |
WhatsApp API | ✅ Native | ✅ | ❌ | ❌ | ❌ | ✅ |
RCS Messaging | ✅ Native | Partial | ❌ | ❌ | ❌ | Partial |
Unicode / Regional Lang | 21 languages | ~10 | Limited | ~5 | Hindi only | ~8 |
Max TPS | 1,000 | 1,000 | 500 | 300 | 100 | 1,000 |
SLA-Based OTP Pricing | ❌ | ❌ | ✅ (unique) | ❌ | ❌ | ❌ |
Free Trial Credits | ✅ | Limited | ✅ | ✅ | ✅ | Limited |
India-Based Support | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Note: 2Factor is the only provider with SLA-based OTP pricing — you're only charged if delivery happens within 15 seconds. For pure OTP authentication use cases where per-message SLA accountability is the top priority, 2Factor deserves serious evaluation. TechTo Networks is the only provider in this table offering native SMS + WhatsApp Business API + RCS from a single dashboard and API key — relevant if your roadmap includes omnichannel messaging.
14. Transactional SMS API Pricing India (2026)
Volume Tier | OTP SMS (₹/SMS) | Transactional SMS (₹/SMS) | Unicode Transactional (₹/SMS) |
0 – 1 Lakh/month | ₹0.20–₹0.25 | ₹0.22–₹0.28 | ₹0.30–₹0.38 |
1 – 10 Lakh/month | ₹0.16–₹0.20 | ₹0.18–₹0.22 | ₹0.24–₹0.30 |
10 Lakh+/month | ₹0.13–₹0.16 | ₹0.15–₹0.18 | ₹0.20–₹0.25 |
TechTo Networks rates are all-inclusive: DLT registration, header setup, template submission, and operator-level DLRs. No setup fees, no hidden platform charges.
What Affects Your Effective Cost Per Message
Your headline ₹/SMS rate is only the starting point. Total cost of ownership includes:
DLT registration — ₹5,900 + GST one-time (free with TechTo)
Header registration — ₹500 + GST/year per sender header
Failed delivery credits — TechTo refunds credits for permanently failed deliveries (e.g. invalid number, blacklisted). Check each provider's policy on this.
Overage charges — some providers charge a premium for messages beyond your prepaid pack rather than rolling to the next tier
API call charges — rare, but some global providers (Twilio, Vonage) charge per API call regardless of delivery
15. Pre-Launch Integration Checklist
Before going live with your transactional SMS API integration, run through every item:
DLT Compliance
[ ] Entity (PE) registration completed and approved on DLT portal
[ ] Sender header registered and active (check status — not just submitted)
[ ] All message templates registered with category = Transactional or OTP
[ ] PE ID and Template ID stored securely in environment variables
[ ] PE ID and Template ID included in every API request payload
API Integration
[ ] API key stored in environment variable, never hardcoded
[ ] All SMS API calls made server-side only (no client-side calls)
[ ] IP whitelist configured for production server IPs
[ ] Sandbox testing completed — verify response parsing, error handling
[ ] Retry logic implemented with exponential backoff for 429 errors
[ ] Timeout set on all HTTP calls (recommended: 10 seconds)
Delivery Reporting
[ ] Webhook endpoint deployed and returning HTTP 200 within 2 seconds
[ ] Webhook URL added to API request callback_url field
[ ] DLR events handled: sms.delivered, sms.failed
[ ] Duplicate webhook handling implemented (idempotent processing by message_id)
[ ] Pull DLR API configured as fallback if webhook misses
OTP-Specific
[ ] type: "otp" and priority: "high" set on all OTP requests
[ ] ttl_seconds set to match your OTP validity window
[ ] "Resend OTP" UI waits for DLR failure webhook or 15-second timeout before triggering
[ ] OTP generation uses cryptographically secure random — not Math.random()
Monitoring
[ ] Delivery rate alerting configured (alert if < 95% in any 10-minute window)
[ ] Credit balance low-alert configured (alert at < 10,000 credits)
[ ] Header expiry reminder in calendar (90-day inactivity auto-deactivates headers)
[ ] Operator-level failure breakdown in your dashboard
16. Frequently Asked Questions
What is a transactional SMS API? A transactional SMS API is a REST interface that lets your application send system-triggered, non-promotional messages — OTPs, payment alerts, order confirmations — to users via SMS, bypassing DND restrictions and delivering 24×7. In India, all such messages must pass through TRAI's DLT scrubbing layer before reaching the telecom operator.
What is the difference between transactional and OTP SMS in India? OTP SMS is a subcategory of transactional SMS specifically for one-time passwords used in authentication. Both bypass DND and can be sent 24×7. The key difference is delivery priority — OTP SMS warrants the highest priority queue because authentication flows are latency-sensitive. TechTo Networks has a separate type: "otp" parameter that routes to a dedicated priority queue.
Do I need DLT registration to use a transactional SMS API in India? Yes, unconditionally. TRAI mandates DLT registration for all commercial SMS in India since September 2021. Without a registered PE ID and approved Template ID, your messages are silently blocked at the operator level — your API call may return 200 OK from the gateway but the SMS never reaches the recipient.
How fast is transactional SMS delivery via TechTo Networks? P50 (median) delivery across all Indian operators is under 3 seconds. P95 is under 8 seconds. During off-peak hours (9 PM–9 AM IST) P50 drops to 1.5–2 seconds. These are operator-confirmed DLRs, not gateway acknowledgements.
What is the maximum throughput of TechTo's transactional SMS API? Up to 1,000 TPS (transactions per second) on enterprise plans. Standard plans support up to 100 TPS. Requests exceeding your TPS limit return HTTP 429 — implement exponential backoff in your integration.
Can I use the same API key for transactional and promotional SMS? No. TechTo provides separate endpoints for transactional and promotional routes, and separate DLT template categories must be used. Mixing them causes DLT scrub failures or, worse, TRAI compliance violations that can get your sender header blacklisted.
What happens if my DLT sender header becomes inactive? TRAI's DLT portals auto-deactivate headers that send zero messages for 90 consecutive days. Any API call using an inactive header returns a SENDER_HEADER_INACTIVE error, and messages are not delivered. Re-activate the header through your DLT portal — the process takes 24–48 hours. Build a keep-alive check into your monitoring.
Does TechTo Networks support Unicode / regional language transactional SMS? Yes. TechTo supports 21 Indian languages via Unicode SMS. Unicode messages are limited to 70 characters per SMS part (vs. 160 for ASCII/GSM-7). The API automatically detects Unicode content and calculates credit usage accordingly. Regional language OTPs and alerts consistently show 25–40% higher engagement in non-metro markets.
Is the TechTo Networks transactional SMS API suitable for serverless (AWS Lambda / GCP Functions)? Yes. The REST API is stateless — no persistent connection required. It works with any HTTP client in any serverless environment. For high-volume serverless triggers, ensure your Lambda/Function concurrency is set appropriately to avoid hitting TPS limits simultaneously.
Can I migrate from another SMS provider without changing my DLT registration? Yes. Your DLT entity registration, sender headers, and templates are registered with the operator directly — not with the gateway. Migrating to TechTo Networks only requires updating your API key and endpoint URL. Your DLT IDs remain valid. TechTo's team will verify your existing DLT credentials and have you live within a few hours.
Ready to Integrate TechTo Networks' Transactional SMS API?
TechTo Networks gives you direct operator connectivity to all four Indian telecom networks, sub-3-second OTP delivery, operator-level DLRs, free DLT setup, and a single API key that also unlocks WhatsApp Business API and RCS — your entire messaging stack from one platform.
✅ Free test credits on signup
✅ DLT registration handled by our team
✅ Sandbox available immediately
✅ Full API docs, Postman collection, and SDK downloads included
✅ India-based support — not a ticket queue
Written and maintained by the TechTo Networks Engineering Team. TechTo Networks is a TRAI-compliant CPaaS provider headquartered in Thiruvananthapuram, Kerala, India, offering bulk SMS, OTP SMS, WhatsApp Business API, and RCS messaging infrastructure to 10,000+ businesses across India.




Comments