> ## 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.

# Approve an expense

> Review submitted expenses in TimeTracker: open the approvals queue, check the receipt, approve or reject with a reason, and withdraw an approval if needed.

To approve an expense, go to **Approvals → Expenses → Awaiting**, open the row's three-dot menu and choose **Approve**.

To send it back, choose **Reject…** and give a reason. A reason is required.

## Where the queue lives

The reviewer queue is on the consolidated Approvals screen, not on the Expenses page.

| Tab          | What it holds                                                                |
| ------------ | ---------------------------------------------------------------------------- |
| **Awaiting** | Every `submitted` expense in the workspace, with Approve and Reject actions  |
| **History**  | Expenses already `approved`, `rejected` or `invoiced`, newest decision first |

The Expenses page in the sidebar shows only your own expenses. Approvals is the workspace-wide reviewer surface.

## Before you start

You need:

* the `expense.approve` capability – Owner, Admin, Project Manager or Finance
* the **Expenses** app switched on
* the **Pro** plan – approving is a resolution action, so it is a paid feature

<Note>
  On Free, submitted expenses still arrive and still queue. Approve and Reject show a **Pro** badge and open an upgrade dialog. Nothing is lost – the whole backlog clears the day the workspace upgrades.
</Note>

## How to approve an expense

<Steps>
  <Step title="Open the queue">
    Go to **Approvals**, then the **Expenses** tab, then the **Awaiting** sub-tab.
  </Step>

  <Step title="Check the receipt">
    Click **View** in the Receipt column. The receipt opens in a new tab. A dash means no receipt was attached.
  </Step>

  <Step title="Check the billable value and flag">
    The **Billable value** column shows what the client is charged. The **Billable** column shows a green `Billable` or `Billable +15%` chip, or a neutral `Internal` chip.
  </Step>

  <Step title="Approve it">
    Open the row's three-dot menu and click **Approve**. A toast confirms **Expense approved.**
  </Step>
</Steps>

## How to reject an expense

<Steps>
  <Step title="Open the row menu">
    Click the three-dot menu and choose **Reject…**.
  </Step>

  <Step title="Write the reason">
    The **Reject this expense?** dialog opens. It tells you the submitter will be notified and can resubmit.
  </Step>

  <Step title="Fill in Reason for rejection">
    This field is required. The **Reject** button stays disabled until you type something.
  </Step>

  <Step title="Confirm">
    Click **Reject**. A toast confirms **Expense rejected.**
  </Step>
</Steps>

The reason travels with the notification, so the submitter sees exactly what to fix.

## Example

Sarah Lin submits a \$240 stock photo licence for the Bluebird Coffee Website Redesign, billable with a 15% markup.

Daniel Okafor, Finance, opens **Approvals → Expenses → Awaiting** and sees:

| Person    | Category | Billable value | Billable        | Receipt  |
| --------- | -------- | -------------- | --------------- | -------- |
| Sarah Lin | Software | \$276.00       | `Billable +15%` | **View** |

Daniel clicks **View**, confirms the receipt matches, and approves. Sarah gets a notification. The expense is now available in the invoice builder for Bluebird Coffee.

If the receipt had been for a different client, Daniel would reject with the reason "This receipt is for Harbor Logistics, not Bluebird. Please refile against the right client."

## The cost firewall

The approval queue shows the **billable value** – what the client is charged – to every reviewer.

The raw **amount** and **markup %** are the business's internal cost. They are only shown to someone who also holds `time.viewCost`, which is Owner and Admin only.

| Role            | Sees billable value | Sees the raw amount |
| --------------- | ------------------- | ------------------- |
| Owner           | Yes                 | Yes                 |
| Admin           | Yes                 | Yes                 |
| Project Manager | Yes                 | No                  |
| Finance         | Yes                 | No                  |

This is the same firewall that hides cost rates. A Project Manager can approve the client-facing value without seeing what Northwind actually paid. See [cost rates](/rates/cost-rates).

<Note>
  You always see the full amount on **your own** expenses, whatever your role. The firewall only applies to other people's.
</Note>

## Withdraw an approval

If you approve something by mistake, you can reverse it – as long as it has not been invoiced.

<Steps>
  <Step title="Open the History sub-tab">
    Go to **Approvals → Expenses → History**.
  </Step>

  <Step title="Find the approved expense">
    Only rows with an `Approved` status show an action menu. Rejected and invoiced rows have none.
  </Step>

  <Step title="Choose Withdraw approval">
    A confirmation dialog explains the expense returns to the awaiting queue for re-review.
  </Step>

  <Step title="Confirm">
    Click **Withdraw approval**. A toast confirms **Approval withdrawn.**
  </Step>
</Steps>

Withdrawing an approval is safe because no money moves on approval. Only invoicing commits the amount. Once an expense is `invoiced` it cannot move at all.

The submitter is notified that their expense needs clarification.

## The queue columns

| Column             | Shows                                                         | Sortable |
| ------------------ | ------------------------------------------------------------- | -------- |
| **Person**         | Avatar and name of the submitter                              | Yes      |
| **Category**       | The category the expense is filed under                       | Yes      |
| **Billable value** | What the client is charged, formatted in the expense currency | Yes      |
| **Billable**       | `Billable`, `Billable +15%` or `Internal` chip                | No       |
| **Receipt**        | A **View** link, or a dash when no receipt exists             | No       |
| Actions            | The three-dot menu with Approve and Reject                    | No       |

