top of page

SMS Gateway API India: The Complete Developer Integration Guide 2026

Every time a user logs into your app, completes a payment, or receives a delivery update in India, an SMS Gateway API is doing the work invisibly in the background.

But not all SMS Gateway APIs are built the same — and in India, the gap between a well-integrated API and a poorly chosen one shows up as OTP failures, blocked promotional messages, DLT rejections, and delivery delays that cost you conversions you will never see in your analytics.

This is the complete developer guide to SMS Gateway API integration in India for 2026. It covers how SMS gateway APIs work at the protocol level, the difference between REST, HTTP, and SMPP, how to pass DLT-compliant parameters correctly, how to handle delivery webhooks, how to read and respond to error codes from Indian telecom operators, and how to integrate TechTo Networks' SMS API in Python, Node.js, PHP, and Java — with working code you can run today.

Smartphone on charts with a chat bubble and gears. Text reads "SMS Gateway API" and "TECHTO NETWORKS." Vibrant and tech-focused.

What Is an SMS Gateway API?

An SMS Gateway API is a programmatic interface that allows your application to send and receive SMS messages by making HTTP or SMPP requests to a provider's gateway server, which then routes the message to the correct telecom operator and delivers it to the subscriber's mobile device.

The "gateway" sits between your application and India's telecom networks — Jio, Airtel, Vodafone Idea, and BSNL. Without a gateway, your application has no way to communicate with these operator networks directly. The gateway handles the complexity of operator connections, DLT compliance validation, message routing, delivery tracking, and failover — exposing a clean, simple API to your application.

At the network layer, an SMS travels through the following path:

Your Application
    ↓ (API call over HTTPS)
SMS Gateway (TechTo Networks)
    ↓ (DLT validation: entity ID, template ID, header)
TRAI DLT Registry
    ↓ (Route selection: Tier-1 SMPP bind)
Telecom Operator SMSC (Jio / Airtel / Vi / BSNL)
    ↓ (Network delivery to tower)
Subscriber's Mobile Device
    ↑ (Delivery receipt back through the chain)
Your Webhook Endpoint

Understanding this path is critical because each step has specific requirements and potential failure points. The DLT validation step — unique to India — is where most integration failures originate for businesses new to the Indian SMS market.

SMS Gateway API Protocols: REST vs HTTP vs SMPP

There are three protocols through which you can connect to an SMS gateway. Choosing the wrong one for your use case has real consequences on delivery speed, throughput, and cost.

REST API (Recommended for 95% of Use Cases)

A REST (Representational State Transfer) SMS API communicates over standard HTTPS using JSON request and response bodies. It is stateless — each API call is independent — and uses standard HTTP verbs (POST for sending, GET for status checks).

Best for: Web applications, mobile backends, CRM integrations, serverless functions, microservices. Throughput: Up to 100–300 messages per second depending on your plan. Latency per call: 100–400ms API response time. Authentication: API key in HTTP header or Bearer token. Why choose it: Easy to implement in any language, works with standard HTTP libraries, no persistent connection management required.

HTTP GET/POST API (Legacy, Simpler)

An HTTP API sends SMS parameters as URL query strings (GET) or form-encoded POST body. It is simpler than REST but less flexible — no JSON, no structured error responses, limited webhook support.

Best for: Legacy PHP applications, simple notification scripts, WordPress plugins, quick prototypes. Throughput: Up to 50–100 messages per second. Why choose it: Easiest to implement with basic curl or file_get_contents. Why avoid it: Query string parameters are logged in server access logs, exposing your API key. Use REST for anything in production.

SMPP (Short Message Peer-to-Peer)

SMPP is a binary protocol that creates a persistent, stateful TCP connection directly to the gateway's SMSC. It is the protocol used by telecom operators themselves and offers the highest possible throughput and lowest latency.

