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

# Track payments

> Find widget payments in the dashboard, read their statuses and, if your server needs them, receive webhooks.

Every payment made through your widget is listed in your dashboard. You don't need a server to use the widget.

## In the dashboard

Open **Ramps** in the sidebar. The **Transactions** page opens first.

1. Set **Source** to **Widget payments**. The environment switch in the sidebar chooses Sandbox or Live.
2. Filter by status, or paste a reference into **Transaction reference** to find one payment.
3. Open a row for the amounts, the provider, timestamps and, for failed payments, the reason.
4. Use **Export** to download the loaded rows as CSV.

If the page says widget transaction reporting is not connected, contact support with your widget ID.

## Statuses

| Status | Meaning | What the customer does |
| - | - | - |
| **Pending** | Created; waiting for the customer to pay (buy) or send stablecoins (sell). | Pays or sends. |
| **Processing** | Funds seen; the payout is being settled. | Waits. |
| **Succeeded** | Delivered. Final. | Nothing. |
| **Failed** | Didn't complete. The reason is on the transaction. Final. | Contacts support with the reference if they paid. |
| **Expired** | The customer didn't pay or send in time. Final. | Starts again. |

## Your reference and ours

Each payment has an Onstacks reference, shown in the dashboard and in webhooks. The `ref` you pass when opening the widget comes back to your page in `onCompleted` and `onFailed`; it isn't shown in the dashboard today. If you need to match payments to orders on your side, record the pair when the callback runs.

## Browser callbacks are not confirmation

`onCompleted` and `onFailed` report what the widget showed the customer, in the customer's browser. Anyone can trigger them from the page's developer tools. Use them to update your page, for example to show a thank-you message. Before you release goods, credit an account or pay anything out, confirm the payment in the dashboard or through a webhook.

## Optional: webhooks for your server

If your server needs to know when a payment succeeds, register an endpoint under **Developer** in the dashboard. You receive a `ramp.payment.<status>` event each time a widget payment changes status, with the payment in `data`:

```json theme={"system"}
{
  "id": "evt_...",
  "type": "ramp.payment.succeeded",
  "created_at": "2026-10-14T09:12:00Z",
  "data": {
    "reference": "...",
    "status": "succeeded",
    "direction": "off_ramp",
    "channel": "widget",
    "environment": "live",
    "source": { "amount": "100000000", "decimals": 6, "asset": "USDC" },
    "created_at": "2026-10-14T09:05:41Z",
    "updated_at": "2026-10-14T09:12:00Z"
  }
}
```

Act on `ramp.payment.succeeded` with `channel: "widget"`. Verify the signature on every delivery, respond with `2xx`, and ignore event types you don't recognise: [Webhooks](/basics/webhooks). Sandbox and Live webhooks are registered separately.


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