Skip to main content
Every delivery is an HTTP POST to your endpoint’s URL with a JSON body (the “envelope”) and a set of headers.

Envelope

A delivery carries an array of events. Most deliveries carry exactly one; when many events of the same type happen at once (a bulk action in the app), Kit batches them into deliveries of up to 100 events each, so your handler should always iterate events.
Each event in events:
A delivery never mixes event types and never carries more than 100 events. Kit also splits a batch once it would pass roughly 512 KB of event payload, so most deliveries stay well under that; a single event larger than 512 KB is still delivered on its own rather than dropped.

Headers

HTTP behavior

  • Deliveries are always POST requests.
  • Respond with any 2xx status to acknowledge. Kit reads only the status code, not the response body.
  • Any non-2xx response, a connection failure, or a timeout marks the delivery failed and schedules a retry. A retry re-POSTs the entire events array, so process each event idempotently by its id.
  • Sign or validate against the raw request body exactly as received — don’t re-serialize the JSON first, or the signature won’t match.
Your endpoint must be a public HTTP(S) URL. Kit blocks delivery to private, internal, or loopback addresses.