Best for: High-volume transactional systems (>500 TPS), OTP platforms sending millions of messages daily, telco-grade applications. Throughput: 500–3,000+ messages per second per bind. Latency: 50–150ms end-to-end. Why choose it: Lowest latency, highest throughput, most direct operator path. Why avoid it: Requires persistent TCP connection management, heartbeat/enquire_link handling, complex error handling. Overkill for most businesses.

Feature

REST API

HTTP API

SMPP

Protocol

HTTPS/JSON

HTTP GET/POST

Binary TCP

Throughput

100–300 TPS

50–100 TPS

500–3,000+ TPS

Latency

100–400ms

100–400ms

50–150ms

Implementation complexity

Low

Very Low

High

Persistent connection

No

No

Yes

Best for

Most use cases

Legacy apps

High volume

DLT parameter support

Full

Full

Full

Webhook support

Yes

Limited

Via bind

Recommended

✅ Yes

Legacy only

High volume only

TechTo Networks recommendation: Use the REST API unless you are sending more than 500 OTPs per second at peak. At that volume, contact our team to set up an SMPP bind on a dedicated IP.

DLT-Compliant SMS API: India-Specific Parameters

This is the section that separates a working Indian SMS API integration from one that sends silently and delivers nothing.

TRAI's DLT (Distributed Ledger Technology) system requires three mandatory parameters in every SMS API call in India — for transactional, promotional, and OTP messages alike. Missing or incorrect values in any of these three fields result in silent message blocking at the operator level.

The Three Mandatory DLT Parameters

1. entity_id (Principal Entity ID) This is the unique ID assigned to your business when you complete DLT entity registration. It is a 19-digit numeric string. Every SMS you send must carry your entity ID so the operator can trace the message back to your registered business.

Example: dlt_entity_id: "1100XXXXXXXXXXXXXXX"

2. header (Sender ID) This is the 6-character alphanumeric sender ID registered on your DLT account. It must be registered under your entity ID and approved by the telecom operator before use. It appears as the "From" identifier on the recipient's phone.

Example: sender_id: "TECHTO"

