TRAI Message Scrubbing in India: PE, Header, Template Failures
How TRAI message scrubbing works in India: the PE, header, and template checks every SMS goes through, common failure codes, and how to debug delivery loss.
StartMessaging Team
Compliance
Scrubbing is the silent reason your “sent” SMS never reaches the user. Every SMS to an Indian mobile number passes through TRAI’s scrubbing engine, which validates three things before letting the message reach the carrier. If any check fails, the carrier marks it “scrubbed” and the user never sees it — but your provider’s logs may say “sent.”
What is Scrubbing
Scrubbing is the runtime enforcement layer of the DLT framework. Where DLT registration is one-time paperwork, scrubbing happens on every single message and decides whether it actually goes out.
The Three Scrubbing Checks
- Principal Entity (PE) check. Is the sender PE registered and active on this operator? Is the entity ID present in the request?
- Header (sender ID) check. Is the alphanumeric header registered to this PE? Is it a valid category for this message (transactional vs promotional)?
- Template check. Does the message body match an approved template byte-for-byte (after variable substitution)? Are the variables within their declared length limits?
Common Failure Codes
| Code (varies by operator) | Meaning | Fix |
|---|---|---|
| PE_MISMATCH | PE not registered for this header | Re-link the header to the PE in the operator portal |
| HEADER_INACTIVE | Header expired or suspended | Re-activate or re-register the header |
| TEMPLATE_MISMATCH | Body doesn’t match approved template | Submit a new template with the exact wording |
| VAR_LENGTH | One variable exceeded its declared max length | Truncate at the application layer or update the template |
| CATEGORY_MISMATCH | Promo content sent on transactional header | Move to a promotional header or rewrite the content |
| NDNC_BLOCKED | Recipient is on the do-not-disturb registry | Honor the NDNC list; don’t resend |
Debugging Lost Messages
If your delivery rate suddenly drops, walk through this checklist:
- Pull the operator-specific delivery report from your provider (DLR webhook payload).
- Look for a non-200 carrier error or a scrub code.
- Compare the delivered SMS body against the approved template.
- Check whether your template was edited or expired in the operator portal recently.
- Test with a number on a different operator to isolate the issue.
See our OTP delivery rates article for the broader troubleshooting flow.
How a DLT-Free Route Avoids This
StartMessaging’s standard route runs through pre-approved templates and headers we maintain on every operator. You don’t get scrubbed because there’s nothing in your message body that differs from the registered template. See DLT-free OTP for the architectural details.
FAQ
Read our DLT template variable rules to keep your templates scrub-clean.
Related Articles
Understand TRAI's DLT registration mandate for SMS in India. Learn the process, portals, timelines, costs, and how to skip DLT entirely with StartMessaging.
How DLT template variables work in India: allowed character classes, length limits, common rejection reasons, and copy-paste-ready examples that pass the first time.
Realistic OTP SMS delivery rates by Indian carrier (Jio, Airtel, Vi, BSNL), DLT impact, time-of-day patterns, DND filtering, and tips to improve delivery.
Ready to Send OTPs?
Integrate StartMessaging in 5 minutes. No DLT registration required.