Skip to main content

Refunds

New to webhooks? Start with Getting started (envelope, delivery, retries) and Verification (confirming a request came from Grow CRM). Those conventions apply to every event below and are not repeated here.
Refunds expose four keys: refund.created, refund.updated, refund.deleted, refund.sundry. There is no refund.activity — refunds have no comments, attachments or logs in core. A refund always belongs to exactly one payment, and a payment can have at most one refund.

Refunds and payments fire together

A refund can be created or removed from two places — the Refunds section, or the refund button on the Payments list. Both do the same thing, and both now fire the same events. Refunding a payment produces two webhooks, describing two different facts: Removing a refund likewise produces refund.deleted and payment.updated (change: refund_removed, payment status back to paid). Subscribe to whichever fits your integration — you do not need both.

The refund object

Every key except .deleted carries this shape, either flat (.created) or nested under refund (.updated/.sundry):

refund.created

Fires when a refund is created, from either the Refunds section or the Payments list. data is the full refund object above.

refund.updated

Fires on a significant change. data.change tells you which; data.refund is the full object.

refund.sundry

Fires on a minor, cosmetic field edit. data.field names it; data.refund is the full object.

refund.deleted

Fires after the refund is deleted, from either the Refunds section or the Payments list. data is just the id — the record no longer exists to describe. Deleting from the Refunds section is a checkbox selection, so removing several refunds at once delivers one event per refund, not one event containing a list.