API FlavosoWebhooks et événementsTypes d'événements
Types d'événements
Chaque type d'événement avec sa description, le droit requis, les champs dans data et un exemple d'enveloppe.
Vue d'ensemble
Un événement est créé exactement une fois par changement, que celui-ci ait eu lieu dans le tableau de bord, sur l'écran de cuisine, dans l'application mobile, à l'imprimante de tickets ou via l'API. Vous choisissez dans la console les types que reçoit votre application ; pour GET /events, avec types.
Votre programme devrait ignorer les types qu'il ne connaît pas.
| Événements | Droit requis |
|---|---|
order.* | orders:read |
reservation.* | reservations:read |
menu.* | menu:read |
store.* | store:read |
app.* | aucun, seulement la connexion elle-même |
Commandes
order.created
Une nouvelle commande est arrivée : immédiatement avec paiement sur place, une fois le paiement confirmé avec paiement en ligne. Une seule fois par commande.
Droit requis: orders:read
Champs dans data
objectOrderobligatoireThe 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.Champs contenus (20)
objectstringobligatoireAlways
order.Valeurs:
"order"idstring (uuid)obligatoireThe order.
codestringobligatoireShort code the guest sees and says at the counter, e.g. K7Q2M9.
external_idstringobligatoirepeut être nullYour 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.typestringobligatoireHow the guest gets the order.
Valeurs:
"pickup""delivery""dine_in"sourcestringobligatoireWhere 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).Valeurs:
"storefront""table""app"statusstringobligatoireWhere the order is now. Restaurants may skip statuses, see
GET /store.Valeurs:
"pending""confirmed""preparing""ready""completed""cancelled"created_atstring (date-time)obligatoireWhen the order was placed. ISO 8601 in UTC (
Z).updated_atstring (date-time)obligatoireLast change. ISO 8601 in UTC (
Z).acknowledged_atstring (date-time)obligatoirepeut être nullWhen 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)obligatoirepeut être nullPickup or delivery time chosen by the guest (pre-order); null means as soon as possible.
currencystringobligatoireISO 4217, e.g. EUR.
amountsobjectobligatoireThe amounts of the order, in cents.
Champs contenus (6)
subtotalintegerobligatoireSum of the items. Integer amount in the smallest currency unit (cents).
delivery_feeintegerobligatoireDelivery fee. Integer amount in the smallest currency unit (cents).
service_feeintegerobligatoireService fee. Integer amount in the smallest currency unit (cents).
discountintegerobligatoireDiscount (stamp card), already subtracted. Integer amount in the smallest currency unit (cents).
tipintegerobligatoireTip. Pass-through, not revenue. Integer amount in the smallest currency unit (cents).
totalintegerobligatoiresubtotal + delivery_fee + service_fee − discount + tip. Integer amount in the smallest currency unit (cents).
taxobjectobligatoireVAT 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.Champs contenus (2)
includedbooleanobligatoireAlways true: prices include VAT.
Valeurs:
truelinesTaxLine[]obligatoireOne line per rate, ascending, lines without rate last. The gross amounts add up to total − tip.
Champs contenus (4)
rate_bpsintegerobligatoirepeut être nullThe 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.
grossintegerobligatoireGross amount at this rate. Integer amount in the smallest currency unit (cents).
netintegerobligatoirepeut être nullgross − tax, in cents. null when rate_bps is null.
taxintegerobligatoirepeut être nullVAT contained in gross: round(gross × rate / (10000 + rate)), in cents. null when rate_bps is null.
paymentobjectobligatoireHow and whether it is paid.
Champs contenus (3)
methodstringobligatoireonline: paid at checkout.on_site: paid at pickup, delivery or the table.Valeurs:
"online""on_site"statusstringobligatoirepaidonce the online payment is confirmed.open: to be paid on site; it staysopen, because Flavoso does not record payments on site.Valeurs:
"paid""open"paid_atstring (date-time)obligatoirepeut être nullWhen it was paid; null while open.
customerobjectobligatoirepeut être nullOnly what is needed to hand the order over (data minimisation): no e-mail, and no phone for dine-in. null when neither is known.
Champs contenus (2)
namestringobligatoirepeut être nullThe guest's name.
phonestringobligatoirepeut être nullPhone for questions; null for dine-in.
deliveryobjectobligatoirepeut être nullThe delivery address; null unless type is delivery.
Champs contenus (3)
addressstringobligatoirepeut être nullStreet and number.
postal_codestringobligatoirepeut être nullPostal code.
citystringobligatoirepeut être nullCity.
tableobjectobligatoirepeut être nullThe table of a dine-in order; null otherwise.
Champs contenus (2)
idstring (uuid)obligatoireThe table (
GET /tables).labelstringobligatoirepeut être nullThe table's name, e.g. 4.
notestringobligatoirepeut être nullGuest's note for the kitchen (allergies!).
itemsOrderItem[]obligatoireThe lines.
Champs contenus (8)
idstring (uuid)obligatoireThe line.
product_idstring (uuid)obligatoirepeut être nullThe dish (
GET /menu/products/{id}); null when it was deleted since.namestringobligatoireName at the time of ordering.
quantityintegerobligatoireHow many.
min 1
unit_priceintegerobligatoirePrice of one unit including options. Integer amount in the smallest currency unit (cents).
line_totalintegerobligatoireunit_price × quantity. Integer amount in the smallest currency unit (cents).
tax_rate_bpsintegerobligatoirepeut être nullVAT rate frozen at order time, in basis points (700 = 7 %). null when the restaurant has not set rates.
optionsobject[]obligatoireThe 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.Champs contenus (5)
idstring (uuid)obligatoirepeut être nullThe option (
GET /menu/options/{id}); with it you find your own modifier through itsexternal_id. null for orders placed before 8 October 2026.namestringobligatoireName of the option.
price_deltaintegerobligatoireSurcharge of this option, per unit. Integer amount in the smallest currency unit (cents).
group_idstring (uuid)obligatoirepeut être nullThe option group the option was chosen in (
GET /menu/option-groups/{id}). null for orders placed before 8 October 2026.group_namestringobligatoirepeut être nullName 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
Une commande a changé de statut, où que ce soit : tableau de bord, écran de cuisine, application mobile, imprimante de tickets ou API. previous_status indique l'ancien.
Droit requis: orders:read
Champs dans data
objectOrderobligatoireAn 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.
Champs contenus (20)
objectstringobligatoireAlways
order.Valeurs:
"order"idstring (uuid)obligatoireThe order.
codestringobligatoireShort code the guest sees and says at the counter, e.g. K7Q2M9.
external_idstringobligatoirepeut être nullYour 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.typestringobligatoireHow the guest gets the order.
Valeurs:
"pickup""delivery""dine_in"sourcestringobligatoireWhere 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).Valeurs:
"storefront""table""app"statusstringobligatoireWhere the order is now. Restaurants may skip statuses, see
GET /store.Valeurs:
"pending""confirmed""preparing""ready""completed""cancelled"created_atstring (date-time)obligatoireWhen the order was placed. ISO 8601 in UTC (
Z).updated_atstring (date-time)obligatoireLast change. ISO 8601 in UTC (
Z).acknowledged_atstring (date-time)obligatoirepeut être nullWhen 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)obligatoirepeut être nullPickup or delivery time chosen by the guest (pre-order); null means as soon as possible.
currencystringobligatoireISO 4217, e.g. EUR.
amountsobjectobligatoireThe amounts of the order, in cents.
Champs contenus (6)
subtotalintegerobligatoireSum of the items. Integer amount in the smallest currency unit (cents).
delivery_feeintegerobligatoireDelivery fee. Integer amount in the smallest currency unit (cents).
service_feeintegerobligatoireService fee. Integer amount in the smallest currency unit (cents).
discountintegerobligatoireDiscount (stamp card), already subtracted. Integer amount in the smallest currency unit (cents).
tipintegerobligatoireTip. Pass-through, not revenue. Integer amount in the smallest currency unit (cents).
totalintegerobligatoiresubtotal + delivery_fee + service_fee − discount + tip. Integer amount in the smallest currency unit (cents).
taxobjectobligatoireVAT 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.Champs contenus (2)
includedbooleanobligatoireAlways true: prices include VAT.
Valeurs:
truelinesTaxLine[]obligatoireOne line per rate, ascending, lines without rate last. The gross amounts add up to total − tip.
Champs contenus (4)
rate_bpsintegerobligatoirepeut être nullThe 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.
grossintegerobligatoireGross amount at this rate. Integer amount in the smallest currency unit (cents).
netintegerobligatoirepeut être nullgross − tax, in cents. null when rate_bps is null.
taxintegerobligatoirepeut être nullVAT contained in gross: round(gross × rate / (10000 + rate)), in cents. null when rate_bps is null.
paymentobjectobligatoireHow and whether it is paid.
Champs contenus (3)
methodstringobligatoireonline: paid at checkout.on_site: paid at pickup, delivery or the table.Valeurs:
"online""on_site"statusstringobligatoirepaidonce the online payment is confirmed.open: to be paid on site; it staysopen, because Flavoso does not record payments on site.Valeurs:
"paid""open"paid_atstring (date-time)obligatoirepeut être nullWhen it was paid; null while open.
customerobjectobligatoirepeut être nullOnly what is needed to hand the order over (data minimisation): no e-mail, and no phone for dine-in. null when neither is known.
Champs contenus (2)
namestringobligatoirepeut être nullThe guest's name.
phonestringobligatoirepeut être nullPhone for questions; null for dine-in.
deliveryobjectobligatoirepeut être nullThe delivery address; null unless type is delivery.
Champs contenus (3)
addressstringobligatoirepeut être nullStreet and number.
postal_codestringobligatoirepeut être nullPostal code.
citystringobligatoirepeut être nullCity.
tableobjectobligatoirepeut être nullThe table of a dine-in order; null otherwise.
Champs contenus (2)
idstring (uuid)obligatoireThe table (
GET /tables).labelstringobligatoirepeut être nullThe table's name, e.g. 4.
notestringobligatoirepeut être nullGuest's note for the kitchen (allergies!).
itemsOrderItem[]obligatoireThe lines.
Champs contenus (8)
idstring (uuid)obligatoireThe line.
product_idstring (uuid)obligatoirepeut être nullThe dish (
GET /menu/products/{id}); null when it was deleted since.namestringobligatoireName at the time of ordering.
quantityintegerobligatoireHow many.
min 1
unit_priceintegerobligatoirePrice of one unit including options. Integer amount in the smallest currency unit (cents).
line_totalintegerobligatoireunit_price × quantity. Integer amount in the smallest currency unit (cents).
tax_rate_bpsintegerobligatoirepeut être nullVAT rate frozen at order time, in basis points (700 = 7 %). null when the restaurant has not set rates.
optionsobject[]obligatoireThe 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.Champs contenus (5)
idstring (uuid)obligatoirepeut être nullThe option (
GET /menu/options/{id}); with it you find your own modifier through itsexternal_id. null for orders placed before 8 October 2026.namestringobligatoireName of the option.
price_deltaintegerobligatoireSurcharge of this option, per unit. Integer amount in the smallest currency unit (cents).
group_idstring (uuid)obligatoirepeut être nullThe option group the option was chosen in (
GET /menu/option-groups/{id}). null for orders placed before 8 October 2026.group_namestringobligatoirepeut être nullName of that group at order time, e.g. Extras or Size. null for orders placed before 8 October 2026.
previous_statusstringobligatoireThe 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
Une commande a été annulée ou refusée. Envoyé en plus de order.status_changed.
Droit requis: orders:read
Champs dans data
objectOrderobligatoireAn 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.
Champs contenus (20)
objectstringobligatoireAlways
order.Valeurs:
"order"idstring (uuid)obligatoireThe order.
codestringobligatoireShort code the guest sees and says at the counter, e.g. K7Q2M9.
external_idstringobligatoirepeut être nullYour 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.typestringobligatoireHow the guest gets the order.
Valeurs:
"pickup""delivery""dine_in"sourcestringobligatoireWhere 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).Valeurs:
"storefront""table""app"statusstringobligatoireWhere the order is now. Restaurants may skip statuses, see
GET /store.Valeurs:
"pending""confirmed""preparing""ready""completed""cancelled"created_atstring (date-time)obligatoireWhen the order was placed. ISO 8601 in UTC (
Z).updated_atstring (date-time)obligatoireLast change. ISO 8601 in UTC (
Z).acknowledged_atstring (date-time)obligatoirepeut être nullWhen 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)obligatoirepeut être nullPickup or delivery time chosen by the guest (pre-order); null means as soon as possible.
currencystringobligatoireISO 4217, e.g. EUR.
amountsobjectobligatoireThe amounts of the order, in cents.
Champs contenus (6)
subtotalintegerobligatoireSum of the items. Integer amount in the smallest currency unit (cents).
delivery_feeintegerobligatoireDelivery fee. Integer amount in the smallest currency unit (cents).
service_feeintegerobligatoireService fee. Integer amount in the smallest currency unit (cents).
discountintegerobligatoireDiscount (stamp card), already subtracted. Integer amount in the smallest currency unit (cents).
tipintegerobligatoireTip. Pass-through, not revenue. Integer amount in the smallest currency unit (cents).
totalintegerobligatoiresubtotal + delivery_fee + service_fee − discount + tip. Integer amount in the smallest currency unit (cents).
taxobjectobligatoireVAT 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.Champs contenus (2)
includedbooleanobligatoireAlways true: prices include VAT.
Valeurs:
truelinesTaxLine[]obligatoireOne line per rate, ascending, lines without rate last. The gross amounts add up to total − tip.
Champs contenus (4)
rate_bpsintegerobligatoirepeut être nullThe 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.
grossintegerobligatoireGross amount at this rate. Integer amount in the smallest currency unit (cents).
netintegerobligatoirepeut être nullgross − tax, in cents. null when rate_bps is null.
taxintegerobligatoirepeut être nullVAT contained in gross: round(gross × rate / (10000 + rate)), in cents. null when rate_bps is null.
paymentobjectobligatoireHow and whether it is paid.
Champs contenus (3)
methodstringobligatoireonline: paid at checkout.on_site: paid at pickup, delivery or the table.Valeurs:
"online""on_site"statusstringobligatoirepaidonce the online payment is confirmed.open: to be paid on site; it staysopen, because Flavoso does not record payments on site.Valeurs:
"paid""open"paid_atstring (date-time)obligatoirepeut être nullWhen it was paid; null while open.
customerobjectobligatoirepeut être nullOnly what is needed to hand the order over (data minimisation): no e-mail, and no phone for dine-in. null when neither is known.
Champs contenus (2)
namestringobligatoirepeut être nullThe guest's name.
phonestringobligatoirepeut être nullPhone for questions; null for dine-in.
deliveryobjectobligatoirepeut être nullThe delivery address; null unless type is delivery.
Champs contenus (3)
addressstringobligatoirepeut être nullStreet and number.
postal_codestringobligatoirepeut être nullPostal code.
citystringobligatoirepeut être nullCity.
tableobjectobligatoirepeut être nullThe table of a dine-in order; null otherwise.
Champs contenus (2)
idstring (uuid)obligatoireThe table (
GET /tables).labelstringobligatoirepeut être nullThe table's name, e.g. 4.
notestringobligatoirepeut être nullGuest's note for the kitchen (allergies!).
itemsOrderItem[]obligatoireThe lines.
Champs contenus (8)
idstring (uuid)obligatoireThe line.
product_idstring (uuid)obligatoirepeut être nullThe dish (
GET /menu/products/{id}); null when it was deleted since.namestringobligatoireName at the time of ordering.
quantityintegerobligatoireHow many.
min 1
unit_priceintegerobligatoirePrice of one unit including options. Integer amount in the smallest currency unit (cents).
line_totalintegerobligatoireunit_price × quantity. Integer amount in the smallest currency unit (cents).
tax_rate_bpsintegerobligatoirepeut être nullVAT rate frozen at order time, in basis points (700 = 7 %). null when the restaurant has not set rates.
optionsobject[]obligatoireThe 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.Champs contenus (5)
idstring (uuid)obligatoirepeut être nullThe option (
GET /menu/options/{id}); with it you find your own modifier through itsexternal_id. null for orders placed before 8 October 2026.namestringobligatoireName of the option.
price_deltaintegerobligatoireSurcharge of this option, per unit. Integer amount in the smallest currency unit (cents).
group_idstring (uuid)obligatoirepeut être nullThe option group the option was chosen in (
GET /menu/option-groups/{id}). null for orders placed before 8 October 2026.group_namestringobligatoirepeut être nullName of that group at order time, e.g. Extras or Size. null for orders placed before 8 October 2026.
previous_statusstringobligatoireThe 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
Une commande a été payée en ligne : le prestataire de paiement a confirmé le paiement, et la commande existe à partir de là (juste après order.created). Les commandes payées sur place ne sont pas enregistrées comme payées dans Flavoso et ne déclenchent jamais cet événement.
Droit requis: orders:read
Champs dans data
objectOrderobligatoireAn 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.
Champs contenus (20)
objectstringobligatoireAlways
order.Valeurs:
"order"idstring (uuid)obligatoireThe order.
codestringobligatoireShort code the guest sees and says at the counter, e.g. K7Q2M9.
external_idstringobligatoirepeut être nullYour 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.typestringobligatoireHow the guest gets the order.
Valeurs:
"pickup""delivery""dine_in"sourcestringobligatoireWhere 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).Valeurs:
"storefront""table""app"statusstringobligatoireWhere the order is now. Restaurants may skip statuses, see
GET /store.Valeurs:
"pending""confirmed""preparing""ready""completed""cancelled"created_atstring (date-time)obligatoireWhen the order was placed. ISO 8601 in UTC (
Z).updated_atstring (date-time)obligatoireLast change. ISO 8601 in UTC (
Z).acknowledged_atstring (date-time)obligatoirepeut être nullWhen 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)obligatoirepeut être nullPickup or delivery time chosen by the guest (pre-order); null means as soon as possible.
currencystringobligatoireISO 4217, e.g. EUR.
amountsobjectobligatoireThe amounts of the order, in cents.
Champs contenus (6)
subtotalintegerobligatoireSum of the items. Integer amount in the smallest currency unit (cents).
delivery_feeintegerobligatoireDelivery fee. Integer amount in the smallest currency unit (cents).
service_feeintegerobligatoireService fee. Integer amount in the smallest currency unit (cents).
discountintegerobligatoireDiscount (stamp card), already subtracted. Integer amount in the smallest currency unit (cents).
tipintegerobligatoireTip. Pass-through, not revenue. Integer amount in the smallest currency unit (cents).
totalintegerobligatoiresubtotal + delivery_fee + service_fee − discount + tip. Integer amount in the smallest currency unit (cents).
taxobjectobligatoireVAT 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.Champs contenus (2)
includedbooleanobligatoireAlways true: prices include VAT.
Valeurs:
truelinesTaxLine[]obligatoireOne line per rate, ascending, lines without rate last. The gross amounts add up to total − tip.
Champs contenus (4)
rate_bpsintegerobligatoirepeut être nullThe 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.
grossintegerobligatoireGross amount at this rate. Integer amount in the smallest currency unit (cents).
netintegerobligatoirepeut être nullgross − tax, in cents. null when rate_bps is null.
taxintegerobligatoirepeut être nullVAT contained in gross: round(gross × rate / (10000 + rate)), in cents. null when rate_bps is null.
paymentobjectobligatoireHow and whether it is paid.
Champs contenus (3)
methodstringobligatoireonline: paid at checkout.on_site: paid at pickup, delivery or the table.Valeurs:
"online""on_site"statusstringobligatoirepaidonce the online payment is confirmed.open: to be paid on site; it staysopen, because Flavoso does not record payments on site.Valeurs:
"paid""open"paid_atstring (date-time)obligatoirepeut être nullWhen it was paid; null while open.
customerobjectobligatoirepeut être nullOnly what is needed to hand the order over (data minimisation): no e-mail, and no phone for dine-in. null when neither is known.
Champs contenus (2)
namestringobligatoirepeut être nullThe guest's name.
phonestringobligatoirepeut être nullPhone for questions; null for dine-in.
deliveryobjectobligatoirepeut être nullThe delivery address; null unless type is delivery.
Champs contenus (3)
addressstringobligatoirepeut être nullStreet and number.
postal_codestringobligatoirepeut être nullPostal code.
citystringobligatoirepeut être nullCity.
tableobjectobligatoirepeut être nullThe table of a dine-in order; null otherwise.
Champs contenus (2)
idstring (uuid)obligatoireThe table (
GET /tables).labelstringobligatoirepeut être nullThe table's name, e.g. 4.
notestringobligatoirepeut être nullGuest's note for the kitchen (allergies!).
itemsOrderItem[]obligatoireThe lines.
Champs contenus (8)
idstring (uuid)obligatoireThe line.
product_idstring (uuid)obligatoirepeut être nullThe dish (
GET /menu/products/{id}); null when it was deleted since.namestringobligatoireName at the time of ordering.
quantityintegerobligatoireHow many.
min 1
unit_priceintegerobligatoirePrice of one unit including options. Integer amount in the smallest currency unit (cents).
line_totalintegerobligatoireunit_price × quantity. Integer amount in the smallest currency unit (cents).
tax_rate_bpsintegerobligatoirepeut être nullVAT rate frozen at order time, in basis points (700 = 7 %). null when the restaurant has not set rates.
optionsobject[]obligatoireThe 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.Champs contenus (5)
idstring (uuid)obligatoirepeut être nullThe option (
GET /menu/options/{id}); with it you find your own modifier through itsexternal_id. null for orders placed before 8 October 2026.namestringobligatoireName of the option.
price_deltaintegerobligatoireSurcharge of this option, per unit. Integer amount in the smallest currency unit (cents).
group_idstring (uuid)obligatoirepeut être nullThe option group the option was chosen in (
GET /menu/option-groups/{id}). null for orders placed before 8 October 2026.group_namestringobligatoirepeut être nullName 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"
}
]
}
]
}
}
}Réservations
reservation.created
Une nouvelle réservation a été créée, en ligne par le client ou par l'équipe.
Droit requis: reservations:read
Champs dans data
objectReservationobligatoireA table reservation. Contact details stay in Flavoso (data minimisation); the name is enough to greet the party.
Champs contenus (14)
objectstringobligatoireAlways
reservation.Valeurs:
"reservation"idstring (uuid)obligatoireThe reservation.
codestringobligatoireShort code the guest sees.
statusstringobligatoirependingis a request the restaurant still has to confirm.Valeurs:
"pending""confirmed""declined""seated""done""cancelled""no_show"starts_atstring (date-time)obligatoireStart of the reservation. ISO 8601 in UTC (
Z).duration_minutesintegerobligatoireHow long the table is held.
party_sizeintegerobligatoireNumber of guests.
table_idsstring (uuid)[]obligatoireAssigned tables (
GET /tables); empty when none is assigned yet.sourcestringobligatoireBooked online by the guest, by the restaurant's staff, or through this API.
Valeurs:
"guest""staff""api"guest_namestringobligatoirepeut être nullThe guest's name.
notestringobligatoirepeut être nullThe guest's wish.
created_atstring (date-time)obligatoireWhen it was made. ISO 8601 in UTC (
Z).updated_atstring (date-time)obligatoireLast change. ISO 8601 in UTC (
Z).deleted_atstring (date-time)obligatoirepeut être nullOnly 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
Le statut, l'heure, le nombre de personnes, la durée, les tables ou la remarque d'une réservation ont changé ; changed indique lesquels. Quand l'établissement supprime une réservation, un dernier événement arrive avec changed: ["deleted"] et deleted_at ; ensuite, elle répond 404.
Droit requis: reservations:read
Champs dans data
objectReservationobligatoireA table reservation. Contact details stay in Flavoso (data minimisation); the name is enough to greet the party.
Champs contenus (14)
objectstringobligatoireAlways
reservation.Valeurs:
"reservation"idstring (uuid)obligatoireThe reservation.
codestringobligatoireShort code the guest sees.
statusstringobligatoirependingis a request the restaurant still has to confirm.Valeurs:
"pending""confirmed""declined""seated""done""cancelled""no_show"starts_atstring (date-time)obligatoireStart of the reservation. ISO 8601 in UTC (
Z).duration_minutesintegerobligatoireHow long the table is held.
party_sizeintegerobligatoireNumber of guests.
table_idsstring (uuid)[]obligatoireAssigned tables (
GET /tables); empty when none is assigned yet.sourcestringobligatoireBooked online by the guest, by the restaurant's staff, or through this API.
Valeurs:
"guest""staff""api"guest_namestringobligatoirepeut être nullThe guest's name.
notestringobligatoirepeut être nullThe guest's wish.
created_atstring (date-time)obligatoireWhen it was made. ISO 8601 in UTC (
Z).updated_atstring (date-time)obligatoireLast change. ISO 8601 in UTC (
Z).deleted_atstring (date-time)obligatoirepeut être nullOnly set in the event that reports a deletion; deleted reservations are not returned otherwise.
previous_statusstringpeut être nullThe status before this change.
changedstring[]obligatoireThe fields this change touched.
Valeurs:
"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"
]
}
}Établissement
store.paused
La prise de commandes a été mise en pause, jusqu'à paused_until ; object est l'établissement, comme dans store.updated. Quand la pause se termine d'elle-même, aucun événement distinct n'est envoyé.
Droit requis: store:read
Champs dans data
objectStoreobligatoireThe store when the event was first read.
paused_untilandnotenext to it are the values of this pause.Champs contenus (22)
objectstringobligatoireAlways
store.Valeurs:
"store"idstring (uuid)obligatoireThe restaurant.
namestringobligatoireName.
slugstringobligatoireIts address:
<slug>.flavoso.com.timezonestringobligatoireIANA time zone of all local times.
currencystringobligatoireISO 4217.
statusstringobligatoireRight now: open, closed (outside hours or a closed special day), or paused.
Valeurs:
"open""closed""paused"paused_untilstring (date-time)obligatoirepeut être nullEnd of the running pause; null without one.
pause_notestringobligatoirepeut être nullReason of the running pause.
next_opening_atstring (date-time)obligatoirepeut être nullNext opening while closed (looks two weeks ahead); null while open.
preordersbooleanobligatoireGuests may order for a later time, also while closed.
order_typesobjectobligatoireWhich order types guests can choose.
Champs contenus (3)
pickupbooleanobligatoirePickup.
deliverybooleanobligatoireDelivery.
dine_inbooleanobligatoireOrdering at the table via QR code (Pro and up).
order_statusesstring[]obligatoireStatuses this restaurant uses, in order, plus completed and cancelled.
lead_timesobjectobligatoireHow long the kitchen needs; the earliest pickup or delivery time.
Champs contenus (2)
pickup_minutesintegerobligatoireMinutes until pickup, 0 to 240.
delivery_minutesintegerobligatoireMinutes until delivery, 0 to 360.
min_orderintegerobligatoireMinimum order value for delivery (0 = none). Integer amount in the smallest currency unit (cents).
always_openbooleanobligatoireNo 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[]obligatoireThe weekly opening windows; a weekday without windows is closed.
Champs contenus (3)
weekdayintegerobligatoire0 = Monday … 6 = Sunday.
0 to 6
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing. 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[]obligatoireWeekly delivery windows; empty means delivery follows opening_hours.
Champs contenus (3)
weekdayintegerobligatoire0 = Monday … 6 = Sunday.
0 to 6
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing. 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[]obligatoireUpcoming special days (today and later).
Champs contenus (5)
objectstringobligatoireAlways
closure.Valeurs:
"closure"datestring (date)obligatoireThe day. A date YYYY-MM-DD in the restaurant's time zone.
closedbooleanobligatoireClosed all day.
hoursTimeWindow[]obligatoireThe windows of that day when not closed (at most two).
Champs contenus (2)
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing; 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]$
notestringobligatoirepeut être nullNote, e.g. the reason.
contactobjectobligatoirePublic contact details.
Champs contenus (3)
phonestringobligatoirepeut être nullPhone.
emailstringobligatoirepeut être nullE-mail.
websitestringobligatoirepeut être nullWebsite.
addressobjectobligatoirepeut être nullThe 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.
Champs contenus (4)
linestringobligatoirepeut être nullStreet and number (or the whole address when it cannot be split).
postal_codestringobligatoirepeut être nullPostal code, when it can be read from the address.
citystringobligatoirepeut être nullCity, when it can be read from the address.
countrystringobligatoirepeut être nullISO 3166-1 alpha-2, as in GET /me.
locationobjectobligatoirepeut être nullCoordinates; null when not set.
Champs contenus (2)
latnumberobligatoireLatitude.
lonnumberobligatoireLongitude.
paused_untilstring (date-time)obligatoireWhen ordering resumes by itself.
notestringobligatoirepeut être nullThe 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
Une pause en cours a été levée avant son terme ; object est l'établissement.
Droit requis: store:read
Champs dans data
objectStoreobligatoireThe store when the event was first read.
Champs contenus (22)
objectstringobligatoireAlways
store.Valeurs:
"store"idstring (uuid)obligatoireThe restaurant.
namestringobligatoireName.
slugstringobligatoireIts address:
<slug>.flavoso.com.timezonestringobligatoireIANA time zone of all local times.
currencystringobligatoireISO 4217.
statusstringobligatoireRight now: open, closed (outside hours or a closed special day), or paused.
Valeurs:
"open""closed""paused"paused_untilstring (date-time)obligatoirepeut être nullEnd of the running pause; null without one.
pause_notestringobligatoirepeut être nullReason of the running pause.
next_opening_atstring (date-time)obligatoirepeut être nullNext opening while closed (looks two weeks ahead); null while open.
preordersbooleanobligatoireGuests may order for a later time, also while closed.
order_typesobjectobligatoireWhich order types guests can choose.
Champs contenus (3)
pickupbooleanobligatoirePickup.
deliverybooleanobligatoireDelivery.
dine_inbooleanobligatoireOrdering at the table via QR code (Pro and up).
order_statusesstring[]obligatoireStatuses this restaurant uses, in order, plus completed and cancelled.
lead_timesobjectobligatoireHow long the kitchen needs; the earliest pickup or delivery time.
Champs contenus (2)
pickup_minutesintegerobligatoireMinutes until pickup, 0 to 240.
delivery_minutesintegerobligatoireMinutes until delivery, 0 to 360.
min_orderintegerobligatoireMinimum order value for delivery (0 = none). Integer amount in the smallest currency unit (cents).
always_openbooleanobligatoireNo 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[]obligatoireThe weekly opening windows; a weekday without windows is closed.
Champs contenus (3)
weekdayintegerobligatoire0 = Monday … 6 = Sunday.
0 to 6
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing. 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[]obligatoireWeekly delivery windows; empty means delivery follows opening_hours.
Champs contenus (3)
weekdayintegerobligatoire0 = Monday … 6 = Sunday.
0 to 6
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing. 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[]obligatoireUpcoming special days (today and later).
Champs contenus (5)
objectstringobligatoireAlways
closure.Valeurs:
"closure"datestring (date)obligatoireThe day. A date YYYY-MM-DD in the restaurant's time zone.
closedbooleanobligatoireClosed all day.
hoursTimeWindow[]obligatoireThe windows of that day when not closed (at most two).
Champs contenus (2)
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing; 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]$
notestringobligatoirepeut être nullNote, e.g. the reason.
contactobjectobligatoirePublic contact details.
Champs contenus (3)
phonestringobligatoirepeut être nullPhone.
emailstringobligatoirepeut être nullE-mail.
websitestringobligatoirepeut être nullWebsite.
addressobjectobligatoirepeut être nullThe 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.
Champs contenus (4)
linestringobligatoirepeut être nullStreet and number (or the whole address when it cannot be split).
postal_codestringobligatoirepeut être nullPostal code, when it can be read from the address.
citystringobligatoirepeut être nullCity, when it can be read from the address.
countrystringobligatoirepeut être nullISO 3166-1 alpha-2, as in GET /me.
locationobjectobligatoirepeut être nullCoordinates; null when not set.
Champs contenus (2)
latnumberobligatoireLatitude.
lonnumberobligatoireLongitude.
{
"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
Les horaires d'ouverture, les jours particuliers, les délais de préparation, les modes de commande, le minimum de commande ou les statuts utilisés par l'établissement (order_statuses) ont changé ; changed indique lesquels.
Droit requis: store:read
Champs dans data
objectStoreobligatoireThe restaurant as a store: status, schedule, ordering rules and contact.
Champs contenus (22)
objectstringobligatoireAlways
store.Valeurs:
"store"idstring (uuid)obligatoireThe restaurant.
namestringobligatoireName.
slugstringobligatoireIts address:
<slug>.flavoso.com.timezonestringobligatoireIANA time zone of all local times.
currencystringobligatoireISO 4217.
statusstringobligatoireRight now: open, closed (outside hours or a closed special day), or paused.
Valeurs:
"open""closed""paused"paused_untilstring (date-time)obligatoirepeut être nullEnd of the running pause; null without one.
pause_notestringobligatoirepeut être nullReason of the running pause.
next_opening_atstring (date-time)obligatoirepeut être nullNext opening while closed (looks two weeks ahead); null while open.
preordersbooleanobligatoireGuests may order for a later time, also while closed.
order_typesobjectobligatoireWhich order types guests can choose.
Champs contenus (3)
pickupbooleanobligatoirePickup.
deliverybooleanobligatoireDelivery.
dine_inbooleanobligatoireOrdering at the table via QR code (Pro and up).
order_statusesstring[]obligatoireStatuses this restaurant uses, in order, plus completed and cancelled.
lead_timesobjectobligatoireHow long the kitchen needs; the earliest pickup or delivery time.
Champs contenus (2)
pickup_minutesintegerobligatoireMinutes until pickup, 0 to 240.
delivery_minutesintegerobligatoireMinutes until delivery, 0 to 360.
min_orderintegerobligatoireMinimum order value for delivery (0 = none). Integer amount in the smallest currency unit (cents).
always_openbooleanobligatoireNo 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[]obligatoireThe weekly opening windows; a weekday without windows is closed.
Champs contenus (3)
weekdayintegerobligatoire0 = Monday … 6 = Sunday.
0 to 6
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing. 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[]obligatoireWeekly delivery windows; empty means delivery follows opening_hours.
Champs contenus (3)
weekdayintegerobligatoire0 = Monday … 6 = Sunday.
0 to 6
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing. 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[]obligatoireUpcoming special days (today and later).
Champs contenus (5)
objectstringobligatoireAlways
closure.Valeurs:
"closure"datestring (date)obligatoireThe day. A date YYYY-MM-DD in the restaurant's time zone.
closedbooleanobligatoireClosed all day.
hoursTimeWindow[]obligatoireThe windows of that day when not closed (at most two).
Champs contenus (2)
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing; 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]$
notestringobligatoirepeut être nullNote, e.g. the reason.
contactobjectobligatoirePublic contact details.
Champs contenus (3)
phonestringobligatoirepeut être nullPhone.
emailstringobligatoirepeut être nullE-mail.
websitestringobligatoirepeut être nullWebsite.
addressobjectobligatoirepeut être nullThe 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.
Champs contenus (4)
linestringobligatoirepeut être nullStreet and number (or the whole address when it cannot be split).
postal_codestringobligatoirepeut être nullPostal code, when it can be read from the address.
citystringobligatoirepeut être nullCity, when it can be read from the address.
countrystringobligatoirepeut être nullISO 3166-1 alpha-2, as in GET /me.
locationobjectobligatoirepeut être nullCoordinates; null when not set.
Champs contenus (2)
latnumberobligatoireLatitude.
lonnumberobligatoireLongitude.
changedstring[]obligatoireThe Store fields this change touched.
Valeurs:
"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"
]
}
}Connexion
app.connected
Un établissement a connecté votre application, ou l'a connectée à nouveau après la fin de la connexion.
Droit requis: aucun, seulement la connexion elle-même
Champs dans data
objectConnectionSummaryobligatoireThe connection in
app.*events.Champs contenus (5)
objectstringobligatoireAlways
connection.Valeurs:
"connection"idstring (uuid)obligatoireThe connection.
scopesstring[]obligatoireThe permissions the restaurant granted.
Valeurs:
"orders:read""orders:write""menu:read""menu:write""store:read""store:write""reservations:read""reservations:write""reports:read"created_atstring (date-time)obligatoireWhen the restaurant connected the app. ISO 8601 in UTC (
Z).revoked_atstring (date-time)obligatoirepeut être nullWhen 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
Les droits d'une connexion existante ont changé, parce que le propriétaire a connecté à nouveau votre application avec d'autres droits. previous_scopes contient les anciens.
Droit requis: aucun, seulement la connexion elle-même
Champs dans data
objectConnectionSummaryobligatoireThe connection in
app.*events.Champs contenus (5)
objectstringobligatoireAlways
connection.Valeurs:
"connection"idstring (uuid)obligatoireThe connection.
scopesstring[]obligatoireThe permissions the restaurant granted.
Valeurs:
"orders:read""orders:write""menu:read""menu:write""store:read""store:write""reservations:read""reservations:write""reports:read"created_atstring (date-time)obligatoireWhen the restaurant connected the app. ISO 8601 in UTC (
Z).revoked_atstring (date-time)obligatoirepeut être nullWhen the connection ended; null while it is active.
previous_scopesstring[]obligatoireThe 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
La connexion à un établissement a pris fin : le propriétaire a déconnecté l'application, votre application s'est déconnectée (DELETE /connection) ou Flavoso y a mis fin. reason indique qui. Ensuite, plus aucun jeton de cette connexion ne fonctionne ; c'est pourquoi il n'arrive jamais via GET /events.
Droit requis: aucun, seulement la connexion elle-même
Champs dans data
objectConnectionSummaryobligatoireThe connection in
app.*events.Champs contenus (5)
objectstringobligatoireAlways
connection.Valeurs:
"connection"idstring (uuid)obligatoireThe connection.
scopesstring[]obligatoireThe permissions the restaurant granted.
Valeurs:
"orders:read""orders:write""menu:read""menu:write""store:read""store:write""reservations:read""reservations:write""reports:read"created_atstring (date-time)obligatoireWhen the restaurant connected the app. ISO 8601 in UTC (
Z).revoked_atstring (date-time)obligatoirepeut être nullWhen the connection ended; null while it is active.
reasonstringobligatoireWho ended the connection.
Valeurs:
"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
Uniquement via « Envoyer un événement de test » dans la console. N'est jamais créé de lui-même.
Droit requis: aucun, seulement la connexion elle-même
Champs dans 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"
}
}Une question reste ouverte ? Écrivez à support@flavoso.com en indiquant l'identifiant de X-Request-Id. Il nous permet de retrouver votre requête dans le journal.