What each operator scrubbing code means, taken from the code tables inside Airtel's DLT portal, why the same number means different things on different platforms, and the order to check things in when a message is rejected.
DLT error codes come from the operator's scrubbing engine when a message fails a registration check. On Airtel, 611 means the entity ID is invalid or the header belongs to another entity. 613 means the template ID is not registered or not yet approved, 614 means the template is not linked to that header, 635 means a variable value is too long, and 666 means the text does not match the template. Vi and BSNL use a separate 600–660 series, so check which platform produced the code. Fix the cause; retrying fails the same way.
Every commercial SMS carries an entity (PE) ID, a telemarketer chain, a header and a template ID. Before delivery, the operator's scrubbing engine checks each one against the DLT ledger, then compares the text with the template and applies the recipient's preferences. A code is returned at the first check that fails.
The codes are defined by each platform, not by TRAI, and aggregators often re-label them. Infobip, for example, reports a too-long variable as error 4131. The tables below come from the response-code maps in Airtel's DLT portal. That portal holds Airtel's own table plus a second one labelled for Tanla, whose platform runs the Vi and BSNL DLT portals.
| Code | Airtel's description | Check first |
|---|---|---|
| 200 | Scrubbing successful | Nothing to fix |
| 201 | Message could not be sent due to preferences set by the subscriber | DND or category block; the category may be wrong |
| 611 | Invalid entity id provided / Invalid Header id for this Entity | The PE ID, and which PE owns the header |
| 612 | Invalid Header id | Is the header registered on DLT? |
| 613 | Invalid Template id | Template ID copied correctly; status Approved |
| 614 | Template does not match with header | Which headers the template is linked to |
| 615 | Template or header invalid | Both registrations |
| 616 | Invalid category provided | Category sent vs category registered |
| 635 | Template variable exceeded max length | Value lengths per tag |
| 666 | SMS Content miss match | Text vs template, character by character |
| 677 | Invalid Telemarketer ID | Your gateway's TM registration |
| 678 | Telemarketer ID does not exist / In active | TM status (your gateway's side) |
| 680 | Telemarketer ID blacklisted | Your gateway's side |
| 683 | SMS Type of header is not match Template | Header type vs template category |
| 687 | SMS Type is not match with header/Template SMS Type | Promotional sent on an "Others" header, or the reverse |
| 801 | Entity is blacklisted | Contact the operator that registered you |
| 802 | EntityID Inactive / Not registered with Airtel | Renewal paid? Entity active? |
| 803 | Header is blacklisted | Header status; inactive headers may be freepooled |
| 804 | Header Inactive / Not registered with Airtel | Header status on your portal |
| 805 | Template Inactive / Blacklisted | Template status; quarterly verification done? |
For 803, Airtel's tool explains: "The header you are using is either blacklisted or Inactive or Freepooled in DLT." Freepooled means returned to the header pool after inactivity; Vi and BSNL do this after 90 days without use. For blocked or inactive headers and templates, Airtel points to telemarketer.helpline@airtel.com. Header lifecycle rules are in our SMS header guide.
The second table in Airtel's portal is labelled for Tanla, whose Trubloq platform runs the Vi and BSNL DLT portals. Neither Vi nor BSNL publishes its own code list, so treat this as the best available reference rather than their official statement. Unlisted numbers inside each range are marked "reserved".
| Range | Codes |
|---|---|
| Entity | 600 ENTITY_NOT_FOUND · 601 ENTITY_NOT_REGISTERED · 602 ENTITY_INACTIVE · 603 ENTITY_BLACKLISTED · 604 INVALID_ENTITY_ID · 605 ENTITY_ID_NOT_ALLOWED_FOR_TM |
| Telemarketer | 610 TELEMARKETER_NOT_REGISTERED · 611 TELEMARKETER_INACTIVE · 612 TELEMARKETER_BLACKLISTED |
| Header | 620 HEADER_NOT_FOUND · 621 HEADER_INACTIVE · 622 HEADER_BLACKLISTED · 623 PEID_NOT_MATCHED_WITH_HEADER |
| Template | 630 TEMPLATE_NOT_FOUND · 631 TEMPLATE_INACTIVE · 632 TEMPLATE_BLACKLISTED · 633 TEMPLATE_NOT_MATCHED · 634 HEADER_NOT_REGISTERED_FOR_TEMPLATE · 635 TEMPLATE_VARIABLE_EXCEEDED_MAX_LENGTH · 636 ERROR_IDENTIFYING_TEMPLATE · 637 INVALID_TEMPLATE_ID |
| Preference and consent | 650 PREFERENCE_NOT_MATCHED · 651 INVALID_PROMO_TIME · 652 SE_CATEGORY_BLOCK · 660 CONSENT_FAILED |
Same number, different meaning. On Airtel, 611 is an entity or header problem. In the 600 series, 611 is TELEMARKETER_INACTIVE, a fault on the gateway's side that you cannot fix in your own portal. 612 and 613 differ the same way. Only 635 means the same in both tables. Before acting on a code, find out which platform produced it.
Airtel's tool gives three explanations for 613:
In practice: copy the ID from the portal as text (a spreadsheet will round a 19-digit number), confirm the status is Approved and Active, and check the template sits under the same entity as the header. If the template was approved only minutes before the send, Airtel's tool can report that the "scrubbing engine autohealed the discrepancy. Please retry now". That is the one case where a retry is right. Template rules are covered in our template registration guide.
When the header belongs to someone else, Airtel's tool says: "The Header you are providing is not registered with entityid … that you are passing in request, please provide the correct combination". The common causes:
Where to find the right ID and how chains work: DLT entity ID guide.
The scrubber found the template, but the text does not fit it. The usual causes:
Since TRAI's tagging direction of November 2025, type and whitelist failures count as content failures too. Our variable tagging guide has the limits per tag and a PHP pre-check.
Work from the outside in, in the same order the scrubber checks:
There are two stages, and they report differently. First, before a message leaves our gateway, it is normally matched against the templates approved on your account. If it fails, nothing is sent, and the v2 API answers with HTTP 422:
{
"success": false,
"error": "Template Verification Failed",
"message": "Template verification failed: Message does not match any approved template. ...",
"error_code": "TEMPLATE_MISMATCH",
"details": {
"sender_id": "AVNZON",
"message_preview": "Your OTP for login is 482913. It is valid for 10 m...",
"suggestion": "Please use an approved template or request template approval"
}
}The message field says which check failed, for example "No approved template found for sender ID…", a closest-match suggestion with a similarity score, or "Matched template … is not active". A header that is not approved on your account returns HTTP 400 "Invalid sender ID" instead. None of these are operator codes.
Second, once a message passes our check and is handed on, the API has already returned HTTP 200 with queued. If the operator's scrubber then rejects it with a code from the tables above, the message ends with status failed. The v2 API does not translate operator codes into its own error codes, so send support the message_id and we will look up the operator's reason. Code for both stages is in our PHP SMS guide.
We run our own DLT-compliant gateway and register businesses on DLT, so we can trace a rejection to the entity, chain, header or template behind it. We are based in Sulur, Coimbatore (bulk SMS in Coimbatore).