How to get an SMS content template approved on DLT in 2026: which category to choose, what the fixed text must contain, how many variables you can use, and 13 example templates written to current rules.
A DLT content template is the pre-approved wording of one SMS: fixed text plus up to three typed variables. You register it under your entity on any operator's DLT portal, choose a category (promotional, transactional or service), link it to one approved header, and tag each variable, for example {#numeric#} on Airtel or {#num#} on Vi and BSNL. Whitelist any link or callback number first. If a message does not match an approved template exactly, it is rejected at scrubbing.
The order is fixed: entity first, then headers (sender IDs), then content templates against those headers. Each approved template gets a template ID, and the operator's scrubbing engine checks every message against it. Consent templates are separate: they hold the wording used to collect explicit consent, and BSNL accepts them only in English.
The category decides who you can reach and which header type you need. These are the operators' own definitions, as written in the current Vi and BSNL manuals and the TCCCPR amendment of 12 February 2025:
| Category | What it covers | Status in 2026 |
|---|---|---|
| Promotional | Advertising for a product or service. Sent to non-DND numbers, or to numbers whose digital consent is registered on DLT. | Open |
| Transactional | Triggered by a transaction the subscriber performed and sent within about 30 minutes. Includes OTPs from banks and non-bank entities such as apps and e-commerce sites, plus balance and refund alerts. | Open |
| Service Implicit | Information about a product or service the customer already uses: delivery updates, warranty, recalls, appointment and attendance messages, periodic balance alerts. Must not be promotional. | Open |
| Service Explicit | Service messages that need the customer's explicit, verifiable consent. | Closing (see below) |
| Government | Communications from government bodies, treated as a separate category since February 2025. | Government entities only |
One rule from the February 2025 amendment catches many businesses: promotional content mixed with anything else makes the whole message promotional. A delivery update ending "use code SAVE10 on your next order" is promotional. Borderline cases are worked through in transactional vs promotional SMS.
Service Explicit is being wound down; the details are not settled (Medium confidence). Airtel's portal says "Registration of new SE templates with alphanumeric headers will be discontinued", that category changes are allowed "only for SI and Transactional templates", and that "SE-Promo category migration will not be permitted". The current Vi and BSNL manuals no longer offer the category. Fast2SMS reports SE templates were moved to Promotional on 10 March 2026; we found no TRAI document for that date. Our reading: if a message needs explicit consent or carries an offer, register it as promotional.
Once a template is approved, only the variable values may change. Write the fixed text with that in mind:
| Source | Variable limit |
|---|---|
| TRAI, 16 Feb 2023 | Two variables, with a third allowed "in case of exigency". Variables must not be contiguous. |
| TRAI, 12 May 2023 and 18 Nov 2025 | More than three only on justification, and every variable must be pre-tagged for its purpose. |
| Airtel portal | "2–3 Variable are allowed with at least 40% of static content in the template." |
| Vi manual | Three; more needs justification. Until the justification flow is released, up to 15 are allowed as an "interim relaxation only". |
| BSNL manual | Three; "more than 3 variables are allowed only after proper justification". |
| Jio TrueConnect | No limit published. The template screen shows the variable count and asks you to confirm. |
Variables need fixed text between them; Vi and BSNL allow only {#alp#} variables back to back. Every variable carries a type tag, and the names differ by portal. The examples below use Airtel's; on Vi and BSNL swap {#numeric#}→{#num#}, {#alphanumeric#}→{#alp#}, {#url#}→{#urg#}, {#urlott#}→{#uro#}, {#email#}→{#eml#}; {#cbn#} is the same. Length limits per tag are in our variable tagging guide.
Keep units in the fixed text ("Rs. {#numeric#}") so number variables carry only digits, and never design a variable that could hold a whole sentence.
Vi's and BSNL's current manuals say: "A new template can be linked to only one (1) header", chosen from headers in the same category. Older templates linked to several headers must be trimmed to one with Replace Headers before any change. BSNL's older FAQ page still says a content template "can be used with multiple headers"; the newer manual governs new registrations. If you send the same OTP from two sender IDs, register two templates. On Airtel, a template sent with a header it is not linked to fails with error 614; see our DLT error codes guide.
Since 1 October 2024, messages with URLs, APK or OTT links that are not whitelisted have been blocked. Callback numbers were deferred, but the 18 November 2025 direction now scrubs tagged {#cbn#} values against whitelisted numbers. Portals call this CTA (call-to-action) whitelisting:
| CTA type | Format the portals accept |
|---|---|
| Static URL | Full URL with http:// or https://. No shortener links. No URL that redirects elsewhere: Airtel says redirecting URLs "will be rejected during the approval process". |
| Dynamic URL | Whitelist the part up to the ?. Variable parameters may come only after it, and dynamic paths before the ? are not supported (Vi, BSNL). |
| Short URL | Your short domain plus your header, e.g. https://shrt.com/HEADER/abc. Airtel requires the whitelisted base to end with "/" and does not allow numeric headers in short URLs. |
| APK / app link | Must end in .apk or .ipa |
| Mobile number | 12 digits starting with 91 |
| Landline | Starts with 0, 11 digits |
| Toll-free | Starts with 1800 or 1860, 8–13 digits |
| Short code | 3–6 digits |
Whitelist once on any portal and it is shared with every operator; Vi and BSNL charge nothing extra. Airtel warns that messages "will fail during scrubbing if the whitelisted URL does not exactly match".
| Portal | Published target for content templates |
|---|---|
| Vi | The registrar validates within 60 minutes, and any discrepancy is reported within 72 hours (Vi FAQ). |
| BSNL | Same wording as Vi: 60 minutes, with discrepancies reported within 72 hours. |
| Airtel | None published for content templates. Consent templates: "Approval may take up to 24 hours." |
| Jio | None published. |
Provider guides commonly quote 1–3 working days, but no operator commits to that. Vi's "Generate score" tool says "a higher score increases the chance of automatic approval".
Each example has a brand name, at most three tagged variables and fixed text between them. "Acme" names are placeholders for your registered brand; values in {#url#}, {#urlott#} and {#cbn#} must be whitelisted.
{#numeric#} is your OTP to log in to AvanceZone. It is valid for 10 minutes. Do not share it with anyone. -AvanceZone
Your OTP for the payment of Rs. {#numeric#} at Acme Stores is {#numeric#}. It is valid for 5 minutes. Never share your OTP. -Acme Stores
A refund of Rs. {#numeric#} for your Acme Stores order {#alphanumeric#} has been processed to your original payment method. -Acme StoresYour Acme Stores order {#alphanumeric#} has been shipped. Track it here: {#url#} -Acme Stores
Your Acme Stores order {#alphanumeric#} will be delivered today. For help, call {#cbn#}. -Acme Stores
Dear {#alphanumeric#}, your appointment at Acme Clinic is confirmed for {#alphanumeric#}. Please arrive 10 minutes early. -Acme Clinic
Reminder: your appointment with {#alphanumeric#} at Acme Clinic is tomorrow at {#alphanumeric#}. To reschedule, call {#cbn#}. -Acme Clinic
Dear Parent, the term fee of Rs. {#numeric#} for {#alphanumeric#} is due on {#alphanumeric#}. Please pay at the school office or online. -Acme School
Dear Parent, {#alphanumeric#} was absent from Acme School today. Please contact the class teacher if this is unexpected. -Acme School
Your Acme Fibernet bill of Rs. {#numeric#} for account {#alphanumeric#} is due on {#alphanumeric#}. Please ignore if already paid. -Acme FibernetWeekend sale at Acme Stores: flat {#numeric#}% off on home appliances till {#alphanumeric#}. Shop now: {#url#} T&C apply. -Acme Stores
Book visits and view lab reports on the Acme Clinic app. Download it here: {#urlott#} -Acme Clinicஉங்கள் AvanceZone உள்நுழைவு OTP {#numeric#}. இது 10 நிமிடங்களுக்கு மட்டுமே செல்லுபடியாகும். யாரிடமும் பகிர வேண்டாம். -AvanceZoneSubmit sample values that pass validation: 482913 for an OTP, AZ10234 for an order, 31 Oct 2026 for a date. Number variables take digits only, so 1,499.50 fails; send whole rupees. Whether punctuation such as : or / passes alphanumeric scrubbing on every operator is not published, so test first.
| Reason | Where it comes from | Fix |
|---|---|---|
Untagged {#var#} in a new template | TRAI 18 Nov 2025; Airtel: new templates must be pre-tagged | Tag every variable |
| More than three variables without justification | Vi, BSNL manuals | Merge fixed parts into the text, or justify |
| Under 40% fixed text | Airtel portal | Add context around the variables |
| Two non-alphanumeric variables side by side | TRAI 2023; Vi, BSNL | Put fixed text between them |
| No brand name | Vi FAQ; Jio template screen | Add your registered brand or legal name |
| Offer wording in a transactional or service template | TCCCPR amendment, Feb 2025 | Register it as promotional |
| Link, app link, number or email without a whitelisted CTA | Airtel: "Values not found for type… register for more in Manage CTA" | Whitelist first, then register |
| URL in an alphanumeric sample | Airtel: "Url found for 'Text without URL' variable type" | Use {#url#} for links |
| Redirecting or non-matching URL | Airtel CTA rules | Whitelist the final URL itself |
| Duplicate content on the same header | Airtel: "Template content is already present." | Reuse the existing template ID |
| Trailing line break | Airtel template screen | Delete the final newline |
| Header from a different category | Vi, BSNL: only same-category headers are listed | Register a header of the right type |
Store the template ID as text, exactly as the portal shows it. On AvanceZone, messages are normally checked against your approved templates before they leave; a mismatch returns HTTP 422 with error_code: TEMPLATE_MISMATCH. Our PHP SMS guide shows how to fill templates in code. Keep templates maintained: Airtel requires quarterly verification of headers and templates, and Jio an annual self-certification.
We write templates in the right category with tagged variables, whitelist your links and register them under your entity. Then we connect them to our DLT-compliant gateway. AvanceZone has worked from Sulur, Coimbatore since 1998; see bulk SMS in Coimbatore.