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

# Notifications

> The in-app notification feed, what raises one, and how organization preferences silence a whole type.

export const PermissionNote = ({perm}) => <Info>
    Requires the <code>{perm}</code> permission. Ask your administrator if an
    action described here is missing from your screen — see
    [Roles & permissions](/help/concepts/roles-and-permissions).
  </Info>;

<PermissionNote perm="notification:read" />

The bell appears in all three apps and opens the same feed.

## The feed

Notifications are grouped into **Today** and **Earlier**, newest first, with an unread count on the bell.

* Tapping one marks it read.
* **Mark all read** clears the count.

Most notifications deep-link to the thing they are about — an approved leave request opens that request.

<Note>
  **In the admin console, tapping a notification only marks it read.** There is no admin deep-link target yet, so the feed there is a record rather than a route.
</Note>

## What raises a notification

| Notification                           | Raised when                                                              |
| -------------------------------------- | ------------------------------------------------------------------------ |
| **Leave approved / rejected**          | A decision lands on your leave request.                                  |
| **Regularization approved / rejected** | A decision lands on your correction request.                             |
| **Overtime approved / rejected**       | A decision lands on your overtime request.                               |
| **Swap approved / rejected**           | A decision lands on your shift swap.                                     |
| **Comp-off earned**                    | Approved overtime on a holiday or rest day credited comp-off.            |
| **Message received**                   | Somebody started or replied to a thread with you.                        |
| **Punch reminder**                     | A reminder to clock in or out.                                           |
| **Payslip published**                  | A payroll cycle was disbursed.                                           |
| **Form 16 available**                  | A Form 16 batch was distributed.                                         |
| **Document verified**                  | A document in your vault was verified.                                   |
| **Webhook failed**                     | An outbound webhook exhausted its retries. Sent to `api:manage` holders. |

## Organization preferences

<PermissionNote perm="settings:write" />

**Settings → Notifications** carries eight independent toggles. Each one gates a family of notification types organization-wide:

| Toggle                       | Silences                                        |
| ---------------------------- | ----------------------------------------------- |
| **Leave decisions**          | Leave approved / rejected, and comp-off earned. |
| **Regularization decisions** | Regularization approved / rejected.             |
| **Overtime decisions**       | Overtime approved / rejected.                   |
| **Swap decisions**           | Swap approved / rejected.                       |
| **Messages**                 | New message received.                           |
| **Punch reminders**          | Punch reminders.                                |
| **Payslips**                 | Payslip published.                              |
| **Form 16**                  | Form 16 available.                              |

These are not cosmetic. Turning a toggle off means the notification **is never created** — not created-and-hidden. Turning **Payslips** off genuinely silences payslip publication for everyone in the organization.

Each toggle saves immediately; there is no Save button.

<Warning>
  **Two notification types cannot be silenced.** *Document verified* has no toggle, and *Webhook failed* is deliberately ungated — it is an operational alarm about a broken integration, and organization preferences must not be able to suppress it.
</Warning>

<Note>
  Preferences are **per organization**, not per user. An individual cannot mute a category for themselves.
</Note>

## Delivery

<Warning>
  **Notifications are in-app only.** There is no email, SMS, WhatsApp or web-push fan-out for any notification type — including payslip publication and Form 16 availability. Someone who does not open the app is not informed.

  For machine-to-machine delivery of the same events, use webhooks — see the **Developers** tab.
</Warning>
