Skip to main content
Limited availability. This event is being rolled out and is enabled per account. Ask your Fire contact whether it already applies to yours.
This is the Integration Flows store.updated event, documented on this page. It is not the aggregator-integration webhook with the same name described in Webhook reference → store.updated: that one belongs to a different system, has a different shape, and does not change.
store.updated fires every time a store’s configuration is published to its channels: first publication, publishing a draft, re-synchronizing, switching a channel on or off, applying an override, archiving. It always carries the whole store — never a diff. Treat it as a full replacement of what you know about that store. Like store.business_day_closed, it is a store-level event: one per publication, not one per order or per channel. A publication that touches several channels produces a single event with every channel inside, and each flow that receives it gets that event once, with the whole store.

Trigger condition

Each publication of a store emits one store.updated. data.publication.reason tells you what produced it: New reason values (the contract already allows retry) and new mode values may appear. Treat a value you do not know as a normal publication: the event still carries the whole store. A publication can also be scheduled: nothing is emitted when it is scheduled; the event fires when the scheduled time arrives, with publication.mode: "scheduled" and publication.scheduledAt. Cancelling a scheduled publication emits nothing. Nothing is emitted when changes are saved without publishing them to the channels, or when the business day opens or closes.
A flow limited to certain channels receives a publication when it touches at least one of them — and it receives the whole event, every channel included. Pick the channels that are yours from data.channels.

Example — real payload (sanitized and shortened)

data.* reference

data.store

object
The same V4 store block that travels on order events — uid, code, name, phone, email, address, externalId, vendor, account, locationInfo (with country.phoneCode), metadata and storeFiscalConfig (may be null). Field reference in order.completed → data.store. phone comes in international format (+ and digits, e.g. +5511999990000). It may carry a number that is not real (for example, all zeros) if the store has no phone set, or the value exactly as stored if the country has no calling code. metadata is the store’s free key-value configuration: Fire does not impose its keys, some integrations read well-known ones (in the example, taxesInfo and deliveryInfo), and it is {} when the store has none. On top of that block, this event adds:

data.channels

array
Every channel configured for the store — not only the ones this publication is about (those are in publication.channels). A channel or fulfillment type that is switched off still travels, with enabled: false: that is how you learn it was taken down.

data.operationSchedule and data.salesSchedule

array
The store’s operating hours. Each entry: day (MONDAY … SUNDAY), startTime and endTime (HH:mm).
array
The store’s sales hours, same shape. It is the fallback for channels and fulfillment types without a schedule of their own — already applied in channels[].fulfillmentTypes[].schedules.

data.publication

object
The publication that produced this event.

The latest publication wins

Every event carries the whole store, so the most recent publication replaces everything before it. Fire already takes care of the order for you:
  • Within a flow, the publications of one store are delivered one at a time, in the order they were emitted. Different stores move in parallel.
  • When a store gets a new publication that covers the same channels, deliveries of older publications that were still waiting are cancelled; the others still go out, in order.
publication.sequence is still useful data: you can store the last one you applied per store, and recognize a stale payload if one ever reaches you — for example, a manual replay of an old delivery, which keeps its original sequence.

Archiving

Archiving a store emits a store.updated with publication.reason: "archive". It carries the archived store: store.status: "ARCHIVED", store.active: false, and every channel and fulfillment type with enabled: false (and channels with published: false). To handle archiving separately, branch on reason or on status.
Integration Flows do not emit a separate store.deleted event: archiving is a store.updated.

Handler example

Common pitfalls

  • It is not a diff. A channel missing from your copy is not “unchanged” — the event lists every channel. Replace, do not merge.
  • A switched-off channel still travels. Read enabled; do not assume that a channel present in the event is open.
  • publication.channels is not the list of channels. It says what this publication was about; the store’s channels are in data.channels.
  • Do not dedupe by event.id. It identifies the delivery; the publication is data.publication.id.
  • Channel codes keep the case they were configured with (iFood, KIOSK). Normalize before comparing.

store.business_day_closed

The other store-level event: a store closed its business day.

order.completed

Field reference for the V4 store block shared with this event.