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

# Notification types reference

> Every notification TimeTracker sends: what triggers it, who receives it, which channels it uses, and which settings category controls it.

This page lists every notification TimeTracker can send. Use it to find out why a
message arrived, or which setting turns it off.

Each notification has three facts that matter to you:

* **What triggers it** – the action or the scheduled check that fires it.
* **Who receives it** – the people the system picks as recipients.
* **Which channels it uses** – in-app, email, or a webhook.

## How to read the tables

Every notification belongs to one **category**. Categories are what you switch on
and off in your notification settings. You cannot switch a single notification
type on or off – you switch its whole category.

| Category                 | What it covers                                          |
| ------------------------ | ------------------------------------------------------- |
| **Work assigned to you** | Tasks assigned, due soon, overdue, and @mentions        |
| **Approvals**            | Timesheets, time off, and timecard decisions            |
| **Daily reminders**      | The morning, evening and deadline checks                |
| **Money**                | Invoices, payments, and budget thresholds               |
| **Project changes**      | Scope requests and other project-level activity         |
| **Account**              | Invitations, membership and workspace changes           |
| **Security**             | Sign-in and access alerts. Mostly delivered regardless. |

Channels in the tables mean:

* **In-app** – a row in your [Inbox](/notifications/inbox) and a count on the bell.
* **Email** – a message to your account email address.
* **Webhook** – a POST to an endpoint you configured. See [Webhooks](/integrations/webhooks).

<Note>
  **Default** means the channel is on unless you turn it off. **Available** means the
  channel can carry the notification but is not on by default. **Always** means the
  channel cannot be switched off.
</Note>

## The rule behind every table

**You are never notified about your own action.** The person who did the thing is
removed from the recipient list. If you assign a task to yourself, no
notification is sent. If you are the only person who would have received it, no
notification exists at all.

There are exceptions, and they are all messages *about you* that the system
raised on your behalf – a reminder you scheduled, an export you asked for, a
security alert on your own account. Those are marked **self** in the tables below.

## Tasks and assignments

Category: **Work assigned to you**.

| Notification           | Trigger                                                                | Who receives it                                                      | Channels                                      |
| ---------------------- | ---------------------------------------------------------------------- | -------------------------------------------------------------------- | --------------------------------------------- |
| Task assigned          | Someone assigns or reassigns a task to a person                        | The new assignee                                                     | In-app + email by default. Webhook available. |
| Task status changed    | A task moves to a different section or status                          | The task's assignee                                                  | In-app + email by default. Webhook available. |
| Task completed         | A task is marked done                                                  | The assignee, plus anyone on the workspace's completion watcher list | In-app + email by default. Webhook available. |
| Task reopened          | A completed task is moved back to open work                            | The assignee, plus the completion watcher list                       | In-app + email by default. Webhook available. |
| Task due soon          | A scheduled check finds a task whose due date is inside your lead time | The assignee (**self**)                                              | In-app + email by default. Webhook available. |
| Mentioned in a comment | Someone types `@yourname` in a comment                                 | The mentioned person                                                 | In-app + email by default. Webhook available. |
| Added to a project     | Someone adds a person to a project team                                | The person added                                                     | In-app + email by default. Webhook available. |
| Removed from a project | Someone removes a person from a project team                           | The person removed                                                   | In-app + email by default. Webhook available. |

<Tip>
  **Completion watchers** are a named list an admin sets, not a role query. If you
  want a delivery lead to hear about every task that gets finished, add them to the
  watcher list rather than changing anyone's role.
</Tip>

## Timesheets

Category: **Approvals**.

