Limited availability. This event is being rolled out and is enabled per account. Ask your Fire contact whether it already applies to yours.
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 onestore.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 astore.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.channelsis not the list of channels. It says what this publication was about; the store’s channels are indata.channels.- Do not dedupe by
event.id. It identifies the delivery; the publication isdata.publication.id. - Channel codes keep the case they were configured with (
iFood,KIOSK). Normalize before comparing.
Related events
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.
