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

> ## Agent Instructions
> AhaSend stores all message data in the EU. See /facts.
> The API base URL is https://api.ahasend.com. Send the API key in the Authorization: Bearer header. See /api-reference/authentication.
> Use send.ahasend.com for SMTP in the EU, or send-us.ahasend.com as a US connection point forwarding to the EU. Ports 25, 587 and 2525 use STARTTLS. Port 465 is not supported. See /smtp.
> For send-only integrations, create an API Key v2 under Credentials → Add and scope it to messages:send:{your-domain}. See /send-api/credentials and /api-reference/scopes.

# Webhook Events and Payload Reference

> Reference for AhaSend email webhooks: every event type (delivered, bounced, opened, clicked, failed and more), payload format, signature headers and retries.

AhaSend webhook events report email delivery, engagement, suppression and domain changes; this reference lists every event and its payload. Use the [webhook setup guide](/docs/integrations/webhooks) to configure an endpoint.

Available on Free, Pro and Max. See [plans and features](/docs/facts#plans-and-features).

## Event Types

| Event type | Filter flag | Fires when | Payload |
| - | - | - | - |
| `message.reception` | `on_reception` | A message is accepted | [Reference](/docs/api-reference/webhooks/message-reception) |
| `message.delivered` | `on_delivered` | The recipient server accepts the message | [Reference](/docs/api-reference/webhooks/message-delivered) |
| `message.transient_error` | `on_transient_error` | A delivery attempt has a temporary failure | [Reference](/docs/api-reference/webhooks/message-transient_error) |
| `message.failed` | `on_failed` | Message delivery fails | [Reference](/docs/api-reference/webhooks/message-failed) |
| `message.bounced` | `on_bounced` | The recipient server rejects the message | [Reference](/docs/api-reference/webhooks/message-bounced) |
| `message.suppressed` | `on_suppressed` | A suppression prevents sending | [Reference](/docs/api-reference/webhooks/message-suppressed) |
| `message.opened` | `on_opened` | The tracking image is requested | [Reference](/docs/api-reference/webhooks/message-opened) |
| `message.clicked` | `on_clicked` | A tracked link is requested | [Reference](/docs/api-reference/webhooks/message-clicked) |
| `suppression.created` | `on_suppression_created` | A suppression is created | [Reference](/docs/api-reference/webhooks/suppression-created) |
| `domain.dns_error` | `on_dns_error` | A sending domain has a DNS error | [Reference](/docs/api-reference/webhooks/domain-dns_error) |

Inbound routing has a separate [`message.routing` event](/docs/api-reference/routes/route-message).

## Suppression Duration

See [bounces and suppression durations](/docs/bounces#suppression-duration) for expiry rules and the next steps after a failed send.

## Payload Structure

All webhook events use a consistent JSON structure:

Events contain `type`, `webhook_id`, `timestamp`, and an event-specific `data` object. The payload `webhook_id` identifies the configured endpoint; the `webhook-id` header identifies the delivery across retries. Inbound routes use `route_id` instead of `webhook_id`. Use the payload reference for each event above.

## Delivery and Verification

Check [signatures](/docs/api-reference/webhooks/security) before trusting a payload, and use the [retry policy](/docs/api-reference/webhooks/retry-policy) to handle duplicate or failed deliveries. Manage endpoints with [Create Webhook](/docs/api-reference/webhooks/create-webhook), [List Webhooks](/docs/api-reference/webhooks/get-webhooks), [Update Webhook](/docs/api-reference/webhooks/update-webhook) and [Delete Webhook](/docs/api-reference/webhooks/delete-webhook).

## Related Guides

* [API authentication](/docs/api-reference/authentication), [Permission scopes](/docs/api-reference/scopes), [Webhook setup](/docs/integrations/webhooks).
* [Webhook CLI](/docs/cli/commands/webhooks), [Local webhook testing](/docs/cli/webhook-testing), [Signature verification](/docs/api-reference/webhooks/security).
* [Retry policy](/docs/api-reference/webhooks/retry-policy), [API errors](/docs/api-reference/errors), [API rate limits](/docs/api-reference/rate-limits).
* [Tracking setup](/docs/tracking/open-tracking).


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