---
title: "Events — Notifications for Laravel | Roundly"
description: "Every event the package dispatches after the commit — inbox, mail, digest, reminder, escalation, preference, skip and interop failures."
url: https://roundly-consulting.com/open-source/docs/notifications-for-laravel/events
language: en
---

[All packages](https://roundly-consulting.com/open-source.md)

[Notifications for Laravel](https://roundly-consulting.com/open-source/docs/notifications-for-laravel.md)

# Events

All events are final readonly and dispatched after the commit (ShouldDispatchAfterCommit), so a send inside a transaction that rolls back fires nothing. The package never broadcasts — see Inbox for the Reverb recipe.

| Event | Payload | When |
| --- | --- | --- |
| `InboxItemCreated` | `item` | A new inbox item — broadcast it with InboxItemResource on your private channel. |
| `InboxItemUpdated` | `item, previousCount` | An event collapsed into an existing item (count raised, latest actor and data). |
| `InboxItemsRead` | `recipient, ids` | Items were marked read — one, or many at once with markAllRead(). |
| `InboxItemArchived / InboxItemUnarchived` | `item` | An item was archived / restored from the archive. |
| `NotificationMailSent` | `delivery` | A mail went out. |
| `NotificationMailFailed` | `delivery, reason` | A mail could not be sent — reason is a CancelReason (transport, render, unknown, payload). |
| `NotificationMailHeld` | `delivery, until` | A mail is held until quiet hours end. |
| `DigestSent` | `run, count` | A digest mail went out. |
| `ReminderScheduled / ReminderRescheduled` | `reminder` | A reminder row was scheduled / moved with its anchor date. |
| `ReminderCancelled` | `reminder` | A reminder or escalation was cancelled — see its cancel\_reason. |
| `ReminderFired / EscalationFired` | `reminder` | A reminder / an escalation went out. |
| `NotificationPreferenceChanged` | `user, scope, old, new` | A preference changed; scope is type, category, digest, quiet\_hours, timezone or reset. update() fires one per type, category and setting it changed, none when it rolls back. |
| `RecipientSkipped` | `type, recipient, reason` | A recipient got nothing from a send (reason: no\_access). |
| `NotificationInteropFailed` | `notification, channel, exception` | The interop listener failed inside another package’s send; that notification went out untouched. Basenames only. |

```php
use Illuminate\Support\Facades\Event;
use RoundlyConsulting\Notifications\Events\EscalationFired;
use RoundlyConsulting\Notifications\Events\NotificationMailFailed;
use RoundlyConsulting\Notifications\Events\NotificationPreferenceChanged;

Event::listen(NotificationMailFailed::class, fn (NotificationMailFailed $event) => Log::warning('Mail failed', [
    'delivery' => $event->delivery->getKey(),
    'reason' => $event->reason->value,      // transport, render, unknown, payload, …
]));

Event::listen(EscalationFired::class, fn (EscalationFired $event) => Metrics::increment('escalations'));

Event::listen(NotificationPreferenceChanged::class, fn ($event) => Audit::record($event->user, $event->scope, $event->old, $event->new));
```

## Show your open-source love

This package is free and MIT-licensed. If it saves you time, a one-off donation or a Patreon membership keeps it maintained, tested and documented.

[More ways to support, including crypto](https://roundly-consulting.com/support-us.md)

By donating, you agree to our [donation terms](https://roundly-consulting.com/donation-terms.md).

[Support our open source work (opens in a new tab)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Join us on Patreon (opens in a new tab)](https://www.patreon.com/cw/roundly)

## Want this built into your product?

We integrate our packages into custom Laravel and AI builds. Tell us what you're working on and we'll reply within 48 hours.

[Get a quote in 48 hours](https://roundly-consulting.com/contact.md) [Browse all packages](https://roundly-consulting.com/open-source/docs/notifications-for-laravel.md)
