# Receive webhook events

MONEI notifies your server when something happens to a payment, refund, or subscription — so you can fulfill orders, update your database, or send receipts without polling. There are two ways to receive these notifications.

<!-- -->

## Account webhooks[​](#account-webhooks "Direct link to Account webhooks")

Account webhooks send **every** event you subscribe to, across all your activity. Configure them in [Dashboard → Settings → Webhooks](https://dashboard.monei.com/settings/webhooks):

1. Add a webhook **endpoint URL** — an `https://` URL on your server.
2. Select the **event types** you want to receive.
3. Enable it.

You can add more than one endpoint — for example, one for payments and another for subscriptions.

Each delivery is a JSON **event envelope**:

```
{

  "id": "evt_...",

  "type": "charge.succeeded",

  "object": {"id": "...", "status": "SUCCEEDED"}

}
```

Read `type` to know what happened, and `object` for the affected resource (a payment, refund, or subscription).

## Payment callback (`callbackUrl`)[​](#payment-callback "Direct link to payment-callback")

When you [create a payment](https://docs.monei.com/apis/rest/payments-create/.md), you can set a **`callbackUrl`**. MONEI then sends the **Payment object directly** (not an envelope) to that URL when the payment reaches a final state — even if the customer closes their browser during the redirect. Use this when you only care about a specific payment's result.

See [Verify signature](https://docs.monei.com/guides/verify-signature/.md) for ready-to-use Node, PHP, and Python examples that handle the callback.

## Event types[​](#event-types "Direct link to Event types")

A **charge** is a payment, so `charge.*` events track the payment lifecycle.

| Group                  | Events                                                                                                                                                                                                                                                                    |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Payments** (charges) | `charge.succeeded`, `charge.failed`, `charge.pending`, `charge.pending_processing`, `charge.authorized`, `charge.captured`, `charge.canceled`, `charge.expired`, `charge.refunded`, `charge.partially_refunded`, `charge.paid_out`, `charge.chargeback`, `charge.updated` |
| **Refunds**            | `refund.succeeded`, `refund.failed`, `refund.pending`                                                                                                                                                                                                                     |
| **Subscriptions**      | `subscription.activated`, `subscription.updated`, `subscription.canceled`, `subscription.paused`, `subscription.past_due`, `subscription.trialing`, `subscription.pending`, `subscription.expired`                                                                        |

## Verify every request[​](#verify "Direct link to Verify every request")

Every webhook and callback includes a **`MONEI-Signature`** header — an HMAC-SHA256 signature computed with your API key. Always [verify the signature](https://docs.monei.com/guides/verify-signature/.md) before trusting the payload, then respond with a `200` status to acknowledge receipt.

note

If you're a [MONEI Connect](https://docs.monei.com/partners-connect/about/.md) partner, configure webhooks in the **Partner Dashboard** instead — see [MONEI Connect for developers](https://docs.monei.com/monei-connect/.md).
