curl --request GET \
--url https://app.sendmux.ai/api/v1/webhooks/{public_id}/deliveries/{delivery_id}/payload \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.sendmux.ai/api/v1/webhooks/{public_id}/deliveries/{delivery_id}/payload"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.sendmux.ai/api/v1/webhooks/{public_id}/deliveries/{delivery_id}/payload', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.sendmux.ai/api/v1/webhooks/{public_id}/deliveries/{delivery_id}/payload"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"meta": {
"request_id": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"ok": true,
"data": {
"created_at": "2026-05-21T09:12:00Z",
"delivery_attempt": 1,
"event_id": "evt_clxxxxxxxxxxxxxxxxxxxxxxxxx",
"event_type": "message.bounced",
"expires_at": "2026-05-28T09:12:00Z",
"id": "whda_clxxxxxxxxxxxxxxxxxxxxxxxxx",
"payload": {
"data": {
"bounce_subtype": null,
"bounce_type": null,
"complaint_subtype": null,
"complaint_type": null,
"delay_expires_at": null,
"delay_type": null,
"is_spam": false,
"mailbox_id": "mbx_123",
"message_id": "ME3P282MB076951B3AAD3255D686EA8EDCA0F2@example.com",
"message_id_kind": "rfc5322",
"recipients": [
"inbox@example.com"
],
"reject_reason": null,
"sender": "sender@example.com",
"sendmux_message_id": null,
"webhook_id": null
},
"id": "evt_clxxxxxxxxxxxxxxxxxxxxxxxxx",
"occurred_at": "2026-05-21T09:12:00Z",
"team_public_id": "team_clxxxxxxxxxxxxxxxxxxxxxxxxx",
"type": "message.received"
}
}
}{
"error": {
"code": "invalid_parameter",
"message": "<string>",
"retryable": false,
"doc_url": "<string>",
"errors": [
{
"code": "invalid_string",
"field": "recipient.email",
"message": "<string>"
}
],
"param": "<string>"
},
"meta": {
"request_id": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"ok": false
}{
"error": {
"code": "invalid_parameter",
"message": "<string>",
"retryable": false,
"doc_url": "<string>",
"errors": [
{
"code": "invalid_string",
"field": "recipient.email",
"message": "<string>"
}
],
"param": "<string>"
},
"meta": {
"request_id": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"ok": false
}{
"error": {
"code": "invalid_parameter",
"message": "<string>",
"retryable": false,
"doc_url": "<string>",
"errors": [
{
"code": "invalid_string",
"field": "recipient.email",
"message": "<string>"
}
],
"param": "<string>"
},
"meta": {
"request_id": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"ok": false
}Get a webhook delivery payload
Returns the retained JSON request body for one delivery attempt. Payloads are retained for 7 days and may no longer be available after payload_expires_at.
curl --request GET \
--url https://app.sendmux.ai/api/v1/webhooks/{public_id}/deliveries/{delivery_id}/payload \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.sendmux.ai/api/v1/webhooks/{public_id}/deliveries/{delivery_id}/payload"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.sendmux.ai/api/v1/webhooks/{public_id}/deliveries/{delivery_id}/payload', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.sendmux.ai/api/v1/webhooks/{public_id}/deliveries/{delivery_id}/payload"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"meta": {
"request_id": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"ok": true,
"data": {
"created_at": "2026-05-21T09:12:00Z",
"delivery_attempt": 1,
"event_id": "evt_clxxxxxxxxxxxxxxxxxxxxxxxxx",
"event_type": "message.bounced",
"expires_at": "2026-05-28T09:12:00Z",
"id": "whda_clxxxxxxxxxxxxxxxxxxxxxxxxx",
"payload": {
"data": {
"bounce_subtype": null,
"bounce_type": null,
"complaint_subtype": null,
"complaint_type": null,
"delay_expires_at": null,
"delay_type": null,
"is_spam": false,
"mailbox_id": "mbx_123",
"message_id": "ME3P282MB076951B3AAD3255D686EA8EDCA0F2@example.com",
"message_id_kind": "rfc5322",
"recipients": [
"inbox@example.com"
],
"reject_reason": null,
"sender": "sender@example.com",
"sendmux_message_id": null,
"webhook_id": null
},
"id": "evt_clxxxxxxxxxxxxxxxxxxxxxxxxx",
"occurred_at": "2026-05-21T09:12:00Z",
"team_public_id": "team_clxxxxxxxxxxxxxxxxxxxxxxxxx",
"type": "message.received"
}
}
}{
"error": {
"code": "invalid_parameter",
"message": "<string>",
"retryable": false,
"doc_url": "<string>",
"errors": [
{
"code": "invalid_string",
"field": "recipient.email",
"message": "<string>"
}
],
"param": "<string>"
},
"meta": {
"request_id": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"ok": false
}{
"error": {
"code": "invalid_parameter",
"message": "<string>",
"retryable": false,
"doc_url": "<string>",
"errors": [
{
"code": "invalid_string",
"field": "recipient.email",
"message": "<string>"
}
],
"param": "<string>"
},
"meta": {
"request_id": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"ok": false
}{
"error": {
"code": "invalid_parameter",
"message": "<string>",
"retryable": false,
"doc_url": "<string>",
"errors": [
{
"code": "invalid_string",
"field": "recipient.email",
"message": "<string>"
}
],
"param": "<string>"
},
"meta": {
"request_id": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"ok": false
}Authorizations
Sendmux API key. Use a root API key for Management API routes, or a mailbox credential for Mailbox API routes. Obtain keys from the dashboard under API Keys.
Path Parameters
Webhook public ID
Delivery-attempt public ID
Response
Delivery payload
true Hide child attributes
Hide child attributes
ISO 8601 attempt timestamp
"2026-05-21T09:12:00Z"
1-based retry attempt number.
1
Webhook event ID
"evt_clxxxxxxxxxxxxxxxxxxxxxxxxx"
Event types a webhook may subscribe to. sendmux.test is accepted so you can verify end-to-end delivery via POST /webhooks/{id}/test.
message.delivered, message.bounced, message.complained, message.rejected, message.delivery_delayed, message.received, message.received.spam, sendmux.test "message.bounced"
Timestamp when this retained payload expires.
"2026-05-28T09:12:00Z"
Delivery-attempt public ID
"whda_clxxxxxxxxxxxxxxxxxxxxxxxxx"
The JSON request body delivered to the webhook endpoint.
Hide child attributes
Hide child attributes
Hide child attributes
Hide child attributes
More specific bounce category when available.
null
Bounce category for message.bounced events.
Permanent, Transient, Undetermined null
More specific complaint category when available.
null
Complaint category for message.complained events.
null
When delivery retries are expected to stop, when provided.
null
Delay category for message.delivery_delayed events.
null
Only populated for inbound mailbox events.
false
Mailbox public ID for inbound mailbox events when resolved.
"mbx_123"
Message identifier from the event source.
"ME3P282MB076951B3AAD3255D686EA8EDCA0F2@example.com"
provider for sending feedback IDs; rfc5322 for inbound email Message-ID header values.
provider, rfc5322 "rfc5322"
All affected recipients. Empty for synthetic test events.
["inbox@example.com"]
Reject reason for message.rejected events.
null
Sender/envelope-from address when available.
"sender@example.com"
Sendmux message correlation ID for outbound sending feedback when available.
null
Target webhook ID for synthetic sendmux.test payloads.
null
Stable per-event identifier. Also sent in the X-Sendmux-Event-Id header.
"evt_clxxxxxxxxxxxxxxxxxxxxxxxxx"
When the event occurred.
"2026-05-21T09:12:00Z"
Team that owns the event.
"team_clxxxxxxxxxxxxxxxxxxxxxxxxx"
Dotted event type. Same value as the X-Sendmux-Event-Type header.
message.delivered, message.bounced, message.complained, message.rejected, message.delivery_delayed, message.received, message.received.spam, sendmux.test "message.received"
{
"data": {
"bounce_subtype": null,
"bounce_type": null,
"complaint_subtype": null,
"complaint_type": null,
"delay_expires_at": null,
"delay_type": null,
"is_spam": false,
"mailbox_id": "mbx_123",
"message_id": "ME3P282MB076951B3AAD3255D686EA8EDCA0F2@example.com",
"message_id_kind": "rfc5322",
"recipients": ["inbox@example.com"],
"reject_reason": null,
"sender": "sender@example.com",
"sendmux_message_id": null,
"webhook_id": null
},
"id": "evt_clxxxxxxxxxxxxxxxxxxxxxxxxx",
"occurred_at": "2026-05-21T09:12:00Z",
"team_public_id": "team_clxxxxxxxxxxxxxxxxxxxxxxxxx",
"type": "message.received"
}
Was this page helpful?