| Notification            | Trigger                                                         | Who receives it                                                                             | Channels                                                                       |
| ----------------------- | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| Timesheet submitted     | Someone submits a week or a period for review                   | The approver they routed it to. If they chose no approver, every workspace Owner and Admin. | In-app + email by default. Webhook available.                                  |
| Timesheet approved      | A reviewer approves a submitted timesheet                       | The person who owns the timesheet                                                           | In-app + email by default. Webhook available.                                  |
| Changes requested       | A reviewer rejects a timesheet and asks for changes             | The person who owns the timesheet                                                           | In-app + email by default. Webhook available.                                  |
| Timesheet reopened      | An admin reopens an already-approved timesheet                  | The person who owns the timesheet                                                           | In-app + email by default. Webhook available.                                  |
| Timesheet withdrawn     | A person pulls back a timesheet they had submitted              | The approver it was sitting with                                                            | In-app + email by default. Webhook available.                                  |
| Timesheet reminder      | A reviewer nudges someone to submit their week                  | The person who owes the timesheet                                                           | In-app + email by default. Webhook available.                                  |
| Timesheet not submitted | A scheduled check finds an unsubmitted timesheet before a close | The person who has not submitted (**self**)                                                 | In-app + email by default. Webhook available.                                  |
| Period closed           | An admin closes a period and locks the time inside it           | Each member whose timesheet was locked                                                      | In-app + email by default. Webhook available. Category is **Project changes**. |

<Note>
  The reviewer who closes a period is not notified about the close. Only the people
  whose time got locked are.
</Note>

## Approval escalations

Category: **Approvals**. Priority is **high**, so these stand out in your Inbox.

A submitted approval that nobody acts on escalates on a fixed schedule:

| Age of the pending approval | Who gets pinged                 |
| --------------------------- | ------------------------------- |
| Past **24 hours**           | The approver it was routed to   |
| Past **72 hours**           | Every workspace Owner and Admin |

| Notification               | Trigger                                                   | Who receives it                                 | Channels                                      |
| -------------------------- | --------------------------------------------------------- | ----------------------------------------------- | --------------------------------------------- |
| Timesheet approval overdue | A submitted timesheet sits un-actioned past a threshold   | The routed approver, then the Owners and Admins | In-app + email by default. Webhook available. |
| Time off approval overdue  | A pending leave request sits un-actioned past a threshold | The routed approver, then the Owners and Admins | In-app + email by default. Webhook available. |
| Expense approval overdue   | A submitted expense sits un-actioned past a threshold     | The routed approver, then the Owners and Admins | In-app + email by default. Webhook available. |

Each level fires once per item. A repeated scan cannot send the same escalation
twice.

## Time Clock

Category: **Approvals**, except where noted.

| Notification               | Trigger                                                      | Who receives it                                                             | Channels                                      |
| -------------------------- | ------------------------------------------------------------ | --------------------------------------------------------------------------- | --------------------------------------------- |
| Timecard submitted         | Someone submits a timecard period                            | The approver they routed it to, or everyone who can approve timecards       | In-app + email by default. Webhook available. |
| Timecard approved          | A reviewer approves a timecard                               | The member whose timecard it is                                             | In-app + email by default. Webhook available. |
| Timecard changes requested | A reviewer sends a timecard back                             | The member whose timecard it is                                             | In-app + email by default. Webhook available. |
| Correction approved        | A reviewer accepts a clock-time correction                   | The member who asked for the correction                                     | In-app + email by default. Webhook available. |
| Correction rejected        | A reviewer refuses a clock-time correction                   | The member who asked for the correction                                     | In-app + email by default. Webhook available. |
| Missing clock out          | A scheduled check finds a session that was never clocked out | The member whose session it is (**self**). Category is **Daily reminders**. | In-app + email by default. Webhook available. |

Time Clock is off by default. See [Apps and modules](/concepts/apps-and-modules).

## Time off

Category: **Approvals**, except where noted.

| Notification        | Trigger                                                              | Who receives it                                            | Channels                                                 |
| ------------------- | -------------------------------------------------------------------- | ---------------------------------------------------------- | -------------------------------------------------------- |
| Time off requested  | Someone submits a leave request                                      | Everyone who can approve leave, minus the requester        | In-app + email by default. Webhook available.            |
| Time off approved   | A reviewer approves a leave request                                  | The requester                                              | In-app + email by default. Webhook available.            |
| Time off rejected   | A reviewer rejects a leave request                                   | The requester                                              | In-app + email by default. Webhook available.            |
| Time off withdrawn  | A requester cancels a request that was still pending                 | Everyone who can approve leave                             | In-app + email by default. Webhook available.            |
| Approval withdrawn  | A reviewer takes back an approval that was already granted           | The requester                                              | In-app + email by default. Webhook available.            |
| Balance adjusted    | An admin changes someone's leave balance by hand                     | The person whose balance changed                           | **In-app only** by default. Email and webhook available. |
| Leave starting soon | A scheduled check finds approved leave starting inside the lead time | The requester (**self**). Category is **Daily reminders**. | In-app + email by default. Webhook available.            |

