Twilio

Twilio Error Code 30003

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.

What causes Twilio error 30003?

Twilio attributes 30003 to the destination handset being unreachable at delivery time. The common real-world triggers:

  • Phone powered off or out of signal. The most frequent cause. The device was off, in airplane mode, or outside coverage when the carrier attempted delivery.
  • Roaming off-network. The recipient is roaming on a network that could not accept the message.
  • Device cannot receive SMS. The number is a landline, fixed VoIP, or another non-mobile line type that was never SMS-capable, or the handset's message store is full.
  • Short code not supported on the recipient's carrier. Some smaller or regional carriers do not support short-code SMS, so messages from a short code to those subscribers fail as unreachable.
  • Temporary carrier-side issue. A transient problem in the downstream mobile network.

How do I fix Twilio error 30003?

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.

FAQ

Common questions

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

Stop debugging raw provider errors

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.