# charge.refunded: check how much, not just that it happened

Stripe's own reference says it plainly: this event occurs whenever a charge is refunded, including partial refunds.

## What to do on receipt

1. Read `data.object.amount_refunded` and `data.object.amount` on the Charge. If they are equal, the charge is fully refunded. If `amount_refunded` is smaller, it is partial.
2. For per-refund detail (who, when, exact amount, reason), listen to `refund.created` instead. That event carries the Refund object. This one carries the Charge.
3. Full refund: reverse fulfillment (revoke access, restock, mark the order refunded). Partial refund: adjust the order total, keep fulfillment, note the credit.
4. Return 200.

## The trap

A single `charge.refunded` handler that deprovisions on any receipt. A partial refund is customer service, not cancellation. The other trap: issuing a refund and then waiting for this event to update your books. Update your books when you issue the refund; treat the event as confirmation, not as the trigger.

## Checklist

- Multiple partial refunds accumulate in `amount_refunded`. Sum them from `refund.created` events if you need the itemized history.
- Refunds can take days to reach the customer depending on method, but the event fires when Stripe processes it. Do not tell the customer "money is back" as if it were instant.