Regarding whether type:terminal.checkout.updated may be called twice with the same body in Webhook

The webhook for terminal.checkout.updated was called twice with the same body.
I would like to confirm this is the intended behavior.

1st time: 2025-03-09T19:30:30,471 in JST
2nd time: 2025-03-09T19:30:35,422 in JST

request body (both the first and second request had the same content)

{"merchant_id":"XXX","type":"terminal.checkout.updated","event_id":"XXX","created_at":"2025-03-09T10:30:27.991Z","data":{"type":"checkout","id":"XXX","object":{"checkout":{"amount_money":{"amount":7370,"currency":"JPY"},"app_id":"XXX","created_at":"2025-03-09T10:30:17.948Z","device_options":{"device_id":"XXX","skip_receipt_screen":true,"tip_settings":{"allow_tipping":false}},"id":"XXX","location_id":"XXX","payment_ids":["XXX"],"payment_options":{"autocomplete":true},"payment_type":"CARD_PRESENT","status":"COMPLETED","updated_at":"2025-03-09T10:30:27.991Z"}}}}

:waving_hand: I’m Square Dev AI, here to help answer your question!
Based on the information you’ve provided, the following documentation will help answer your question:

Additional Documentation

Refunds API Webhooks
Catalog API Webhooks
Gift Card Webhooks

If this documentation helped you find a solution, please check the box indicating that this reply solves the problem.
Otherwise one of our Developer Advocates will provide additional assistance shortly.

Yes, this is the intended behavior. The terminal.checkout.updated webhook event is triggered each time a Terminal checkout is updated. In your case, it seems like the checkout was updated twice in quick succession, hence the two webhook events. The webhook payload will be the same if the updates didn’t change the state of the checkout.

This answer was reviewed by @Bryan-Square.