3. template_id (DLT Template ID) Every message template must be pre-registered and approved on the DLT portal before use. The template ID is a 19-digit numeric string assigned upon approval. Your live message must exactly match the registered template structure — static text must be identical, and variable fields must match the {#var#} placeholders in position and count.

Example: template_id: "1107XXXXXXXXXXXXXXX"

Common DLT Integration Errors

Error

Cause

Fix

Message delivered via API but not received

Template ID not registered or rejected

Re-register template; check DLT portal status

TELECO_ERROR: DLT_TEMPLATE_MISMATCH

Live message text does not match registered template

Ensure static text is character-for-character identical

TELECO_ERROR: ENTITY_NOT_FOUND

Entity ID incorrect or registration pending

Confirm 19-digit entity ID from DLT portal

TELECO_ERROR: HEADER_INACTIVE

Sender ID deregistered or suspended

Re-activate header on DLT portal

Message blocked for DND numbers

Transactional route not selected

Set message_type: "transactional" in API call

Template approved but message still blocked

Template registered under wrong entity

Ensure template and header are under the same entity ID

TechTo Networks SMS Gateway API: Full Integration Reference

Base URL: https://api.techtonetworks.com/v1 Authentication: API Key passed in X-API-Key header Format: JSON request and response bodies TLS: 1.2 and 1.3 supported; 1.0 and 1.1 blocked

Send a Single SMS

Endpoint: POST /sms/send

POST /v1/sms/send HTTP/1.1
Host: api.techtonetworks.com
Content-Type: application/json
X-API-Key: YOUR_API_KEY

{
  "to": "919876543210",
  "sender_id": "TECHTO",
  "message": "Your order #ORD-4821 has been dispatched. Track at techto.in/track. - TECHTO",
  "message_type": "transactional",
  "dlt_entity_id": "1100XXXXXXXXXXXXXXX",
  "template_id": "1107XXXXXXXXXXXXXXX",
  "unicode": false,
  "flash": false
}

Response:

{
  "status": "success",
  "message_id": "TN-MSG-20260601-948271",
  "to": "919876543210",
  "credits_used": 1,
  "submitted_at": "2026-06-01T14:22:31+05:30"
}

Send Bulk SMS (Multiple Recipients)

Endpoint: POST /sms/bulk

POST /v1/sms/bulk HTTP/1.1
Host: api.techtonetworks.com
Content-Type: application/json
X-API-Key: YOUR_API_KEY

{
  "messages": [
    {
      "to": "919876543210",
      "message": "Hi Rahul, your appointment is confirmed for June 5 at 10:00 AM. - TECHTO",
      "template_id": "1107XXXXXXXXXXXXXXX"
    },
    {
      "to": "918765432109",
      "message": "Hi Priya, your appointment is confirmed for June 5 at 11:30 AM. - TECHTO",
      "template_id": "1107XXXXXXXXXXXXXXX"
    }
  ],
  "sender_id": "TECHTO",
  "message_type": "transactional",
  "dlt_entity_id": "1100XXXXXXXXXXXXXXX"
}

Response:

{
  "status": "queued",
  "batch_id": "TN-BATCH-20260601-3821",
  "total_messages": 2,
  "credits_reserved": 2,
  "estimated_delivery": "2026-06-01T14:22:45+05:30"
}

Schedule an SMS Campaign

Endpoint: POST /sms/schedule

POST /v1/sms/schedule HTTP/1.1
Host: api.techtonetworks.com
Content-Type: application/json
X-API-Key: YOUR_API_KEY

{
  "to": ["919876543210", "918765432109", "917654321098"],
  "sender_id": "TECHTO",
  "message": "TechTo Networks Flash Sale: 30% off all plans today only. Visit techtonetworks.com - TECHTO",
  "message_type": "promotional",
  "dlt_entity_id": "1100XXXXXXXXXXXXXXX",
  "template_id": "1107XXXXXXXXXXXXXXX",
  "schedule_time": "2026-06-05T10:00:00+05:30"
}

Check Message Delivery Status

Endpoint: GET /sms/status/{message_id}

GET /v1/sms/status/TN-MSG-20260601-948271 HTTP/1.1
Host: api.techtonetworks.com
X-API-Key: YOUR_API_KEY

Response:

{
  "message_id": "TN-MSG-20260601-948271",
  "to": "919876543210",
  "status": "delivered",
  "operator": "Airtel",
  "submitted_at": "2026-06-01T14:22:31+05:30",
  "delivered_at": "2026-06-01T14:22:34+05:30",
  "delivery_time_ms": 3240,
  "error_code": null
}

API Request Parameters Reference

Parameter

Type

Required

Description

to

string / array

Yes

Mobile number(s) with country code (91XXXXXXXXXX)

sender_id

string

Yes

DLT-registered 6-char alphanumeric header

message

string

Yes

SMS text. Max 160 chars per segment

message_type

string

Yes

transactional, promotional, or otp

dlt_entity_id

string

Yes

19-digit DLT Principal Entity ID

template_id

string

Yes

19-digit DLT Template ID

unicode

boolean

No

Set true for Hindi/regional language SMS

flash

boolean

No

Set true for Class 0 flash messages

schedule_time

ISO8601

No

Future timestamp for scheduled send

callback_url

string

No

Webhook URL for delivery receipt

short_url

boolean

No

Auto-shorten URLs in message body

SDK Integration: 4 Languages

Python

import requests
import json

class TechToSMS:
    BASE_URL = "https://api.techtonetworks.com/v1"
    
    def __init__(self, api_key):
        self.api_key = api_key
        self.headers = {
            "Content-Type": "application/json",
            "X-API-Key": api_key
        }
    
    def send_sms(self, to, message, sender_id, template_id,
                 entity_id, message_type="transactional"):
        payload = {
            "to": to,
            "sender_id": sender_id,
            "message": message,
            "message_type": message_type,
            "dlt_entity_id": entity_id,
            "template_id": template_id
        }
        response = requests.post(
            f"{self.BASE_URL}/sms/send",
            headers=self.headers,
            json=payload
        )
        return response.json()
    
    def check_status(self, message_id):
        response = requests.get(
            f"{self.BASE_URL}/sms/status/{message_id}",
            headers=self.headers
        )
        return response.json()

# Usage
client = TechToSMS(api_key="YOUR_API_KEY")

result = client.send_sms(
    to="919876543210",
    message="Your order #4821 has been dispatched. - TECHTO",
    sender_id="TECHTO",
    template_id="1107XXXXXXXXXXXXXXX",
    entity_id="1100XXXXXXXXXXXXXXX"
)

print(result["message_id"])  # TN-MSG-20260601-948271
print(result["status"])      # success

Node.js

const axios = require('axios');

const techto = {
  baseURL: 'https://api.techtonetworks.com/v1',
  apiKey: process.env.TECHTO_API_KEY,

  async sendSMS({ to, message, senderId, templateId, entityId, messageType = 'transactional' }) {
    const response = await axios.post(`${this.baseURL}/sms/send`, {
      to,
      sender_id: senderId,
      message,
      message_type: messageType,
      dlt_entity_id: entityId,
      template_id: templateId,
    }, {
      headers: {
        'Content-Type': 'application/json',
        'X-API-Key': this.apiKey,
      }
    });
    return response.data;
  },

  async checkStatus(messageId) {
    const response = await axios.get(`${this.baseURL}/sms/status/${messageId}`, {
      headers: { 'X-API-Key': this.apiKey }
    });
    return response.data;
  }
};

// Usage
(async () => {
  try {
    const result = await techto.sendSMS({
      to: '919876543210',
      message: 'Your order #4821 has been dispatched. - TECHTO',
      senderId: 'TECHTO',
      templateId: '1107XXXXXXXXXXXXXXX',
      entityId: '1100XXXXXXXXXXXXXXX',
    });
    console.log(result.message_id); // TN-MSG-20260601-948271
  } catch (err) {
    console.error('SMS failed:', err.response?.data);
  }
})();

PHP

<?php

class TechToSMS {
    private $baseURL = 'https://api.techtonetworks.com/v1';
    private $apiKey;

    public function __construct(string $apiKey) {
        $this->apiKey = $apiKey;
    }

    public function sendSMS(
        string $to,
        string $message,
        string $senderId,
        string $templateId,
        string $entityId,
        string $messageType = 'transactional'
    ): array {
        $payload = json_encode([
            'to'             => $to,
            'sender_id'      => $senderId,
            'message'        => $message,
            'message_type'   => $messageType,
            'dlt_entity_id'  => $entityId,
            'template_id'    => $templateId,
        ]);

        $ch = curl_init("{$this->baseURL}/sms/send");
        curl_setopt_array($ch, [
            CURLOPT_POST           => true,
            CURLOPT_POSTFIELDS     => $payload,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_HTTPHEADER     => [
                'Content-Type: application/json',
                "X-API-Key: {$this->apiKey}",
            ],
        ]);
        $response = curl_exec($ch);
        curl_close($ch);

        return json_decode($response, true);
    }
}

// Usage
$client = new TechToSMS($_ENV['TECHTO_API_KEY']);

$result = $client->sendSMS(
    to: '919876543210',
    message: 'Your order #4821 has been dispatched. - TECHTO',
    senderId: 'TECHTO',
    templateId: '1107XXXXXXXXXXXXXXX',
    entityId: '1100XXXXXXXXXXXXXXX'
);

echo $result['message_id']; // TN-MSG-20260601-948271

Java

import java.net.http.*;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Map;

public class TechToSMS {

    private static final String BASE_URL = "https://api.techtonetworks.com/v1";
    private final String apiKey;
    private final HttpClient httpClient;
    private final ObjectMapper objectMapper;

    public TechToSMS(String apiKey) {
        this.apiKey = apiKey;
        this.httpClient = HttpClient.newHttpClient();
        this.objectMapper = new ObjectMapper();
    }

    public Map<String, Object> sendSMS(String to, String message, String senderId,
            String templateId, String entityId, String messageType) throws Exception {

        Map<String, String> payload = Map.of(
            "to", to,
            "sender_id", senderId,
            "message", message,
            "message_type", messageType,
            "dlt_entity_id", entityId,
            "template_id", templateId
        );

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(BASE_URL + "/sms/send"))
            .header("Content-Type", "application/json")
            .header("X-API-Key", apiKey)
            .POST(HttpRequest.BodyPublishers.ofString(
                objectMapper.writeValueAsString(payload),
                StandardCharsets.UTF_8
            ))
            .build();

        HttpResponse<String> response = httpClient.send(
            request, HttpResponse.BodyHandlers.ofString()
        );

        return objectMapper.readValue(response.body(), Map.class);
    }

    // Usage
    public static void main(String[] args) throws Exception {
        TechToSMS client = new TechToSMS(System.getenv("TECHTO_API_KEY"));

        Map<String, Object> result = client.sendSMS(
            "919876543210",
            "Your order #4821 has been dispatched. - TECHTO",
            "TECHTO",
            "1107XXXXXXXXXXXXXXX",
            "1100XXXXXXXXXXXXXXX",
            "transactional"
        );

        System.out.println(result.get("message_id")); // TN-MSG-20260601-948271
    }
}

