> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sendbaze.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Event types

> Every event Sendbaze can send to a webhook endpoint and what it means.

Subscribe to specific types when you create an endpoint, or leave the filter empty to receive every type, including ones added later.

## Email

| Type | When |
| - | - |
| `email.sent` | Amazon SES accepted the message. `data.events` is not included, but the SES message id is on the message. |
| `email.delivered` | The receiving mail server accepted the message. |
| `email.bounced` | Hard or soft bounce. Hard bounces are added to the suppression list automatically; `data.error` carries the SMTP reason. |
| `email.complained` | The recipient marked the message as spam. The address is suppressed and counts toward your complaint rate. |
| `email.failed` | Permanently failed after retries; `data.error` says why. |
| `email.unsubscribed` | The recipient used the unsubscribe link or button on a marketing email. The address is suppressed for marketing. `data.unsubscribed` lists the addresses. |

## SMS

| Type | When |
| - | - |
| `sms.sent` | Accepted by the mobile network. |
| `sms.delivered` | Delivery receipt received from the handset. |
| `sms.failed` | Rejected by the network or expired before delivery. Credits are refunded when the message never left our platform. |
| `sms.opted_out` | The recipient replied STOP. The number is suppressed for marketing messages from your organisation. |

## Account

These describe your account, not a message, so `data` has no message fields. Each fires once per threshold per billing period, at the same moment the email alert is sent.

| Type | When |
| - | - |
| `usage.threshold` | An included allowance reached 50%, 80% or 100%, or overage reached 80% or 100% of your spend cap. `data.metric` is `emails`, `sms` or `spend_cap`; `data.percent`, `data.used` and `data.limit` give the figures and `data.resetsAt` when the period ends. |
| `credits.low` | The wallet balance fell below your low-balance alert level. `data.balanceRand` and `data.thresholdRand`. Fires once per top-up. |
| `billing.payment_failed` | A renewal or overage charge to your saved card failed. `data.amountRand`, `data.reason`, `data.nextAttemptAt` (null when no further automatic attempt is planned) and `data.holdAt`, when live sending pauses if it is still unpaid. |

## Test

| Type | When |
| - | - |
| `webhook.test` | You pressed **Send test event** or called `POST /v1/webhooks/{id}/test`. Delivered regardless of the endpoint's filter. `data` is a sample message. |

## Which ones to handle first

1. **`email.bounced` and `email.complained`**: flag the address in your own records so no other system emails it either.
2. **`email.unsubscribed` and `sms.opted_out`**: update the person's marketing preference.
3. **`email.delivered` and `email.failed`**: show delivery state in your admin tools, retry failures through another channel.

`email.sent` is mostly useful for latency monitoring; `email.delivered` is the one that means the message arrived.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.