Skip to content
CloudVNO

SMS Webhooks

Receive real-time delivery status updates for your outbound SMS messages via webhooks.

Delivery Status Callbacks

CloudVNO sends status update webhooks for every outbound message as it moves through the delivery pipeline.

Configure Status Callback

Set status_callback when sending:

message = client.messages.send(
    from_="+14155551234",
    to="+12125559876",
    body="Your code is 123456",
    status_callback="https://yourapp.com/sms-status"
)

Status Webhook Payload

{
  "MessageSid": "SM1a2b3c4d5e6f7890abcdef",
  "MessageStatus": "delivered",
  "From": "+14155551234",
  "To": "+12125559876",
  "ErrorCode": null,
  "ErrorMessage": null,
  "Timestamp": "2026-03-06T10:00:05Z"
}

Status Values

StatusMeaning
queuedAccepted by CloudVNO, waiting to send
sendingBeing transmitted to the carrier
sentAccepted by the carrier
deliveredConfirmed delivery to handset
undeliveredCarrier could not deliver
failedCould not be sent (invalid number, etc.)

Handle Delivery Failures

@app.route("/sms-status", methods=["POST"])
def sms_status():
    status = request.form["MessageStatus"]
    sid = request.form["MessageSid"]

    if status == "failed":
        error_code = request.form.get("ErrorCode")
        print(f"Message {sid} failed: {error_code}")
        # Retry logic or alert
    elif status == "delivered":
        print(f"Message {sid} delivered successfully")

    return Response("", status=204)