# Retrieve expenses and receipts

:::info [Expenses]
Expenses for Revolut Business allow you to capture receipts, categorise, and reconcile all your business expenses in one place, so you can save time on admin work.

To learn more about the Expenses feature and how to use it in the Revolut Business app, see the [Customer help documentation](https://help.revolut.com/business/help/managing-my-business/expenses/).
:::

The Business API lets you retrieve your expenses and receipts related to those expenses.
You can:

- [Retrieve a specific expense](#retrieve-an-expense)
- [Retrieve a receipt related to a specific expense](#retrieve-a-receipt-related-to-an-expense)
- [Filter and retrieve all your expenses](#filter-and-retrieve-all-expenses)

:::note
This feature is not available in Sandbox.
:::

## Retrieve an expense

To get information about a specific expense, make a request and provide the expense ID.

To see example requests and responses:

[See the API reference: Retrieve an expense](/docs/api/business#get-expense)

## Retrieve a receipt related to an expense

To download a receipt related to a specific expense, make a request and provide both the expense ID and the receipt ID.

:::tip
To find the receipt ID, refer to the expense's details.
The IDs of receipts related to that expense are returned under `receipt_ids`.
:::

To see example requests and responses:

[See the API reference: Retrieve a receipt related to an expense](/docs/api/business#get-expense-receipt)

## Filter and retrieve all expenses

You can retrieve a full list of the expenses for your business.

The results are sorted by the `expense_date` value in reverse chronological order (from newest at the top to oldest at the bottom), and they are [paginated](#pagination).

:::note [Maximum page size]
The API returns a maximum of 500 expenses per request.
:::

To see example requests and responses:

[See the API reference: Retrieve a list of expenses](/docs/api/business#get-expenses)

You can also filter the list of expenses by adding one or more of the query parameters listed below to the URL:

```shell
curl 'https://b2b.revolut.com/api/1.0/expenses?from=2024-08-01&to=2024-09-10&count=10' \
  -H "Authorization: Bearer <your access token>"
```

| Parameter          | Description                                                                                                                                                                                                                                                              | Required | Schema        |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | ------------- |
| `from`             | The date and time to retrieve the expenses from. Corresponds to [`expense_date`](/docs/api/business#get-expenses#response).                                                                                                                                              | No       | ISO date/time |
| `to`               | The date and time you retrieve the expenses to. Corresponds to [`expense_date`](/docs/api/business#get-expenses#response). The default value is the current date and time at which you are calling the endpoint.                                                         | No       | ISO date/time |
| `count`            | The number of the historical expenses to retrieve. The maximum number is `500`. The default number is `100`. Used for [pagination](#pagination).                                                                                                                         | No       | Number        |
| `state`            | The [state](#expense-state) of the expenses to retrieve. If provided, only the expenses in this state are returned. Possible values are: `missing_info`, `awaiting_review`, `reverted`, `refund_requested`, `refunded`, `approved`, or `rejected`.                       | No       | Text          |
| `transaction_type` | The type of the [transaction](/docs/api/business#get-transaction) related to the expense. If provided, only expenses with transactions of this type are returned. Possible values are: `atm`, `card_payment`, `fee`, `transfer`, `external`, or `mileage_reimbursement`. | No       | Text          |

## Pagination

The `/expenses` endpoint supports time-based pagination. It returns expenses in reverse chronological order (`from` ≤ `expense_date` < `to`) limited to the most recent `count` entities. To get the next page of results, make a new request and use the `expense_date` value from the last item of the previous page as `to`.

## Expense state

When an expense is created, it typically goes to the `missing_info` state, until all the [required information](https://help.revolut.com/business/help/managing-my-business/expenses/can-i-change-the-type-of-information-required-for-an-expense/) is provided and the expense is [submitted](https://help.revolut.com/business/help/managing-my-business/expenses/submitting-expenses/).

Depending on what happens next and whether the expense is subject to an [approval process](#approval-process), it can go into one of the following states:

![Expense states](/img/manage-accounts/expense-state.svg)

To understand what each expense state means and how it maps to the expense status displayed in the Revolut Business app, refer to this table:

| State in API            | State description                                                                                                                                                                                                                                                                                                                                                                                                 | Status in app             |
| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- |
| `missing_info`          | The expense is missing [required information](https://help.revolut.com/business/help/managing-my-business/expenses/do-i-need-to-provide-information-for-all-my-expenses/). The initial state of the expense when it's first created. Once the missing information is provided, the expense is ready to be [submitted](https://help.revolut.com/business/help/managing-my-business/expenses/submitting-expenses/). | **Info required**         |
| `awaiting_review`       | The expense is awaiting [approval](#approval-process) before it can be completed. The approver can approve, reject, or request repayment for the expense. It is also possible for the submitter to undo the submission at this stage.                                                                                                                                                                             | **Pending review**        |
| `pending_reimbursement` | The reimbursement request has been approved, and the expense is awaiting reimbursement. Once the reimbursement is [confirmed](#approval-process), the status will move to **Completed** (`approved`).*                                                                                                                                                                                                            | **Pending reimbursement** |
| `rejected`              | The expense has been rejected by the approver. The expense submitter should correct the expense and resubmit it.                                                                                                                                                                                                                                                                                                  | **Rejected**              |
| `refund_requested`      | The approver rejected the expense and requested that it be repaid to the business account. This can happen, for example, if an employee accidentally makes a personal purchase with their business card. Once the money has been returned, the admin can [mark this expense as repaid](#approval-process).*                                                                                                       | **Pending repayment**     |
| `refunded`              | The admin [marked the expense as repaid](#approval-process). The expense is now completed.*                                                                                                                                                                                                                                                                                                                       | **Repaid**                |
| `approved`              | The expense has been approved and is now completed.*                                                                                                                                                                                                                                                                                                                                                              | **Completed**             |
| `reverted`              | The expense has been reverted. This status indicates that the transaction related to the expense has been reverted. In such a case, the expense status is automatically set to `reverted`, and the expense is completed. This can happen, for example, when the transaction has been reverted by the merchant.                                                                                                    | **Transaction reverted**  |

_*If an admin has previously approved the expense, marked it as repaid/completed, or requested repayment, they can revert their decision.
In such a case, the expense goes back to the initial `missing_info` state._

## Approval process

With Revolut Business [approval processes](https://business.revolut.com/settings/approvals), you can specify whether you want your expenses to require approvals before they can be completed, in what circumstances, and who can approve them.

Expenses are reviewed in the [Revolut Business app](https://business.revolut.com/expenses).
They can be approved by designated expense reviewers or expense admins.

- **Reviewers**, also referred to as **Approvers**, can approve, reject, or request repayment for expenses pending review for which they are designated as reviewers.
  Any [team member](/docs/guides/manage-accounts/teams/manage-team-members#about-team-members) can be designated as a reviewer, without requiring any expenses permissions.

- **Admins** (with the permission `Manage Expenses`) have full powers and can override approvals by force-approving, force-rejecting, or force-requesting repayment for any expense.

  They are also the only ones who can mark an expense as repaid or reimbursed (completed).

## What's next

- Use the `transaction_id` from expense details and [retrieve the transaction details](/docs/api/business#get-transaction).
- Learn more about [Expenses](https://help.revolut.com/business/help/managing-my-business/expenses/) for Revolut Business.