Idempotency
Xquik retries failed webhook deliveries. Your endpoint may receive the same event multiple times. Each retry sends the first attempt’s exact body. Only the signature headers change. Production monitor deliveries includedeliveryId and streamEventId. Use deliveryId as the webhook delivery idempotency key. Use streamEventId when your system should process one monitor event only once. It applies across webhook retries or endpoint changes. Do not hash the raw request body when deliveryId is available.
webhook.test deliveries include eventType, data, and timestamp. They omit monitor idempotency fields. Use them to verify signatures and receiver reachability. Skip production event deduplication for the test request.Production store contract
Use a persistent store before acknowledging production events. Scope nonce, delivery, and event keys by webhook ID. Retries for one endpoint then never block another endpoint. DuplicatedeliveryId or streamEventId checks should
return 2xx after verification. The receiver has already accepted the
work.2xx only after verification and a durable
queue write. Move slow enrichment, exports, CRM sync, or alerting to an async
worker. The receiver can then finish within the 10-second delivery timeout.