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

# Handling hard-bounced events

> Learn about the best practices for responding to hard-bounced webhook events.

## What is a hard-bounced event?

A hard-bounced event is generated when a recipient's server permanently rejects an email (returning a 5xx SMTP status code). You should not attempt to resend it.

The event data includes the specific reason for the bounce, indicating whether the cause was a problem with your request (e.g., an invalid recipient address) or with the recipient's server (e.g., mailbox unavailable).

In certain cases, such as an invalid recipient address, the rejected recipient is automatically added to your suppression list.
For more information, see [suppressions and unsubscribe handling](/email-api/suppressions-unsubscribes).

## What to do if you receive a hard-bounced event

If you receive a hard-bounced event, you should investigate the reason for the bounce and take appropriate action based on the `status` code and `reason` fields.

For example, if the bounce is due to an invalid recipient address, you should remove that address from your mailing list to avoid sending to it again in the future.

Other causes of hard-bounced events include issues with the recipient's server, rejections due to failed authentication
(DKIM, SPF), or the server flagging your mail as spam.

For more in-depth information on SMTP response codes and their meanings, see our [SMTP response code documentation](https://blog.mailchannels.com/understanding-smtp-response-codes/).

## Fields for hard-bounced events

* `email`: Sender email address.
* `customer_handle`: Your account ID.
* `timestamp`: Unix timestamp of the event.
* `event`: The type of event, `hard-bounced` in this case.
* `recipients`: List of recipient email addresses that couldn't receive the message.
* `status`: The SMTP status code received for the bounce.
* `reason`: A human-readable explanation of why the message bounced.
* `campaign_id` *(optional)*: The campaign ID associated with the message, if applicable.
* `request_id` *(optional)*: A unique identifier generated to track the original HTTP request. This will be blank if the message is sent via SMTP instead of the API.
* `smtp_id`: A unique identifier used to track the message, matching the `Message-Id` header.

## Example hard-bounced event

```json theme={null}
{
    "email": "sender@example.com",
    "customer_handle": "examplecorp",
    "timestamp": 1700000000,
    "event": "hard-bounced",
    "recipients": [
        "recipient@example.net",
        "recipient2@example.net"
    ],
    "status": "521",
    "reason": "Server does not accept mail",
    "campaign_id": "spring-sale-2026",
    "request_id": "4b06083a23724f279c8d11a370e641f8",
    "smtp_id": "<c8d0c0e8412a4e9e9687814d9a7c67da@example.com>"
}
```
