# SMS status callback
POST
Payload sent by SignalWire to your SMS Status Callback URL when the status of an SMS/MMS message changes.
Configure this callback using the `StatusCallback` parameter when
[sending an outgoing message](/docs/compatibility-api/rest/messages/create-message).
There are 8 possible message statuses:
| Status | Description |
|--------|-------------|
| `queued` | The API request was processed and the message is waiting to be sent. |
| `sending` | The message is being transmitted to the nearest upstream carrier. |
| `sent` | The nearest upstream carrier has accepted the message. |
| `delivered` | The nearest upstream carrier confirmed receipt of the message. |
| `undelivered` | SignalWire received notice from the upstream carrier that the message was not delivered. |
| `failed` | SignalWire could not send the message. There is no charge for failed messages. |
| `receiving` | SignalWire has received and is currently processing an inbound message. |
| `received` | The inbound message has been received by a number in your account. |
SignalWire only marks a message as `delivered` when it receives a Delivery Receipt (DLR)
from the receiving carrier confirming entry into the end carrier's network. `sent` means the message
left SignalWire and reached the downstream peer. Some carriers send delayed DLRs; others send none
at all. MMS messages never receive DLRs, so they will only ever reach `sent` status.
Reference: https://signalwire.com/docs/compatibility-api/rest/messages/webhooks/sms-status-callback
## OpenAPI 3.1 Webhook Specification
```yaml
openapi: 3.1.0
info:
title: compatibility
version: 1.0.0
paths: {}
webhooks:
sms-status-callback:
post:
operationId: sms-status-callback
summary: SMS status callback
description: >-
Payload sent by SignalWire to your SMS Status Callback URL when the
status of an SMS/MMS message changes.
Configure this callback using the `StatusCallback` parameter when
[sending an outgoing
message](/docs/compatibility-api/rest/messages/create-message).
There are 8 possible message statuses:
| Status | Description |
|--------|-------------|
| `queued` | The API request was processed and the message is waiting to
be sent. |
| `sending` | The message is being transmitted to the nearest upstream
carrier. |
| `sent` | The nearest upstream carrier has accepted the message. |
| `delivered` | The nearest upstream carrier confirmed receipt of the
message. |
| `undelivered` | SignalWire received notice from the upstream carrier
that the message was not delivered. |
| `failed` | SignalWire could not send the message. There is no charge
for failed messages. |
| `receiving` | SignalWire has received and is currently processing an
inbound message. |
| `received` | The inbound message has been received by a number in your
account. |
SignalWire only marks a message as `delivered` when it receives a
Delivery Receipt (DLR)
from the receiving carrier confirming entry into the end carrier's
network. `sent` means the message
left SignalWire and reached the downstream peer. Some carriers send
delayed DLRs; others send none
at all. MMS messages never receive DLRs, so they will only ever reach
`sent` status.
responses:
'200':
description: Webhook received successfully
requestBody:
content:
application/json:
schema:
type: object
properties:
MessageStatus:
$ref: >-
#/components/schemas/WebhooksSmsStatusCallbackPayloadContentApplicationJsonSchemaMessageStatus
description: >-
The current status of the message at the time of the
callback.
One of: `queued`, `sending`, `sent`, `delivered`,
`undelivered`, `failed`, `receiving`, `received`.
ErrorCode:
type: string
description: >-
If the message has failed or is undelivered, the error code
may provide more information about what went wrong.
MessageSid:
type: string
description: The unique ID of this message.
AccountSid:
type: string
description: >-
The unique ID of the project this message is associated
with.
From:
type: string
description: The From number of the message.
To:
type: string
description: The To number of the message.
Body:
type: string
description: The body of the message.
NumMedia:
type: integer
description: >-
The number of media files that were included with the
message.
NumSegments:
type: integer
description: >-
The number of segments that make up the entire message.
If the body exceeds 160 GSM-7 characters or 70 UCS-2
characters, it is automatically split into
smaller segments that are annotated for reconstruction on
the recipient handset.
required:
- MessageStatus
- MessageSid
- AccountSid
- From
- To
- Body
- NumMedia
- NumSegments
components:
schemas:
WebhooksSmsStatusCallbackPayloadContentApplicationJsonSchemaMessageStatus:
type: string
enum:
- queued
- sending
- sent
- delivered
- undelivered
- failed
- receiving
- received
description: >-
The current status of the message at the time of the callback.
One of: `queued`, `sending`, `sent`, `delivered`, `undelivered`,
`failed`, `receiving`, `received`.
title: >-
WebhooksSmsStatusCallbackPayloadContentApplicationJsonSchemaMessageStatus
```