## Expenses

Category: **Approvals**.

| Notification            | Trigger                                    | Who receives it                                     | Channels                                      |
| ----------------------- | ------------------------------------------ | --------------------------------------------------- | --------------------------------------------- |
| Expense submitted       | Someone submits an expense                 | Everyone eligible to approve that person's expenses | In-app + email by default. Webhook available. |
| Expense approved        | A reviewer approves an expense             | The person who submitted it                         | In-app + email by default. Webhook available. |
| Expense rejected        | A reviewer rejects an expense              | The person who submitted it                         | In-app + email by default. Webhook available. |
| Clarification requested | A reviewer asks a question before deciding | The person who submitted it                         | In-app + email by default. Webhook available. |

"Eligible to approve" means the person holds the approval capability **and** the
submitter is inside their supervision scope. See
[Supervision scope](/concepts/supervision-scope).

## Invoices and payments

Category: **Money**.

| Notification          | Trigger                                              | Who receives it                                                           | Channels                                                               |
| --------------------- | ---------------------------------------------------- | ------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| Invoice created       | An invoice is created                                | Every workspace Owner and Admin                                           | In-app + email by default. Webhook available.                          |
| Invoice sent          | An invoice is sent to a client                       | **The client's billing contact**, outside the workspace                   | **Email only.** Webhook available. Never appears in an internal Inbox. |
| Invoice paid          | An invoice is marked fully paid                      | **The client's billing contact**                                          | **Email only.** Webhook available.                                     |
| Payment reminder sent | Someone sends a payment chase for an unpaid invoice  | **The client's billing contact**                                          | **Email only.** Webhook available.                                     |
| Payment recorded      | Someone records a payment against an invoice         | Every workspace Owner and Admin                                           | In-app + email by default. Webhook available.                          |
| Invoice voided        | An invoice is voided                                 | Every workspace Owner and Admin                                           | In-app + email by default. Webhook available.                          |
| Invoice overdue       | A scheduled check finds an invoice past its due date | Every workspace Owner and Admin (**self**, so a solo owner still gets it) | In-app + email by default. Webhook available.                          |

<Warning>
  Client-facing invoice emails never create an in-app notification. A client contact
  is outside your workspace and never sees your internal Inbox.
</Warning>

## Budgets

Category: **Money**.

| Notification             | Trigger                                                             | Who receives it                                                       | Channels                                      |
| ------------------------ | ------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------- |
| Budget threshold reached | Tracked time or cost pushes a project past a budget alert threshold | The project's manager plus every workspace Owner and Admin (**self**) | In-app + email by default. Webhook available. |

See [Budget alerts](/budgets/budget-alerts) for how thresholds are set.

## Projects

Category: **Project changes**, except where noted.

| Notification                       | Trigger                                               | Who receives it                    | Channels                                      |
| ---------------------------------- | ----------------------------------------------------- | ---------------------------------- | --------------------------------------------- |
| Project archived                   | A project is archived                                 | Everyone on that project's team    | In-app + email by default. Webhook available. |
| Project status changed             | A project moves to a new status                       | Everyone on that project's team    | In-app + email by default. Webhook available. |
| Client commented in the portal     | A client contact posts a comment in the client portal | **Only the project's own manager** | In-app + email by default. Webhook available. |
| Deliverable approved in the portal | A client contact approves a deliverable               | Every workspace Owner and Admin    | In-app + email by default. Webhook available. |

<Note>
  A portal comment goes to one person on purpose – the project manager. Mailing
  every Owner and Admin would make client conversation the noisiest thing in the
  product.
</Note>

## Exports

Category: **Project changes**.

| Notification | Trigger                                    | Who receives it                        | Channels                                      |
| ------------ | ------------------------------------------ | -------------------------------------- | --------------------------------------------- |
| Export ready | A file you asked for has finished building | The person who requested it (**self**) | In-app + email by default. Webhook available. |

