# x402 payments and webhooks

> Find every x402 payment in the dashboard or through the API, follow its status, receive signed webhooks, and download monthly statements.

## Payments

The **Payments** tab lists every payment. You can search by transaction hash, filter by endpoint, date, payer or recipient, and export the list as CSV.

Click a payment to see its amount, fee, status history and on-chain transaction.

The API returns the same data from `GET /x402/settlements` and `GET /x402/settlements/{id}`, with the x402 key from the quickstart.

## Statuses

| Status | Meaning |
| --- | --- |
| `submitted` | Sent to the network, waiting for confirmation. |
| `confirmed` | Final on-chain: after 10 blocks on Base, or about 13 seconds on Solana. The fee is charged at this point. |
| `credited` | Cryptonly balance only: added to your balance, minus the fee. |
| `failed` | The payment didn't go through. No fee is charged. |

## Webhooks

Add an `https` URL under **Settings → Webhooks** to get notified about payments.

<LinkButton href="https://merchant.cryptonly.net/x402?tab=settings&section=webhooks" icon="external" target="_blank" rel="noopener noreferrer">Open webhook settings</LinkButton>

| Event | When |
| --- | --- |
| `x402.payment.settled` | The payment is confirmed on-chain. |
| `x402.payment.failed` | The payment didn't go through. |
| `x402.payment.credited` | Cryptonly balance only: the payment, minus the fee, is on your balance. Direct transfers to your settlement address send only this event. |

Webhooks are signed and retried like every Cryptonly webhook. Check the `x-webhook-signature` header as shown in [Verify a webhook](/api-reference/webhooks/#verify-a-webhook).

The body contains the payment, in the same shape as `GET /x402/settlements/{id}`:

```json
{
  "event": "x402.payment.settled",
  "data": {
    "id": "0b6e4d8a-3c1f-4a2e-9d7b-5f8c2e1a6b30",
    "status": "confirmed",
    "accountId": "4f1c9a2e-7b3d-4e8f-a6c5-2d9b8e7f1a03",
    "payoutMode": "wallet",
    "origin": "facilitator",
    "network": "eip155:8453",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "amount": "10000",
    "payer": "0x93f3a1c5e7b9d2f4a6c8e0b2d4f6a8c0e2b42e2e",
    "payTo": "0x7a3B5e9C1d2F4a6b8C0e2D4f6A8b0C2d4E6f8A1b",
    "transaction": "0x27ca1b5b9ccb3e8d006a5230de9bda23ff91edc794d4f56410560830b4c7a1e3",
    "errorReason": null,
    "fee": "2500",
    "feeCurrency": "USDC_BASE",
    "resourceUrl": "https://api.acme.com/v1/weather/:city",
    "resourceId": "9d2c4b6a-1e3f-4a5b-8c7d-0e9f1a2b3c4d",
    "createdAt": "2026-10-22T17:07:12.000Z",
    "confirmedAt": "2026-10-22T17:07:34.000Z",
    "creditedAt": null
  },
  "timestamp": "2026-10-22T17:07:35.000Z"
}
```

`amount` and `fee` are in the token's smallest unit. USDC has 6 decimals, so `10000` is 0.01 USDC.

## Related pages

- [Verify a webhook](https://docs.cryptonly.net/api-reference/webhooks.md#verify-a-webhook): Signature check in Node.js, Python, Go, PHP and Java
- [List settlements](https://docs.cryptonly.net/api-reference/openapi/operations/listx402settlements/): API reference for x402 payments
