Skip to main content
A failed RCS message returns a code from one of three places, and knowing which one tells you who can fix it. Operator codes are operator-specific: the same numeric value means different things on Jio and Vi, and OneXtel surfaces them back to you unchanged. A 4xxx or 900xxx code means the message was stopped before any operator saw it, so it was never charged. These are distinct from the OneXtel API validation errors (API_Invalid_Auth_Key, API_Missing_Recipient, and so on) documented under Send messages. A request that passes OneXtel validation can still fail downstream with one of the codes below.
Every operator’s codes arrive in the same place. Jio, Vi and Airtel each use their own error schema upstream, but OneXtel normalises them into a single delivery notification callback: the code arrives as errCode, with error carrying its description. You do not need per-operator parsing — only the meaning of the code differs, which is what the tables below are for.

Retry guidance

Every code below is marked with whether re-sending the same message is worthwhile:

Jio

Errors returned by the Jio RCS platform.
“Assistant” is the Jio term for the RCS agent (sender profile). Codes 4, 25, and 30 all point at agent provisioning rather than the message itself — check the agent’s launch status in the RCS platform before retrying.
Jio does not use codes 8, 10, 18, 19, 22, 26, 27 or 29. Handle any code outside this table as a failure you cannot act on, and check the delivery report for the reason.

Vi (Vodafone Idea)

Errors returned by the Vi RCS platform. Codes combine the HTTP status with a suffix letter. The -M01 suffix indicates the error was passed through from Google’s RCS platform (MaaP) rather than raised by Vi.
401-C (Invalid IP Address) means the calling IP is not whitelisted. Retrying from the same IP will not help — whitelist the IP first, then retry.
Two pairs of Vi codes carry the same meaning: “Test template limit exceeded” arrives as either 400-C or 429-B, and “Curfew hours” as either 403-D or 503-A. Handle both codes in each pair.403-D is being retired in favour of 503-A, but a message can still return it. Keep handling it, and confirm with support before removing it from your own handling.

OneXtel platform

Returned when OneXtel stops the message before it reaches an operator. Nothing was sent and nothing was charged. These codes are the same across channels except where noted.

Payload and template

Account and routing

Expiry

4009 and 4012 mean the same thing, and differ only in case (ttl_expiration_revoked and TTL_EXPIRATION_REVOKED). Handle both.

Frequency and category

900xxx codes are channel-specific. The same number means different things on different channels. 900118–900122 all mean something else on India SMS: 900118 is a blocked template category here but an encoding limit on SMS, and 900122 is a blacklisted recipient here but an expired account validity on SMS. Always interpret a platform code against the channel that produced it.