Export notifications are kept for **30 days**, shorter than the usual 90, because
the download itself expires.

## Members and access

Category: **Account**.

| Notification               | Trigger                                   | Who receives it                                            | Channels                                                          |
| -------------------------- | ----------------------------------------- | ---------------------------------------------------------- | ----------------------------------------------------------------- |
| You are invited            | Someone invites a person to the workspace | The invited email address, outside the workspace           | **Email only, and it cannot be switched off.** Webhook available. |
| Invitation accepted        | An invited person joins                   | The person who sent the invite, plus every Owner and Admin | In-app + email by default. Webhook available.                     |
| Invitation revoked         | An open invitation is cancelled           | Every workspace Owner and Admin                            | In-app + email by default. Webhook available.                     |
| Your role changed          | An admin changes someone's role           | The person whose role changed                              | In-app + email by default. Webhook available.                     |
| Removed from the workspace | Someone is removed from a workspace       | The person removed                                         | In-app + email by default. Webhook available.                     |
| Member account deleted     | A person's account is fully deleted       | Every workspace Owner and Admin                            | In-app + email by default. Webhook available.                     |

<Note>
  An invite email is not optional. An invitation that cannot email the invitee is
  useless, so this one type ignores every preference.
</Note>

## Security

Category: **Security**. Priority is **high**. Email is **always on** for these –
you cannot switch it off.

| Notification          | Trigger                            | Who receives it               | Channels                                      |
| --------------------- | ---------------------------------- | ----------------------------- | --------------------------------------------- |
| Email address changed | The email on your account changes  | The account holder (**self**) | In-app + **email always**. Webhook available. |
| Unusual sign-in       | A sign-in is flagged as suspicious | The account holder (**self**) | In-app + **email always**. Webhook available. |

Security notifications are kept for **365 days**, far longer than the 90-day
default, so you can look back at an access question months later.

## Billing and plan

Category: **Money**.

| Notification            | Trigger                             | Who receives it                                      | Channels                                      |
| ----------------------- | ----------------------------------- | ---------------------------------------------------- | --------------------------------------------- |
| Trial ending            | Your trial is close to its end date | Every Owner and Admin (**self**)                     | In-app + email by default. Webhook available. |
| Trial expired           | Your trial has ended                | Every Owner and Admin (**self**)                     | In-app + email by default. Webhook available. |
| Subscription activated  | A paid plan starts                  | Every Owner and Admin (**self**)                     | In-app + email by default. Webhook available. |
| Payment action required | A payment needs your attention      | Every Owner and Admin (**self**). Priority **high**. | In-app + email by default. Webhook available. |

These messages cover **access only** – what your workspace can now do and what
you should do about it. Receipts, tax invoices and card retries come from the
payment processor, not from TimeTracker.

## Daily reminders

Category: **Daily reminders**. These are always about you, so you always receive
your own.

| Notification             | Trigger                                                    | Who receives it | Channels                                      |
| ------------------------ | ---------------------------------------------------------- | --------------- | --------------------------------------------- |
| Nothing planned today    | The morning check finds you have no work planned for today | You (**self**)  | In-app + email by default. Webhook available. |
| Today's agenda           | The morning check finds work planned for today             | You (**self**)  | In-app + email by default. Webhook available. |
| Nothing planned tomorrow | The evening check finds tomorrow empty                     | You (**self**)  | In-app + email by default. Webhook available. |
| Deadlines coming up      | The deadline check finds tasks due inside your lead time   | You (**self**)  | In-app + email by default. Webhook available. |

Reminders are kept for **30 days**. They arrive at the time you chose, in your own
timezone. See [Reminders](/notifications/reminders).

<Tip>
  A reminder never gets rolled into a digest and never gets held back. The whole
  point of a reminder is that it lands at the moment you picked. Switching the
  **Daily reminders** category off still stops them completely.
</Tip>

## Digest summary

Category: **Account**.

| Notification | Trigger                                                     | Who receives it | Channels                                                |
| ------------ | ----------------------------------------------------------- | --------------- | ------------------------------------------------------- |
| Your digest  | Your digest schedule fires and there is something to report | You (**self**)  | In-app + email. Webhook is not available for this type. |

