2xx, a manual replay during debugging. Make duplicates a no-op.
This page is about delivery-side idempotency: deduping repeats of the same webhook event on your server. For request-side idempotency — retrying a
POST to the Awardee API safely with Idempotency-Key — see Idempotency. Same idea, different direction.The dedupe key
Every delivery carries a unique id in theX-Awardee-Delivery header. The same id is reused across retry attempts of the same event — so seeing it twice means the same logical event, and you should skip the work.
A different id, even for what looks like “the same” payload, is a different event (likely two genuine state changes in quick succession). Process it.
The pattern
Store seen delivery ids in a small table. Insert withON CONFLICT DO NOTHING on receipt. If no row was inserted, skip the rest of the handler.
Node + Postgres
FastAPI + asyncpg