Webhooks: Receiving Delivery Reports in Real Time

Polling the status endpoint for every message is inefficient and adds unnecessary API load. The correct approach is to configure a webhook — a URL on your server that TechTo Networks calls automatically when a message status changes.

Configuring Your Webhook

Pass callback_url in your send request:

{
  "to": "919876543210",
  "message": "Your OTP is {otp}. Valid for 5 minutes. - TECHTO",
  "callback_url": "https://yourapp.com/webhooks/sms-delivery",
  ...
}

Or set a global webhook URL for all messages in your TechTo dashboard under Settings → Webhooks.

Webhook Payload (Delivery Receipt)

TechTo calls your endpoint via HTTP POST with the following JSON body:

{
  "event": "delivery_receipt",
  "message_id": "TN-MSG-20260601-948271",
  "to": "919876543210",
  "status": "delivered",
  "operator": "Jio",
  "error_code": null,
  "error_description": null,
  "submitted_at": "2026-06-01T14:22:31+05:30",
  "delivered_at": "2026-06-01T14:22:34+05:30",
  "delivery_time_ms": 3240
}

Webhook Status Values

Status

Meaning

Action Required

delivered

Confirmed delivery to handset

None — success

submitted

Accepted by operator, delivery pending

Wait for update

failed

Delivery failed — check error_code

