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

# Expense management

> Track and approve employee expenses end-to-end from the purchase through receipt matching, approval, and accounting field mapping.

## Overview

Expense management lets you offer expense tracking and approval to your customers. Transactions are matched to an uploaded receipt, and then move through each customer's approval workflow—categorized and readied for export to their accounting system.

The [setup](/finops/guides/expense-management/setup) has two parts. First, your system pushes transactions into Tesouro (typically from a card feed). Then your customer's admin configures the rules—what employees must provide before submitting, who needs to approve, and how expenses map to their chart of accounts. Once setup is complete, employees can upload receipts and submit expenses for approval.

**Note:** Tesouro currently accepts transactions from an external feed. Native card support is on the roadmap.

## Key concepts

| Concept             | What it is                                                                                                                                                                                                                       |
| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Transaction**     | An expense event uploaded from a card feed or created directly via API — the central object everything else attaches to.                                                                                                         |
| **Expense status**  | The approval lifecycle state of a transaction: `new`, `approve_in_progress`, `approved`, `rejected`, or `canceled`. Separate from `payment_processing_status`, which tracks the card transaction itself.                         |
| **Receipt**         | A PDF, PNG, or JPEG file representing proof of purchase. Receipts are matched to transactions and can be uploaded directly, scanned from a mobile device, or forwarded by email.                                                 |
| **Approval policy** | A rule that specifies which transactions require approval and who must approve them. Policies are evaluated automatically when a transaction is submitted.                                                                       |
| **Approval**        | The act of an authorized user accepting or rejecting a submitted transaction. Without an applicable policy, an admin can approve a transaction directly — useful when an employee's reporting manager is not set or unavailable. |

## Expense status lifecycle

Each transaction carries an `expense_status` field that moves through the following states:

<img src="https://mintcdn.com/tesouro-dc896113/Pt3KgzUa0mN1bibP/images/expense-lifecycle-2x.png?fit=max&auto=format&n=Pt3KgzUa0mN1bibP&q=85&s=7be42bfa9065eda9a92efc76254b07e5" alt="Expense status lifecycle" width="2200" height="1120" data-path="images/expense-lifecycle-2x.png" />

| Transition                         | Trigger                                      | API endpoint                      |
| ---------------------------------- | -------------------------------------------- | --------------------------------- |
| → `new`                            | Transaction created                          | `POST /transactions`              |
| `new` → `approve_in_progress`      | Employee submits for approval                | `POST /transactions/{id}/submit`  |
| `approve_in_progress` → `approved` | Approver approves                            | `POST /transactions/{id}/approve` |
| `approve_in_progress` → `rejected` | Approver rejects                             | `POST /transactions/{id}/reject`  |
| `rejected` → `new`                 | Employee reopens after rejection             | `POST /transactions/{id}/reopen`  |
| `new` → `canceled`                 | Transaction canceled                         | `POST /transactions/{id}/cancel`  |
| `approve_in_progress` → `canceled` | Transaction canceled while awaiting approval | `POST /transactions/{id}/cancel`  |

<Note>
  `expense_status` tracks the approval workflow. `payment_processing_status` tracks the card payment lifecycle (`created`, `processing`, `succeeded`, `declined`, `refunded`, `failed`). Both fields appear on every transaction response.
</Note>

## What's next

<CardGroup cols={3}>
  <Card title="Setup" icon="gear" href="/finops/guides/expense-management/setup">
    Configure the transaction feed, validation requirements, approval policies, and accounting fields. Run this once per organization.
  </Card>

  <Card title="Expense lifecycle" icon="arrows-spin" href="/finops/guides/expense-management/lifecycle">
    Follow the runtime flow for each expense: auto-categorization, employee submission, approval, and accounting field mapping.
  </Card>

  <Card title="Receipts & OCR" icon="receipt" href="/finops/guides/expense-management/receipts">
    Upload paths, AI auto-matching, the receipt bank, and how the `source_of_data` field tracks receipt provenance.
  </Card>
</CardGroup>
