> For the complete documentation index, see [llms.txt](https://islamu.gitbook.io/islamu-event/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://islamu.gitbook.io/islamu-event/documentation/readme/communications-and-notifications/in-app-notifications.md).

# In-App Notifications

Operate the durable tenant-scoped inbox, fanout, SSE, and Web Push hints.

The in-app inbox is the authoritative, durable source of truth for user-visible notifications. Realtime transports (SSE and Web Push) act as lightweight hints informing browser clients to refresh their inbox state.

***

## 1. Notification Model & Available Actions

Notifications are authenticated, user-owned, and strictly [tenant-scoped](/islamu-event/documentation/readme/security-and-identity/multi-tenancy.md). Supported operations include:

* **Read**: Retrieve unread counts, paginated lists, and message details.
* **Status Updates**: Mark individual messages or all as read.
* **Lifecycle Management**: Archive/unarchive, snooze/unsnooze, and soft delete.
* *Note*: The platform does not implement mark-as-unread or permanent hard deletion through the user API.

***

## 2. Outbox Fanout & Deduplication

Event publication, ticket confirmations, and moderation alerts utilize the **Transactional Outbox Pattern** (see [Architecture & Request Flows](/islamu-event/documentation/readme/getting-started/architecture-and-request-flows.md#2-write-command-flow)):

* Business transactions commit the domain state change and the notification outbox entry in a single atomic database transaction.
* Background workers process fanout with deterministic deduplication keys, ensuring idempotent processing even during network interruptions.
* **Server-Sent Events (SSE)** and **Browser Web Push** deliver non-authoritative wake-up signals; the client always fetches the canonical message from the API.

When a push service reports a retired endpoint (`404` or `410`), the dispatch failure and subscription deactivation are stored together. A database failure does not leave half-completed cleanup, and another tenant's subscription is unaffected. The durable inbox remains available independently of push delivery.

***

## 3. Multi-Channel Boundaries

An in-app notification triggers an external email only when the originating intent explicitly mandates external delivery (see [Email SMTP](/islamu-event/documentation/readme/communications-and-notifications/email-smtp.md)):

* General activity and subscription alerts remain strictly in-app.
* Critical flows (such as ticket delivery, password recovery, or heavy moderation decisions via [Coop & Osprey](/islamu-event/documentation/readme/integrations-and-ai/coop-and-osprey.md)) explicitly track both in-app and SMTP delivery states.

***

## Related Guides & Next Steps

* [**Email SMTP Configuration**](/islamu-event/documentation/readme/communications-and-notifications/email-smtp.md) — Configure MailKit transactional email dispatch.
* [**Listmonk Integration**](/islamu-event/documentation/readme/communications-and-notifications/listmonk.md) — Synchronize attendee newsletters with self-hosted Listmonk.
* [**Architecture & Request Flows**](/islamu-event/documentation/readme/getting-started/architecture-and-request-flows.md) — Learn how outboxes ensure zero message loss.
* [**Ticketing & Check-In**](/islamu-event/documentation/readme/events-and-ticketing/ticketing-and-check-in.md) — Attendee confirmation and lost-ticket notifications.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://islamu.gitbook.io/islamu-event/documentation/readme/communications-and-notifications/in-app-notifications.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