Retry or alert

rejected

Blocked by DLT validation

Fix entity/template/header

undelivered

Operator could not deliver (handset off, number invalid)

Check number validity

expired

Message validity window elapsed without delivery

Retry if still relevant

Webhook Handler Example (Node.js / Express)

const express = require('express');
const app = express();
app.use(express.json());

app.post('/webhooks/sms-delivery', (req, res) => {
  const { event, message_id, to, status, error_code, delivery_time_ms } = req.body;

  if (event === 'delivery_receipt') {
    if (status === 'delivered') {
      console.log(`✅ Delivered to ${to} in ${delivery_time_ms}ms`);
      // Update your database record
    } else if (status === 'rejected') {
      console.error(`❌ DLT rejection for ${message_id}: ${error_code}`);
      // Alert your ops team — likely a template mismatch
    } else if (status === 'failed') {
      console.warn(`⚠️ Failed for ${to}: ${error_code}`);
      // Trigger retry logic or fallback channel
    }
  }

  res.status(200).json({ received: true });
});

Error Codes Reference: Indian SMS Gateway API

Understanding error codes from Indian telecom operators saves hours of debugging. Here is a complete reference for codes returned by TechTo Networks' API.

Error Code

Category

Description

Resolution

E100

Success

Message delivered

E101

