POST /accounts/{account_id}/messages) returns the message object immediately — the status at that point is “created”, and what happens next depends on the carrier.
How delivery works
Status advances in one direction only. If Surge receives an out-of-order carrier status report (a rare but real occurrence on some networks), it is discarded rather than rolling the status back. A message in
delivered state will never revert to sent.message.delivered after message.sent, it doesn’t mean the message wasn’t delivered. The carrier simply didn’t confirm it. This can be seen in messaging to the US and Canada, but it’s especially prevalent outside of North America.
Webhook-based tracking (recommended)
Configure a webhook endpoint (Settings → Webhooks in the dashboard) and handle the events you care about:Retrieving a message by ID
The retrieve-message response does not include a
status field. It returns the message body, attachments, conversation thread, and metadata. For status, rely on the webhook events.Listing messages
To retrieve all messages for an account, use the list endpoint with cursor-based pagination:after=CURSOR or before=CURSOR as query parameters to page through results. The list returns messages in reverse chronological order (most recent first).