For operations that leave the cart contents unchanged, such as simply resending the same value, carts/update is no longer sent. Webhooks now fire once per change instead of once per request, so duplicate notifications go away.
carts/update being sent.Even resending a value the cart already had triggered carts/update . As a result, duplicate notifications were delivered.
Nothing is sent for operations that don't change the cart. Apps receive one carts/update per cart change.
| Item | Before | After |
|---|---|---|
| Trigger | Every request Always sent on every cart operation | Only on change When contents or properties change |
| Resending the same values | carts/update is sent |
Not sent |
| Duplicate notifications | Yes | Resolved |
| What the app receives | One webhook per request | One webhook per cart change |
For operations that don't change the cart, carts/update is not sent
Sent every time there is a change
Previously sent on every cart operation
No more duplicate notifications; one webhook per change
Related docs: Cart webhooks / Ajax Cart API
Applicable API version: not stated
Opt-in / opt-out: not stated
Effective date and time (published 2026-10-12): Not stated
Impact oncarts/create and other topics: Not stated
Payload format changes: Not stated
carts/update arriving means something in the cart actually changed. You can now rely on "received = real change."
Duplicates are gone, so if you treat the raw receive count as "cart activity," your numbers will shift. Compare the periods before and after the change separately.
If you relied on it as a liveness check or heartbeat for user actions via carts/update , actions that change nothing will no longer trigger it. If you need to track whether actions happen at all, you'll need another method.
The article only says webhooks won't be sent for actions that change nothing. It says nothing about duplicates from delivery retries, so keep your processing idempotent.
The related docs list the Ajax Cart API. Even if a theme or app block calls the cart API repeatedly with the same values, the webhook receiver only gets actual changes. However,the unnecessary calls themselves don't go away, so redundant frontend requests are still worth reviewing.
carts/update triggered external API calls or DB writes on every receipt, so processing ran even for duplicate notifications.carts/update counts tracked as a "cart update count" KPI will appear to drop around this change.carts/update webhooks: if any logic (such as extending a timer) treats their arrival as a signal that the customer is still active in the cart, it will no longer fire when identical values are resent.carts/update now notifies "per change" instead of "per request."