Sign inGet Started

SMS delivery errors

An unsuccessful SMS has a delivery status and an error explaining the outcome. Use this reference to interpret the failure reason and numeric provider code reported with a message.

Request errors such as an invalid send payload use the API error catalog. The codes on this page describe messages that were accepted and later failed or were rejected.

Reading the error

Open a message in the SMS log and select Details. Error shows the description and normalized failure reason. Carrier error code shows the numeric provider code when one was supplied.

Over the API, read GET /v1/sms/messages/{message_id}. Its last_error contains:

FieldMeaning
codeBird's normalized failure reason, such as unreachable or unknown
descriptionThe reported explanation in words
carrier_error_codeThe provider's raw code, when supplied
occurred_atWhen the failure occurred

Failure webhook events and message timeline events carry the same fields in error.

The field name carrier_error_code also covers codes issued by Bird's sending provider, including fraud protection blocks. A missing code means the provider supplied none or the message was refused before submission.

Normalized failure reasons

These are the failure reasons defined by the message API. Provider receipts can contain a more specific numeric code than the normalized reason reflects. For example, a message with code: unknown can still carry a recognized carrier_error_code.

ReasonMeaning
invalid_destinationThe number is unassigned or invalid
unreachableThe handset is off or outside coverage
blocked_by_carrierThe receiving carrier filtered the message
blocked_by_fraud_protectionBird fraud protection blocked suspected SMS pumping
blocked_by_recipientThe recipient's device blocked the sender
landline_unreachableThe landline does not accept SMS
content_rejectedThe carrier rejected the content
sender_unregisteredThe sender lacks required registration
recipient_opted_outThe recipient is on a suppression list
provider_unavailableThe provider or network was unavailable
insufficient_balanceThe workspace wallet could not fund the send
unknownThe failure could not be classified

This is an open set: accept unfamiliar values and retain the description and raw code for investigation. A temporary cause still ends this message attempt; it does not guarantee automatic resubmission.

Provider error codes

Look up the numeric string returned in carrier_error_code. These codes belong to Bird's SMS sending provider; a different provider may assign other meanings to the same numbers.

CodeMeaning
0No error
1Unknown subscriber
2Unknown base station
3Unknown mobile switch
5Unidentified subscriber
7Handset cannot connect
8Roaming forbidden
9Subscriber authentication failed
10SMS bearer unprovisioned
11SMS service unprovisioned
12Handset blacklisted
13SMS service barred
21SMS unsupported
26Network handover failed
27Subscriber unavailable
28Outside coverage
29Handset switched off
30Mobile switch failure
31Subscriber busy
32SMS delivery failure
33Pending-message storage full
34Network system failure
35Required data missing
36Unexpected message-field value
39Roaming routing-number unavailable
40Network memory exhausted
71Unsupported alphabet
72USSD busy
100Insufficient sending balance
101Insufficient subscriber balance
103Subscriber opted out
104Sender unregistered
105Content unregistered
106Campaign volume exceeded
107Campaign throughput exceeded
110Operator filtered message
130SurgeGuard detected traffic pumping
131SurgeGuard blocked suspected pumping destination

Code 0 is omitted from carrier_error_code on Bird message and event reads. An unfamiliar code should remain available in your records when you contact support.

Fraud protection blocks

SurgeGuard is Bird's SMS fraud protection.

Messages blocked by fraud protection have the failure reason blocked_by_fraud_protection and the description "Blocked by fraud protection: suspected SMS pumping." The delivery status remains failed, rejected, or expired, according to the provider's report. The same reason and description appear in message details, timeline events, and failure webhooks. The raw provider code remains available in carrier_error_code when supplied.

In the SMS log, filter Failure reason by Blocked by fraud protection to find these messages.

Older records may still show unknown and generic_delivery_failure. These labels alone do not identify a fraud protection block. Look up their carrier_error_code in Provider error codes to identify the cause. If the code is missing or unfamiliar, contact support with the workspace ID, message ID, timestamp, and provider code, if supplied.

When investigating a blocked OTP, correlate the SMS with the account or verification request that triggered it. Avoid automatically resending or switching routes to bypass the block. If you suspect a legitimate request was blocked, contact support with the workspace ID, message ID, timestamp, and provider code.

Next steps

  • SMS log: inspect a message and its delivery history.
  • SMS events: consume delivery and failure webhooks.
  • SMS metrics: review aggregate failure outcomes.
  • SMS API errors: interpret errors returned by an API request.