---
title: "Discussion on \"Out-of-Order Webhooks: Why Deduping Event IDs Isn't Enough\" | Hashnode"
description: "Discussion on \"Out-of-Order Webhooks: Why Deduping Event IDs Isn't Enough\". Late, duplicate and missing events, and the inbox, fetch and sweep pattern that converges anyway"
url: "https://hashnode.com/posts/webhooks-out-of-order-duplicate-events/6af5465b9b110271f2072a2f"
---

[Feed](https://hashnode.com/feed) /

Discussion

# [Out-of-Order Webhooks: Why Deduping Event IDs Isn't Enough](https://simplyexplained.hashnode.dev/webhooks-out-of-order-duplicate-events?utm_source=hashnode&utm_medium=feed)

Late, duplicate and missing events, and the inbox, fetch and sweep pattern that converges anyway

1d ago · 11 min read · simplyexplained.hashnode.dev  
Read the article

-   [#webhooks](https://hashnode.com/tag/webhooks)
-   [#backend](https://hashnode.com/tag/backend)
-   [#system-design](https://hashnode.com/tag/system-design)
-   [#api](https://hashnode.com/tag/api)
-   [#software-engineering](https://hashnode.com/tag/software-engineering)

## Written by

[Adam Jaber](https://hashnode.com/@adamjaber)

@adamjaber · Delhi, India

  
[View profile](https://hashnode.com/@adamjaber)

Senior engineer. How AI and software work — and where they quietly break.

I'm a senior software engineer. I write Simply Explained, a plain-English breakdown of how AI and software actually work, and the quiet ways they break: AI fixes that hide bugs, agents that pick the wrong tool, health checks that take down healthy servers. One symptom, one analogy, one fix per piece. New here? Start with the pinned Start Here guide, or get one breakdown a week by email.

## Responses 1

Markdown supported · ⌘↵ to post

[Hayrullah Kar](https://hashnode.com/@magesheet)

[1d ago](https://hashnode.com/posts/webhooks-out-of-order-duplicate-events/6af5465b9b110271f2072a2f/comment/6af6014a8352ea59f168c0e8)

Sorting event types into state and occurrence before writing a handler is the part I will reuse. One edge for fetch-on-notify is a late event for an object that has since been deleted. Depending on the provider, the fetch may return a 404, and a worker that treats it as a transient error will keep retrying forever. Mapping 'not found' to a deleted state explicitly is worth the extra branch.
