curl --request GET \
--url https://app.sendmux.ai/api/v1/webhooks/{public_id}/deliveries \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.sendmux.ai/api/v1/webhooks/{public_id}/deliveries"
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', 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"
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,
"error_message": null,
"event_id": "evt_clxxxxxxxxxxxxxxxxxxxxxxxxx",
"event_type": "message.bounced",
"id": "whda_clxxxxxxxxxxxxxxxxxxxxxxxxx",
"max_attempts": 8,
"next_retry_at": null,
"payload_available": true,
"payload_expires_at": "2026-05-28T09:12:00Z",
"request_payload_bytes": 2048,
"request_payload_sha256": "b1946ac92492d2347c6235b4d2611184d4e4f8f2f43a5f2d8d5b7a4a6f0c1e2d",
"response_body": "ok",
"response_ms": 184,
"response_status": 200,
"result": "success"
}
],
"pagination": {
"has_more": true,
"next_cursor": "<string>"
}
}{
"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
}{
"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
}List webhook delivery attempts
Returns recent delivery attempts for one webhook subscription, ordered by created_at descending. Delivery metadata is retained for 7 days. Use the payload endpoint while payload_available is true to inspect the exact JSON request body that was delivered.
curl --request GET \
--url https://app.sendmux.ai/api/v1/webhooks/{public_id}/deliveries \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.sendmux.ai/api/v1/webhooks/{public_id}/deliveries"
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', 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"
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,
"error_message": null,
"event_id": "evt_clxxxxxxxxxxxxxxxxxxxxxxxxx",
"event_type": "message.bounced",
"id": "whda_clxxxxxxxxxxxxxxxxxxxxxxxxx",
"max_attempts": 8,
"next_retry_at": null,
"payload_available": true,
"payload_expires_at": "2026-05-28T09:12:00Z",
"request_payload_bytes": 2048,
"request_payload_sha256": "b1946ac92492d2347c6235b4d2611184d4e4f8f2f43a5f2d8d5b7a4a6f0c1e2d",
"response_body": "ok",
"response_ms": 184,
"response_status": 200,
"result": "success"
}
],
"pagination": {
"has_more": true,
"next_cursor": "<string>"
}
}{
"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
}{
"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
Query Parameters
Pagination cursor — the next_cursor from the previous response.
Maximum results (default 25, max 100)
1 <= x <= 100Filter by event type.
message.delivered, message.bounced, message.complained, message.rejected, message.delivery_delayed, message.received, message.received.spam, sendmux.test "message.bounced"
Filter by delivery result.
success, retrying, failed, permanent_failure Response
Delivery-attempt list
true Hide child attributes
Hide child attributes
ISO 8601 attempt timestamp
"2026-05-21T09:12:00Z"
1-based retry attempt number.
1
Public-safe network error category when no HTTP response was received.
null
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"
Delivery-attempt public ID
"whda_clxxxxxxxxxxxxxxxxxxxxxxxxx"
Maximum attempts before the subscription is marked failing.
8
Next retry timestamp when result is retrying; otherwise null.
null
True while the delivered request payload can still be fetched.
true
Timestamp when the retained request payload expires.
"2026-05-28T09:12:00Z"
Size of the delivered request payload in bytes.
x >= 02048
SHA-256 digest of the delivered request payload.
"b1946ac92492d2347c6235b4d2611184d4e4f8f2f43a5f2d8d5b7a4a6f0c1e2d"
Truncated endpoint response preview, if any.
"ok"
End-to-end delivery latency in milliseconds.
x >= 0184
HTTP status returned by the endpoint, or null for network/timeout failures.
200
Delivery result for this attempt.
success, retrying, failed, permanent_failure "success"
Was this page helpful?