Skip to content
FeaturesPricingAffiliateBlogHelpAboutContact
Get StartedSign In
Back to Blog
industry2026-05-239 min read

The customer said "I never got the refund" while I said "I sent it" — the silent gap of restaurant webhooks that miss Stripe's charge.refund.updated event

Niamh (34), Mediterranean restaurant owner in Dublin Stoneybatter, approves a $28 refund. Order shows "refunded." Five days later the customer calls — "I still haven't received it." Forensic: Stripe fires `charge.refund.updated` with `status: failed`, `failure_reason: expired_or_canceled_card` (bank rotated the card after a phishing scare). The thMenu webhook had no case for `charge.refund.updated` → default branch → silent ignore. Money returned to merchant balance; order shows refunded; customer never received it. **Restitution-in-limbo**. PR #626 batch GGG F2: 3-status branch (failed → DLT + loud-log; canceled → info-log; succeeded → silent). Sibling Stripe Connect webhook had the same gap — fixed together. Pattern: quarterly Stripe event coverage audit.

th

thMenu Team

thmenu.com

Found this helpful? Share it.