> ## Documentation Index
> Fetch the complete documentation index at: https://onextel-09023014.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# International SMS Error Codes

> What each ERRORCODE on an international SMS delivery receipt means, and whether a retry can help.

Every international [delivery receipt](/api-reference/sms-international/dlr-callback) carries two
outcome fields:

| Field | What it tells you |
| - | - |
| `ERRORCODE` | The **specific** reason — the codes on this page |
| `ERRORDESP` | The outcome **class** — `DELIVRD`, `UNDELIV`, `REJECTD`, or `EXPIRED` |

Branch your logic on `ERRORCODE`. Use `ERRORDESP` for reporting buckets.

<Warning>
  **These are OneXtel platform codes, not raw operator codes.** Operators return a much wider and
  less consistent set, which the platform normalises onto the generic codes below — which is why
  some conditions appear under more than one code. The mapping is under active review, so confirm
  it against your own account before you hard-code against it.
</Warning>

## Where the message stopped

| Range | Where it failed | Who can fix it |
| - | - | - |
| `000` | Delivered | — |
| `001`–`044` | Handset, subscriber, or operator network | Usually nobody — it's a property of the number or the moment |
| `9xxxxx` | OneXtel platform, before the message left | You, in your account or your payload |

<Note>
  A `9xxxxx` code means the message **never reached an operator**. Those are the ones you can
  resolve yourself.
</Note>

## Delivered

| Code | Description | `ERRORDESP` |
| - | - | - |
| `000` | Delivered | `DELIVRD` |

## Handset, subscriber and network — `001`–`044`

The message reached the operator but was not delivered. Some of these describe a temporary
condition worth retrying; others are a permanent property of the number.

| Code | Description | `ERRORDESP` | Retry? |
| - | - | - | - |
| `001` | Unknown subscriber | `UNDELIV` | No |
| `009` | Illegal subscriber | `UNDELIV` | No |
| `011` | Teleservice not provisioned | `UNDELIV` | No |
| `013` | Call barred | `UNDELIV` | No |
| `015` | CUG reject | `UNDELIV` | No |
| `019` | No SMS support in MS | `UNDELIV` | No |
| `021` | Facility not supported | `UNDELIV` | No |
| `022` | Memory capacity exceeded | `UNDELIV` | Yes — handset storage is full but may clear |
| `027` | Absent subscriber | `UNDELIV` | Yes — off or out of coverage |
| `029` | Absent subscriber | `UNDELIV` | Yes — off or out of coverage |
| `030` | MS busy for MT SMS | `UNDELIV` | Yes — transient |
| `031` | Network timeout | `UNDELIV` | Yes — transient |
| `033` | Unknown subscriber | `UNDELIV` | No |
| `036` | Network/Protocol failure | `UNDELIV` | Yes — transient |
| `044` | Illegal equipment | `UNDELIV` | No |

<Note>
  Some conditions appear under more than one code — `001` and `033` both report an unknown
  subscriber, `027` and `029` both report an absent subscriber. Treat them as equivalent when you
  bucket results.
</Note>

## Platform — `9xxxxx`

Returned when the platform stopped the message before submission, or never received a final
receipt for it.

| Code | Description | `ERRORDESP` | What to do |
| - | - | - | - |
| `900088` | Throttle error | `REJECTD` | Reduce your send rate, then retry |
| `900101` | Invalid mobile number | `REJECTD` | Fix the number — include the country code, digits only |
| `900111` | No balance | `REJECTD` | The account has no balance. Top up |
| `900112` | Submit timeout | `REJECTD` | Retry |
| `900118` | Encoding limit error | `REJECTD` | Shorten the body, or check for characters that force Unicode encoding |
| `900124` | DLR expired | `EXPIRED` | No final receipt arrived within the platform's wait window. The message may still have been delivered — treat as unknown, not failed |
| `900210` | Credit limit breached | `UNDELIV` | A configured spend limit was hit. Raise the limit |

<Note>
  `900111` and `900210` look similar but are set at different levels. **No balance** means the
  account itself has nothing left to spend. **Credit limit breached** means a configured ceiling was
  reached — these are applied per country and per user, so one destination or one user can stop
  while the rest of the account keeps sending.
</Note>

<Warning>
  `900124` (`EXPIRED`) is **not** a delivery failure. It means the operator never returned a final
  state in time. Counting it as failed will understate your delivery rate.
</Warning>

## Retry guidance

<Warning>
  **The platform does not currently retry on a per-code basis.** Failover today happens at the
  gateway level — if a gateway is down, traffic moves — but a message that comes back `031` or
  `030` is not automatically re-attempted. Any retry on a specific error code has to be yours.
</Warning>

The **Retry?** column reflects the standard meaning of each condition — a barred or unprovisioned
number will not start working on a second attempt, while an absent or busy handset often will. It
is guidance for building your own retry policy, not a description of platform behaviour.

<Note>
  Codes marked "No" describe a permanent property of the destination. Repeated sends to them cost
  credit without any prospect of delivery — the useful response is to suppress the number, not to
  retry it.
</Note>

## Related

* [DLR callback](/api-reference/sms-international/dlr-callback)
* [Send SMS](/api-reference/sms-international/send-sms)
* [India SMS error codes](/api-reference/sms/error-codes) — a different, longer set


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.