Respond HTTP 200 immediately after HMAC verification, then queue the actual work. This prevents retry storms and duplicate processing.

Why this matters

Shopify times out webhooks at 5 seconds. Multi-store sync, FX computation, or third-party API calls inline will hit that wall on complex products. When retries arrive, you process the same event twice.

Pattern

verify_hmac($payload, $secret)nenqueue($event_id, $payload)nrespond(200)n# Cron worker drains queue separately

5+ years on AAO StarshipIt integration, 150+ daily orders, zero retry storms.

Founder, ClickBrown · Christchurch, New Zealand

Sole Shopify developer at Army & Outdoors for 6.5 years. Builder of 11 live production systems across 4 regional stores. Writing about what actually works — not what sounds good in documentation.

Read more about →