DLT

Entity ID not found

Verify 19-digit entity ID on DLT portal

E102

DLT

Template ID not found

Check template is approved, not pending

E103

DLT

Template content mismatch

Static text must exactly match registered template

E104

DLT

Header (sender ID) not registered

Register header under same entity on DLT portal

E105

DLT

Header suspended

Reactivate sender ID on DLT portal

E201

Number

Invalid mobile number format

Use 91XXXXXXXXXX format; 10-digit after 91

E202

Number

Number is DND-registered (promotional)

Switch to transactional route

E203

Number

Number deactivated / ported

Remove from your database

E301

Content

Message exceeds character limit

Keep under 160 chars per segment; Unicode reduces to 70

E302

Content

Special characters in non-unicode mode

Set unicode: true for Hindi/regional content

E401

Auth

Invalid API key

Check key in TechTo dashboard

E402

Auth

IP not whitelisted

Add your server IP to allowed list in dashboard

E403

Auth

Account suspended

Contact TechTo support

E501

Rate

Rate limit exceeded

Implement exponential backoff; upgrade plan

E502

Credits

Insufficient credits

Top up account

E601

Routing

No route available for this number

Contact support — rare operator routing gap

E602

Routing

Operator SMSC congestion

Retry after 30–60 seconds

E701

Schedule

Schedule time is in the past

Use future IST timestamp

E702

Schedule

Schedule time outside TRAI window (promotional)

Schedule between 10:00 AM and 8:00 PM IST

API Security Best Practices for Indian Businesses

1. Store API Keys in Environment Variables

Never hardcode your API key in source code or commit it to a repository.

# .env file (never commit this)
TECHTO_API_KEY=your_actual_key_here

# Access in Python
import os
api_key = os.environ.get("TECHTO_API_KEY")

# Access in Node.js
const apiKey = process.env.TECHTO_API_KEY;

2. Enable IP Whitelisting

In TechTo dashboard → Settings → API Security, add your server's static IP addresses. Any request from an unlisted IP is rejected with E402, even with a valid API key. This prevents credential theft from being exploited.

3. Validate Webhook Signatures

TechTo signs every webhook delivery with an HMAC-SHA256 signature using your webhook secret. Validate this on your server before processing:

import hmac
import hashlib

