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

# Event reference

> Complete webhook event payload reference.

## Payload envelope

All events share this structure:

```json theme={null}
{
  "id": "evt_demo_abc123",
  "type": "invoice.paid",
  "createdAt": "2024-06-24T12:00:00.000Z",
  "organizationId": "org_demo_uuid",
  "storeId": "store_demo_uuid",
  "storePublicId": "store_demo",
  "data": {
    "invoice_id": "inv_demo_123",
    "integration_id": "int_demo_uuid",
    "external_order_id": "order_demo_1048",
    "amount": "100.00",
    "expected_amount": "100.00",
    "received_amount": "100.00",
    "difference_amount": "0.00",
    "paid_amount": "100.00",
    "currency": "USD",
    "output_asset": "usdc",
    "tx_hash": "demo_tx_hash",
    "paid_at": "2024-06-24T12:05:00.000Z",
    "payment_url": "https://pay.meum.io/inv_demo_123",
    "status": "paid"
  },
  "_platform": {
    "webhookEndpointId": "endpoint_demo_uuid"
  }
}
```

## Standard merchant events

### invoice.created

Sent immediately after invoice creation. `data.status` is typically `awaiting_payment`.

### invoice.paid

Sent when full payment is validated. `data.paid_at` and `data.tx_hash` are populated.

### invoice.underpaid

Sent when partial payment detected. Check `difference_amount`.

### invoice.failed

Sent on payment failure.

### invoice.expired

Sent when invoice expires.

### invoice.cancelled

Sent when invoice is cancelled.

### webhook.test

```json theme={null}
{
  "id": "evt_demo_test",
  "type": "webhook.test",
  "data": { "message": "Test webhook from Stablecoin Checkout" }
}
```

## Platform-emitted events (not in default subscriptions)

### invoice.refunded

<Warning>
  Not a standard merchant integration event. Do not assume this event is subscribed or delivered by default.
</Warning>

**When emitted:** Platform status polling detects a refund on an open invoice. The invoice status becomes `refunded` and `invoice.refunded` is dispatched.

**Not available:** Merchant-initiated refund API. Default WooCommerce managed webhook subscriptions do not include this event.

**WooCommerce behavior if received:** Adds an order note only; does not change order status.

## Expected HTTP response

Return **HTTP 200** with JSON body acknowledging receipt.

## Related pages

* [Verify signatures](/webhooks/verify-signatures)
* [Retry behavior](/webhooks/retry-behavior)
* [Webhooks overview](/webhooks/overview)
