Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Events & delivery

Every event Rustle delivers shares one store-agnostic envelope. The store of origin is a field (store), never something your code has to branch on. A review from Apple and a review from Google arrive in exactly the same shape.

The envelope

These fields are present on every event, regardless of type:

FieldTypeNotes
event_idstringIdentity of this delivery to this subscriber. Deterministic (not random). Dedupe on it. Also sent as the x-radar-event-id header.
occurrence_idstringIdentity of the underlying occurrence, shared across every subscriber it fans out to. Lets you recognise “the same review, delivered to me.”
event_typeenumreview.created or rating.dropped.
storeenumapple or google. A field, not a code branch.
app_idstringStore-native app id (Apple numeric id, Google package name).
subscriber_idstringThe hook this was delivered to (your hook id).
occurred_atRFC 3339When the change happened at the source.
observed_atRFC 3339When Rustle detected it (poll time).
schema_versionintegerStarts at 1; bumped only on a breaking payload change.

The type-specific fields (review_id, rating, body, … for reviews; current_rating, delta, … for rating drops) sit at the top level alongside the envelope. The payload is flattened, not nested. See each event’s reference: review.created, rating.dropped.

Delivery

Rustle POSTs the event as a JSON body to your hook’s target_url, with two headers:

HeaderPurpose
x-radar-event-idThe event’s event_id; dedupe on it.
x-radar-signaturesha256=<hex> HMAC of the exact body; verify it.

A 2xx response means you accepted the event. Any other response (or a timeout) is treated as a failure and retried with backoff; events that exhaust their retries land in a dead-letter queue rather than being dropped.

Forward-looking by default

A new hook only receives events that occur at or after it was created. It does not replay the back-catalogue already sitting in a store’s feed. (The same is true for rating drops: the first observation seeds the baseline silently.)