Flavoso APIWebhooks and eventsEvent types
Event types
Every event type with its description, required scope, the fields in data and an example envelope.
Overview
An event is created exactly once per change, whether it happened in the dashboard, on the kitchen display, in the phone app, at the receipt printer or through the API. You choose which types your app receives in the console; for GET /events, with types.
Your program should ignore types it does not know.
| Events | Required scope |
|---|---|
order.* | orders:read |
reservation.* | reservations:read |
menu.* | menu:read |
store.* | store:read |
app.* | none, only the connection itself |
Orders
order.created
A new order has come in: immediately for payment on site, for online payment once the payment is confirmed. Exactly once per order.
Required scope: orders:read
Fields in data
objectOrderrequiredThe order when the event was first read. Values that belong to a single app (
external_id,acknowledged_at) are always null in events: the envelope is built once and sent the same to every receiver. Retrieve the object to see yours.Child fields (20)
objectstringrequiredAlways
order.Values:
"order"idstring (uuid)requiredThe order.
codestringrequiredShort code the guest sees and says at the counter, e.g. K7Q2M9.
external_idstringrequirednullableYour app's reference set with
POST /orders/{id}/acknowledge; null when none. Always null in webhook events and inGET /events: the envelope is built once and sent the same to every receiver, but this value belongs to a single app. Retrieve the object to see yours.typestringrequiredHow the guest gets the order.
Values:
"pickup""delivery""dine_in"sourcestringrequiredWhere it was placed:
tablevia a table's QR code,appin the Flavoso app by a signed-in guest,storefronteverything else (the restaurant's ordering page, the app without sign-in).Values:
"storefront""table""app"statusstringrequiredWhere the order is now. Restaurants may skip statuses, see
GET /store.Values:
"pending""confirmed""preparing""ready""completed""cancelled"created_atstring (date-time)requiredWhen the order was placed. ISO 8601 in UTC (
Z).updated_atstring (date-time)requiredLast change. ISO 8601 in UTC (
Z).acknowledged_atstring (date-time)requirednullableWhen your app first acknowledged the order (
POST /orders/{id}/acknowledge); null when not yet. Always null in webhook events and inGET /events: the envelope is built once and sent the same to every receiver, but this value belongs to a single app. Retrieve the object to see yours.requested_forstring (date-time)requirednullablePickup or delivery time chosen by the guest (pre-order); null means as soon as possible.
currencystringrequiredISO 4217, e.g. EUR.
amountsobjectrequiredThe amounts of the order, in cents.
Child fields (6)
subtotalintegerrequiredSum of the items. Integer amount in the smallest currency unit (cents).
delivery_feeintegerrequiredDelivery fee. Integer amount in the smallest currency unit (cents).
service_feeintegerrequiredService fee. Integer amount in the smallest currency unit (cents).
discountintegerrequiredDiscount (stamp card), already subtracted. Integer amount in the smallest currency unit (cents).
tipintegerrequiredTip. Pass-through, not revenue. Integer amount in the smallest currency unit (cents).
totalintegerrequiredsubtotal + delivery_fee + service_fee − discount + tip. Integer amount in the smallest currency unit (cents).
taxobjectrequiredVAT per rate of
total − tip(items, fees, minus discount), computed like the restaurant's accounting export: discounts and delivery fees spread over the rates as the restaurant set it.Child fields (2)
includedbooleanrequiredAlways true: prices include VAT.
Values:
truelinesTaxLine[]requiredOne line per rate, ascending, lines without rate last. The gross amounts add up to total − tip.
Child fields (4)
rate_bpsintegerrequirednullableThe rate in basis points (700 = 7 %). null: no rate was stored for this part (not the same as 0 %); then net and tax are null.
grossintegerrequiredGross amount at this rate. Integer amount in the smallest currency unit (cents).
netintegerrequirednullablegross − tax, in cents. null when rate_bps is null.
taxintegerrequirednullableVAT contained in gross: round(gross × rate / (10000 + rate)), in cents. null when rate_bps is null.
paymentobjectrequiredHow and whether it is paid.
Child fields (3)
methodstringrequiredonline: paid at checkout.on_site: paid at pickup, delivery or the table.Values:
"online""on_site"statusstringrequiredpaidonce the online payment is confirmed.open: to be paid on site; it staysopen, because Flavoso does not record payments on site.Values:
"paid""open"paid_atstring (date-time)requirednullableWhen it was paid; null while open.
customerobjectrequirednullableOnly what is needed to hand the order over (data minimisation): no e-mail, and no phone for dine-in. null when neither is known.
Child fields (2)
namestringrequirednullableThe guest's name.
phonestringrequirednullablePhone for questions; null for dine-in.
deliveryobjectrequirednullableThe delivery address; null unless type is delivery.
Child fields (3)
addressstringrequirednullableStreet and number.
postal_codestringrequirednullablePostal code.
citystringrequirednullableCity.
tableobjectrequirednullableThe table of a dine-in order; null otherwise.
Child fields (2)
idstring (uuid)requiredThe table (
GET /tables).labelstringrequirednullableThe table's name, e.g. 4.
notestringrequirednullableGuest's note for the kitchen (allergies!).
itemsOrderItem[]requiredThe lines.
Child fields (8)
idstring (uuid)requiredThe line.
product_idstring (uuid)requirednullableThe dish (
GET /menu/products/{id}); null when it was deleted since.namestringrequiredName at the time of ordering.
quantityintegerrequiredHow many.
min 1
unit_priceintegerrequiredPrice of one unit including options. Integer amount in the smallest currency unit (cents).
line_totalintegerrequiredunit_price × quantity. Integer amount in the smallest currency unit (cents).
tax_rate_bpsintegerrequirednullableVAT rate frozen at order time, in basis points (700 = 7 %). null when the restaurant has not set rates.
optionsobject[]requiredThe chosen options (extras, sizes), as ordered. Name, surcharge and group name are frozen at order time; the ids point to the menu (
GET /menu/options/{id}) as long as the option exists.Child fields (5)
idstring (uuid)requirednullableThe option (
GET /menu/options/{id}); with it you find your own modifier through itsexternal_id. null for orders placed before 8 October 2026.namestringrequiredName of the option.
price_deltaintegerrequiredSurcharge of this option, per unit. Integer amount in the smallest currency unit (cents).
group_idstring (uuid)requirednullableThe option group the option was chosen in (
GET /menu/option-groups/{id}). null for orders placed before 8 October 2026.group_namestringrequirednullableName of that group at order time, e.g. Extras or Size. null for orders placed before 8 October 2026.
{
"id": "evt_2bf5a9b06b75442a9244e884a1acfc57",
"object": "event",
"type": "order.created",
"created_at": "2026-10-04T17:46:12.410Z",
"api_version": "2026-10-08",
"livemode": true,
"tenant_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"connection_id": "4b3f7c1e-9a2d-4e8b-b5f6-0c1d2e3f4a5b",
"data": {
"object": {
"object": "order",
"id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
"code": "K7Q2M9",
"external_id": "ART-1001",
"type": "pickup",
"source": "storefront",
"status": "pending",
"created_at": "2026-10-04T17:44:59.942Z",
"updated_at": "2026-10-04T17:44:59.942Z",
"acknowledged_at": "2026-10-04T17:44:59.942Z",
"requested_for": "2026-10-04T17:44:59.942Z",
"currency": "EUR",
"amounts": {
"subtotal": 1290,
"delivery_fee": 1290,
"service_fee": 1290,
"discount": 1290,
"tip": 1290,
"total": 1290
},
"tax": {
"included": true,
"lines": [
{
"rate_bps": 700,
"gross": 1290,
"net": 1290,
"tax": 1290
}
]
},
"payment": {
"method": "online",
"status": "paid",
"paid_at": "2026-10-04T17:44:59.942Z"
},
"customer": {
"name": "string",
"phone": "string"
},
"delivery": {
"address": "string",
"postal_code": "string",
"city": "string"
},
"table": {
"id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
"label": "string"
},
"note": "string",
"items": [
{
"id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
"product_id": "6818680c-4376-47b0-a818-680c4376d7b0",
"name": "string",
"quantity": 1,
"unit_price": 1290,
"line_total": 1290,
"tax_rate_bps": 700,
"options": [
{
"id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
"name": "string",
"price_delta": 1290,
"group_id": "9594642c-e6ef-49ac-a594-642ce6efc9ac",
"group_name": "string"
}
]
}
]
}
}
}order.status_changed
An order changed its status, wherever that happened: dashboard, kitchen display, phone app, receipt printer or API. previous_status names the old one.
Required scope: orders:read
Fields in data
objectOrderrequiredAn order. Guest data is limited to what is needed to hand it over: the name, the phone for pickup and delivery, the address for delivery, never an e-mail.
Child fields (20)
objectstringrequiredAlways
order.Values:
"order"idstring (uuid)requiredThe order.
codestringrequiredShort code the guest sees and says at the counter, e.g. K7Q2M9.
external_idstringrequirednullableYour app's reference set with
POST /orders/{id}/acknowledge; null when none. Always null in webhook events and inGET /events: the envelope is built once and sent the same to every receiver, but this value belongs to a single app. Retrieve the object to see yours.typestringrequiredHow the guest gets the order.
Values:
"pickup""delivery""dine_in"sourcestringrequiredWhere it was placed:
tablevia a table's QR code,appin the Flavoso app by a signed-in guest,storefronteverything else (the restaurant's ordering page, the app without sign-in).Values:
"storefront""table""app"statusstringrequiredWhere the order is now. Restaurants may skip statuses, see
GET /store.Values:
"pending""confirmed""preparing""ready""completed""cancelled"created_atstring (date-time)requiredWhen the order was placed. ISO 8601 in UTC (
Z).updated_atstring (date-time)requiredLast change. ISO 8601 in UTC (
Z).acknowledged_atstring (date-time)requirednullableWhen your app first acknowledged the order (
POST /orders/{id}/acknowledge); null when not yet. Always null in webhook events and inGET /events: the envelope is built once and sent the same to every receiver, but this value belongs to a single app. Retrieve the object to see yours.requested_forstring (date-time)requirednullablePickup or delivery time chosen by the guest (pre-order); null means as soon as possible.
currencystringrequiredISO 4217, e.g. EUR.
amountsobjectrequiredThe amounts of the order, in cents.
Child fields (6)
subtotalintegerrequiredSum of the items. Integer amount in the smallest currency unit (cents).
delivery_feeintegerrequiredDelivery fee. Integer amount in the smallest currency unit (cents).
service_feeintegerrequiredService fee. Integer amount in the smallest currency unit (cents).
discountintegerrequiredDiscount (stamp card), already subtracted. Integer amount in the smallest currency unit (cents).
tipintegerrequiredTip. Pass-through, not revenue. Integer amount in the smallest currency unit (cents).
totalintegerrequiredsubtotal + delivery_fee + service_fee − discount + tip. Integer amount in the smallest currency unit (cents).
taxobjectrequiredVAT per rate of
total − tip(items, fees, minus discount), computed like the restaurant's accounting export: discounts and delivery fees spread over the rates as the restaurant set it.Child fields (2)
includedbooleanrequiredAlways true: prices include VAT.
Values:
truelinesTaxLine[]requiredOne line per rate, ascending, lines without rate last. The gross amounts add up to total − tip.
Child fields (4)
rate_bpsintegerrequirednullableThe rate in basis points (700 = 7 %). null: no rate was stored for this part (not the same as 0 %); then net and tax are null.
grossintegerrequiredGross amount at this rate. Integer amount in the smallest currency unit (cents).
netintegerrequirednullablegross − tax, in cents. null when rate_bps is null.
taxintegerrequirednullableVAT contained in gross: round(gross × rate / (10000 + rate)), in cents. null when rate_bps is null.
paymentobjectrequiredHow and whether it is paid.
Child fields (3)
methodstringrequiredonline: paid at checkout.on_site: paid at pickup, delivery or the table.Values:
"online""on_site"statusstringrequiredpaidonce the online payment is confirmed.open: to be paid on site; it staysopen, because Flavoso does not record payments on site.Values:
"paid""open"paid_atstring (date-time)requirednullableWhen it was paid; null while open.
customerobjectrequirednullableOnly what is needed to hand the order over (data minimisation): no e-mail, and no phone for dine-in. null when neither is known.
Child fields (2)
namestringrequirednullableThe guest's name.
phonestringrequirednullablePhone for questions; null for dine-in.
deliveryobjectrequirednullableThe delivery address; null unless type is delivery.
Child fields (3)
addressstringrequirednullableStreet and number.
postal_codestringrequirednullablePostal code.
citystringrequirednullableCity.
tableobjectrequirednullableThe table of a dine-in order; null otherwise.
Child fields (2)
idstring (uuid)requiredThe table (
GET /tables).labelstringrequirednullableThe table's name, e.g. 4.
notestringrequirednullableGuest's note for the kitchen (allergies!).
itemsOrderItem[]requiredThe lines.
Child fields (8)
idstring (uuid)requiredThe line.
product_idstring (uuid)requirednullableThe dish (
GET /menu/products/{id}); null when it was deleted since.namestringrequiredName at the time of ordering.
quantityintegerrequiredHow many.
min 1
unit_priceintegerrequiredPrice of one unit including options. Integer amount in the smallest currency unit (cents).
line_totalintegerrequiredunit_price × quantity. Integer amount in the smallest currency unit (cents).
tax_rate_bpsintegerrequirednullableVAT rate frozen at order time, in basis points (700 = 7 %). null when the restaurant has not set rates.
optionsobject[]requiredThe chosen options (extras, sizes), as ordered. Name, surcharge and group name are frozen at order time; the ids point to the menu (
GET /menu/options/{id}) as long as the option exists.Child fields (5)
idstring (uuid)requirednullableThe option (
GET /menu/options/{id}); with it you find your own modifier through itsexternal_id. null for orders placed before 8 October 2026.namestringrequiredName of the option.
price_deltaintegerrequiredSurcharge of this option, per unit. Integer amount in the smallest currency unit (cents).
group_idstring (uuid)requirednullableThe option group the option was chosen in (
GET /menu/option-groups/{id}). null for orders placed before 8 October 2026.group_namestringrequirednullableName of that group at order time, e.g. Extras or Size. null for orders placed before 8 October 2026.
previous_statusstringrequiredThe status before this change.
{
"id": "evt_2bf5a9b06b75442a9244e884a1acfc57",
"object": "event",
"type": "order.status_changed",
"created_at": "2026-10-04T17:46:12.410Z",
"api_version": "2026-10-08",
"livemode": true,
"tenant_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"connection_id": "4b3f7c1e-9a2d-4e8b-b5f6-0c1d2e3f4a5b",
"data": {
"object": {
"object": "order",
"id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
"code": "K7Q2M9",
"external_id": "ART-1001",
"type": "pickup",
"source": "storefront",
"status": "pending",
"created_at": "2026-10-04T17:44:59.942Z",
"updated_at": "2026-10-04T17:44:59.942Z",
"acknowledged_at": "2026-10-04T17:44:59.942Z",
"requested_for": "2026-10-04T17:44:59.942Z",
"currency": "EUR",
"amounts": {
"subtotal": 1290,
"delivery_fee": 1290,
"service_fee": 1290,
"discount": 1290,
"tip": 1290,
"total": 1290
},
"tax": {
"included": true,
"lines": [
{
"rate_bps": 700,
"gross": 1290,
"net": 1290,
"tax": 1290
}
]
},
"payment": {
"method": "online",
"status": "paid",
"paid_at": "2026-10-04T17:44:59.942Z"
},
"customer": {
"name": "string",
"phone": "string"
},
"delivery": {
"address": "string",
"postal_code": "string",
"city": "string"
},
"table": {
"id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
"label": "string"
},
"note": "string",
"items": [
{
"id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
"product_id": "6818680c-4376-47b0-a818-680c4376d7b0",
"name": "string",
"quantity": 1,
"unit_price": 1290,
"line_total": 1290,
"tax_rate_bps": 700,
"options": [
{
"id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
"name": "string",
"price_delta": 1290,
"group_id": "9594642c-e6ef-49ac-a594-642ce6efc9ac",
"group_name": "string"
}
]
}
]
},
"previous_status": "string"
}
}order.cancelled
An order was cancelled or rejected. Sent in addition to order.status_changed.
Required scope: orders:read
Fields in data
objectOrderrequiredAn order. Guest data is limited to what is needed to hand it over: the name, the phone for pickup and delivery, the address for delivery, never an e-mail.
Child fields (20)
objectstringrequiredAlways
order.Values:
"order"idstring (uuid)requiredThe order.
codestringrequiredShort code the guest sees and says at the counter, e.g. K7Q2M9.
external_idstringrequirednullableYour app's reference set with
POST /orders/{id}/acknowledge; null when none. Always null in webhook events and inGET /events: the envelope is built once and sent the same to every receiver, but this value belongs to a single app. Retrieve the object to see yours.typestringrequiredHow the guest gets the order.
Values:
"pickup""delivery""dine_in"sourcestringrequiredWhere it was placed:
tablevia a table's QR code,appin the Flavoso app by a signed-in guest,storefronteverything else (the restaurant's ordering page, the app without sign-in).Values:
"storefront""table""app"statusstringrequiredWhere the order is now. Restaurants may skip statuses, see
GET /store.Values:
"pending""confirmed""preparing""ready""completed""cancelled"created_atstring (date-time)requiredWhen the order was placed. ISO 8601 in UTC (
Z).updated_atstring (date-time)requiredLast change. ISO 8601 in UTC (
Z).acknowledged_atstring (date-time)requirednullableWhen your app first acknowledged the order (
POST /orders/{id}/acknowledge); null when not yet. Always null in webhook events and inGET /events: the envelope is built once and sent the same to every receiver, but this value belongs to a single app. Retrieve the object to see yours.requested_forstring (date-time)requirednullablePickup or delivery time chosen by the guest (pre-order); null means as soon as possible.
currencystringrequiredISO 4217, e.g. EUR.
amountsobjectrequiredThe amounts of the order, in cents.
Child fields (6)
subtotalintegerrequiredSum of the items. Integer amount in the smallest currency unit (cents).
delivery_feeintegerrequiredDelivery fee. Integer amount in the smallest currency unit (cents).
service_feeintegerrequiredService fee. Integer amount in the smallest currency unit (cents).
discountintegerrequiredDiscount (stamp card), already subtracted. Integer amount in the smallest currency unit (cents).
tipintegerrequiredTip. Pass-through, not revenue. Integer amount in the smallest currency unit (cents).
totalintegerrequiredsubtotal + delivery_fee + service_fee − discount + tip. Integer amount in the smallest currency unit (cents).
taxobjectrequiredVAT per rate of
total − tip(items, fees, minus discount), computed like the restaurant's accounting export: discounts and delivery fees spread over the rates as the restaurant set it.Child fields (2)
includedbooleanrequiredAlways true: prices include VAT.
Values:
truelinesTaxLine[]requiredOne line per rate, ascending, lines without rate last. The gross amounts add up to total − tip.
Child fields (4)
rate_bpsintegerrequirednullableThe rate in basis points (700 = 7 %). null: no rate was stored for this part (not the same as 0 %); then net and tax are null.
grossintegerrequiredGross amount at this rate. Integer amount in the smallest currency unit (cents).
netintegerrequirednullablegross − tax, in cents. null when rate_bps is null.
taxintegerrequirednullableVAT contained in gross: round(gross × rate / (10000 + rate)), in cents. null when rate_bps is null.
paymentobjectrequiredHow and whether it is paid.
Child fields (3)
methodstringrequiredonline: paid at checkout.on_site: paid at pickup, delivery or the table.Values:
"online""on_site"statusstringrequiredpaidonce the online payment is confirmed.open: to be paid on site; it staysopen, because Flavoso does not record payments on site.Values:
"paid""open"paid_atstring (date-time)requirednullableWhen it was paid; null while open.
customerobjectrequirednullableOnly what is needed to hand the order over (data minimisation): no e-mail, and no phone for dine-in. null when neither is known.
Child fields (2)
namestringrequirednullableThe guest's name.
phonestringrequirednullablePhone for questions; null for dine-in.
deliveryobjectrequirednullableThe delivery address; null unless type is delivery.
Child fields (3)
addressstringrequirednullableStreet and number.
postal_codestringrequirednullablePostal code.
citystringrequirednullableCity.
tableobjectrequirednullableThe table of a dine-in order; null otherwise.
Child fields (2)
idstring (uuid)requiredThe table (
GET /tables).labelstringrequirednullableThe table's name, e.g. 4.
notestringrequirednullableGuest's note for the kitchen (allergies!).
itemsOrderItem[]requiredThe lines.
Child fields (8)
idstring (uuid)requiredThe line.
product_idstring (uuid)requirednullableThe dish (
GET /menu/products/{id}); null when it was deleted since.namestringrequiredName at the time of ordering.
quantityintegerrequiredHow many.
min 1
unit_priceintegerrequiredPrice of one unit including options. Integer amount in the smallest currency unit (cents).
line_totalintegerrequiredunit_price × quantity. Integer amount in the smallest currency unit (cents).
tax_rate_bpsintegerrequirednullableVAT rate frozen at order time, in basis points (700 = 7 %). null when the restaurant has not set rates.
optionsobject[]requiredThe chosen options (extras, sizes), as ordered. Name, surcharge and group name are frozen at order time; the ids point to the menu (
GET /menu/options/{id}) as long as the option exists.Child fields (5)
idstring (uuid)requirednullableThe option (
GET /menu/options/{id}); with it you find your own modifier through itsexternal_id. null for orders placed before 8 October 2026.namestringrequiredName of the option.
price_deltaintegerrequiredSurcharge of this option, per unit. Integer amount in the smallest currency unit (cents).
group_idstring (uuid)requirednullableThe option group the option was chosen in (
GET /menu/option-groups/{id}). null for orders placed before 8 October 2026.group_namestringrequirednullableName of that group at order time, e.g. Extras or Size. null for orders placed before 8 October 2026.
previous_statusstringrequiredThe status before the cancellation.
{
"id": "evt_2bf5a9b06b75442a9244e884a1acfc57",
"object": "event",
"type": "order.cancelled",
"created_at": "2026-10-04T17:46:12.410Z",
"api_version": "2026-10-08",
"livemode": true,
"tenant_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"connection_id": "4b3f7c1e-9a2d-4e8b-b5f6-0c1d2e3f4a5b",
"data": {
"object": {
"object": "order",
"id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
"code": "K7Q2M9",
"external_id": "ART-1001",
"type": "pickup",
"source": "storefront",
"status": "pending",
"created_at": "2026-10-04T17:44:59.942Z",
"updated_at": "2026-10-04T17:44:59.942Z",
"acknowledged_at": "2026-10-04T17:44:59.942Z",
"requested_for": "2026-10-04T17:44:59.942Z",
"currency": "EUR",
"amounts": {
"subtotal": 1290,
"delivery_fee": 1290,
"service_fee": 1290,
"discount": 1290,
"tip": 1290,
"total": 1290
},
"tax": {
"included": true,
"lines": [
{
"rate_bps": 700,
"gross": 1290,
"net": 1290,
"tax": 1290
}
]
},
"payment": {
"method": "online",
"status": "paid",
"paid_at": "2026-10-04T17:44:59.942Z"
},
"customer": {
"name": "string",
"phone": "string"
},
"delivery": {
"address": "string",
"postal_code": "string",
"city": "string"
},
"table": {
"id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
"label": "string"
},
"note": "string",
"items": [
{
"id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
"product_id": "6818680c-4376-47b0-a818-680c4376d7b0",
"name": "string",
"quantity": 1,
"unit_price": 1290,
"line_total": 1290,
"tax_rate_bps": 700,
"options": [
{
"id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
"name": "string",
"price_delta": 1290,
"group_id": "9594642c-e6ef-49ac-a594-642ce6efc9ac",
"group_name": "string"
}
]
}
]
},
"previous_status": "string"
}
}order.paid
An order was paid online: the payment provider confirmed the payment, and the order exists from then on (right after order.created). Orders paid on site are not recorded as paid in Flavoso and never produce this event.
Required scope: orders:read
Fields in data
objectOrderrequiredAn order. Guest data is limited to what is needed to hand it over: the name, the phone for pickup and delivery, the address for delivery, never an e-mail.
Child fields (20)
objectstringrequiredAlways
order.Values:
"order"idstring (uuid)requiredThe order.
codestringrequiredShort code the guest sees and says at the counter, e.g. K7Q2M9.
external_idstringrequirednullableYour app's reference set with
POST /orders/{id}/acknowledge; null when none. Always null in webhook events and inGET /events: the envelope is built once and sent the same to every receiver, but this value belongs to a single app. Retrieve the object to see yours.typestringrequiredHow the guest gets the order.
Values:
"pickup""delivery""dine_in"sourcestringrequiredWhere it was placed:
tablevia a table's QR code,appin the Flavoso app by a signed-in guest,storefronteverything else (the restaurant's ordering page, the app without sign-in).Values:
"storefront""table""app"statusstringrequiredWhere the order is now. Restaurants may skip statuses, see
GET /store.Values:
"pending""confirmed""preparing""ready""completed""cancelled"created_atstring (date-time)requiredWhen the order was placed. ISO 8601 in UTC (
Z).updated_atstring (date-time)requiredLast change. ISO 8601 in UTC (
Z).acknowledged_atstring (date-time)requirednullableWhen your app first acknowledged the order (
POST /orders/{id}/acknowledge); null when not yet. Always null in webhook events and inGET /events: the envelope is built once and sent the same to every receiver, but this value belongs to a single app. Retrieve the object to see yours.requested_forstring (date-time)requirednullablePickup or delivery time chosen by the guest (pre-order); null means as soon as possible.
currencystringrequiredISO 4217, e.g. EUR.
amountsobjectrequiredThe amounts of the order, in cents.
Child fields (6)
subtotalintegerrequiredSum of the items. Integer amount in the smallest currency unit (cents).
delivery_feeintegerrequiredDelivery fee. Integer amount in the smallest currency unit (cents).
service_feeintegerrequiredService fee. Integer amount in the smallest currency unit (cents).
discountintegerrequiredDiscount (stamp card), already subtracted. Integer amount in the smallest currency unit (cents).
tipintegerrequiredTip. Pass-through, not revenue. Integer amount in the smallest currency unit (cents).
totalintegerrequiredsubtotal + delivery_fee + service_fee − discount + tip. Integer amount in the smallest currency unit (cents).
taxobjectrequiredVAT per rate of
total − tip(items, fees, minus discount), computed like the restaurant's accounting export: discounts and delivery fees spread over the rates as the restaurant set it.Child fields (2)
includedbooleanrequiredAlways true: prices include VAT.
Values:
truelinesTaxLine[]requiredOne line per rate, ascending, lines without rate last. The gross amounts add up to total − tip.
Child fields (4)
rate_bpsintegerrequirednullableThe rate in basis points (700 = 7 %). null: no rate was stored for this part (not the same as 0 %); then net and tax are null.
grossintegerrequiredGross amount at this rate. Integer amount in the smallest currency unit (cents).
netintegerrequirednullablegross − tax, in cents. null when rate_bps is null.
taxintegerrequirednullableVAT contained in gross: round(gross × rate / (10000 + rate)), in cents. null when rate_bps is null.
paymentobjectrequiredHow and whether it is paid.
Child fields (3)
methodstringrequiredonline: paid at checkout.on_site: paid at pickup, delivery or the table.Values:
"online""on_site"statusstringrequiredpaidonce the online payment is confirmed.open: to be paid on site; it staysopen, because Flavoso does not record payments on site.Values:
"paid""open"paid_atstring (date-time)requirednullableWhen it was paid; null while open.
customerobjectrequirednullableOnly what is needed to hand the order over (data minimisation): no e-mail, and no phone for dine-in. null when neither is known.
Child fields (2)
namestringrequirednullableThe guest's name.
phonestringrequirednullablePhone for questions; null for dine-in.
deliveryobjectrequirednullableThe delivery address; null unless type is delivery.
Child fields (3)
addressstringrequirednullableStreet and number.
postal_codestringrequirednullablePostal code.
citystringrequirednullableCity.
tableobjectrequirednullableThe table of a dine-in order; null otherwise.
Child fields (2)
idstring (uuid)requiredThe table (
GET /tables).labelstringrequirednullableThe table's name, e.g. 4.
notestringrequirednullableGuest's note for the kitchen (allergies!).
itemsOrderItem[]requiredThe lines.
Child fields (8)
idstring (uuid)requiredThe line.
product_idstring (uuid)requirednullableThe dish (
GET /menu/products/{id}); null when it was deleted since.namestringrequiredName at the time of ordering.
quantityintegerrequiredHow many.
min 1
unit_priceintegerrequiredPrice of one unit including options. Integer amount in the smallest currency unit (cents).
line_totalintegerrequiredunit_price × quantity. Integer amount in the smallest currency unit (cents).
tax_rate_bpsintegerrequirednullableVAT rate frozen at order time, in basis points (700 = 7 %). null when the restaurant has not set rates.
optionsobject[]requiredThe chosen options (extras, sizes), as ordered. Name, surcharge and group name are frozen at order time; the ids point to the menu (
GET /menu/options/{id}) as long as the option exists.Child fields (5)
idstring (uuid)requirednullableThe option (
GET /menu/options/{id}); with it you find your own modifier through itsexternal_id. null for orders placed before 8 October 2026.namestringrequiredName of the option.
price_deltaintegerrequiredSurcharge of this option, per unit. Integer amount in the smallest currency unit (cents).
group_idstring (uuid)requirednullableThe option group the option was chosen in (
GET /menu/option-groups/{id}). null for orders placed before 8 October 2026.group_namestringrequirednullableName of that group at order time, e.g. Extras or Size. null for orders placed before 8 October 2026.
{
"id": "evt_2bf5a9b06b75442a9244e884a1acfc57",
"object": "event",
"type": "order.paid",
"created_at": "2026-10-04T17:46:12.410Z",
"api_version": "2026-10-08",
"livemode": true,
"tenant_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"connection_id": "4b3f7c1e-9a2d-4e8b-b5f6-0c1d2e3f4a5b",
"data": {
"object": {
"object": "order",
"id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
"code": "K7Q2M9",
"external_id": "ART-1001",
"type": "pickup",
"source": "storefront",
"status": "pending",
"created_at": "2026-10-04T17:44:59.942Z",
"updated_at": "2026-10-04T17:44:59.942Z",
"acknowledged_at": "2026-10-04T17:44:59.942Z",
"requested_for": "2026-10-04T17:44:59.942Z",
"currency": "EUR",
"amounts": {
"subtotal": 1290,
"delivery_fee": 1290,
"service_fee": 1290,
"discount": 1290,
"tip": 1290,
"total": 1290
},
"tax": {
"included": true,
"lines": [
{
"rate_bps": 700,
"gross": 1290,
"net": 1290,
"tax": 1290
}
]
},
"payment": {
"method": "online",
"status": "paid",
"paid_at": "2026-10-04T17:44:59.942Z"
},
"customer": {
"name": "string",
"phone": "string"
},
"delivery": {
"address": "string",
"postal_code": "string",
"city": "string"
},
"table": {
"id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
"label": "string"
},
"note": "string",
"items": [
{
"id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
"product_id": "6818680c-4376-47b0-a818-680c4376d7b0",
"name": "string",
"quantity": 1,
"unit_price": 1290,
"line_total": 1290,
"tax_rate_bps": 700,
"options": [
{
"id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
"name": "string",
"price_delta": 1290,
"group_id": "9594642c-e6ef-49ac-a594-642ce6efc9ac",
"group_name": "string"
}
]
}
]
}
}
}Reservations
reservation.created
A reservation is new, made online by the guest or by the team.
Required scope: reservations:read
Fields in data
objectReservationrequiredA table reservation. Contact details stay in Flavoso (data minimisation); the name is enough to greet the party.
Child fields (14)
objectstringrequiredAlways
reservation.Values:
"reservation"idstring (uuid)requiredThe reservation.
codestringrequiredShort code the guest sees.
statusstringrequiredpendingis a request the restaurant still has to confirm.Values:
"pending""confirmed""declined""seated""done""cancelled""no_show"starts_atstring (date-time)requiredStart of the reservation. ISO 8601 in UTC (
Z).duration_minutesintegerrequiredHow long the table is held.
party_sizeintegerrequiredNumber of guests.
table_idsstring (uuid)[]requiredAssigned tables (
GET /tables); empty when none is assigned yet.sourcestringrequiredBooked online by the guest, by the restaurant's staff, or through this API.
Values:
"guest""staff""api"guest_namestringrequirednullableThe guest's name.
notestringrequirednullableThe guest's wish.
created_atstring (date-time)requiredWhen it was made. ISO 8601 in UTC (
Z).updated_atstring (date-time)requiredLast change. ISO 8601 in UTC (
Z).deleted_atstring (date-time)requirednullableOnly set in the event that reports a deletion; deleted reservations are not returned otherwise.
{
"id": "evt_2bf5a9b06b75442a9244e884a1acfc57",
"object": "event",
"type": "reservation.created",
"created_at": "2026-10-04T17:46:12.410Z",
"api_version": "2026-10-08",
"livemode": true,
"tenant_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"connection_id": "4b3f7c1e-9a2d-4e8b-b5f6-0c1d2e3f4a5b",
"data": {
"object": {
"object": "reservation",
"id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
"code": "K7Q2M9",
"status": "pending",
"starts_at": "2026-10-04T17:44:59.942Z",
"duration_minutes": 30,
"party_size": 2,
"table_ids": [
"8ca0177d-0bbd-4c8f-aca0-177d0bbd2c8f"
],
"source": "guest",
"guest_name": "string",
"note": "string",
"created_at": "2026-10-04T17:44:59.942Z",
"updated_at": "2026-10-04T17:44:59.942Z",
"deleted_at": "2026-10-04T17:44:59.942Z"
}
}
}reservation.updated
Status, time, party size, duration, tables or note of a reservation changed; changed says which. When the restaurant deletes a reservation, a final event arrives with changed: ["deleted"] and deleted_at; after that it answers 404.
Required scope: reservations:read
Fields in data
objectReservationrequiredA table reservation. Contact details stay in Flavoso (data minimisation); the name is enough to greet the party.
Child fields (14)
objectstringrequiredAlways
reservation.Values:
"reservation"idstring (uuid)requiredThe reservation.
codestringrequiredShort code the guest sees.
statusstringrequiredpendingis a request the restaurant still has to confirm.Values:
"pending""confirmed""declined""seated""done""cancelled""no_show"starts_atstring (date-time)requiredStart of the reservation. ISO 8601 in UTC (
Z).duration_minutesintegerrequiredHow long the table is held.
party_sizeintegerrequiredNumber of guests.
table_idsstring (uuid)[]requiredAssigned tables (
GET /tables); empty when none is assigned yet.sourcestringrequiredBooked online by the guest, by the restaurant's staff, or through this API.
Values:
"guest""staff""api"guest_namestringrequirednullableThe guest's name.
notestringrequirednullableThe guest's wish.
created_atstring (date-time)requiredWhen it was made. ISO 8601 in UTC (
Z).updated_atstring (date-time)requiredLast change. ISO 8601 in UTC (
Z).deleted_atstring (date-time)requirednullableOnly set in the event that reports a deletion; deleted reservations are not returned otherwise.
previous_statusstringnullableThe status before this change.
changedstring[]requiredThe fields this change touched.
Values:
"status""starts_at""party_size""duration_minutes""table_ids""note""deleted"
{
"id": "evt_2bf5a9b06b75442a9244e884a1acfc57",
"object": "event",
"type": "reservation.updated",
"created_at": "2026-10-04T17:46:12.410Z",
"api_version": "2026-10-08",
"livemode": true,
"tenant_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"connection_id": "4b3f7c1e-9a2d-4e8b-b5f6-0c1d2e3f4a5b",
"data": {
"object": {
"object": "reservation",
"id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
"code": "K7Q2M9",
"status": "pending",
"starts_at": "2026-10-04T17:44:59.942Z",
"duration_minutes": 30,
"party_size": 2,
"table_ids": [
"8ca0177d-0bbd-4c8f-aca0-177d0bbd2c8f"
],
"source": "guest",
"guest_name": "string",
"note": "string",
"created_at": "2026-10-04T17:44:59.942Z",
"updated_at": "2026-10-04T17:44:59.942Z",
"deleted_at": "2026-10-04T17:44:59.942Z"
},
"previous_status": "string",
"changed": [
"status"
]
}
}Store
store.paused
Online ordering was paused, until paused_until; object is the store, as in store.updated. When the pause ends by itself, no separate event is sent.
Required scope: store:read
Fields in data
objectStorerequiredThe store when the event was first read.
paused_untilandnotenext to it are the values of this pause.Child fields (22)
objectstringrequiredAlways
store.Values:
"store"idstring (uuid)requiredThe restaurant.
namestringrequiredName.
slugstringrequiredIts address:
<slug>.flavoso.com.timezonestringrequiredIANA time zone of all local times.
currencystringrequiredISO 4217.
statusstringrequiredRight now: open, closed (outside hours or a closed special day), or paused.
Values:
"open""closed""paused"paused_untilstring (date-time)requirednullableEnd of the running pause; null without one.
pause_notestringrequirednullableReason of the running pause.
next_opening_atstring (date-time)requirednullableNext opening while closed (looks two weeks ahead); null while open.
preordersbooleanrequiredGuests may order for a later time, also while closed.
order_typesobjectrequiredWhich order types guests can choose.
Child fields (3)
pickupbooleanrequiredPickup.
deliverybooleanrequiredDelivery.
dine_inbooleanrequiredOrdering at the table via QR code (Pro and up).
order_statusesstring[]requiredStatuses this restaurant uses, in order, plus completed and cancelled.
lead_timesobjectrequiredHow long the kitchen needs; the earliest pickup or delivery time.
Child fields (2)
pickup_minutesintegerrequiredMinutes until pickup, 0 to 240.
delivery_minutesintegerrequiredMinutes until delivery, 0 to 360.
min_orderintegerrequiredMinimum order value for delivery (0 = none). Integer amount in the smallest currency unit (cents).
always_openbooleanrequiredNo weekly schedule is set: online orders are taken around the clock (special days and pauses still apply) and no reservation times are offered.
opening_hoursWeekWindow[]requiredThe weekly opening windows; a weekday without windows is closed.
Child fields (3)
weekdayintegerrequired0 = Monday … 6 = Sunday.
0 to 6
openstringrequiredOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringrequiredClosing. Earlier than open: the window runs past midnight. Equal to open: until midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
delivery_hoursWeekWindow[]requiredWeekly delivery windows; empty means delivery follows opening_hours.
Child fields (3)
weekdayintegerrequired0 = Monday … 6 = Sunday.
0 to 6
openstringrequiredOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringrequiredClosing. Earlier than open: the window runs past midnight. Equal to open: until midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closuresClosure[]requiredUpcoming special days (today and later).
Child fields (5)
objectstringrequiredAlways
closure.Values:
"closure"datestring (date)requiredThe day. A date YYYY-MM-DD in the restaurant's time zone.
closedbooleanrequiredClosed all day.
hoursTimeWindow[]requiredThe windows of that day when not closed (at most two).
Child fields (2)
openstringrequiredOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringrequiredClosing; earlier than open runs past midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
notestringrequirednullableNote, e.g. the reason.
contactobjectrequiredPublic contact details.
Child fields (3)
phonestringrequirednullablePhone.
emailstringrequirednullableE-mail.
websitestringrequirednullableWebsite.
addressobjectrequirednullableThe address as far as it is known. Restaurants type it freely; postal code and city are only split out when a line starts with a postal code.
Child fields (4)
linestringrequirednullableStreet and number (or the whole address when it cannot be split).
postal_codestringrequirednullablePostal code, when it can be read from the address.
citystringrequirednullableCity, when it can be read from the address.
countrystringrequirednullableISO 3166-1 alpha-2, as in GET /me.
locationobjectrequirednullableCoordinates; null when not set.
Child fields (2)
latnumberrequiredLatitude.
lonnumberrequiredLongitude.
paused_untilstring (date-time)requiredWhen ordering resumes by itself.
notestringrequirednullableThe reason, if given.
{
"id": "evt_2bf5a9b06b75442a9244e884a1acfc57",
"object": "event",
"type": "store.paused",
"created_at": "2026-10-04T17:46:12.410Z",
"api_version": "2026-10-08",
"livemode": true,
"tenant_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"connection_id": "4b3f7c1e-9a2d-4e8b-b5f6-0c1d2e3f4a5b",
"data": {
"object": {
"object": "store",
"id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
"name": "string",
"slug": "pizzeria-example",
"timezone": "Europe/Berlin",
"currency": "EUR",
"status": "open",
"paused_until": "2026-10-04T17:44:59.942Z",
"pause_note": "string",
"next_opening_at": "2026-10-04T17:44:59.942Z",
"preorders": true,
"order_types": {
"pickup": true,
"delivery": true,
"dine_in": true
},
"order_statuses": [
"string"
],
"lead_times": {
"pickup_minutes": 30,
"delivery_minutes": 30
},
"min_order": 1290,
"always_open": true,
"opening_hours": [
{
"weekday": 0,
"open": "11:30",
"close": "22:00"
}
],
"delivery_hours": [
{
"weekday": 0,
"open": "11:30",
"close": "22:00"
}
],
"closures": [
{
"object": "closure",
"date": "2026-10-04",
"closed": true,
"hours": [
{
"open": "11:30",
"close": "22:00"
}
],
"note": "string"
}
],
"contact": {
"phone": "string",
"email": "string",
"website": "string"
},
"address": {
"line": "string",
"postal_code": "string",
"city": "string",
"country": "DE"
},
"location": {
"lat": 0,
"lon": 0
}
},
"paused_until": "2026-10-04T17:44:59.942Z",
"note": "string"
}
}store.resumed
A running pause was lifted early; object is the store.
Required scope: store:read
Fields in data
objectStorerequiredThe store when the event was first read.
Child fields (22)
objectstringrequiredAlways
store.Values:
"store"idstring (uuid)requiredThe restaurant.
namestringrequiredName.
slugstringrequiredIts address:
<slug>.flavoso.com.timezonestringrequiredIANA time zone of all local times.
currencystringrequiredISO 4217.
statusstringrequiredRight now: open, closed (outside hours or a closed special day), or paused.
Values:
"open""closed""paused"paused_untilstring (date-time)requirednullableEnd of the running pause; null without one.
pause_notestringrequirednullableReason of the running pause.
next_opening_atstring (date-time)requirednullableNext opening while closed (looks two weeks ahead); null while open.
preordersbooleanrequiredGuests may order for a later time, also while closed.
order_typesobjectrequiredWhich order types guests can choose.
Child fields (3)
pickupbooleanrequiredPickup.
deliverybooleanrequiredDelivery.
dine_inbooleanrequiredOrdering at the table via QR code (Pro and up).
order_statusesstring[]requiredStatuses this restaurant uses, in order, plus completed and cancelled.
lead_timesobjectrequiredHow long the kitchen needs; the earliest pickup or delivery time.
Child fields (2)
pickup_minutesintegerrequiredMinutes until pickup, 0 to 240.
delivery_minutesintegerrequiredMinutes until delivery, 0 to 360.
min_orderintegerrequiredMinimum order value for delivery (0 = none). Integer amount in the smallest currency unit (cents).
always_openbooleanrequiredNo weekly schedule is set: online orders are taken around the clock (special days and pauses still apply) and no reservation times are offered.
opening_hoursWeekWindow[]requiredThe weekly opening windows; a weekday without windows is closed.
Child fields (3)
weekdayintegerrequired0 = Monday … 6 = Sunday.
0 to 6
openstringrequiredOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringrequiredClosing. Earlier than open: the window runs past midnight. Equal to open: until midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
delivery_hoursWeekWindow[]requiredWeekly delivery windows; empty means delivery follows opening_hours.
Child fields (3)
weekdayintegerrequired0 = Monday … 6 = Sunday.
0 to 6
openstringrequiredOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringrequiredClosing. Earlier than open: the window runs past midnight. Equal to open: until midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closuresClosure[]requiredUpcoming special days (today and later).
Child fields (5)
objectstringrequiredAlways
closure.Values:
"closure"datestring (date)requiredThe day. A date YYYY-MM-DD in the restaurant's time zone.
closedbooleanrequiredClosed all day.
hoursTimeWindow[]requiredThe windows of that day when not closed (at most two).
Child fields (2)
openstringrequiredOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringrequiredClosing; earlier than open runs past midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
notestringrequirednullableNote, e.g. the reason.
contactobjectrequiredPublic contact details.
Child fields (3)
phonestringrequirednullablePhone.
emailstringrequirednullableE-mail.
websitestringrequirednullableWebsite.
addressobjectrequirednullableThe address as far as it is known. Restaurants type it freely; postal code and city are only split out when a line starts with a postal code.
Child fields (4)
linestringrequirednullableStreet and number (or the whole address when it cannot be split).
postal_codestringrequirednullablePostal code, when it can be read from the address.
citystringrequirednullableCity, when it can be read from the address.
countrystringrequirednullableISO 3166-1 alpha-2, as in GET /me.
locationobjectrequirednullableCoordinates; null when not set.
Child fields (2)
latnumberrequiredLatitude.
lonnumberrequiredLongitude.
{
"id": "evt_2bf5a9b06b75442a9244e884a1acfc57",
"object": "event",
"type": "store.resumed",
"created_at": "2026-10-04T17:46:12.410Z",
"api_version": "2026-10-08",
"livemode": true,
"tenant_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"connection_id": "4b3f7c1e-9a2d-4e8b-b5f6-0c1d2e3f4a5b",
"data": {
"object": {
"object": "store",
"id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
"name": "string",
"slug": "pizzeria-example",
"timezone": "Europe/Berlin",
"currency": "EUR",
"status": "open",
"paused_until": "2026-10-04T17:44:59.942Z",
"pause_note": "string",
"next_opening_at": "2026-10-04T17:44:59.942Z",
"preorders": true,
"order_types": {
"pickup": true,
"delivery": true,
"dine_in": true
},
"order_statuses": [
"string"
],
"lead_times": {
"pickup_minutes": 30,
"delivery_minutes": 30
},
"min_order": 1290,
"always_open": true,
"opening_hours": [
{
"weekday": 0,
"open": "11:30",
"close": "22:00"
}
],
"delivery_hours": [
{
"weekday": 0,
"open": "11:30",
"close": "22:00"
}
],
"closures": [
{
"object": "closure",
"date": "2026-10-04",
"closed": true,
"hours": [
{
"open": "11:30",
"close": "22:00"
}
],
"note": "string"
}
],
"contact": {
"phone": "string",
"email": "string",
"website": "string"
},
"address": {
"line": "string",
"postal_code": "string",
"city": "string",
"country": "DE"
},
"location": {
"lat": 0,
"lon": 0
}
}
}
}store.updated
Opening hours, special days, lead times, order types, the minimum order or the statuses the restaurant uses (order_statuses) changed; changed says which.
Required scope: store:read
Fields in data
objectStorerequiredThe restaurant as a store: status, schedule, ordering rules and contact.
Child fields (22)
objectstringrequiredAlways
store.Values:
"store"idstring (uuid)requiredThe restaurant.
namestringrequiredName.
slugstringrequiredIts address:
<slug>.flavoso.com.timezonestringrequiredIANA time zone of all local times.
currencystringrequiredISO 4217.
statusstringrequiredRight now: open, closed (outside hours or a closed special day), or paused.
Values:
"open""closed""paused"paused_untilstring (date-time)requirednullableEnd of the running pause; null without one.
pause_notestringrequirednullableReason of the running pause.
next_opening_atstring (date-time)requirednullableNext opening while closed (looks two weeks ahead); null while open.
preordersbooleanrequiredGuests may order for a later time, also while closed.
order_typesobjectrequiredWhich order types guests can choose.
Child fields (3)
pickupbooleanrequiredPickup.
deliverybooleanrequiredDelivery.
dine_inbooleanrequiredOrdering at the table via QR code (Pro and up).
order_statusesstring[]requiredStatuses this restaurant uses, in order, plus completed and cancelled.
lead_timesobjectrequiredHow long the kitchen needs; the earliest pickup or delivery time.
Child fields (2)
pickup_minutesintegerrequiredMinutes until pickup, 0 to 240.
delivery_minutesintegerrequiredMinutes until delivery, 0 to 360.
min_orderintegerrequiredMinimum order value for delivery (0 = none). Integer amount in the smallest currency unit (cents).
always_openbooleanrequiredNo weekly schedule is set: online orders are taken around the clock (special days and pauses still apply) and no reservation times are offered.
opening_hoursWeekWindow[]requiredThe weekly opening windows; a weekday without windows is closed.
Child fields (3)
weekdayintegerrequired0 = Monday … 6 = Sunday.
0 to 6
openstringrequiredOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringrequiredClosing. Earlier than open: the window runs past midnight. Equal to open: until midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
delivery_hoursWeekWindow[]requiredWeekly delivery windows; empty means delivery follows opening_hours.
Child fields (3)
weekdayintegerrequired0 = Monday … 6 = Sunday.
0 to 6
openstringrequiredOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringrequiredClosing. Earlier than open: the window runs past midnight. Equal to open: until midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closuresClosure[]requiredUpcoming special days (today and later).
Child fields (5)
objectstringrequiredAlways
closure.Values:
"closure"datestring (date)requiredThe day. A date YYYY-MM-DD in the restaurant's time zone.
closedbooleanrequiredClosed all day.
hoursTimeWindow[]requiredThe windows of that day when not closed (at most two).
Child fields (2)
openstringrequiredOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringrequiredClosing; earlier than open runs past midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
notestringrequirednullableNote, e.g. the reason.
contactobjectrequiredPublic contact details.
Child fields (3)
phonestringrequirednullablePhone.
emailstringrequirednullableE-mail.
websitestringrequirednullableWebsite.
addressobjectrequirednullableThe address as far as it is known. Restaurants type it freely; postal code and city are only split out when a line starts with a postal code.
Child fields (4)
linestringrequirednullableStreet and number (or the whole address when it cannot be split).
postal_codestringrequirednullablePostal code, when it can be read from the address.
citystringrequirednullableCity, when it can be read from the address.
countrystringrequirednullableISO 3166-1 alpha-2, as in GET /me.
locationobjectrequirednullableCoordinates; null when not set.
Child fields (2)
latnumberrequiredLatitude.
lonnumberrequiredLongitude.
changedstring[]requiredThe Store fields this change touched.
Values:
"opening_hours""delivery_hours""closures""lead_times""preorders""order_types""min_order""order_statuses"
{
"id": "evt_2bf5a9b06b75442a9244e884a1acfc57",
"object": "event",
"type": "store.updated",
"created_at": "2026-10-04T17:46:12.410Z",
"api_version": "2026-10-08",
"livemode": true,
"tenant_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"connection_id": "4b3f7c1e-9a2d-4e8b-b5f6-0c1d2e3f4a5b",
"data": {
"object": {
"object": "store",
"id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
"name": "string",
"slug": "pizzeria-example",
"timezone": "Europe/Berlin",
"currency": "EUR",
"status": "open",
"paused_until": "2026-10-04T17:44:59.942Z",
"pause_note": "string",
"next_opening_at": "2026-10-04T17:44:59.942Z",
"preorders": true,
"order_types": {
"pickup": true,
"delivery": true,
"dine_in": true
},
"order_statuses": [
"string"
],
"lead_times": {
"pickup_minutes": 30,
"delivery_minutes": 30
},
"min_order": 1290,
"always_open": true,
"opening_hours": [
{
"weekday": 0,
"open": "11:30",
"close": "22:00"
}
],
"delivery_hours": [
{
"weekday": 0,
"open": "11:30",
"close": "22:00"
}
],
"closures": [
{
"object": "closure",
"date": "2026-10-04",
"closed": true,
"hours": [
{
"open": "11:30",
"close": "22:00"
}
],
"note": "string"
}
],
"contact": {
"phone": "string",
"email": "string",
"website": "string"
},
"address": {
"line": "string",
"postal_code": "string",
"city": "string",
"country": "DE"
},
"location": {
"lat": 0,
"lon": 0
}
},
"changed": [
"opening_hours"
]
}
}Connection
app.connected
A restaurant connected your app, or connected it again after the connection had ended.
Required scope: none, only the connection itself
Fields in data
objectConnectionSummaryrequiredThe connection in
app.*events.Child fields (5)
objectstringrequiredAlways
connection.Values:
"connection"idstring (uuid)requiredThe connection.
scopesstring[]requiredThe permissions the restaurant granted.
Values:
"orders:read""orders:write""menu:read""menu:write""store:read""store:write""reservations:read""reservations:write""reports:read"created_atstring (date-time)requiredWhen the restaurant connected the app. ISO 8601 in UTC (
Z).revoked_atstring (date-time)requirednullableWhen the connection ended; null while it is active.
{
"id": "evt_2bf5a9b06b75442a9244e884a1acfc57",
"object": "event",
"type": "app.connected",
"created_at": "2026-10-04T17:46:12.410Z",
"api_version": "2026-10-08",
"livemode": true,
"tenant_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"connection_id": "4b3f7c1e-9a2d-4e8b-b5f6-0c1d2e3f4a5b",
"data": {
"object": {
"object": "connection",
"id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
"scopes": [
"orders:read"
],
"created_at": "2026-10-04T17:44:59.942Z",
"revoked_at": "2026-10-04T17:44:59.942Z"
}
}
}app.scopes_changed
The scopes of an existing connection changed, because the owner connected your app again with other scopes. previous_scopes holds the old ones.
Required scope: none, only the connection itself
Fields in data
objectConnectionSummaryrequiredThe connection in
app.*events.Child fields (5)
objectstringrequiredAlways
connection.Values:
"connection"idstring (uuid)requiredThe connection.
scopesstring[]requiredThe permissions the restaurant granted.
Values:
"orders:read""orders:write""menu:read""menu:write""store:read""store:write""reservations:read""reservations:write""reports:read"created_atstring (date-time)requiredWhen the restaurant connected the app. ISO 8601 in UTC (
Z).revoked_atstring (date-time)requirednullableWhen the connection ended; null while it is active.
previous_scopesstring[]requiredThe permissions before this change.
{
"id": "evt_2bf5a9b06b75442a9244e884a1acfc57",
"object": "event",
"type": "app.scopes_changed",
"created_at": "2026-10-04T17:46:12.410Z",
"api_version": "2026-10-08",
"livemode": true,
"tenant_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"connection_id": "4b3f7c1e-9a2d-4e8b-b5f6-0c1d2e3f4a5b",
"data": {
"object": {
"object": "connection",
"id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
"scopes": [
"orders:read"
],
"created_at": "2026-10-04T17:44:59.942Z",
"revoked_at": "2026-10-04T17:44:59.942Z"
},
"previous_scopes": [
"string"
]
}
}app.disconnected
The connection to a restaurant ended: the owner disconnected, your app disconnected (DELETE /connection) or Flavoso did. reason says who. After that, no token of this connection works any more; that is why it never arrives through GET /events.
Required scope: none, only the connection itself
Fields in data
objectConnectionSummaryrequiredThe connection in
app.*events.Child fields (5)
objectstringrequiredAlways
connection.Values:
"connection"idstring (uuid)requiredThe connection.
scopesstring[]requiredThe permissions the restaurant granted.
Values:
"orders:read""orders:write""menu:read""menu:write""store:read""store:write""reservations:read""reservations:write""reports:read"created_atstring (date-time)requiredWhen the restaurant connected the app. ISO 8601 in UTC (
Z).revoked_atstring (date-time)requirednullableWhen the connection ended; null while it is active.
reasonstringrequiredWho ended the connection.
Values:
"owner""app""admin"
{
"id": "evt_2bf5a9b06b75442a9244e884a1acfc57",
"object": "event",
"type": "app.disconnected",
"created_at": "2026-10-04T17:46:12.410Z",
"api_version": "2026-10-08",
"livemode": true,
"tenant_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"connection_id": "4b3f7c1e-9a2d-4e8b-b5f6-0c1d2e3f4a5b",
"data": {
"object": {
"object": "connection",
"id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
"scopes": [
"orders:read"
],
"created_at": "2026-10-04T17:44:59.942Z",
"revoked_at": "2026-10-04T17:44:59.942Z"
},
"reason": "owner"
}
}Test
ping
Only via “Send a test event” in the console. Never created by itself.
Required scope: none, only the connection itself
Fields in data
messagestring
{
"id": "evt_2bf5a9b06b75442a9244e884a1acfc57",
"object": "event",
"type": "ping",
"created_at": "2026-10-04T17:46:12.410Z",
"api_version": "2026-10-08",
"livemode": true,
"tenant_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"connection_id": "4b3f7c1e-9a2d-4e8b-b5f6-0c1d2e3f4a5b",
"data": {
"message": "string"
}
}Still unclear? Write to support@flavoso.com and include the id from X-Request-Id. It lets us find your request in the log.