TRAI Variable Pre-Tagging Rules for SMS DLT Content Templates

A plain-language breakdown of TRAI's direction dated 18 November 2025 mandating pre-tagged, type-validated variables in every SMS content template — what the six official tags are, why the rule exists, the compliance timeline, and how to migrate templates that still use untyped placeholders.

What the direction actually says

TRAI's variable pre-tagging requirement isn't brand new — the Authority first directed access providers to limit content templates to two (later, with justification, more) variables and to pre-tag each one back in February and May 2023. Those earlier directions were never fully implemented. On 18 November 2025, TRAI issued a fresh direction (under section 13 of the TRAI Act, read with the Telecom Commercial Communications Customer Preference Regulations, 2018) noting that non-implementation directly, and instructing all access providers to enforce pre-tagging this time — based on a tag set the Cellular Operators Association of India (COAI) proposed on 5 September 2025 and all access providers, including BSNL, agreed to on 17 September 2025.

In short: every variable field in a registered content template must now carry a descriptive tag that specifies its content type, purpose and validation rule — and operators are required to scrub/validate the actual value sent in that slot against the declared type before delivering the message.

The six official variable tags (Annexure-I)

Generic, untyped variables are no longer accepted for new templates. Every variable must use one of these six tags:

TagPurpose / exampleValidation rule
#numeric# (a.k.a. #number#)Digits only — OTPs, amounts, countsDigits only; no letters or special characters
#url#A web link, e.g. "Track order: #url#"Must resolve to a registered CTA under Static, Dynamic or Short URL
#urlott#An app/OTT link, e.g. "Download app: #urlott#"Must resolve to a registered CTA under OTT or APK link
#cbn#A callback number, e.g. "Call #cbn# for support"Must match a registered CTA (mobile, landline or toll-free)
#email#An email address, e.g. "Write to #email#"Must match a valid email pattern
#alphanumeric#Mixed IDs — booking/ticket/order numbersLetters + numbers only; length-checked

Two notation styles show up in the wild: the bare form TRAI's own Annexure-I uses (#numeric#) and the curly-brace form most operator DLT portals display ({#numeric#}). This validator's template checker accepts either.

Primary source: TRAI Direction dated 18 November 2025, F.No. D-2711/(2)/2024-QoS (E-13563), and the accompanying press release.

Compliance timeline

MilestoneDeadline
Direction issued18 November 2025
All new content templates must be pre-tagged per Annexure-ITemplates registered from ~10 days after issuance (late Nov 2025) onward
Access providers begin scrubbing/validating tagged variables against whitelisted URLs/OTT links/APKs/callback numbersWithin 30 days of issuance (~mid-December 2025)
"Logger mode" grace period — non-compliant messages still delivered, faults only loggedFirst 60 days of scrubbing (~mid-February 2026)
Enforcement — messages failing variable-tag validation are rejected outrightFrom the end of the 60-day logger-mode window
Updated Code of Practice due from access providersWithin 90 days of issuance

The logger-mode grace period has already lapsed, so as of today, outright rejection of non-compliant messages is the enforced default — there's no more "warn but deliver" fallback for untyped or mistyped variables.

How to migrate an existing template

  1. Pull every content template you currently have registered on your operator's DLT portal (or your CPaaS/SMS gateway's DLT dashboard).
  2. For each variable slot, decide which of the six tags actually describes the data — an OTP is #numeric#, a tracking link is #url#, a support number is #cbn#, and so on.
  3. Re-submit the updated template for approval through your content template registrar; approval typically takes about two working days.
  4. Update the message-construction code in your application or SMS gateway integration so the value it drops into each slot actually matches the declared type — a numeric-tagged slot should never receive a string with letters in it.
  5. Before going live, paste the updated template and a sample real message into the DLT template validator to confirm the structure and variable types line up.

Common mistakes that now cause rejection

Using a generic, untyped placeholder instead of one of the six tags is the most common one — those are simply no longer accepted on new templates. Right behind it: putting two variables back-to-back with no static text between them (only #alphanumeric# is allowed to sit next to another tag without a separator), sending a URL that isn't on your registered CTA whitelist, and exceeding the per-tag length limits most operators enforce during scrubbing (commonly 40 characters for numeric/alphanumeric/email tags, 120 for URL tags).

Validate before you register

Paste your updated, tagged template and a real sample message into the validator to catch structural and type mismatches before you submit it — or before your operator's scrubber rejects live traffic. Open the validator →

Testing OTP delivery on a real number

To see how a newly tagged template actually renders once delivered, you can receive the test SMS on a free temporary Indian number instead of your own. Receive SMS online at receive-smss.live →