---
title: Event Types
description: List of all events you can subscribe to via webhooks.
---
> For the complete documentation index, see [llms-docs.txt](/llms-docs.txt) or the site index [llms.txt](/llms.txt). Full docs corpus: [llms-full-docs.txt](/llms-full-docs.txt). Prefer markdown URLs (append `.md`) for agent consumption. Product skill: [skill.md](/skill.md).


Reloop supports the following **active** event types. Each delivery uses a consistent top-level envelope; event-specific fields live under `data` and use **snake_case**.

## Email lifecycle

| Event | Description |
| --- | --- |
| `email.sent` | Email accepted for delivery (immediate send) |
| `email.scheduled` | Email accepted with a future `scheduled_at` (replaces `email.sent` for that message) |
| `email.delivered` | Delivered to the recipient MTA |
| `email.bounced` | Permanent delivery failure |
| `email.delivery_delayed` | Transient failure / delay |
| `email.complained` | Recipient marked as spam (feedback loop) |
| `email.failed` | Permanent send failure before delivery (or message expired) |
| `email.opened` | Recipient opened the email |
| `email.clicked` | Recipient clicked a link in the email |
| `email.received` | Inbound email successfully received |

### Email `data` shape (outbound)

```json
{
  "email_id": "em_…",
  "from": "Acme <onboarding@example.com>",
  "to": ["user@example.com"],
  "subject": "Hello",
  "status": "delivered",
  "error": {
    "code": 550,
    "message": "User unknown"
  },
  "url": "https://example.com/path"
}
```

- `error` is present on bounce, delay, complaint, and failure events.
- `url` is present on `email.clicked`.
- `scheduled_at` is present on `email.scheduled`.

### Inbound `email.received` `data` shape

```json
{
  "email_id": "in_…",
  "mailbox_id": "mb_…",
  "from": "sender@example.com",
  "from_name": "Sender",
  "to": ["inbox@yourdomain.com"],
  "cc": [],
  "subject": "Inbound Message",
  "thread_id": "thr_…",
  "has_attachments": false,
  "is_spam": false,
  "status": "received",
  "message_id": "<rfc822@id>"
}
```

## Domain lifecycle

| Event | Description |
| --- | --- |
| `domain.create` | Domain created |
| `domain.update` | Domain updated |
| `domain.delete` | Domain deleted |
| `domain.undelete` | Domain restored |
| `domain.verify` | Domain DNS verified |

### Domain `data` shape

```json
{
  "id": "dom_…",
  "name": "example.com",
  "status": "active"
}
```

## API key lifecycle

| Event | Description |
| --- | --- |
| `api-key.create` | API key created |
| `api-key.update` | API key updated / enabled / rotated |
| `api-key.delete` | API key deleted |
| `api-key.revoke` | API key revoked (disabled) |

### API key `data` shape

```json
{
  "api_key_id": "key_…",
  "status": "disabled",
  "action": "revoked"
}
```

`status` and `action` are optional and only set for some transitions.

## Contact lifecycle

| Event | Description |
| --- | --- |
| `contact.create` | Contact created |
| `contact.update` | Contact updated |
| `contact.delete` | Contact deleted |
| `contact.subscribed` | Contact status set to subscribed |
| `contact.unsubscribed` | Contact status set to unsubscribed |
| `contact.blocked` | Contact status set to blocked |
| `contact.group.create` | Contact group created |
| `contact.group.update` | Contact group updated |
| `contact.group.delete` | Contact group deleted |

### Contact `data` shape

```json
{
  "id": "con_…",
  "email": "contact@example.com",
  "first_name": "Ada",
  "last_name": "Lovelace",
  "status": "subscribed"
}
```

### Contact group `data` shape

```json
{
  "id": "grp_…",
  "name": "VIP"
}
```

## Envelope

```json
{
  "id": "whev_…",
  "type": "email.delivered",
  "created_at": "2026-07-22T12:00:00.000Z",
  "data": { }
}
```

## Coming soon (not subscribable yet)

These event IDs exist in the catalog but are **inactive** until the pipeline emits them:

| Event | Notes |
| --- | --- |
| `email.suppressed` | Pre-send suppression event not wired yet |
| `api-key.rate_limited` | Rate-limit publisher not wired yet |

---

## Learn More

- [Introduction](/docs/webhooks)
- [Verify Webhooks Requests](/docs/webhooks/verify-webhooks-requests)
- [Retries and Replays](/docs/webhooks/retries-and-replays)
