Flavoso APIWebhooks und EreignisseEreignisarten
Ereignisarten
Jede Ereignisart mit Beschreibung, nötigem Recht, den Feldern in data und einem Beispiel-Umschlag.
Überblick
Ein Ereignis entsteht genau einmal je Änderung, egal ob sie im Dashboard, am Küchenbildschirm, in der Handy-App, am Bondrucker oder über die API passiert ist. Welche Arten deine App bekommt, wählst du in der Konsole; bei GET /events mit types.
Dein Programm sollte Arten, die es nicht kennt, ignorieren.
| Ereignisse | Nötiges Recht |
|---|---|
order.* | orders:read |
reservation.* | reservations:read |
menu.* | menu:read |
store.* | store:read |
app.* | keins, nur die eigene Verbindung |
Bestellungen
order.created
Eine neue Bestellung ist eingegangen: bei Zahlung vor Ort sofort, bei Online-Zahlung, sobald die Zahlung bestätigt ist. Genau einmal je Bestellung.
Nötiges Recht: orders:read
Felder in data
objectOrderPflichtThe 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.Felder darin (20)
objectstringPflichtAlways
order.Werte:
"order"idstring (uuid)PflichtThe order.
codestringPflichtShort code the guest sees and says at the counter, e.g. K7Q2M9.
external_idstringPflichtkann null seinYour 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.typestringPflichtHow the guest gets the order.
Werte:
"pickup""delivery""dine_in"sourcestringPflichtWhere 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).Werte:
"storefront""table""app"statusstringPflichtWhere the order is now. Restaurants may skip statuses, see
GET /store.Werte:
"pending""confirmed""preparing""ready""completed""cancelled"created_atstring (date-time)PflichtWhen the order was placed. ISO 8601 in UTC (
Z).updated_atstring (date-time)PflichtLast change. ISO 8601 in UTC (
Z).acknowledged_atstring (date-time)Pflichtkann null seinWhen 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)Pflichtkann null seinPickup or delivery time chosen by the guest (pre-order); null means as soon as possible.
currencystringPflichtISO 4217, e.g. EUR.
amountsobjectPflichtThe amounts of the order, in cents.
Felder darin (6)
subtotalintegerPflichtSum of the items. Integer amount in the smallest currency unit (cents).
delivery_feeintegerPflichtDelivery fee. Integer amount in the smallest currency unit (cents).
service_feeintegerPflichtService fee. Integer amount in the smallest currency unit (cents).
discountintegerPflichtDiscount (stamp card), already subtracted. Integer amount in the smallest currency unit (cents).
tipintegerPflichtTip. Pass-through, not revenue. Integer amount in the smallest currency unit (cents).
totalintegerPflichtsubtotal + delivery_fee + service_fee − discount + tip. Integer amount in the smallest currency unit (cents).
taxobjectPflichtVAT 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.Felder darin (2)
includedbooleanPflichtAlways true: prices include VAT.
Werte:
truelinesTaxLine[]PflichtOne line per rate, ascending, lines without rate last. The gross amounts add up to total − tip.
Felder darin (4)
rate_bpsintegerPflichtkann null seinThe 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.
grossintegerPflichtGross amount at this rate. Integer amount in the smallest currency unit (cents).
netintegerPflichtkann null seingross − tax, in cents. null when rate_bps is null.
taxintegerPflichtkann null seinVAT contained in gross: round(gross × rate / (10000 + rate)), in cents. null when rate_bps is null.
paymentobjectPflichtHow and whether it is paid.
Felder darin (3)
methodstringPflichtonline: paid at checkout.on_site: paid at pickup, delivery or the table.Werte:
"online""on_site"statusstringPflichtpaidonce the online payment is confirmed.open: to be paid on site; it staysopen, because Flavoso does not record payments on site.Werte:
"paid""open"paid_atstring (date-time)Pflichtkann null seinWhen it was paid; null while open.
customerobjectPflichtkann null seinOnly what is needed to hand the order over (data minimisation): no e-mail, and no phone for dine-in. null when neither is known.
Felder darin (2)
namestringPflichtkann null seinThe guest's name.
phonestringPflichtkann null seinPhone for questions; null for dine-in.
deliveryobjectPflichtkann null seinThe delivery address; null unless type is delivery.
Felder darin (3)
addressstringPflichtkann null seinStreet and number.
postal_codestringPflichtkann null seinPostal code.
citystringPflichtkann null seinCity.
tableobjectPflichtkann null seinThe table of a dine-in order; null otherwise.
Felder darin (2)
idstring (uuid)PflichtThe table (
GET /tables).labelstringPflichtkann null seinThe table's name, e.g. 4.
notestringPflichtkann null seinGuest's note for the kitchen (allergies!).
itemsOrderItem[]PflichtThe lines.
Felder darin (8)
idstring (uuid)PflichtThe line.
product_idstring (uuid)Pflichtkann null seinThe dish (
GET /menu/products/{id}); null when it was deleted since.namestringPflichtName at the time of ordering.
quantityintegerPflichtHow many.
min 1
unit_priceintegerPflichtPrice of one unit including options. Integer amount in the smallest currency unit (cents).
line_totalintegerPflichtunit_price × quantity. Integer amount in the smallest currency unit (cents).
tax_rate_bpsintegerPflichtkann null seinVAT rate frozen at order time, in basis points (700 = 7 %). null when the restaurant has not set rates.
optionsobject[]PflichtThe 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.Felder darin (5)
idstring (uuid)Pflichtkann null seinThe option (
GET /menu/options/{id}); with it you find your own modifier through itsexternal_id. null for orders placed before 8 October 2026.namestringPflichtName of the option.
price_deltaintegerPflichtSurcharge of this option, per unit. Integer amount in the smallest currency unit (cents).
group_idstring (uuid)Pflichtkann null seinThe option group the option was chosen in (
GET /menu/option-groups/{id}). null for orders placed before 8 October 2026.group_namestringPflichtkann null seinName 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
Eine Bestellung hat ihren Stand gewechselt, egal wo: Dashboard, Küchenbildschirm, Handy-App, Bondrucker oder API. previous_status nennt den alten.
Nötiges Recht: orders:read
Felder in data
objectOrderPflichtAn 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.
Felder darin (20)
objectstringPflichtAlways
order.Werte:
"order"idstring (uuid)PflichtThe order.
codestringPflichtShort code the guest sees and says at the counter, e.g. K7Q2M9.
external_idstringPflichtkann null seinYour 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.typestringPflichtHow the guest gets the order.
Werte:
"pickup""delivery""dine_in"sourcestringPflichtWhere 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).Werte:
"storefront""table""app"statusstringPflichtWhere the order is now. Restaurants may skip statuses, see
GET /store.Werte:
"pending""confirmed""preparing""ready""completed""cancelled"created_atstring (date-time)PflichtWhen the order was placed. ISO 8601 in UTC (
Z).updated_atstring (date-time)PflichtLast change. ISO 8601 in UTC (
Z).acknowledged_atstring (date-time)Pflichtkann null seinWhen 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)Pflichtkann null seinPickup or delivery time chosen by the guest (pre-order); null means as soon as possible.
currencystringPflichtISO 4217, e.g. EUR.
amountsobjectPflichtThe amounts of the order, in cents.
Felder darin (6)
subtotalintegerPflichtSum of the items. Integer amount in the smallest currency unit (cents).
delivery_feeintegerPflichtDelivery fee. Integer amount in the smallest currency unit (cents).
service_feeintegerPflichtService fee. Integer amount in the smallest currency unit (cents).
discountintegerPflichtDiscount (stamp card), already subtracted. Integer amount in the smallest currency unit (cents).
tipintegerPflichtTip. Pass-through, not revenue. Integer amount in the smallest currency unit (cents).
totalintegerPflichtsubtotal + delivery_fee + service_fee − discount + tip. Integer amount in the smallest currency unit (cents).
taxobjectPflichtVAT 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.Felder darin (2)
includedbooleanPflichtAlways true: prices include VAT.
Werte:
truelinesTaxLine[]PflichtOne line per rate, ascending, lines without rate last. The gross amounts add up to total − tip.
Felder darin (4)
rate_bpsintegerPflichtkann null seinThe 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.
grossintegerPflichtGross amount at this rate. Integer amount in the smallest currency unit (cents).
netintegerPflichtkann null seingross − tax, in cents. null when rate_bps is null.
taxintegerPflichtkann null seinVAT contained in gross: round(gross × rate / (10000 + rate)), in cents. null when rate_bps is null.
paymentobjectPflichtHow and whether it is paid.
Felder darin (3)
methodstringPflichtonline: paid at checkout.on_site: paid at pickup, delivery or the table.Werte:
"online""on_site"statusstringPflichtpaidonce the online payment is confirmed.open: to be paid on site; it staysopen, because Flavoso does not record payments on site.Werte:
"paid""open"paid_atstring (date-time)Pflichtkann null seinWhen it was paid; null while open.
customerobjectPflichtkann null seinOnly what is needed to hand the order over (data minimisation): no e-mail, and no phone for dine-in. null when neither is known.
Felder darin (2)
namestringPflichtkann null seinThe guest's name.
phonestringPflichtkann null seinPhone for questions; null for dine-in.
deliveryobjectPflichtkann null seinThe delivery address; null unless type is delivery.
Felder darin (3)
addressstringPflichtkann null seinStreet and number.
postal_codestringPflichtkann null seinPostal code.
citystringPflichtkann null seinCity.
tableobjectPflichtkann null seinThe table of a dine-in order; null otherwise.
Felder darin (2)
idstring (uuid)PflichtThe table (
GET /tables).labelstringPflichtkann null seinThe table's name, e.g. 4.
notestringPflichtkann null seinGuest's note for the kitchen (allergies!).
itemsOrderItem[]PflichtThe lines.
Felder darin (8)
idstring (uuid)PflichtThe line.
product_idstring (uuid)Pflichtkann null seinThe dish (
GET /menu/products/{id}); null when it was deleted since.namestringPflichtName at the time of ordering.
quantityintegerPflichtHow many.
min 1
unit_priceintegerPflichtPrice of one unit including options. Integer amount in the smallest currency unit (cents).
line_totalintegerPflichtunit_price × quantity. Integer amount in the smallest currency unit (cents).
tax_rate_bpsintegerPflichtkann null seinVAT rate frozen at order time, in basis points (700 = 7 %). null when the restaurant has not set rates.
optionsobject[]PflichtThe 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.Felder darin (5)
idstring (uuid)Pflichtkann null seinThe option (
GET /menu/options/{id}); with it you find your own modifier through itsexternal_id. null for orders placed before 8 October 2026.namestringPflichtName of the option.
price_deltaintegerPflichtSurcharge of this option, per unit. Integer amount in the smallest currency unit (cents).
group_idstring (uuid)Pflichtkann null seinThe option group the option was chosen in (
GET /menu/option-groups/{id}). null for orders placed before 8 October 2026.group_namestringPflichtkann null seinName of that group at order time, e.g. Extras or Size. null for orders placed before 8 October 2026.
previous_statusstringPflichtThe 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
Eine Bestellung wurde storniert oder abgelehnt. Kommt zusätzlich zu order.status_changed.
Nötiges Recht: orders:read
Felder in data
objectOrderPflichtAn 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.
Felder darin (20)
objectstringPflichtAlways
order.Werte:
"order"idstring (uuid)PflichtThe order.
codestringPflichtShort code the guest sees and says at the counter, e.g. K7Q2M9.
external_idstringPflichtkann null seinYour 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.typestringPflichtHow the guest gets the order.
Werte:
"pickup""delivery""dine_in"sourcestringPflichtWhere 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).Werte:
"storefront""table""app"statusstringPflichtWhere the order is now. Restaurants may skip statuses, see
GET /store.Werte:
"pending""confirmed""preparing""ready""completed""cancelled"created_atstring (date-time)PflichtWhen the order was placed. ISO 8601 in UTC (
Z).updated_atstring (date-time)PflichtLast change. ISO 8601 in UTC (
Z).acknowledged_atstring (date-time)Pflichtkann null seinWhen 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)Pflichtkann null seinPickup or delivery time chosen by the guest (pre-order); null means as soon as possible.
currencystringPflichtISO 4217, e.g. EUR.
amountsobjectPflichtThe amounts of the order, in cents.
Felder darin (6)
subtotalintegerPflichtSum of the items. Integer amount in the smallest currency unit (cents).
delivery_feeintegerPflichtDelivery fee. Integer amount in the smallest currency unit (cents).
service_feeintegerPflichtService fee. Integer amount in the smallest currency unit (cents).
discountintegerPflichtDiscount (stamp card), already subtracted. Integer amount in the smallest currency unit (cents).
tipintegerPflichtTip. Pass-through, not revenue. Integer amount in the smallest currency unit (cents).
totalintegerPflichtsubtotal + delivery_fee + service_fee − discount + tip. Integer amount in the smallest currency unit (cents).
taxobjectPflichtVAT 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.Felder darin (2)
includedbooleanPflichtAlways true: prices include VAT.
Werte:
truelinesTaxLine[]PflichtOne line per rate, ascending, lines without rate last. The gross amounts add up to total − tip.
Felder darin (4)
rate_bpsintegerPflichtkann null seinThe 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.
grossintegerPflichtGross amount at this rate. Integer amount in the smallest currency unit (cents).
netintegerPflichtkann null seingross − tax, in cents. null when rate_bps is null.
taxintegerPflichtkann null seinVAT contained in gross: round(gross × rate / (10000 + rate)), in cents. null when rate_bps is null.
paymentobjectPflichtHow and whether it is paid.
Felder darin (3)
methodstringPflichtonline: paid at checkout.on_site: paid at pickup, delivery or the table.Werte:
"online""on_site"statusstringPflichtpaidonce the online payment is confirmed.open: to be paid on site; it staysopen, because Flavoso does not record payments on site.Werte:
"paid""open"paid_atstring (date-time)Pflichtkann null seinWhen it was paid; null while open.
customerobjectPflichtkann null seinOnly what is needed to hand the order over (data minimisation): no e-mail, and no phone for dine-in. null when neither is known.
Felder darin (2)
namestringPflichtkann null seinThe guest's name.
phonestringPflichtkann null seinPhone for questions; null for dine-in.
deliveryobjectPflichtkann null seinThe delivery address; null unless type is delivery.
Felder darin (3)
addressstringPflichtkann null seinStreet and number.
postal_codestringPflichtkann null seinPostal code.
citystringPflichtkann null seinCity.
tableobjectPflichtkann null seinThe table of a dine-in order; null otherwise.
Felder darin (2)
idstring (uuid)PflichtThe table (
GET /tables).labelstringPflichtkann null seinThe table's name, e.g. 4.
notestringPflichtkann null seinGuest's note for the kitchen (allergies!).
itemsOrderItem[]PflichtThe lines.
Felder darin (8)
idstring (uuid)PflichtThe line.
product_idstring (uuid)Pflichtkann null seinThe dish (
GET /menu/products/{id}); null when it was deleted since.namestringPflichtName at the time of ordering.
quantityintegerPflichtHow many.
min 1
unit_priceintegerPflichtPrice of one unit including options. Integer amount in the smallest currency unit (cents).
line_totalintegerPflichtunit_price × quantity. Integer amount in the smallest currency unit (cents).
tax_rate_bpsintegerPflichtkann null seinVAT rate frozen at order time, in basis points (700 = 7 %). null when the restaurant has not set rates.
optionsobject[]PflichtThe 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.Felder darin (5)
idstring (uuid)Pflichtkann null seinThe option (
GET /menu/options/{id}); with it you find your own modifier through itsexternal_id. null for orders placed before 8 October 2026.namestringPflichtName of the option.
price_deltaintegerPflichtSurcharge of this option, per unit. Integer amount in the smallest currency unit (cents).
group_idstring (uuid)Pflichtkann null seinThe option group the option was chosen in (
GET /menu/option-groups/{id}). null for orders placed before 8 October 2026.group_namestringPflichtkann null seinName of that group at order time, e.g. Extras or Size. null for orders placed before 8 October 2026.
previous_statusstringPflichtThe 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
Eine Bestellung wurde online bezahlt: der Zahlungsanbieter hat die Zahlung bestätigt, und ab da gibt es die Bestellung (gleich nach order.created). Was vor Ort bezahlt wird, vermerkt Flavoso nicht als bezahlt; dafür kommt dieses Ereignis nie.
Nötiges Recht: orders:read
Felder in data
objectOrderPflichtAn 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.
Felder darin (20)
objectstringPflichtAlways
order.Werte:
"order"idstring (uuid)PflichtThe order.
codestringPflichtShort code the guest sees and says at the counter, e.g. K7Q2M9.
external_idstringPflichtkann null seinYour 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.typestringPflichtHow the guest gets the order.
Werte:
"pickup""delivery""dine_in"sourcestringPflichtWhere 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).Werte:
"storefront""table""app"statusstringPflichtWhere the order is now. Restaurants may skip statuses, see
GET /store.Werte:
"pending""confirmed""preparing""ready""completed""cancelled"created_atstring (date-time)PflichtWhen the order was placed. ISO 8601 in UTC (
Z).updated_atstring (date-time)PflichtLast change. ISO 8601 in UTC (
Z).acknowledged_atstring (date-time)Pflichtkann null seinWhen 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)Pflichtkann null seinPickup or delivery time chosen by the guest (pre-order); null means as soon as possible.
currencystringPflichtISO 4217, e.g. EUR.
amountsobjectPflichtThe amounts of the order, in cents.
Felder darin (6)
subtotalintegerPflichtSum of the items. Integer amount in the smallest currency unit (cents).
delivery_feeintegerPflichtDelivery fee. Integer amount in the smallest currency unit (cents).
service_feeintegerPflichtService fee. Integer amount in the smallest currency unit (cents).
discountintegerPflichtDiscount (stamp card), already subtracted. Integer amount in the smallest currency unit (cents).
tipintegerPflichtTip. Pass-through, not revenue. Integer amount in the smallest currency unit (cents).
totalintegerPflichtsubtotal + delivery_fee + service_fee − discount + tip. Integer amount in the smallest currency unit (cents).
taxobjectPflichtVAT 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.Felder darin (2)
includedbooleanPflichtAlways true: prices include VAT.
Werte:
truelinesTaxLine[]PflichtOne line per rate, ascending, lines without rate last. The gross amounts add up to total − tip.
Felder darin (4)
rate_bpsintegerPflichtkann null seinThe 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.
grossintegerPflichtGross amount at this rate. Integer amount in the smallest currency unit (cents).
netintegerPflichtkann null seingross − tax, in cents. null when rate_bps is null.
taxintegerPflichtkann null seinVAT contained in gross: round(gross × rate / (10000 + rate)), in cents. null when rate_bps is null.
paymentobjectPflichtHow and whether it is paid.
Felder darin (3)
methodstringPflichtonline: paid at checkout.on_site: paid at pickup, delivery or the table.Werte:
"online""on_site"statusstringPflichtpaidonce the online payment is confirmed.open: to be paid on site; it staysopen, because Flavoso does not record payments on site.Werte:
"paid""open"paid_atstring (date-time)Pflichtkann null seinWhen it was paid; null while open.
customerobjectPflichtkann null seinOnly what is needed to hand the order over (data minimisation): no e-mail, and no phone for dine-in. null when neither is known.
Felder darin (2)
namestringPflichtkann null seinThe guest's name.
phonestringPflichtkann null seinPhone for questions; null for dine-in.
deliveryobjectPflichtkann null seinThe delivery address; null unless type is delivery.
Felder darin (3)
addressstringPflichtkann null seinStreet and number.
postal_codestringPflichtkann null seinPostal code.
citystringPflichtkann null seinCity.
tableobjectPflichtkann null seinThe table of a dine-in order; null otherwise.
Felder darin (2)
idstring (uuid)PflichtThe table (
GET /tables).labelstringPflichtkann null seinThe table's name, e.g. 4.
notestringPflichtkann null seinGuest's note for the kitchen (allergies!).
itemsOrderItem[]PflichtThe lines.
Felder darin (8)
idstring (uuid)PflichtThe line.
product_idstring (uuid)Pflichtkann null seinThe dish (
GET /menu/products/{id}); null when it was deleted since.namestringPflichtName at the time of ordering.
quantityintegerPflichtHow many.
min 1
unit_priceintegerPflichtPrice of one unit including options. Integer amount in the smallest currency unit (cents).
line_totalintegerPflichtunit_price × quantity. Integer amount in the smallest currency unit (cents).
tax_rate_bpsintegerPflichtkann null seinVAT rate frozen at order time, in basis points (700 = 7 %). null when the restaurant has not set rates.
optionsobject[]PflichtThe 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.Felder darin (5)
idstring (uuid)Pflichtkann null seinThe option (
GET /menu/options/{id}); with it you find your own modifier through itsexternal_id. null for orders placed before 8 October 2026.namestringPflichtName of the option.
price_deltaintegerPflichtSurcharge of this option, per unit. Integer amount in the smallest currency unit (cents).
group_idstring (uuid)Pflichtkann null seinThe option group the option was chosen in (
GET /menu/option-groups/{id}). null for orders placed before 8 October 2026.group_namestringPflichtkann null seinName 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"
}
]
}
]
}
}
}Reservierungen
reservation.created
Eine Reservierung ist neu, online vom Gast oder vom Team angelegt.
Nötiges Recht: reservations:read
Felder in data
objectReservationPflichtA table reservation. Contact details stay in Flavoso (data minimisation); the name is enough to greet the party.
Felder darin (14)
objectstringPflichtAlways
reservation.Werte:
"reservation"idstring (uuid)PflichtThe reservation.
codestringPflichtShort code the guest sees.
statusstringPflichtpendingis a request the restaurant still has to confirm.Werte:
"pending""confirmed""declined""seated""done""cancelled""no_show"starts_atstring (date-time)PflichtStart of the reservation. ISO 8601 in UTC (
Z).duration_minutesintegerPflichtHow long the table is held.
party_sizeintegerPflichtNumber of guests.
table_idsstring (uuid)[]PflichtAssigned tables (
GET /tables); empty when none is assigned yet.sourcestringPflichtBooked online by the guest, by the restaurant's staff, or through this API.
Werte:
"guest""staff""api"guest_namestringPflichtkann null seinThe guest's name.
notestringPflichtkann null seinThe guest's wish.
created_atstring (date-time)PflichtWhen it was made. ISO 8601 in UTC (
Z).updated_atstring (date-time)PflichtLast change. ISO 8601 in UTC (
Z).deleted_atstring (date-time)Pflichtkann null seinOnly 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
Stand, Zeit, Personenzahl, Dauer, Tische oder Anmerkung einer Reservierung haben sich geändert; changed nennt, was. Löscht der Betrieb eine Reservierung, kommt ein letztes Ereignis mit changed: ["deleted"] und deleted_at, danach antwortet sie mit 404.
Nötiges Recht: reservations:read
Felder in data
objectReservationPflichtA table reservation. Contact details stay in Flavoso (data minimisation); the name is enough to greet the party.
Felder darin (14)
objectstringPflichtAlways
reservation.Werte:
"reservation"idstring (uuid)PflichtThe reservation.
codestringPflichtShort code the guest sees.
statusstringPflichtpendingis a request the restaurant still has to confirm.Werte:
"pending""confirmed""declined""seated""done""cancelled""no_show"starts_atstring (date-time)PflichtStart of the reservation. ISO 8601 in UTC (
Z).duration_minutesintegerPflichtHow long the table is held.
party_sizeintegerPflichtNumber of guests.
table_idsstring (uuid)[]PflichtAssigned tables (
GET /tables); empty when none is assigned yet.sourcestringPflichtBooked online by the guest, by the restaurant's staff, or through this API.
Werte:
"guest""staff""api"guest_namestringPflichtkann null seinThe guest's name.
notestringPflichtkann null seinThe guest's wish.
created_atstring (date-time)PflichtWhen it was made. ISO 8601 in UTC (
Z).updated_atstring (date-time)PflichtLast change. ISO 8601 in UTC (
Z).deleted_atstring (date-time)Pflichtkann null seinOnly set in the event that reports a deletion; deleted reservations are not returned otherwise.
previous_statusstringkann null seinThe status before this change.
changedstring[]PflichtThe fields this change touched.
Werte:
"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"
]
}
}Betrieb
store.paused
Die Bestellannahme wurde pausiert, bis paused_until; object ist der Laden, wie bei store.updated. Endet die Pause von selbst, kommt kein eigenes Ereignis.
Nötiges Recht: store:read
Felder in data
objectStorePflichtThe store when the event was first read.
paused_untilandnotenext to it are the values of this pause.Felder darin (22)
objectstringPflichtAlways
store.Werte:
"store"idstring (uuid)PflichtThe restaurant.
namestringPflichtName.
slugstringPflichtIts address:
<slug>.flavoso.com.timezonestringPflichtIANA time zone of all local times.
currencystringPflichtISO 4217.
statusstringPflichtRight now: open, closed (outside hours or a closed special day), or paused.
Werte:
"open""closed""paused"paused_untilstring (date-time)Pflichtkann null seinEnd of the running pause; null without one.
pause_notestringPflichtkann null seinReason of the running pause.
next_opening_atstring (date-time)Pflichtkann null seinNext opening while closed (looks two weeks ahead); null while open.
preordersbooleanPflichtGuests may order for a later time, also while closed.
order_typesobjectPflichtWhich order types guests can choose.
Felder darin (3)
pickupbooleanPflichtPickup.
deliverybooleanPflichtDelivery.
dine_inbooleanPflichtOrdering at the table via QR code (Pro and up).
order_statusesstring[]PflichtStatuses this restaurant uses, in order, plus completed and cancelled.
lead_timesobjectPflichtHow long the kitchen needs; the earliest pickup or delivery time.
Felder darin (2)
pickup_minutesintegerPflichtMinutes until pickup, 0 to 240.
delivery_minutesintegerPflichtMinutes until delivery, 0 to 360.
min_orderintegerPflichtMinimum order value for delivery (0 = none). Integer amount in the smallest currency unit (cents).
always_openbooleanPflichtNo 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[]PflichtThe weekly opening windows; a weekday without windows is closed.
Felder darin (3)
weekdayintegerPflicht0 = Monday … 6 = Sunday.
0 to 6
openstringPflichtOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringPflichtClosing. 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[]PflichtWeekly delivery windows; empty means delivery follows opening_hours.
Felder darin (3)
weekdayintegerPflicht0 = Monday … 6 = Sunday.
0 to 6
openstringPflichtOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringPflichtClosing. 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[]PflichtUpcoming special days (today and later).
Felder darin (5)
objectstringPflichtAlways
closure.Werte:
"closure"datestring (date)PflichtThe day. A date YYYY-MM-DD in the restaurant's time zone.
closedbooleanPflichtClosed all day.
hoursTimeWindow[]PflichtThe windows of that day when not closed (at most two).
Felder darin (2)
openstringPflichtOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringPflichtClosing; 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]$
notestringPflichtkann null seinNote, e.g. the reason.
contactobjectPflichtPublic contact details.
Felder darin (3)
phonestringPflichtkann null seinPhone.
emailstringPflichtkann null seinE-mail.
websitestringPflichtkann null seinWebsite.
addressobjectPflichtkann null seinThe 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.
Felder darin (4)
linestringPflichtkann null seinStreet and number (or the whole address when it cannot be split).
postal_codestringPflichtkann null seinPostal code, when it can be read from the address.
citystringPflichtkann null seinCity, when it can be read from the address.
countrystringPflichtkann null seinISO 3166-1 alpha-2, as in GET /me.
locationobjectPflichtkann null seinCoordinates; null when not set.
Felder darin (2)
latnumberPflichtLatitude.
lonnumberPflichtLongitude.
paused_untilstring (date-time)PflichtWhen ordering resumes by itself.
notestringPflichtkann null seinThe 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
Eine laufende Pause wurde vorzeitig beendet; object ist der Laden.
Nötiges Recht: store:read
Felder in data
objectStorePflichtThe store when the event was first read.
Felder darin (22)
objectstringPflichtAlways
store.Werte:
"store"idstring (uuid)PflichtThe restaurant.
namestringPflichtName.
slugstringPflichtIts address:
<slug>.flavoso.com.timezonestringPflichtIANA time zone of all local times.
currencystringPflichtISO 4217.
statusstringPflichtRight now: open, closed (outside hours or a closed special day), or paused.
Werte:
"open""closed""paused"paused_untilstring (date-time)Pflichtkann null seinEnd of the running pause; null without one.
pause_notestringPflichtkann null seinReason of the running pause.
next_opening_atstring (date-time)Pflichtkann null seinNext opening while closed (looks two weeks ahead); null while open.
preordersbooleanPflichtGuests may order for a later time, also while closed.
order_typesobjectPflichtWhich order types guests can choose.
Felder darin (3)
pickupbooleanPflichtPickup.
deliverybooleanPflichtDelivery.
dine_inbooleanPflichtOrdering at the table via QR code (Pro and up).
order_statusesstring[]PflichtStatuses this restaurant uses, in order, plus completed and cancelled.
lead_timesobjectPflichtHow long the kitchen needs; the earliest pickup or delivery time.
Felder darin (2)
pickup_minutesintegerPflichtMinutes until pickup, 0 to 240.
delivery_minutesintegerPflichtMinutes until delivery, 0 to 360.
min_orderintegerPflichtMinimum order value for delivery (0 = none). Integer amount in the smallest currency unit (cents).
always_openbooleanPflichtNo 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[]PflichtThe weekly opening windows; a weekday without windows is closed.
Felder darin (3)
weekdayintegerPflicht0 = Monday … 6 = Sunday.
0 to 6
openstringPflichtOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringPflichtClosing. 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[]PflichtWeekly delivery windows; empty means delivery follows opening_hours.
Felder darin (3)
weekdayintegerPflicht0 = Monday … 6 = Sunday.
0 to 6
openstringPflichtOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringPflichtClosing. 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[]PflichtUpcoming special days (today and later).
Felder darin (5)
objectstringPflichtAlways
closure.Werte:
"closure"datestring (date)PflichtThe day. A date YYYY-MM-DD in the restaurant's time zone.
closedbooleanPflichtClosed all day.
hoursTimeWindow[]PflichtThe windows of that day when not closed (at most two).
Felder darin (2)
openstringPflichtOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringPflichtClosing; 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]$
notestringPflichtkann null seinNote, e.g. the reason.
contactobjectPflichtPublic contact details.
Felder darin (3)
phonestringPflichtkann null seinPhone.
emailstringPflichtkann null seinE-mail.
websitestringPflichtkann null seinWebsite.
addressobjectPflichtkann null seinThe 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.
Felder darin (4)
linestringPflichtkann null seinStreet and number (or the whole address when it cannot be split).
postal_codestringPflichtkann null seinPostal code, when it can be read from the address.
citystringPflichtkann null seinCity, when it can be read from the address.
countrystringPflichtkann null seinISO 3166-1 alpha-2, as in GET /me.
locationobjectPflichtkann null seinCoordinates; null when not set.
Felder darin (2)
latnumberPflichtLatitude.
lonnumberPflichtLongitude.
{
"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
Öffnungszeiten, Sondertage, Vorlaufzeiten, Bestellarten, der Mindestbestellwert oder die Stände, die der Betrieb benutzt (order_statuses), haben sich geändert; changed nennt, was.
Nötiges Recht: store:read
Felder in data
objectStorePflichtThe restaurant as a store: status, schedule, ordering rules and contact.
Felder darin (22)
objectstringPflichtAlways
store.Werte:
"store"idstring (uuid)PflichtThe restaurant.
namestringPflichtName.
slugstringPflichtIts address:
<slug>.flavoso.com.timezonestringPflichtIANA time zone of all local times.
currencystringPflichtISO 4217.
statusstringPflichtRight now: open, closed (outside hours or a closed special day), or paused.
Werte:
"open""closed""paused"paused_untilstring (date-time)Pflichtkann null seinEnd of the running pause; null without one.
pause_notestringPflichtkann null seinReason of the running pause.
next_opening_atstring (date-time)Pflichtkann null seinNext opening while closed (looks two weeks ahead); null while open.
preordersbooleanPflichtGuests may order for a later time, also while closed.
order_typesobjectPflichtWhich order types guests can choose.
Felder darin (3)
pickupbooleanPflichtPickup.
deliverybooleanPflichtDelivery.
dine_inbooleanPflichtOrdering at the table via QR code (Pro and up).
order_statusesstring[]PflichtStatuses this restaurant uses, in order, plus completed and cancelled.
lead_timesobjectPflichtHow long the kitchen needs; the earliest pickup or delivery time.
Felder darin (2)
pickup_minutesintegerPflichtMinutes until pickup, 0 to 240.
delivery_minutesintegerPflichtMinutes until delivery, 0 to 360.
min_orderintegerPflichtMinimum order value for delivery (0 = none). Integer amount in the smallest currency unit (cents).
always_openbooleanPflichtNo 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[]PflichtThe weekly opening windows; a weekday without windows is closed.
Felder darin (3)
weekdayintegerPflicht0 = Monday … 6 = Sunday.
0 to 6
openstringPflichtOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringPflichtClosing. 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[]PflichtWeekly delivery windows; empty means delivery follows opening_hours.
Felder darin (3)
weekdayintegerPflicht0 = Monday … 6 = Sunday.
0 to 6
openstringPflichtOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringPflichtClosing. 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[]PflichtUpcoming special days (today and later).
Felder darin (5)
objectstringPflichtAlways
closure.Werte:
"closure"datestring (date)PflichtThe day. A date YYYY-MM-DD in the restaurant's time zone.
closedbooleanPflichtClosed all day.
hoursTimeWindow[]PflichtThe windows of that day when not closed (at most two).
Felder darin (2)
openstringPflichtOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringPflichtClosing; 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]$
notestringPflichtkann null seinNote, e.g. the reason.
contactobjectPflichtPublic contact details.
Felder darin (3)
phonestringPflichtkann null seinPhone.
emailstringPflichtkann null seinE-mail.
websitestringPflichtkann null seinWebsite.
addressobjectPflichtkann null seinThe 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.
Felder darin (4)
linestringPflichtkann null seinStreet and number (or the whole address when it cannot be split).
postal_codestringPflichtkann null seinPostal code, when it can be read from the address.
citystringPflichtkann null seinCity, when it can be read from the address.
countrystringPflichtkann null seinISO 3166-1 alpha-2, as in GET /me.
locationobjectPflichtkann null seinCoordinates; null when not set.
Felder darin (2)
latnumberPflichtLatitude.
lonnumberPflichtLongitude.
changedstring[]PflichtThe Store fields this change touched.
Werte:
"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"
]
}
}Verbindung
app.connected
Ein Betrieb hat deine App verbunden, oder neu verbunden, nachdem die Verbindung beendet war.
Nötiges Recht: keins, nur die eigene Verbindung
Felder in data
objectConnectionSummaryPflichtThe connection in
app.*events.Felder darin (5)
objectstringPflichtAlways
connection.Werte:
"connection"idstring (uuid)PflichtThe connection.
scopesstring[]PflichtThe permissions the restaurant granted.
Werte:
"orders:read""orders:write""menu:read""menu:write""store:read""store:write""reservations:read""reservations:write""reports:read"created_atstring (date-time)PflichtWhen the restaurant connected the app. ISO 8601 in UTC (
Z).revoked_atstring (date-time)Pflichtkann null seinWhen 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
Die Rechte einer bestehenden Verbindung haben sich geändert, weil der Inhaber deine App mit anderen Rechten neu verbunden hat. previous_scopes nennt die alten.
Nötiges Recht: keins, nur die eigene Verbindung
Felder in data
objectConnectionSummaryPflichtThe connection in
app.*events.Felder darin (5)
objectstringPflichtAlways
connection.Werte:
"connection"idstring (uuid)PflichtThe connection.
scopesstring[]PflichtThe permissions the restaurant granted.
Werte:
"orders:read""orders:write""menu:read""menu:write""store:read""store:write""reservations:read""reservations:write""reports:read"created_atstring (date-time)PflichtWhen the restaurant connected the app. ISO 8601 in UTC (
Z).revoked_atstring (date-time)Pflichtkann null seinWhen the connection ended; null while it is active.
previous_scopesstring[]PflichtThe 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
Die Verbindung zu einem Betrieb ist beendet: der Inhaber hat getrennt, deine App hat getrennt (DELETE /connection) oder Flavoso. reason sagt, wer. Danach gilt kein Token dieser Verbindung mehr; über GET /events kommt es deshalb nie an.
Nötiges Recht: keins, nur die eigene Verbindung
Felder in data
objectConnectionSummaryPflichtThe connection in
app.*events.Felder darin (5)
objectstringPflichtAlways
connection.Werte:
"connection"idstring (uuid)PflichtThe connection.
scopesstring[]PflichtThe permissions the restaurant granted.
Werte:
"orders:read""orders:write""menu:read""menu:write""store:read""store:write""reservations:read""reservations:write""reports:read"created_atstring (date-time)PflichtWhen the restaurant connected the app. ISO 8601 in UTC (
Z).revoked_atstring (date-time)Pflichtkann null seinWhen the connection ended; null while it is active.
reasonstringPflichtWho ended the connection.
Werte:
"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
Nur über „Test-Ereignis senden“ in der Konsole. Entsteht nie von selbst.
Nötiges Recht: keins, nur die eigene Verbindung
Felder 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"
}
}Etwas unklar geblieben? Schreib an support@flavoso.com und nenne die Kennung aus X-Request-Id. Damit finden wir deine Anfrage im Protokoll.