See [Digests](/notifications/digests).

## Retention

Notifications do not stay forever.

| Type family                 | Kept for |
| --------------------------- | -------- |
| Security alerts             | 365 days |
| Most notifications          | 90 days  |
| Exports and daily reminders | 30 days  |

Retention only removes the notification record. It never touches the task,
timesheet or invoice the notification was about.

## Permissions

Anyone can receive notifications. What you receive depends on what you can see,
not on a notification setting.

| Action                                           | Capability                              | Typical roles                          |
| ------------------------------------------------ | --------------------------------------- | -------------------------------------- |
| Read your own Inbox and set your own preferences | None                                    | Everyone                               |
| Set workspace notification defaults              | `workspace.updateSettings`              | Owner, Admin                           |
| Receive approval notifications                   | The matching approve capability         | Owner, Admin, Project Manager, Finance |
| Receive a notification on a webhook              | `webhook.manage` to create the endpoint | Owner, Admin                           |

A capability is not a scope. Holding `time.approve` means you *may* approve. Your
supervision scope decides *whose* timesheets reach you. See
[Roles and capabilities](/concepts/roles-and-capabilities).

## Common questions

<AccordionGroup>
  <Accordion title="Why did I not get a notification for something I did myself?">
    Because you did it. TimeTracker removes the person who performed an action
    from that action's recipient list. You already know what you did.

    The exceptions are messages the system raises on your behalf – your own
    reminders, your own export, your own security alerts, and your own billing
    notices. Those are marked **self** in the tables above.
  </Accordion>

  <Accordion title="Can I turn off just one notification type?">
    No. You switch a whole category on or off per channel. The categories are
    listed at the top of this page. This keeps the settings screen short and
    keeps the rules predictable.
  </Accordion>

  <Accordion title="Which notifications can I never switch off?">
    Three. The invite email that goes to a new person, and the two security
    alerts – email address changed and unusual sign-in. Everything else is
    yours to control.
  </Accordion>

  <Accordion title="Do client contacts see my internal notifications?">
    No. A client-portal contact is outside your workspace. Client-facing messages
    such as a sent invoice go out by email only and never create an in-app row.
  </Accordion>

  <Accordion title="Why did two people get the same notification and I did not?">
    Recipients are resolved per notification type. Some go to the whole Owner
    and Admin group, some go to one named person, some go to whoever can approve
    the item. Find the type in the tables above and check the "Who receives it"
    column.
  </Accordion>

  <Accordion title="What is a webhook channel?">
    A notification can also be sent as an HTTP POST to an endpoint you own, so
    another system can react to it. Set one up under
    [Webhooks](/integrations/webhooks).
  </Accordion>
</AccordionGroup>

## Troubleshooting

**A notification type is missing entirely.** The app it belongs to may be turned
off. Time Clock, for example, is off by default, so no timecard notification can
fire. Check **Settings → Apps**.

**Approvals never arrive.** Approval notifications need someone who can approve.
If nobody in the workspace holds the approval capability, or nobody's supervision
scope covers the submitter, the recipient list is empty and no notification is
created.

**Emails stop but in-app rows keep arriving.** Your email channel is off for that
category, either by your own choice or by a workspace default. See
[Your notification settings](/notifications/your-notification-settings).

## Related guides

<CardGroup cols={2}>
  <Card title="Notifications overview" icon="bell" href="/notifications/overview">
    How the notification system fits together.
  </Card>

  <Card title="Your notification settings" icon="sliders" href="/notifications/your-notification-settings">
    Choose what reaches you, and on which channel.
  </Card>

  <Card title="Inbox" icon="inbox" href="/notifications/inbox">
    Read, filter and clear your in-app notifications.
  </Card>

  <Card title="Reminders" icon="alarm-clock" href="/notifications/reminders">
    The daily checks and how to schedule them.
  </Card>

  <Card title="Webhooks" icon="webhook" href="/integrations/webhooks">
    Send notifications to your own systems.
  </Card>

  <Card title="Roles and capabilities" icon="shield" href="/concepts/roles-and-capabilities">
    Who can do and see what.
  </Card>
</CardGroup>
