I will be happy to provide webhooks showing examples of this problem.
I just became aware of the ‘CANCELLED’ status on payments. My wife owns a small yoga studio: I handle Square Data processing – she looks at the square dashboard.
The studio sells ‘E-Cards’ for class attendance. My home-built website creates an internal customer id, and then saves the Square ID for the customer. Customer then enters a credit card, for payment for an E-card (20). When the payment is approved, we update the customer records the payment id, and with an E-Card PIN so they can enter the class.
Today a new first-time customer followed this process and attended a class.
My wife wanted more information from the Square Dashboard, and there were no transactions shown. I’m first line tech support, so I looked at database records, including payment webhooks that I store.
I found webhookks for customer creation, card creation, payment creation.
I also capture payment.updated webhooks, but my experience is that the ‘updates’ are sometimes not visible at all – I requested info, and was told that some updates are internal to square, and don’t show on webhooks. So I have mostly been ignoring payment updates.
This time I checked those updates.
After the payment.created webhook there were 2 additional webhooks version 2 and 3, related to the payment id.
Version 2 arrived 2 seconds after version 1: Only signifcant change to version 2 was this:
[card_payment_timeline] => Array
(
[authorized_at] => 2025-07-24T00:22:30.576Z
**[voided_at] => 2025-07-24T00:22:32.330Z**
)
Version 3 arrived 12 seconds later: Only significant differences between versions 2 and 3:
[payment][card_detatils][status] => changed from AUTHORIZED tp VOIDED
and
[payment][status] => changed from AUTHORIZED to CANCELLED
There was no record of any of the payment transaction, or these payment versions on the Square Dashboard.
My wife spoke to the student. She told us that she looked at her credit card statement and found the charge (same time as transaction 1), then found a second entry “REFUNDED”. Student had NOT requested a refund.
I logged into my credit card account, and it seems like I got charged on the 27th at 9:41 pm and it got refunded at 9:42 pm.
So the student had assumed she’d paid, and our system did too.
I need to understand what happened, and what to do about it?
I don’t know how to keep watching webhooks for cancellations, when we’ve already given the student the class they ‘paid’ for?
I have now found similar instances in my webhook database, and can provide those in detail if it helps.
Thanks.