Question
What are the possible SMS and MMS message statuses, and what do they mean?
Product
Programmable Messaging
Answer
Every Twilio SMS or MMS message request has a status value which describes the current state of the message. Here are the possible message statuses, and their meanings.
NOTE: If using Status Callbacks instead of the Console SMS logs or /messages GET/LIST requests, you will see slightly different message progression events. Please see the bottom of this guide for more details
Outbound Message Status Progression
When sending outbound messages with the REST API, this is a typical sequence of status values:
accepted |
(Messaging Services only) Twilio has received your request to create the message from a Messaging Service. Twilio is determining the optimal 'From' number from your service. |
scheduled |
(Message Scheduling only) Twilio has received your request to schedule a message for a later time/date. The message will remain |
queued |
Twilio has received your request to create the message. All new messages sent from a specific Twilio phone number are created with a status of queued. |
sending |
Twilio is in the process of sending the message. This status is usually only present for a very short time, and in most instances will not be visible in the console or logs. |
sent |
Twilio has received a confirmation from our Super Network partner advising they have accepted the message. |
Finalized Message Delivery Status
After a message has been sent, the following final delivery status options are possible:
sent |
Twilio has not received updated delivery information for your message. Typically, a sent status will be replaced by a delivered or undelivered status within seconds or minutes. Please note that US/Canada long code MMS often remain in sent status due to a lack of final delivery status updates from carriers. Once a message is older than 72 hours, receiving a further status is unlikely, although we will update the record if we receive one. Your messages will stay in sent status forever if you are sending messages using the deprecated /SMS/Message REST API Resource, which does not support delivery status updates. |
delivery_unknown |
(Displayed in Messaging Insights) This indicates that a message has remained in the sent status for longer than 1 hour without receiving a further status update. This status is only shown in Messaging Insights; SMS records will remain in the sent status in the Message Log or /Messages API. |
delivered |
Twilio has received confirmation of message delivery from the carrier, (and, where available, the destination handset). |
undelivered |
Twilio has received a delivery receipt indicating that the message was not delivered. This can happen for a number of reasons including carrier content filtering, availability of the destination handset, etc. |
failed |
The message could not be sent. This can happen for various reasons including queue overflows, account suspensions and media errors (in the case of MMS). |
Notice: Twilio charges for any message delivery attempt, whether it was successful or not. Messages with the statuses sent
, delivered
, and undelivered
, will all be reflected in your project balance.
Messages marked as failed
can indicate that the API Request failed or that the provider did not accept the message. There will be an error code associated with the failed
message to help you troubleshoot why the message failed. Starting from September 30th, 2024, most messages in failed
status will be charged a "Failed message processing fee". See here for more details.
For further assistance, please see our article for Troubleshooting undelivered Twilio SMS messages.
Incoming Message Status
received |
An incoming message has been processed, and Twilio has delivered the message to your Twilio number. |
WhatsApp and SMS/MMS Callback Events
WhatsApp Callback Events (In Order) | SMS/MMS Callback Events (In order) |
Failed | Failed |
Sent | Sent |
Delivered/Undelivered | Delivered/Undelivered |
Read |
Callback events will return with the above status values in both the SmsStatus
and MessageStatus
fields. Examples of an SMS and a WhatsApp callback payload can be found below:
Note: The ErrorCode
field will only appear in callback events for failed or undelivered messages (such as ErrorCode=63016
). Please ensure you are checking for this field, but not requiring it, in your callback handling.
SMS - RAW Callback Payload
ErrorCode=21408&SmsSid=SMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&SmsStatus=failed&MessageStatus=failed&To=%2B1##########&MessageSid=SMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&AccountSid=ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&From=%2B1##########&ApiVersion=2010-04-01
SMS - Formatted Payload
"ErrorCode": "21408"
"SmsSid": "SMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
"SmsStatus": "failed"
"MessageStatus": "failed"
"To": "+1##########"
"MessageSid": "SMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
"AccountSid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
"From": "+1##########"
"ApiVersion": "2010-04-01"
WhatsApp - RAW Callback Payload
SmsSid=SMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&SmsStatus=sent&MessageStatus=sent&ChannelToAddress=%2B1######XXXX&To=whatsapp%3A%2B1##########&ChannelPrefix=whatsapp&MessageSid=SMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&AccountSid=ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&StructuredMessage=true&From=whatsapp%3A%2B1##########&ApiVersion=2010-04-01&ChannelInstallSid=XEXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
WhatsApp - Formatted Payload
"SmsSid": "SMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
"SmsStatus": "sent"
"MessageStatus": "sent"
"ChannelToAddress": "+1######XXXX"
"To": "whatsapp:+1##########"
"ChannelPrefix": "whatsapp"
"MessageSid": "SMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
"AccountSid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
"StructuredMessage": "true"
"From": "whatsapp:+1##########"
"ApiVersion": "2010-04-01"
"ChannelInstallSid": "XEXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
Additional Information
Track Message Statuses
If you want to track the status of your outbound messages, you can use the StatusCallback
parameter to get notifications back to your application when Twilio received a delivery status update. For more information, please see our article Tracking the Delivery Status of an Outbound Message.