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.
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.
StartMessaging Team
StartMessaging Team