API di FlavosoRiferimento APIReport
Report
Fatturato per giorno, settimana o mese e vendite per piatto, con le stesse regole dei numeri della dashboard. Di più in Report.
Endpoint
Sales report
get/reports/sales
- Permesso:
reports:read- Piano:
- tutti i piani
Sales of a period, per day, week (Monday to Sunday), month or in total, with exactly the numbers the restaurant's dashboard and its DATEV export show: cancelled orders are not revenue, an online order counts once it is paid, days are local days of the restaurant.
gross is what guests paid without tips (items, delivery and service fees, minus discounts). VAT is computed per day, payment method and rate and then summed, like the accounting export; net is gross - tax. Amounts without a stored VAT rate appear in by_tax_rate with rate_bps: null and count fully into net.
Parametri
| Nome | Posizione | Descrizione |
|---|---|---|
fromstring (date)obbligatorio | query | First day of the report, a local date of the restaurant (YYYY-MM-DD). Included. |
tostring (date)obbligatorio | query | Last day of the report, a local date (YYYY-MM-DD). Included. At most 366 days after from. |
group_bystring | query | day (default), week, month or total. Periods at the edges are cut to from and to."day""week""month""total"default "day" |
Risposta200
OK
objectstringobbligatorioAlways
sales_report.Valori:
"sales_report"currencystringobbligatorioISO 4217 of all amounts.
timezonestringobbligatorioThe time zone the days are counted in.
fromstring (date)obbligatorioFirst day, included. A date YYYY-MM-DD in the restaurant's time zone.
tostring (date)obbligatorioLast day, included. A date YYYY-MM-DD in the restaurant's time zone.
group_bystringobbligatorioThe period of each bucket.
Valori:
"day""week""month""total"totalsSalesBucketobbligatorioThe whole period.
Campi interni (14)
period_startstring (date)obbligatorioFirst day of the period (cut to from). A date YYYY-MM-DD in the restaurant's time zone.
period_endstring (date)obbligatorioLast day of the period (cut to to), included. A date YYYY-MM-DD in the restaurant's time zone.
ordersintegerobbligatorioCounted orders (not cancelled; online ones only when paid).
grossintegerobbligatorioWhat guests paid without tips: items, delivery and service fees, minus discounts. Integer amount in the smallest currency unit (cents).
netintegerobbligatoriogross − tax. Integer amount in the smallest currency unit (cents).
taxintegerobbligatorioVAT contained in gross, computed per day, payment method and rate. Integer amount in the smallest currency unit (cents).
tipsintegerobbligatorioTips (pass-through, not revenue). Integer amount in the smallest currency unit (cents).
delivery_feesintegerobbligatorioDelivery fees, included in gross. Integer amount in the smallest currency unit (cents).
service_feesintegerobbligatorioService fees, included in gross. Integer amount in the smallest currency unit (cents).
discountsintegerobbligatorioDiscounts (stamp card), already subtracted from gross. Integer amount in the smallest currency unit (cents).
by_tax_rateTaxLine[]obbligatoriogross, net and tax per rate; rate_bps null for amounts without a stored rate.
Campi interni (4)
rate_bpsintegerobbligatoriopuò essere 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.
grossintegerobbligatorioGross amount at this rate. Integer amount in the smallest currency unit (cents).
netintegerobbligatoriopuò essere nullgross − tax, in cents. null when rate_bps is null.
taxintegerobbligatoriopuò essere nullVAT contained in gross: round(gross × rate / (10000 + rate)), in cents. null when rate_bps is null.
by_payment_methodobjectobbligatorioSplit by payment method.
Campi interni (2)
onlinePaymentSplitobbligatorioOrders, gross (without tips) and tips of one part.
Campi interni (3)
ordersintegerobbligatorioCounted orders.
grossintegerobbligatorioGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerobbligatorioTips. Integer amount in the smallest currency unit (cents).
on_sitePaymentSplitobbligatorioOrders, gross (without tips) and tips of one part.
Campi interni (3)
ordersintegerobbligatorioCounted orders.
grossintegerobbligatorioGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerobbligatorioTips. Integer amount in the smallest currency unit (cents).
by_typeobjectobbligatorioSplit by order type.
Campi interni (3)
pickupPaymentSplitobbligatorioOrders, gross (without tips) and tips of one part.
Campi interni (3)
ordersintegerobbligatorioCounted orders.
grossintegerobbligatorioGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerobbligatorioTips. Integer amount in the smallest currency unit (cents).
deliveryPaymentSplitobbligatorioOrders, gross (without tips) and tips of one part.
Campi interni (3)
ordersintegerobbligatorioCounted orders.
grossintegerobbligatorioGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerobbligatorioTips. Integer amount in the smallest currency unit (cents).
dine_inPaymentSplitobbligatorioOrders, gross (without tips) and tips of one part.
Campi interni (3)
ordersintegerobbligatorioCounted orders.
grossintegerobbligatorioGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerobbligatorioTips. Integer amount in the smallest currency unit (cents).
cancelledobjectobbligatorioOrders placed (and paid, if online) and later cancelled; not part of the figures above.
Campi interni (2)
ordersintegerobbligatorioHow many.
grossintegerobbligatorioTheir totals. Integer amount in the smallest currency unit (cents).
bucketsSalesBucket[]obbligatorioEvery period of the range, also those without orders.
Campi interni (14)
period_startstring (date)obbligatorioFirst day of the period (cut to from). A date YYYY-MM-DD in the restaurant's time zone.
period_endstring (date)obbligatorioLast day of the period (cut to to), included. A date YYYY-MM-DD in the restaurant's time zone.
ordersintegerobbligatorioCounted orders (not cancelled; online ones only when paid).
grossintegerobbligatorioWhat guests paid without tips: items, delivery and service fees, minus discounts. Integer amount in the smallest currency unit (cents).
netintegerobbligatoriogross − tax. Integer amount in the smallest currency unit (cents).
taxintegerobbligatorioVAT contained in gross, computed per day, payment method and rate. Integer amount in the smallest currency unit (cents).
tipsintegerobbligatorioTips (pass-through, not revenue). Integer amount in the smallest currency unit (cents).
delivery_feesintegerobbligatorioDelivery fees, included in gross. Integer amount in the smallest currency unit (cents).
service_feesintegerobbligatorioService fees, included in gross. Integer amount in the smallest currency unit (cents).
discountsintegerobbligatorioDiscounts (stamp card), already subtracted from gross. Integer amount in the smallest currency unit (cents).
by_tax_rateTaxLine[]obbligatoriogross, net and tax per rate; rate_bps null for amounts without a stored rate.
Campi interni (4)
rate_bpsintegerobbligatoriopuò essere 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.
grossintegerobbligatorioGross amount at this rate. Integer amount in the smallest currency unit (cents).
netintegerobbligatoriopuò essere nullgross − tax, in cents. null when rate_bps is null.
taxintegerobbligatoriopuò essere nullVAT contained in gross: round(gross × rate / (10000 + rate)), in cents. null when rate_bps is null.
by_payment_methodobjectobbligatorioSplit by payment method.
Campi interni (2)
onlinePaymentSplitobbligatorioOrders, gross (without tips) and tips of one part.
Campi interni (3)
ordersintegerobbligatorioCounted orders.
grossintegerobbligatorioGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerobbligatorioTips. Integer amount in the smallest currency unit (cents).
on_sitePaymentSplitobbligatorioOrders, gross (without tips) and tips of one part.
Campi interni (3)
ordersintegerobbligatorioCounted orders.
grossintegerobbligatorioGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerobbligatorioTips. Integer amount in the smallest currency unit (cents).
by_typeobjectobbligatorioSplit by order type.
Campi interni (3)
pickupPaymentSplitobbligatorioOrders, gross (without tips) and tips of one part.
Campi interni (3)
ordersintegerobbligatorioCounted orders.
grossintegerobbligatorioGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerobbligatorioTips. Integer amount in the smallest currency unit (cents).
deliveryPaymentSplitobbligatorioOrders, gross (without tips) and tips of one part.
Campi interni (3)
ordersintegerobbligatorioCounted orders.
grossintegerobbligatorioGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerobbligatorioTips. Integer amount in the smallest currency unit (cents).
dine_inPaymentSplitobbligatorioOrders, gross (without tips) and tips of one part.
Campi interni (3)
ordersintegerobbligatorioCounted orders.
grossintegerobbligatorioGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerobbligatorioTips. Integer amount in the smallest currency unit (cents).
cancelledobjectobbligatorioOrders placed (and paid, if online) and later cancelled; not part of the figures above.
Campi interni (2)
ordersintegerobbligatorioHow many.
grossintegerobbligatorioTheir totals. Integer amount in the smallest currency unit (cents).
Errori
400invalid_request: a parameter or the body is wrong, or it contains a query parameter or field the operation does not know.paramnames the field.401unauthorized: missing, malformed, expired or revoked access token, or the app was disconnected or suspended.403insufficient_scope,plan_required(withparamwhen an order type is not in the plan) oraccount_inactive.429rate_limited: more than 120 requests per minute on this connection. WaitRetry-Afterseconds.500server_error. Safe to retry with the same Idempotency-Key.
curl "https://api.flavoso.com/v1/reports/sales?from=2026-10-01&to=2026-10-31" \
-H "Authorization: Bearer $ACCESS_TOKEN"{
"object": "sales_report",
"currency": "EUR",
"timezone": "Europe/Berlin",
"from": "2026-10-05",
"to": "2026-10-11",
"group_by": "week",
"totals": {
"period_start": "2026-10-05",
"period_end": "2026-10-11",
"orders": 182,
"gross": 451230,
"net": 410954,
"tax": 40276,
"tips": 12840,
"delivery_fees": 21000,
"service_fees": 0,
"discounts": 3150,
"by_tax_rate": [
{
"rate_bps": 700,
"gross": 353210,
"net": 330103,
"tax": 23107
},
{
"rate_bps": 1900,
"gross": 98020,
"net": 82851,
"tax": 15169
}
],
"by_payment_method": {
"online": {
"orders": 121,
"gross": 301900,
"tips": 10210
},
"on_site": {
"orders": 61,
"gross": 149330,
"tips": 2630
}
},
"by_type": {
"pickup": {
"orders": 96,
"gross": 201140,
"tips": 4120
},
"delivery": {
"orders": 64,
"gross": 196300,
"tips": 7380
},
"dine_in": {
"orders": 22,
"gross": 53790,
"tips": 1340
}
},
"cancelled": {
"orders": 4,
"gross": 9870
}
},
"buckets": [
{
"period_start": "2026-10-05",
"period_end": "2026-10-11",
"orders": 182,
"gross": 451230,
"net": 410954,
"tax": 40276,
"tips": 12840,
"delivery_fees": 21000,
"service_fees": 0,
"discounts": 3150,
"by_tax_rate": [
{
"rate_bps": 700,
"gross": 353210,
"net": 330103,
"tax": 23107
},
{
"rate_bps": 1900,
"gross": 98020,
"net": 82851,
"tax": 15169
}
],
"by_payment_method": {
"online": {
"orders": 121,
"gross": 301900,
"tips": 10210
},
"on_site": {
"orders": 61,
"gross": 149330,
"tips": 2630
}
},
"by_type": {
"pickup": {
"orders": 96,
"gross": 201140,
"tips": 4120
},
"delivery": {
"orders": 64,
"gross": 196300,
"tips": 7380
},
"dine_in": {
"orders": 22,
"gross": 53790,
"tips": 1340
}
},
"cancelled": {
"orders": 4,
"gross": 9870
}
}
]
}Product sales report
get/reports/products
- Permesso:
reports:read- Piano:
- tutti i piani
The best-selling dishes of a period: quantity and the sum of their order lines (price including options, before order discounts), counted like the sales report. A dish deleted from the menu appears under its name with product_id: null. A ranking without pages: has_more says whether more dishes sold than limit.
Parametri
| Nome | Posizione | Descrizione |
|---|---|---|
fromstring (date)obbligatorio | query | First day of the report, a local date of the restaurant (YYYY-MM-DD). Included. |
tostring (date)obbligatorio | query | Last day of the report, a local date (YYYY-MM-DD). Included. At most 366 days after from. |
limitinteger | query | How many dishes, 1 to 100. Default 25.1 to 100 · default 25 |
Risposta200
OK
objectstringobbligatorioAlways
list.Valori:
"list"dataProductSales[]obbligatorioThe items of this page.
Campi interni (5)
objectstringobbligatorioAlways
product_sales.Valori:
"product_sales"product_idstring (uuid)obbligatoriopuò essere nullThe dish; null when it was deleted from the menu.
namestringobbligatorioThe dish's latest name in the period.
quantityintegerobbligatorioUnits sold.
grossintegerobbligatorioSum of its order lines (incl. options, before order discounts). Integer amount in the smallest currency unit (cents).
has_morebooleanobbligatorioWhether another page follows.
next_cursorstringobbligatoriopuò essere nullPass as
cursor(with the same filters) to get the next page; null on the last page.
Errori
400invalid_request: a parameter or the body is wrong, or it contains a query parameter or field the operation does not know.paramnames the field.401unauthorized: missing, malformed, expired or revoked access token, or the app was disconnected or suspended.403insufficient_scope,plan_required(withparamwhen an order type is not in the plan) oraccount_inactive.429rate_limited: more than 120 requests per minute on this connection. WaitRetry-Afterseconds.500server_error. Safe to retry with the same Idempotency-Key.
curl "https://api.flavoso.com/v1/reports/products?from=2026-10-01&to=2026-10-31" \
-H "Authorization: Bearer $ACCESS_TOKEN"{
"object": "list",
"data": [
{
"object": "product_sales",
"product_id": "2d6f8a1c-3e5b-4d7f-9a2c-4e6b8d0f2a46",
"name": "Pizza Margherita",
"quantity": 214,
"gross": 176550
}
],
"has_more": true,
"next_cursor": null
}Qualcosa non è chiaro? Scrivi a support@flavoso.com indicando l'identificativo di X-Request-Id. Così troviamo la tua richiesta nel registro.