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:
- Redis SETNX -- Fast-path check. If the delivery ID exists in Redis, the webhook is skipped immediately.
- 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