Quick Answer
Under TRAI's November 2025 direction, DLT content templates must pre-tag every variable with one of six types: {#numeric#} for OTPs and amounts, {#alphanumeric#} for names and IDs (max 40 characters), {#url#} and {#urlott#} for whitelisted links, {#cbn#} for callback numbers and {#email#} for email addresses. New templates must use them from 15 January 2026; untagged or mismatched messages are rejected once enforcement applies. SMSGatewayHub helps convert and re-register your templates.
What are the new DLT variable tags?
Each changing value in a template must be tagged with the data type it will carry. The generic {#var#} is no longer accepted for new templates.
| Tag | Use it for | Rules |
| {#numeric#} | OTPs, amounts, quantities, account and policy numbers | Digits 0-9 only. No letters, commas, spaces or symbols. |
| {#alphanumeric#} | Names, order/booking/ticket IDs, masked card numbers, merchant names | Up to 40 characters. Cannot start with www, http or https. The only tag that may sit directly next to another of the same type. |
| {#url#} | Website links: tracking pages, statements, portals, payment links | Must match a URL CTA (static, dynamic or short URL) whitelisted against the template. |
| {#urlott#} | App store, APK and OTT links (for example WhatsApp or Play Store) | Must match a CTA registered under the OTT/APK category. |
| {#cbn#} | Callback numbers: support lines, toll-free and landline numbers | Must match a registered number CTA. Keep the country code in fixed text, not inside the variable. |
| {#email#} | Email addresses such as support or billing contacts | Must be a valid email format. |
Some operator portals display short forms such as {#num#}, {#alp#}, {#urg#}, {#uro#} and {#eml#}; they carry the same rules. Always pick the tag your DLT portal offers in its Insert Variable menu.
What is the timeline for variable tagging?
Dates as reported by DLT platforms and messaging providers; your operator portal shows the deadline that applies to your entity.
18 Nov 2025: TRAI direction
TRAI directed access providers under TCCCPR 2018 to require pre-tagged, typed variables in every content template.
15 Jan 2026: new templates
All templates registered from this date must use the six typed tags. Templates using only {#var#} are not approved.
60-day grace for old templates
Templates registered earlier keep working in logger mode: messages still deliver, but mismatches are flagged so you can fix them.
Enforcement
After the grace window, messages whose content does not match the tagged template, or whose links and numbers are not whitelisted CTAs, are rejected at scrubbing.
Old {#var#} format vs 2026 typed format
| Old template (before 2026) | New template (2026) | Why it changed |
| {#var#} is your OTP for login. Valid for {#var#} minutes. | {#numeric#} is your OTP for login. Valid for {#numeric#} minutes. | Both values are digits, so both become {#numeric#}. |
| Dear {#var#}, your order {#var#} is out for delivery. | Dear {#alphanumeric#}, your order {#alphanumeric#} is out for delivery. | Names and order IDs mix letters and digits. |
| Pay your bill at {#var#} | Pay your bill at {#url#} | The link must now be a whitelisted URL CTA. |
| Call {#var#} for help. | Call {#cbn#} for help. | The number must be a registered callback number CTA. |
| Dear customer {#var#}{#var#}{#var#} | Dear {#alphanumeric#}, your service request {#alphanumeric#} is registered. - ABC Support | Pure-variable templates are rejected; the new version adds meaningful fixed text. |
What are the DLT content template categories?
| Category | Definition | Illustrations |
| 1. Transactional | Any message containing an OTP that is required to complete a banking transaction initiated by a bank or financial institution. Applies to all banks (national, scheduled, private, government or MNC). | OTP for completing a net-banking transaction; OTP for a credit/debit card transaction at a merchant location |
| 2. Service Implicit | Any message arising from the customer's action, typically against a transaction or relationship with the enterprise, that is not promotional. | Net-banking and card confirmations; purchase confirmations and delivery status; wallet payment OTPs; OTPs for logins, social apps, verification links, securities trading, demat, KYC and e-wallet registration; TSP/ISP messages; balance, bill, due-date and recharge alerts (DTH, cable, prepaid electricity); delivery notifications and upgrades; retail bill and warranty messages; school attendance and transport alerts; hospital, clinic, pharmacy, radiology and pathology messages on registration, appointments, discharge and reports; app-based service confirmations; Govt/DoT/TRAI mandated messages; updates from car workshops, repair shops and gadget service centres; directory services such as Justdial and Yellow Pages; day-end/month-end settlement alerts to securities/demat holders |
| 3. Service Explicit | Messages that require the customer's explicit consent, verified directly from the recipient in a robust and verifiable manner and recorded by the consent registrar. Any service message that does not fall under service implicit. | Messages to existing customers recommending or promoting other products or services. A consent template can additionally be linked. |
| 4. Promotional | Any message sent to non-customers with the intention to promote or sell a product, goods or service. Service content mixed with promotional content is treated as promotional. | Sent after preference and consent scrubbing; consent overrides preferences. A customer consent template can additionally be linked. |
Under TRAI's new header suffix rules, service explicit templates are being moved under the promotional (-P) category. See SMS sender ID suffixes and service explicit vs service implicit SMS.
Transactional template examples
Only banks and financial institutions may use this category, for OTPs that complete a banking transaction.
| Actual message | 2026 template format |
| 824926 is the otp for trxn of inr 57.75 at zaak epayment services pv with your sbi card xx3931. otp is valid for 10 mins. pls do not share with anyone | {#numeric#} is the otp for trxn of inr {#numeric#}.{#numeric#} at {#alphanumeric#} with your sbi card {#alphanumeric#}. otp is valid for {#numeric#} mins. pls do not share with anyone |
| 032456 is your OTP for fund transfer for amount Rs.3000 to Ravi. OTP valid for 8 minutes. Do not share this OTP with anyone. | {#numeric#} is your OTP for fund transfer for amount Rs.{#numeric#} to {#alphanumeric#}. OTP valid for 8 minutes. Do not share this OTP with anyone. |
| 428684 is OTP for your eComm Txn for amount Rs.15000 OTP valid for 8 minutes. Do not share this OTP with anyone. | {#numeric#} is OTP for your eComm Txn for amount Rs.{#numeric#} OTP valid for 8 minutes. Do not share this OTP with anyone. |
| 852456 is your OTP for BillDesk Payment in NetBanking. OTP is valid for 8 minutes. | {#numeric#} is your OTP for BillDesk Payment in NetBanking. OTP is valid for 8 minutes. |
Send amounts without thousand separators (3000, not 3,000) so they pass {#numeric#}; decimals can be split with a fixed dot, as in the first example.
Service implicit template examples
Non-promotional messages triggered by a customer's own transaction or relationship with you.
| Actual message | 2026 template format |
| Thank you for using EMI Facility on your IDBI Bank Credit Card XX3495 EMI request for Rs. 25000.00 executed on 01/07/2019. | Thank you for using EMI Facility on your IDBI Bank Credit Card {#alphanumeric#} EMI request for Rs. {#numeric#}.{#numeric#} executed on {#numeric#}/{#numeric#}/{#numeric#}. |
| YES BANK - Your new bill for BESCOM Bangalore - account 0842948000 for Rs 4339.00 could not get scheduled because auto pay limit is less than the bill amount. | YES BANK - Your new bill for {#alphanumeric#} - account {#numeric#} for Rs {#numeric#}.{#numeric#} could not get scheduled because auto pay limit is less than the bill amount. |
| 674508 is your account verification code for ABC App. Do not share it with anyone. | {#numeric#} is your account verification code for ABC App. Do not share it with anyone. |
| Dear Priya, your order ORD7788120 has been shipped. Track it at https://abc.in/t/7788120 - ABC Store | Dear {#alphanumeric#}, your order {#alphanumeric#} has been shipped. Track it at {#url#} - ABC Store |
| Your appointment with Dr. Mehta is on 12 Oct at 10:30 AM. For changes call 07314000000 - City Clinic | Your appointment with Dr. {#alphanumeric#} is on {#numeric#} {#alphanumeric#} at {#numeric#}:{#numeric#} {#alphanumeric#}. For changes call {#cbn#} - City Clinic |
| Your ticket TKT2291 is resolved. Reply to support@abc.in if the issue persists. - ABC Support | Your ticket {#alphanumeric#} is resolved. Reply to {#email#} if the issue persists. - ABC Support |
Most business OTPs (logins, app sign-ups, order confirmation) belong here. Every link or number placed in {#url#} or {#cbn#} must first be registered as a CTA. SMSGatewayHub's OTP SMS service sends them on priority routes.
Service explicit template examples
Messages to existing customers that need recorded consent. Link the approved consent template while creating the content template.
| Actual message | 2026 template format |
| Your Rs.500 exclusive voucher is UNUSED!! Redeem it on purchase of Rs.1000 at ABC Store. Use code SAVE654 Valid till 31 Mar! T&C. | Your Rs.{#numeric#} exclusive voucher is UNUSED!! Redeem it on purchase of Rs.{#numeric#} at ABC Store. Use code {#alphanumeric#} Valid till {#numeric#} {#alphanumeric#}! T&C. |
| ABC Finance Personal Loan needs Minimal Documentation. Apply in one click https://abcfin.in/pl8tFE | ABC Finance Personal Loan needs Minimal Documentation. Apply in one click {#url#} |
| Hi, please share your meeting experience with your RM Raju at https://abc.co/fb/ywq8 - ABC Securities | Hi, please share your meeting experience with your RM {#alphanumeric#} at {#url#} - ABC Securities |
Promotional template examples
Marketing messages to non-customers, sent from numeric headers after preference and consent scrubbing.
| Actual message | 2026 template format |
| Lifetime Free ABC Bank Credit Card with vouchers worth Rs.3000. SMS APPLY to 5676766. TnC apply. | Lifetime Free ABC Bank Credit Card with vouchers worth Rs.{#numeric#}. SMS APPLY to 5676766. TnC apply. |
| Get 20% off on all winter wear this weekend. Shop now https://abc.in/sale - ABC Fashion | Get {#numeric#}% off on all winter wear this weekend. Shop now {#url#} - ABC Fashion |
| Install the ABC Rewards app and win Rs 2000 instantly: https://play.google.com/store/apps/details?id=com.abc.rewards | Install the ABC Rewards app and win Rs {#numeric#} instantly: {#urlott#} |
Promotional messages reach non-DND numbers only and go out from numeric headers. Promotional templates may also be fully fixed, with no variables. Learn more on our promotional SMS page.
How do I convert my old {#var#} templates?
Export your templates
Download all approved content templates from your DLT portal and list which still use {#var#}.
Tag each variable
Replace every {#var#} with the right type: {#numeric#} for OTPs and amounts, {#alphanumeric#} for names and IDs, {#url#}/{#urlott#} for links, {#cbn#} for phone numbers, {#email#} for email.
Register CTAs
Whitelist every domain, short URL, app link and callback number you send, and link those CTAs to the templates that use them.
Re-submit and map
Submit the updated templates, then update the new template IDs in your SMSGatewayHub panel or API calls.
Test before cut-over
Send test messages with real values (no commas in numbers, no extra spaces) and check delivery reports for template mismatch errors.
Content template validations (2026)
Operator portals check these rules automatically.
- Every changing value needs a typed tag; the generic {#var#} is not accepted for new templates.
- Use exactly the tag that matches the data: digits-only values in {#numeric#}, mixed text in {#alphanumeric#}.
- Only {#alphanumeric#} tags may appear back-to-back; any other pair of variables needs fixed text between them.
- Links and phone numbers inside {#url#}, {#urlott#} and {#cbn#} must match CTAs registered for that template.
- Do not use 2 or more spaces between words, before a word or after a word.
- Transactional and service templates must contain at least one variable; promotional templates can be fully fixed.
- Keep meaningful fixed text: templates made only of variables, or with fewer than 6 fixed characters, are rejected.
- Uploading a duplicate shows the error "Template Message already registered (Template Name - ****)".
Dos and don'ts for content templates
| Do | Don't |
| Use the promotional category for communication intended to be sent from numeric sender IDs only. | Register the same content template against multiple headers. |
| Use the transactional category only for banking enterprises, and only for OTPs during fund transfer, online payment or merchant transactions. | Select headers that are irrelevant to the template. |
| Link a consent template for service explicit templates, otherwise the template gets rejected. | Select the Transactional category if you are a non-banking enterprise. |
| Choose a relevant, recognisable template name. | Submit templates with the old {#var#} placeholder, the wrong tag type, or links and numbers that are not registered CTAs. |
| Use message type TEXT for general messages and Unicode for regional-language messages. | Use double spaces (pre-check the template in Notepad++ before submission). |
| Tag each value with its type: {#numeric#} for amounts and OTPs, {#alphanumeric#} for names and IDs, {#url#} for links, {#cbn#} for numbers. | Create templates with fewer than 6 characters, or made only of variables (e.g. Dear customer {#alphanumeric#}{#alphanumeric#}{#alphanumeric#}.). |
| Draft templates in Notepad or Notepad++ to avoid extra spaces and invalid characters. | Use external fonts or characters other than those on a keyboard. |
| Keep at least 6 fixed characters (applies to pure OTP messages). | |
| Remember that linking consent templates to promotional content templates is optional. | |
| Send numbers without commas or spaces so they match {#numeric#}. | Put a country code such as +91 inside {#cbn#}; keep it in fixed text. |
Operator guidance on consent linking for service explicit templates has varied; follow the current rule shown on your DLT portal.
How do I create a consent template?
A consent template is the standard message sent to consumers to seek their consent to receive promotional or marketing communication from a particular brand for a given scope. When creating one, fill in:
Template name – any name of your choice. Brand name – your product or trade name; if you have several, list each. For example, the enterprise "ABC Food Works" may own three brand portfolios: Pizzahut Pizza, Dunkin' Donuts and Hatims Kitchen. Scope of consent – the type of communication you want to send to end users (an opt-out procedure can also be given). The scope must not contain actual message content.
Example scopes: (1) Would Like to Send Communication Regarding All Marketing Offers and Events to Our Registered Customers. (2) "ABC Solutions" needs Your Consent in Order to Serve You Better. We May Send You Messages About Your Account Information, Activity and Our Best Offers. (3) We will send you updates, transactions, recommendations of our services or products being a registered customer with us.
With these details filled, the enterprise submits the template for approval. There is no limit on the number of consent templates. After approval by the registrar, you can link consent templates to content templates in the promotional or service explicit category. Choose a short, relevant name for each consent template so it is easy to pick when creating content templates.
Getting your templates live with SMSGatewayHub
Frequently Asked Questions
What is the new DLT variable format in 2026?
The single {#var#} placeholder has been replaced by six typed tags: {#numeric#}, {#alphanumeric#}, {#url#}, {#urlott#}, {#cbn#} and {#email#}. Each variable in a content template must use the tag that matches the data it will carry.
Will my old {#var#} templates stop working?
Templates registered before 15 January 2026 were given a 60-day grace window in logger mode, where messages still deliver but mismatches are flagged. After enforcement, non-compliant messages are rejected, so old templates should be re-registered with typed tags. SMSGatewayHub can convert and re-submit them for you.
Which tag should I use for OTPs and amounts?
Use {#numeric#}. It accepts digits only, so send amounts without commas or currency symbols and keep text such as Rs. or INR in the fixed part of the template.
How long can an {#alphanumeric#} variable be?
Up to 40 characters. It suits names, order IDs, booking references and masked card numbers, and it cannot begin with www, http or https; links must use {#url#} or {#urlott#} instead.
Do I need to register URLs and phone numbers?
Yes. Any link in {#url#} or {#urlott#}, and any number in {#cbn#}, must match a call-to-action (CTA) whitelisted on the DLT portal and linked to that template. Unregistered links or numbers cause rejection.
Can two variables be placed next to each other?
Only two {#alphanumeric#} tags may sit back-to-back. Any other combination needs fixed text, a space or punctuation between the variables.
Can a non-bank use the transactional template category?
No. The transactional category is only for banks and financial institutions sending OTPs to complete banking transactions. Other businesses, including those sending login or order OTPs through SMSGatewayHub, register them as service implicit templates.
Does SMSGatewayHub help update DLT templates for the new rules?
Yes. SMSGatewayHub reviews your existing templates, tags each variable, registers the required CTAs through DLT priority support and maps the new template IDs in your account so delivery is not interrupted.
Get your templates 2026-compliant
Send us your current DLT templates. SMSGatewayHub will tag the variables, register CTAs and map the new IDs, then you send bulk and OTP SMS on Pay As You Go pricing.