Skip to main content
Every webhook delivery sends a JSON payload to your configured endpoint. This structure is consistent across all event types.

HTTP Headers

Each delivery is an HTTP POST carrying these headers:

Payload Structure

Fields

id

A unique identifier (UUID) for this specific webhook delivery. Use this to deduplicate events on your end.

event

The event type that triggered this webhook. Matches one of the event types you subscribed to during setup.

data

The event payload. Its shape depends on the event type. See the individual event documentation for field details.

timestamp

Unix timestamp in milliseconds indicating when the event was emitted.

webhook_id

The UUID of the webhook subscription that produced this delivery. Useful when you have multiple webhooks configured and need to identify the source.

attempt

The delivery attempt number, starting at 1. If your endpoint fails to respond with a 2xx status code, Struct retries the delivery and increments this value.

Retries & failures

A delivery succeeds only on a 2xx response within the timeout. Otherwise it is retried:
If 10 consecutive attempts fail, the subscription is set to Disabled and stops receiving events until you re-enable it with a PUT /v1/webhooks/{id}. Return 2xx quickly — acknowledge first, then process the event out of band — so slow downstream work never trips the 30-second timeout.
Because a delivery can be retried, the same event may arrive more than once. Deduplicate using the id field (or the X-Delivery-ID header).
Fields within data may be null depending on the event type and the availability of enriched metadata at the time of delivery.
Last modified on June 3, 2026