def validate_webhook(payload_body: bytes, signature: str, secret: str) -> bool:
    expected = hmac.new(
        secret.encode('utf-8'),
        payload_body,
        hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(expected, signature)

# In your webhook handler
signature = request.headers.get('X-TechTo-Signature')
is_valid = validate_webhook(request.body, signature, WEBHOOK_SECRET)
if not is_valid:
    return Response(status=401)

4. Implement Rate Limiting on Your Side

Before hitting TechTo's rate limits, implement your own application-level throttle. For OTP use cases, a single mobile number should never receive more than 3 OTPs in 10 minutes.

5. Never Log Message Content

SMS message content — especially OTPs and financial alerts — should never be written to application logs. Log the message_id for tracking, not the message body.

Real-World Integration Patterns

Pattern 1: E-Commerce Order Notification (Node.js + Webhooks)

// Triggered after order status update in your e-commerce backend
async function sendOrderUpdate(order) {
  const message = `Hi ${order.customerName}, your order #${order.id} is ${order.status}. Track: ${order.trackingUrl} - TECHTO`;

  const result = await techto.sendSMS({
    to: `91${order.customerPhone}`,
    message,
    senderId: 'TECHTO',
    templateId: process.env.ORDER_TEMPLATE_ID,
    entityId: process.env.DLT_ENTITY_ID,
    messageType: 'transactional',
    callbackUrl: 'https://yourapp.com/webhooks/sms-delivery'
  });

  // Store message_id against the order for tracking
  await db.orders.update(order.id, { smsMessageId: result.message_id });
}

Pattern 2: Scheduled Promotional Campaign (Python + Pandas)

import pandas as pd
import requests
from datetime import datetime

# Load opted-in customer list
customers = pd.read_csv('opted_in_customers.csv')

# Build bulk payload
messages = [
    {
        "to": f"91{row['mobile']}",
        "message": f"Hi {row['name']}, TechTo Sale: 30% off today. techtonetworks.com - TECHTO",
        "template_id": PROMO_TEMPLATE_ID
    }
    for _, row in customers.iterrows()
]

# Schedule for 11 AM IST (within TRAI promotional window)
response = requests.post(
    "https://api.techtonetworks.com/v1/sms/schedule",
    headers={"X-API-Key": API_KEY, "Content-Type": "application/json"},
    json={
        "messages": messages,
        "sender_id": "TECHTO",
        "message_type": "promotional",
        "dlt_entity_id": ENTITY_ID,
        "schedule_time": "2026-06-10T11:00:00+05:30"
    }
)
print(f"Scheduled {len(messages)} messages. Batch: {response.json()['batch_id']}")

Pattern 3: WordPress / WooCommerce Integration (PHP)

// Add to functions.php or custom plugin
add_action('woocommerce_order_status_changed', 'send_order_sms', 10, 3);

function send_order_sms($order_id, $old_status, $new_status) {
    $order = wc_get_order($order_id);
    $phone = $order->get_billing_phone();
    $name  = $order->get_billing_first_name();

    $client  = new TechToSMS(get_option('techto_api_key'));
    $message = "Hi {$name}, your order #{$order_id} is now {$new_status}. - TECHTO";

    $client->sendSMS(
        to: "91{$phone}",
        message: $message,
        senderId: 'TECHTO',
        templateId: get_option('techto_order_template_id'),
        entityId: get_option('techto_dlt_entity_id')
    );
}

Performance Benchmarks: What to Expect from TechTo Networks API

Metric

TechTo Networks

Industry Average

API response time (P50)

180ms

300–500ms

API response time (P95)

420ms

800–1,200ms

SMS delivery P50 (Jio)

1.8 sec

3–5 sec

SMS delivery P50 (Airtel)

2.1 sec

3–5 sec

SMS delivery P95 (all operators)

6.8 sec

12–20 sec

Platform uptime SLA

99.99%

99.9%

Max throughput (REST)

300 TPS

100–150 TPS

Max throughput (SMPP)

3,000 TPS

1,000–2,000 TPS

Delivery rate (transactional)

99.2%

95–98%

DLT validation time

<50ms

100–300ms

SMS Gateway API Pricing

TechTo Networks uses transparent per-message pricing with no monthly platform fees on standard plans.

Message Type

Rate

Min Purchase

Validity

Transactional SMS (Tier-1)

₹0.18/SMS

1,000 SMS

1 year

Promotional SMS

₹0.13/SMS

5,000 SMS

1 year

OTP SMS

₹0.18/SMS

1,000 SMS

1 year

Unicode (Regional Language) SMS

₹0.25/SMS

1,000 SMS

1 year

International SMS

From ₹2.50/SMS

500 SMS

1 year

SMPP Access

₹0.15/SMS

1,00,000 SMS/mo

Monthly

API Access

Free

All plans

Volume pricing available from 1,00,000 SMS/month. All rates exclude 18% GST. DLT routing charges included.

Frequently Asked Questions

What is an SMS Gateway API? An SMS Gateway API is a programmatic interface — typically REST or HTTP — that lets your application send and receive SMS messages by connecting to a telecom gateway that routes messages to mobile operators. In India, every SMS Gateway API must support DLT compliance parameters: entity ID, sender ID, and template ID, which are validated in real time before message delivery.

What is the difference between REST API and SMPP for SMS? REST API communicates over standard HTTPS with JSON bodies — it is stateless, easy to implement, and suitable for up to 300 messages per second. SMPP (Short Message Peer-to-Peer) creates a persistent binary TCP connection directly to the operator SMSC and supports 500–3,000+ messages per second with lower latency. Use REST for most applications; use SMPP only for platforms sending more than 500 OTPs per second at peak.

Is DLT registration required for using an SMS Gateway API in India? Yes. TRAI mandates DLT registration for every business sending commercial SMS in India — including transactional, OTP, and promotional messages. Without a registered entity ID, sender ID, and approved template ID, your API calls will be accepted but messages will be silently blocked at the operator level. TechTo Networks assists with DLT registration as part of onboarding.

How fast does the TechTo Networks SMS API deliver messages in India? TechTo delivers transactional SMS in a median of 1.8–2.1 seconds across Jio and Airtel. P95 delivery — the speed at which 95% of messages arrive — is under 7 seconds across all four Indian operators during peak hours. API response time (the time between your POST request and the API acknowledgement) is under 200ms at P50.

How do I handle delivery failures in the SMS API? Configure a callback_url webhook in your API request. TechTo sends a POST to your webhook with the delivery status when it changes. For failed messages, check the error_code field — E103 (template mismatch) and E202 (DND number) are the most common in India. Implement exponential backoff for retries on E602 (operator congestion) errors. For E101–E105 (DLT errors), fix the root cause on the DLT portal rather than retrying.

Can I send SMS in Hindi or regional Indian languages via the API? Yes. Set "unicode": true in your API request. Unicode SMS supports all Indian languages including Hindi, Tamil, Telugu, Malayalam, Kannada, Bengali, Marathi, and Gujarati. Note that Unicode messages have a 70-character segment limit instead of 160, so longer messages consume more credits. Your DLT template must be registered with the regional language text.

What is the rate limit for the TechTo Networks SMS API? The default rate limit on REST API is 300 requests per second per API key. For higher throughput, SMPP binds support 3,000+ messages per second. If you need to send above the default limit, contact our team for a rate limit increase or SMPP setup. Hitting the rate limit returns an E501 error — implement exponential backoff with jitter in your retry logic.

How do I integrate TechTo SMS API with CRM platforms? TechTo provides native integrations with Zoho CRM, HubSpot, Salesforce, Freshsales, and LeadSquared. For custom CRM integration, use the REST API with your CRM's webhook or automation workflow — the API call is a standard POST request and can be triggered from any platform that supports HTTP actions. Contact our integrations team for CRM-specific documentation.

Why TechTo Networks for SMS Gateway API in India

Direct Tier-1 operator routes. TechTo connects directly to Jio, Airtel, Vi, and BSNL SMSC — no aggregator hops. This delivers measurably faster P95 delivery than providers routing through intermediaries.

Full DLT automation. Entity registration, header approval, template validation, and NCPR scrubbing handled at the platform level. Incorrect template parameters are caught before transmission, not after silent failures.

Comprehensive API documentation. REST, SMPP, and HTTP API documentation with code samples in Python, Node.js, PHP, Java, and .NET. Postman collection available for immediate testing.

Sandbox environment. Test your full integration — including webhook delivery and error code handling — without consuming live credits. Sandbox mirrors production behaviour exactly.

99.99% platform uptime SLA. Backed by a contractual SLA, not a marketing claim. Monthly uptime reports available to enterprise customers.

24/7 developer support. Dedicated technical account manager for API integration queries. Average P1 incident response: under 15 minutes.

Start integrating in minutes.

TechTo Networks Pvt. Ltd. | TRAI DLT Registered | Tier-1 Direct Routes | Kerala, India

1 Comment

Rated 0 out of 5 stars.
No ratings yet

Add a rating
Rated 5 out of 5 stars.

Really well explained! Simple, practical, and easy to understand — especially the real-world use cases 👍

Like
bottom of page