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

# Payment statuses

> Every status an order can have, which ones send a webhook, and what your server should do.

An order's `status` tells you where the payment stands. Treat **only `Settled` and `Overpaid` as paid**: those are the statuses where the full amount has arrived and is confirmed.

| Status | Meaning | Webhook | What to do |
| - | - | - | - |
| `AwaitingPayment` | Quote locked, nothing (or not enough) received yet | — | Show the address and amount; wait |
| `Confirming` | A deposit arrived and is waiting for confirmations | — | Show "payment received, confirming" |
| `Settled` | Paid in full, within tolerance | `order.settled` | **Fulfil the order** |
| `Overpaid` | Paid more than asked; the excess is being refunded | `order.overpaid` | **Fulfil the order** |
| `Expired` | The quote ran out with nothing received | `order.expired` | Let the payer start again from the link |
| `ExpiredUnderpaid` | The quote ran out with only part paid; it's refunded or kept as dust | `order.expired_underpaid` | Don't fulfil; tell the payer |
| `ManualReview` | Needs a person: a large difference, a wrong coin, or a chain reorganisation | `order.manual_review` | Hold the order; a later webhook gives the outcome |
| `Refunded` | The review ended by refunding everything | `order.refunded` | Cancel the order |

A `ManualReview` order can later become `Settled`, `Overpaid` or `Refunded`, so a review is never your final answer.

## Event types

Webhook `type` is `order.` plus the status in snake case. Each event carries `status` and `previousStatus`, so you can see the transition:

```json theme={null}
{ "type": "order.settled", "data": { "status": "Settled", "previousStatus": "Confirming" } }
```

Webhooks are sent for the statuses in the table above that list one. To see the current state at any time, read the order: [`GET /payments/orders/{id}`](https://docs.paywire.xyz/api-reference/orders/get).

## Amounts

Amounts are given in the coin's **smallest unit** as strings, with the coin's `decimals`, so nothing is lost to floating point:

```json theme={null}
{ "network": "ethereum_sepolia", "token": "native", "decimals": 18, "baseUnits": "1612903225806451" }
```

That is `1612903225806451 / 10^18` = 0.001612903225806451 ETH. The `fiat` object gives the price the order was quoted for.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.