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

# Events

> The activity log behind messages, contacts, and domains

Every state change in your account — a message getting delivered, a contact unsubscribing, a domain passing verification — produces an event. Events are the single source of truth behind both [webhooks](/webhooks) and the activity you see in the dashboard.

## Events vs. webhooks vs. messages

These three are easy to conflate:

|                                | Purpose                                                                                                                          |
| ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------- |
| [Messages](/concepts/messages) | The current state of one send. Mutable — its `status` changes over time.                                                         |
| Events                         | An immutable record that a specific transition happened, with a timestamp. A message generates several events over its lifetime. |
| [Webhook endpoints](/webhooks) | A push delivery mechanism for events to your server, as they're created.                                                         |

If your webhook endpoint goes down for a day, you don't lose data — query [List events](/api-reference/events/list) for the gap once it's back up.

## Querying events

```bash theme={null}
# Every event for one message, oldest first in the underlying log
curl "https://api.pulsewave.dev/v1/events?message_id=msg_3p2k9q" \
  -H "Authorization: Bearer pw_live_8f2k9q3m1n7r5t6y4u2i0o8p"

# Every bounce in the last page
curl "https://api.pulsewave.dev/v1/events?type=message.bounced" \
  -H "Authorization: Bearer pw_live_8f2k9q3m1n7r5t6y4u2i0o8p"
```

## Retention

Events are retained for 90 days through the API. For longer-term analytics, consume them via [webhooks](/webhooks) and store them in your own system as they arrive.
