Flipdish events (v3) overview
A catalog of every Flipdish Webhooks (v3) event type, what triggers it, and when to use it, with links to the full schema for each.
This page lists every event type available through Flipdish Webhooks (v3). For how to create a subscription, verify requests, and handle delivery, see Subscribe to Flipdish Events (v3). For the exact JSON payload of any event, follow the Definition link in the table.
Event catalog
| Event type | Category | Fires when | Status | Definition |
|---|---|---|---|---|
menu.published.v1 | Menu Publishing | An org publishes a menu (new or updated), making it available to sales channels and integrations. | Generally available | menu.published.v1 |
menu.validation.failed.v1 | Menu Validation | A menu fails validation after a publish attempt. | Generally available | menu.validation.failed.v1 |
menu.item.snoozed.v1 | Snoozes | A menu item (category item or option set item) is snoozed (temporarily hidden). | Generally available | menu.item.snoozed.v1 |
menu.item.unsnoozed.v1 | Snoozes | A previously snoozed menu item becomes available again. | Generally available | menu.item.unsnoozed.v1 |
sales_channel.snoozed.v1 | Snoozes | A sales channel is snoozed (temporarily taken offline). | Generally available | sales_channel.snoozed.v1 |
sales_channel.unsnoozed.v1 | Snoozes | A previously snoozed sales channel is brought back online. | Generally available | sales_channel.unsnoozed.v1 |
sales.created.v1 | Sale Created (legacy) | A sale is created via the Sales Management API only. | ⚠️ Deprecating soon | sales.created.v1 |
sale.created.v1 | Sale Created (new) | Any sale is ingested by Flipdish, on any channel (POS, kiosk, web, marketplace, or API). Carries the full sale payload inline. | Closed beta | sale.created.v1 |
sales.cancelled.v1 | Sale Cancelled | A sale is cancelled. | ⚠️ Deprecating soon | sales.cancelled.v1 |
sale.updated.v1 | Sale Updated | A sale ingested by Flipdish is materially updated (items, charges, or discounts changed). | Closed beta | sale.updated.v1 |
sales.pos.status.updated.v1 | Sale Status Updated (legacy) | A sale's POS / kitchen status changes. | ⚠️ Deprecating soon | sales.pos.status.updated.v1 |
sale.status.updated.v1 | Sale Status Updated (new) | Any sale transitions to a new lifecycle status, on any channel. Unifies POS and delivery status into one event. | Closed beta | sale.status.updated.v1 |
sales.delivery.status.updated.v1 | Sales Delivery Status Updated | A sale's delivery status changes (e.g. dispatched, on the way, delivered). | ⚠️ Deprecating soon | sales.delivery.status.updated.v1 |
When to use which event
Menu events
menu.published.v1— subscribe to keep a downstream system (POS, aggregator, cache) in sync whenever a menu is published.menu.validation.failed.v1— subscribe alongsidemenu.published.v1to alert on publish attempts that failed validation, instead of only detecting the absence of a publish.menu.item.snoozed.v1/menu.item.unsnoozed.v1— use to reflect an item's temporarily-unavailable/available state in an external menu display or POS.sales_channel.snoozed.v1/sales_channel.unsnoozed.v1— use to reflect a whole channel going offline/online (e.g. store paused on a marketplace).
Sale events
Flipdish exposes two event families for sales, which differ in channel scope and payload shape — see Sale webhook events (beta) for the full comparison:
sales.*(legacy) — fires only for sales created through the Sales Management API, and carries identifiers only (you must call the API to fetch line items/charges/payments).sale.*(new, closed beta) — fires for sales on any channel (POS, kiosk, web, marketplace, API) and carries the full sale payload inline, so no follow-up API call is needed. Use this family if you want a simpler handler with no round-trip, or needsale.updated.v1to track mid-lifecycle changes (there is no equivalent in the legacy family).
sales.*is being deprecated soonThe
sales.*family (sales.created.v1,sales.cancelled.v1,sales.pos.status.updated.v1,sales.delivery.status.updated.v1) is slated for deprecation in the near term assale.*matures. Do not build new integrations againstsales.*— request access to thesale.*beta instead (see Sale webhook events (beta) for how to get access). Existing subscribers should plan their migration now rather than waiting for a deprecation notice.
What to use instead
Instead of (sales.*, legacy) | Use (sale.*, new) |
|---|---|
sales.created.v1 | sale.created.v1 |
sales.pos.status.updated.v1 + sales.delivery.status.updated.v1 | sale.status.updated.v1 (single unified status event covering both) |
sales.cancelled.v1 | sale.status.updated.v1 with status SALE_CANCELLED — there's no separate cancelled event in the new family |
| (no equivalent) | sale.updated.v1 — new: tracks mid-lifecycle changes to items, charges, and discounts |
sale.* also drops the follow-up API call: the full sale payload is inline, and brandId is included where sales.* payloads don't carry it.
Related
- Subscribe to Flipdish Events (v3) — create a subscription, verify signatures, and handle delivery/retries
- Sale webhook events (beta) — deep dive on
sale.*vssales.*, and how to request beta access - Webhooks — comparison with the legacy webhook system