The search box filters the loaded rows. The empty state reads **Nothing waiting for review – submitted expenses will appear here.**

The History tab replaces the Receipt column with a **Status** column showing the expense's status chip.

## What happens next

After you approve:

1. The expense moves to `approved` and leaves the awaiting queue.
2. The submitter gets an in-app notification and an email.
3. A **billable** approved expense becomes available in the invoice builder for its client.
4. A **non-billable** approved expense is recorded – it never reaches an invoice.
5. The row appears in the History sub-tab.

After you reject:

1. The expense moves to `rejected` with your reason attached.
2. The submitter gets a notification carrying the reason.
3. The submitter edits it, which returns it to `draft`, then resubmits.

## Escalation

A submitted expense does not sit unnoticed.

| Age      | What happens                    |
| -------- | ------------------------------- |
| 24 hours | The routed approver is reminded |
| 72 hours | Workspace managers are notified |

These are high-priority notifications sent in-app and by email.

## Permissions

| Action                        | Capability                              | Roles that hold it                            |
| ----------------------------- | --------------------------------------- | --------------------------------------------- |
| See the approval queue        | `expense.approve`                       | Owner, Admin, Project Manager, Finance        |
| Approve an expense            | `expense.approve` + `approvals` feature | Owner, Admin, Project Manager, Finance on Pro |
| Reject an expense             | `expense.approve` + `approvals` feature | Owner, Admin, Project Manager, Finance on Pro |
| Withdraw an approval          | `expense.approve`                       | Owner, Admin, Project Manager, Finance        |
| See the raw amount and markup | `time.viewCost`                         | Owner, Admin                                  |
| Open a receipt                | `expense.submit`                        | Every working role, scoped to the workspace   |

Member and Contractor cannot approve. Client portal contacts see none of this.

<Warning>
  Do not confuse a capability with a scope. `expense.approve` says you **may** review expenses. Which submitters route to you is a separate question, handled by supervision scope. See [supervision scope](/concepts/supervision-scope).
</Warning>

## Common questions

<AccordionGroup>
  <Accordion title="Can I approve my own expense?">
    You will not see it in your own queue as something to act on in the normal flow, because you are excluded as the actor from your own submission notification. Approving your own spend is a control your workspace should decide on – route it to another reviewer where you can.
  </Accordion>

  <Accordion title="Can I approve several expenses at once?">
    No. Each expense is approved from its own row menu. This keeps every decision an explicit, audited act on a specific amount.
  </Accordion>

  <Accordion title="Do I have to give a reason to approve?">
    No. Only rejection requires a reason, because the submitter needs to know what to fix.
  </Accordion>

  <Accordion title="Can I edit an expense instead of rejecting it?">
    No. A reviewer never edits someone else's expense. Reject it with a clear reason and let the submitter correct their own record. That keeps the audit trail honest.
  </Accordion>

  <Accordion title="What if the expense is already on an invoice?">
    You cannot change it. `invoiced` is a terminal status. Handle the correction on the invoice instead.
  </Accordion>

  <Accordion title="Why does Approve show a Pro badge?">
    Your workspace is on Free. Recording expenses is free; resolving them is Pro. Submitted expenses queue safely and all clear at once when you upgrade.
  </Accordion>
</AccordionGroup>

## Troubleshooting

| Problem                                                  | Cause and fix                                                                                            |
| -------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| The Expenses tab is missing from Approvals               | You lack `expense.approve`, or the Expenses app is off.                                                  |
| **Couldn't approve this expense. Try again.**            | The expense moved while you were looking at it – the submitter may have withdrawn it. Refresh the queue. |
| **Couldn't open this receipt. You may lack permission.** | The expense has no receipt, or you are not a member of its workspace.                                    |
| **A reason is required to reject an expense.**           | The reason box is empty or only whitespace.                                                              |
| The queue is empty but people say they submitted         | Their expenses may still be drafts. A draft never reaches the queue.                                     |
| **Withdraw approval** is not in the menu                 | Only an `approved` expense can be un-approved. An `invoiced` one is committed.                           |

## Related guides

<CardGroup cols={2}>
  <Card title="Expense statuses" icon="list-check" href="/expenses/expense-statuses">
    Every status and who moves each transition.
  </Card>

  <Card title="Submit an expense" icon="plus" href="/expenses/submit-an-expense">
    What the submitter did before it reached you.
  </Card>

  <Card title="Billable expenses" icon="file-invoice-dollar" href="/expenses/billable-expenses">
    Getting an approved expense onto an invoice.
  </Card>

  <Card title="Expense permissions" icon="lock" href="/expenses/expense-permissions">
    The full capability and role matrix.
  </Card>

  <Card title="Cost rates" icon="eye-slash" href="/rates/cost-rates">
    The same cost firewall applied to people.
  </Card>

  <Card title="Plans and features" icon="credit-card" href="/concepts/plans-and-features">
    Why approving is a Pro feature.
  </Card>
</CardGroup>
