Docs/Technical Concepts

Idempotency and Deduplication

Fulfiro processes the same event multiple times safely. This matters because webhooks can arrive more than once (WooCommerce retries on timeout), and background jobs can be re-queued after crashes.

Webhook deduplication

WooCommerce webhooks include a delivery ID. Fulfiro deduplicates using two layers:

  1. Redis SETNX -- Fast-path check. If the delivery ID exists in Redis, the webhook is skipped immediately.
  2. Database unique constraint -- Authoritative backup. If Redis misses the dedupe (e.g., Redis restart), the database constraint prevents duplicate processing.

Sync idempotency

Delta syncs use the modified_after timestamp. Processing the same product twice is safe because it is an upsert operation -- the product record is updated to match the latest WooCommerce data.

Stock push idempotency

Outbound stock pushes set an absolute quantity (not a delta). Pushing the same value twice has no effect. This means retried pushes are inherently safe.

Job queue deduplication

BullMQ jobs include a job ID derived from the operation. If a job with the same ID is already in the queue or recently completed, the duplicate is discarded.

Related: Sync Architecture | Webhooks | Stock Consistency

---

### Settings & Account