A text can arrive after a phone reconnects even though the sender submitted it earlier.
What does store and forward mean?
The message center saves a text before trying to deliver it to the phone.
The network's acceptance does not establish that the phone received the text. A switched-off or unreachable phone can leave a message waiting. Reconnecting the phone makes another delivery attempt possible. The message must remain eligible for that attempt.
The 3GPP specification 23.040 describes the center's role in SMS.
How long can a message wait?
The network can make further delivery attempts while the message's delivery window remains open. That window is called its validity period.
The SMS standard lets senders supply a validity period. Your provider decides whether you can set it through its API.
Delivery can end in expiry when that window closes. An expiry report does not imply that the initial send request failed.
For a time-sensitive flow, the application's own deadline still needs enforcement. If a passcode is valid for ten minutes and arrives after four hours, your server must reject it. A late text must not extend the lifetime of the action it describes.
Where does the center sit relative to my application?
Your application can reach a message center through a messaging provider, rather than managing the carrier connection itself.
Providers use SMPP to pass texts to message centers, directly or through other routing services. The SMPP reference describes these connections.
Your provider can acknowledge a request before the next network service accepts it. The message center can then accept the text before the phone receives it. Each acknowledgment describes one stage of the journey.
Accepted but not delivered explains how those stages appear in an application.
What can I observe through Bird?
You can inspect carrier handoff and reported delivery without connecting to a message center yourself.
The message response's sent_at records when Bird hands the message to the carrier. delivered_at records confirmed delivery. Both fields contain a timestamp or null. A missing delivery time does not mean the phone rejected the text.
Bird's send endpoint rejects validity_period with HTTP 422 SMSUnsupportedFeature. You cannot set the carrier's retention window through that field. The response does not return that field.
Bird emits sms.expired when the carrier reports expiry. A buffered receipt, meaning the carrier holds the text, produces no public status change. Delivery receipts explains which network reports reach your application.
What does this change in a sending workflow?
Your application needs to handle delivery as a later event with an outcome separate from submission.
Keep a pending result distinct from a failure. Enforce deadlines for passcodes and other time-sensitive actions in your application. Use a delivery receipt as the network's report of delivery. It does not prove that anyone read the text.
In short
Acceptance and delivery are separate.
A message center can accept a text before the recipient's phone becomes reachable.
Storage gives delivery another opportunity.
A waiting text can arrive after the phone reconnects, provided the delivery window remains open.
The delivery window is finite.
The network can report expiry when its waiting period ends.
Your integration need not connect directly.
A messaging provider can handle the connection between your application and the carrier network.