Twilio
Twilio error 30003 means the carrier couldn't reach the handset — off, out of signal, or not SMS-capable. It is typically transient; validate with Lookup.
Updated Jul 1, 2026
The short answer
Twilio error 30003 means an SMS reached the carrier but the destination handset was unreachable. The phone is usually powered off, out of signal, roaming off-network, or not SMS-capable. It is typically transient. Retry later, verify the number is a live mobile via Twilio Lookup, and escalate with failed Message SIDs if it persists.
Twilio error 30003 means "Unreachable destination handset." Per Twilio's error reference, your SMS was accepted by Twilio and passed to the destination carrier, but the carrier could not deliver it to the recipient's handset. The message ends in a final status of undelivered.
The important thing to know is that 30003 is usually transient. It is not a bad-number or spam-filter verdict (those are 30005/30006 and 30007). It means the handset itself was momentarily out of reach when the carrier tried to deliver, so the same number often succeeds on a later retry.
Twilio attributes 30003 to the destination handset being unreachable at delivery time. The common real-world triggers:
1. Retry after a delay. Because 30003 is usually transient, resending after a short wait (minutes to hours) often succeeds. Use a capped retry with backoff rather than resending immediately in a loop.
2. Confirm the number is a live mobile. Use Twilio Lookup Line Type Intelligence to check the line type: GET /v2/PhoneNumbers/{PhoneNumber}?Fields=line_type_intelligence. Drop numbers returned as landline, fixedVoip, or other non-mobile types so they never trigger 30003 or 30006.
3. Verify the number format. Make sure you are sending to a valid E.164 number (for example +14155552671) that belongs to a real mobile subscriber.
4. Space out retries to a repeatedly failing number. If one number fails again and again while Lookup shows it is a live mobile, the handset may be persistently off or its inbox full. Back off instead of hammering it.
5. For short codes: confirm the recipient's carrier network supports short-code SMS. If it does not, send to that recipient from a long code or toll-free number instead. (Twilio's older Messaging Service Fallback to Long Code setting is now obsolete and should not be relied on.)
6. Escalate if it persists. If the same number keeps returning 30003 while Lookup confirms it is a reachable mobile, collect the failed Message SIDs and open a Twilio Support ticket so Twilio can trace the downstream delivery.
If you send through Courier, the 30003 result comes from Twilio and appears in Courier's message logs. Inspect the Twilio provider response there, confirm the number is a live mobile with Lookup, and apply the retry and validation steps above.
References
FAQ
It is usually transient. 30003 means the handset was temporarily unreachable (powered off, no signal, roaming off-network), so resending after a delay often succeeds. If the same number fails repeatedly while Lookup shows it is a live mobile, escalate to Twilio Support with the failed Message SIDs.
One API, every provider
Courier connects to your email, SMS, and push providers, handles retries and failover, and surfaces delivery errors in plain language.
Last reviewed Jul 1, 2026. Courier is not affiliated with third-party providers; error behavior may vary by implementation.
© 2026 Courier. All rights reserved.