Setting up a webhook endpoint
- Go to Dashboard → Webhooks → Add Endpoint
- Enter your HTTPS URL
- Select the event types you want to receive
- Copy the signing secret
Verifying webhook signatures
Every Monigo webhook includes aX-Monigo-Signature header. Verify it before processing the request.
Event types
Payment
| Event | Description |
|---|---|
payment.success | A payment transaction succeeded |
payment.failed | A payment transaction failed |
payout.success | A payout transfer completed successfully |
payout.failed | A payout transfer failed |
payout.reversed | A payout transfer was reversed |
Invoice
| Event | Description |
|---|---|
invoice.finalized | An invoice was finalized (moved from draft to finalized) |
invoice.paid | An invoice was marked as paid after a successful payment |
invoice.voided | An invoice was voided |
Customer
| Event | Description |
|---|---|
customer.wallet.topped_up | A customer’s wallet was credited |
customer.payment_method.expired | A customer’s payment method has expired |
customer.payment_method.expiring_soon | A customer’s payment method is expiring within 30 days |
Usage — org level
Fired once per organization per period (daily at 08:00 UTC, weekly on Mondays, monthly on the 1st).| Event | Description |
|---|---|
usage.daily | Yesterday’s event ingestion stats for the org |
usage.weekly | Last 7 days’ event ingestion stats for the org |
usage.monthly | Last calendar month’s event ingestion stats for the org |
Usage — per customer
Fired once per customer that had non-zero activity in the period. Sent at the same time as the org-level events.| Event | Description |
|---|---|
customer.usage.daily | Yesterday’s event count for a single customer |
customer.usage.weekly | Last 7 days’ event count for a single customer |
customer.usage.monthly | Last calendar month’s event count for a single customer |
Subscription
| Event | Description |
|---|---|
subscription.suspended | A subscription was suspended after dunning retries were exhausted |
subscription.usage_cap_reached | A customer’s usage crossed the included-units threshold on an overage or cap-priced plan |
Event payload reference
All webhooks are delivered asPOST requests with Content-Type: application/json. The body is a JSON object whose shape depends on the event type.
payment.success / payment.failed
The payload mirrors the raw event received from your payment provider (Paystack, Flutterwave, or Monnify).
payout.success / payout.failed / payout.reversed
The payload mirrors the raw payout event from your payment provider.
invoice.finalized
invoice.paid
invoice.voided
customer.wallet.topped_up
customer.payment_method.expired / customer.payment_method.expiring_soon
usage.daily
usage.weekly
usage.monthly
customer.usage.daily / customer.usage.weekly / customer.usage.monthly
subscription.suspended
subscription.usage_cap_reached
Fired the first time a customer’s usage crosses the included_units threshold on an overage or cap-priced plan within the current billing period. Fires at most once per subscription per billing period.
Retries
If your endpoint returns a non-2xx status, Monigo retries up to 5 times with exponential backoff:| Attempt | Delay |
|---|---|
| 1st retry | 30 seconds |
| 2nd retry | 5 minutes |
| 3rd retry | 30 minutes |
| 4th retry | 2 hours |
| 5th retry | 8 hours |
failed and no further retries occur. You can manually retry from the dashboard.

