invoiceRefundedEvent
Webhook

Invoice refunded

​

Fires when money paid on an invoice is refunded, as a credit note: one made with Create a credit note or in the dashboard, or a refund made in Stripe's dashboard on a payment Stripe collected for an invoice. Sent once per credit note; a partial refund sends it for its own amount. data.creditNote is the credit note, as Get a credit note returns it.

Headers

  • t=<timestamp>,s=<signature>. t is when the delivery was signed, in Unix milliseconds; each attempt is signed afresh, so a retry has a new t. s is the Base64 (standard alphabet, padded) HMAC-SHA256 of the string <t>.<raw request body>, keyed with your signing secret: the whole whsec_… string as UTF-8. To verify, recompute it over the raw body exactly as received and compare in constant time, then reject a t too far from now (5 minutes is a good limit) so an old delivery can't be replayed. s can end in =, so split each part on its first = only.

Body

required
application/json

Every delivery's body.

Responses

  • Return any 2xx to acknowledge. Any other status, a redirect (redirects aren't followed), or no answer within 5 seconds is a failed attempt, recorded in the webhook's lastStatus. A failed delivery is retried 1 minute, 5 minutes, 30 minutes, 2 hours and then 12 hours after each failed attempt in turn (retries are sent by a sweep that runs every minute, so each can be up to a minute later), and dropped after the sixth failed attempt. A retry carries the same id and timestamp and goes to the webhook's current URL; a delivery whose webhook has since been switched off is dropped. Because of retries, an event can arrive more than once or after a later one: use id to ignore repeats. The response body is ignored.

Request Example for postbilling-invoice-refunded
{
  "id": "whd_Rk3Tn8Wc1Yb6Hm2Q",
  "event": "billing-invoice-refunded",
  "timestamp": "2026-11-10T15:02:44.131Z",
  "isTest": false,
  "data": {
    "creditNote": {
      "id": "cn_8Tq2Wv5Yn1Hk7Rb4",
      "displayNumber": "INV-0042-CN1",
      "invoiceId": "inv_3Rk8Wq1Zp6Ty0Xm2",
      "customerId": "cus_Q2x9vB7mK4pT1sLw",
      "amount": 1499,
      "currency": "GBP",
      "reason": "Money-back guarantee",
      "refundMethod": "stripe",
      "stripeRefundId": "re_3QmN8b2eZvKYlo2C1a9Xw0Pt",
      "createdAt": "2026-11-10T15:02:44.118Z"
    }
  }
}
No Body