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

# Exceptions

> What an exception is, the lifecycle it moves through, the common types, and how open exceptions hold an invoice back from approval.

# Exceptions

An **exception** is an audit finding — Upwell's way of flagging that something about an invoice doesn't line up and a person should look at it. Exceptions are what stand between an invoice and approval: a clean invoice sails through, one with an open exception waits.

## What raises an exception

Every invoice is audited as it's ingested and matched. On the payables side that means checking a [carrier invoice](/concepts/data-model) against its [bill](/concepts/data-model); on the receivables side it means checking a customer invoice against what's required to send it. Anything that doesn't reconcile — a mismatch, a missing document, a failed match — becomes an exception.

<Note>
  Exceptions exist on **both sides**. Carrier-invoice (AP) exceptions like a total-amount mismatch or a missing POD, and customer-invoice (AR) exceptions like a missing invoice copy or BOL, are both surfaced the same way. The audit rules that generate them are configurable per account, so the exact set an account sees varies.
</Note>

## The lifecycle

An exception moves through a small set of statuses:

| Status          | Meaning                                                             |
| --------------- | ------------------------------------------------------------------- |
| `OPEN`          | Raised but not yet addressed — needs attention.                     |
| `IN_PROGRESS`   | Someone is actively working it.                                     |
| `RESOLVED`      | Worked and resolved.                                                |
| `CLOSED`        | Closed; no further action needed.                                   |
| `RULE_DISABLED` | Suppressed because the audit rule that generated it was turned off. |

`OPEN` and `IN_PROGRESS` are the two "still needs attention" states — they're what hold an invoice back. The rest mean the finding is no longer standing in the way.

## Common exceptions

A representative sample of what Upwell flags (not exhaustive — the active set depends on your account's audit rules):

| Category              | Examples                                                                                                                                                  |
| --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Matching**          | No matching shipment · No matching bill · Carrier mismatch · Missing customer                                                                             |
| **Amounts**           | Carrier-invoice total-amount mismatch · Rate mismatch · Remit-to mismatch                                                                                 |
| **Missing documents** | Missing carrier invoice · Missing POD · Missing rate confirmation · Missing lumper receipt · Missing delivery signature · (AR) missing invoice copy / BOL |
| **Document quality**  | Document not legible · Document load-number mismatch · BOL/PO number mismatch · Missing invoice issue date                                                |
| **Holds & status**    | TMS status mismatch · **Carrier Pay Frozen**                                                                                                              |

## How exceptions affect approval

Open and in-progress exceptions are the gate on approval — but the exact rules differ by side:

**Carrier invoices (AP):**

* **Auto-approval** skips any carrier invoice with an open or in-progress exception entirely — no override.
* **Manual approval** can override open exceptions to approve anyway — with one exception: **Carrier Pay Frozen** can never be overridden and must be cleared first.

**Customer invoices (AR):**

* Approval can likewise proceed over open exceptions with an explicit override, but there's no Carrier Pay Frozen carve-out (that's a payables hold). There's no carrier-invoice-style auto-approval on the AR side.

<Note>
  For the approval paths in full — manual, auto-approval, and the external request-for-approval — see [How carrier invoices get approved](/concepts/approvals); for the lifecycle and API signals, see [Knowing when a carrier invoice is processed](/api-guides/carrier-invoice-status). Over the API, a carrier invoice exposes its open findings as the `exceptions` field — a **comma-joined string** (e.g. `"INVOICE AMOUNT MISMATCH"`), empty when clean.
</Note>

<Warning>
  Don't judge `exceptions` until **ingestion has run**. A brand-new invoice always shows matching findings ("no matching shipment / bill") that clear on their own once matching completes — see the [lifecycle guide](/api-guides/carrier-invoice-status).
</Warning>

<Note>
  For how exceptions are surfaced and worked in the app, see [Carrier invoice audit](/accounts-payable/carrier-invoice-audit). For the objects referenced here, see the [data model](/concepts/data-model).
</Note>
