# Analytics and reporting

The console gives you two places (both under **Records**) to review what your
agents did:

- **Activity:** Lists every action and transaction. Everyone on your team can
  open it.
- **Reports:** Summarizes agent payments and the ones that need attention, and
  exports them as CSV. Only admins can open Reports.

## Activity

To open **Activity**, go to **Records** in the console sidebar. Activity has two
tabs:

| Tab          | Shows                                           | Filters                                            |
| ------------ | ----------------------------------------------- | -------------------------------------------------- |
| All activity | What was requested or changed, by whom, and why | Outcome, Agent                                     |
| Transactions | Money that moved into and out of your accounts  | Status, Agent, To/From, Account, Method, Direction |

Both tabs can also be filtered by date: Today, Last 7 days, Last 30 days, Last
90 days, This month, Last month, or All time.

By default, we hide small deposits from Transactions. If you turn on **Show
hidden** under **Small deposits**, Transactions will show them. Note that
Activity has no export, so we recommend Reports when you need a file.

## Reports

Admins can open **Reports** under **Records**. Reports has two tabs, **Agent
money activity** and **Operational exceptions**, and each one covers a period:
Last 7 days, Last 30 days (the default), Last 90 days, or a custom range of up
to 366 days.

Days in Reports are in UTC (Coordinated Universal Time). This means, for
example, that a payment made late in the evening in a US time zone may fall on
the next day in a report.

### Agent money activity

The **Agent money activity** report lists each send, transfer, x402 payment, and
MPP payment an agent requested, along with its outcome. Above the table, the
report counts requests with missing evidence and requests by execution status,
and it totals the requested amount per asset.

You can narrow the report with the following filters:

| Filter      | Values                                                                               |
| ----------- | ------------------------------------------------------------------------------------ |
| Action      | Send, Transfer, x402 payment, MPP payment                                            |
| Disposition | Pending, Approved, Blocked, Denied, Expired, Cancelled, Executing, Completed, Failed |
| Execution   | Completed, In flight, Exceptions, No execution                                       |
| Provider    | Each payment provider, or None                                                       |
| Evidence    | Missing evidence only                                                                |
| Other       | Agent, Account, Policy                                                               |

The **Evidence** column opens the request's evidence packet.

### Operational exceptions

The **Operational exceptions** report lists agent payments that need a person to
look at them. Below are the categories an exception may fall into:

| Category                    | Meaning                                                              |
| --------------------------- | -------------------------------------------------------------------- |
| Manual review               | The payment is being held for manual review.                         |
| Stale provider create       | The payment provider has not confirmed that it accepted the payment. |
| Stale wallet lifecycle      | A wallet payment has not been confirmed on-chain.                    |
| Failed or reversed          | The payment has failed or has been reversed.                         |
| Blocked, denied, or expired | The request has ended without a payment.                             |

Each exception has a handling status: Unreviewed, Open, In review, Resolved, or
Dismissed. You can use **Manage exception** on a row to assign an admin, and to
start a review, resolve, dismiss, or reopen the exception. An exception's
outcome records how it was handled, and it is one of **Action completed**,
**Reviewed, no action**, **Duplicate**, **Not actionable**, or **Superseded**.

Above the table, the report counts the exceptions that need handling and totals
the affected amount.

## Download a report

When you click **Download report**, Catena will export the current tab, with its
period and filters, as CSV. A download holds up to 200 rows, so if a report has
more, you'll need to narrow the period or add filters. We record each download,
along with who ran it and the filters used.

| Report                 | File name                                |
| ---------------------- | ---------------------------------------- |
| Agent money activity   | `agent_money_activity_<from>_<to>.csv`   |
| Operational exceptions | `operational_exceptions_<from>_<to>.csv` |

`<to>` is the day after the last day in the report. For example, a report that
ends on October 31 will have November 1 as its `<to>` date.

### Agent money activity columns

Each row of the Agent money activity file is one request:

| Column                                                                                                                  | Meaning                                                                                                                                      |
| ----------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| `intent_id`                                                                                                             | The agent's request.                                                                                                                         |
| `created_at`, `resolved_at`                                                                                             | When the agent made the request, and when it reached a final state. The report period filters on `created_at`.                               |
| `agent_id`, `agent_name`                                                                                                | The agent that made the request.                                                                                                             |
| `account_id`                                                                                                            | The source account.                                                                                                                          |
| `policy_id`                                                                                                             | The policy that evaluated the request.                                                                                                       |
| `action`                                                                                                                | `send`, `transfer`, `x402`, or `mpp`.                                                                                                        |
| `disposition`                                                                                                           | The request's outcome, as in the Disposition filter.                                                                                         |
| `execution_status`                                                                                                      | `no_execution`, `initiated`, `provider_pending`, `processing`, `completed`, `failed`, `reversed`, or `manual_review`.                        |
| `custody_provider`                                                                                                      | The provider that moved the money.                                                                                                           |
| `linkage_status`                                                                                                        | `linked` when a transaction record exists, `unlinked` when the payment ran but no transaction was found, `not_applicable` when it never ran. |
| `amount`, `asset_id`, `asset_decimals`                                                                                  | The amount as a decimal, its asset, and the asset's number of decimals.                                                                      |
| `counterparty_name`                                                                                                     | Who was paid.                                                                                                                                |
| `required_approvals`, `approvals_count`                                                                                 | Approvals the request needed, and approvals it received.                                                                                     |
| `manifest_status`, `manifest_id`, `payload_hash`, `evidence_lookup_key`, `evidence_lookup_id`, `missing_evidence_codes` | The evidence packet. `manifest_status` is `present` or `not_generated`. `missing_evidence_codes` is separated by `\|`.                       |

The Operational exceptions file has one row per exception. It carries the same
request, agent, account, amount, and evidence columns, plus `category`,
`opened_at`, `open`, `source_type`, `source_status`, the handling columns
(`handling_status`, `handling_disposition`, `owner_member_id`), and who reviewed
and resolved the exception and when.

## Read activity from an agent

An agent can't open Reports. However, it can read the transactions of the
accounts its policy lets it read, as well as its own intents:

```sh
catena accounts transactions acct_... --start 2026-10-01T00:00:00Z --end 2026-11-01T00:00:00Z --limit 200
catena intents list --status completed --start 2026-10-01T00:00:00Z
```

Both commands return up to 200 items per call, and you can use `--offset` to
fetch the next page. `--end` is inclusive, so the first command also returns a
transaction made at exactly `2026-11-01T00:00:00.000Z`. Leave that one out of an
October report, since it belongs to November. See
[List transactions](https://docs.catena.com/api/list-transactions.md) and
[List intents](https://docs.catena.com/api/list-intents.md) for details.

## Related

- [Intents and retries](https://docs.catena.com/intents.md): Learn how an intent moves through its statuses and resolutions, which fields explain its result, and how to retry safely with idempotency keys.
- [Handle approvals](https://docs.catena.com/approvals.md): Learn what goes to the approvals queue, who can approve, when requests expire, and what happens between an approval and a completed payment.
- [Team and roles](https://docs.catena.com/team.md): The three roles in a Catena organization, what each one can do, and how operators and admins divide the work.
- [List transactions](https://docs.catena.com/api/list-transactions.md): Get a policy-gated account transaction history.
