Flavoso APIAPI-ReferenzBerichte
Berichte
Umsätze je Tag, Woche oder Monat und Verkaufszahlen je Gericht, nach denselben Regeln wie die Zahlen im Dashboard. Mehr dazu unter Berichte.
Endpunkte
Sales report
get/reports/sales
- Recht:
reports:read- Tarif:
- jeder Tarif
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.
Parameter
| Name | Ort | Beschreibung |
|---|---|---|
fromstring (date)Pflicht | query | First day of the report, a local date of the restaurant (YYYY-MM-DD). Included. |
tostring (date)Pflicht | 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" |
Antwort200
OK
objectstringPflichtAlways
sales_report.Werte:
"sales_report"currencystringPflichtISO 4217 of all amounts.
timezonestringPflichtThe time zone the days are counted in.
fromstring (date)PflichtFirst day, included. A date YYYY-MM-DD in the restaurant's time zone.
tostring (date)PflichtLast day, included. A date YYYY-MM-DD in the restaurant's time zone.
group_bystringPflichtThe period of each bucket.
Werte:
"day""week""month""total"totalsSalesBucketPflichtThe whole period.
Felder darin (14)
period_startstring (date)PflichtFirst day of the period (cut to from). A date YYYY-MM-DD in the restaurant's time zone.
period_endstring (date)PflichtLast day of the period (cut to to), included. A date YYYY-MM-DD in the restaurant's time zone.
ordersintegerPflichtCounted orders (not cancelled; online ones only when paid).
grossintegerPflichtWhat guests paid without tips: items, delivery and service fees, minus discounts. Integer amount in the smallest currency unit (cents).
netintegerPflichtgross − tax. Integer amount in the smallest currency unit (cents).
taxintegerPflichtVAT contained in gross, computed per day, payment method and rate. Integer amount in the smallest currency unit (cents).
tipsintegerPflichtTips (pass-through, not revenue). Integer amount in the smallest currency unit (cents).
delivery_feesintegerPflichtDelivery fees, included in gross. Integer amount in the smallest currency unit (cents).
service_feesintegerPflichtService fees, included in gross. Integer amount in the smallest currency unit (cents).
discountsintegerPflichtDiscounts (stamp card), already subtracted from gross. Integer amount in the smallest currency unit (cents).
by_tax_rateTaxLine[]Pflichtgross, net and tax per rate; rate_bps null for amounts without a stored rate.
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.
by_payment_methodobjectPflichtSplit by payment method.
Felder darin (2)
onlinePaymentSplitPflichtOrders, gross (without tips) and tips of one part.
Felder darin (3)
ordersintegerPflichtCounted orders.
grossintegerPflichtGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerPflichtTips. Integer amount in the smallest currency unit (cents).
on_sitePaymentSplitPflichtOrders, gross (without tips) and tips of one part.
Felder darin (3)
ordersintegerPflichtCounted orders.
grossintegerPflichtGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerPflichtTips. Integer amount in the smallest currency unit (cents).
by_typeobjectPflichtSplit by order type.
Felder darin (3)
pickupPaymentSplitPflichtOrders, gross (without tips) and tips of one part.
Felder darin (3)
ordersintegerPflichtCounted orders.
grossintegerPflichtGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerPflichtTips. Integer amount in the smallest currency unit (cents).
deliveryPaymentSplitPflichtOrders, gross (without tips) and tips of one part.
Felder darin (3)
ordersintegerPflichtCounted orders.
grossintegerPflichtGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerPflichtTips. Integer amount in the smallest currency unit (cents).
dine_inPaymentSplitPflichtOrders, gross (without tips) and tips of one part.
Felder darin (3)
ordersintegerPflichtCounted orders.
grossintegerPflichtGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerPflichtTips. Integer amount in the smallest currency unit (cents).
cancelledobjectPflichtOrders placed (and paid, if online) and later cancelled; not part of the figures above.
Felder darin (2)
ordersintegerPflichtHow many.
grossintegerPflichtTheir totals. Integer amount in the smallest currency unit (cents).
bucketsSalesBucket[]PflichtEvery period of the range, also those without orders.
Felder darin (14)
period_startstring (date)PflichtFirst day of the period (cut to from). A date YYYY-MM-DD in the restaurant's time zone.
period_endstring (date)PflichtLast day of the period (cut to to), included. A date YYYY-MM-DD in the restaurant's time zone.
ordersintegerPflichtCounted orders (not cancelled; online ones only when paid).
grossintegerPflichtWhat guests paid without tips: items, delivery and service fees, minus discounts. Integer amount in the smallest currency unit (cents).
netintegerPflichtgross − tax. Integer amount in the smallest currency unit (cents).
taxintegerPflichtVAT contained in gross, computed per day, payment method and rate. Integer amount in the smallest currency unit (cents).
tipsintegerPflichtTips (pass-through, not revenue). Integer amount in the smallest currency unit (cents).
delivery_feesintegerPflichtDelivery fees, included in gross. Integer amount in the smallest currency unit (cents).
service_feesintegerPflichtService fees, included in gross. Integer amount in the smallest currency unit (cents).
discountsintegerPflichtDiscounts (stamp card), already subtracted from gross. Integer amount in the smallest currency unit (cents).
by_tax_rateTaxLine[]Pflichtgross, net and tax per rate; rate_bps null for amounts without a stored rate.
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.
by_payment_methodobjectPflichtSplit by payment method.
Felder darin (2)
onlinePaymentSplitPflichtOrders, gross (without tips) and tips of one part.
Felder darin (3)
ordersintegerPflichtCounted orders.
grossintegerPflichtGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerPflichtTips. Integer amount in the smallest currency unit (cents).
on_sitePaymentSplitPflichtOrders, gross (without tips) and tips of one part.
Felder darin (3)
ordersintegerPflichtCounted orders.
grossintegerPflichtGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerPflichtTips. Integer amount in the smallest currency unit (cents).
by_typeobjectPflichtSplit by order type.
Felder darin (3)
pickupPaymentSplitPflichtOrders, gross (without tips) and tips of one part.
Felder darin (3)
ordersintegerPflichtCounted orders.
grossintegerPflichtGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerPflichtTips. Integer amount in the smallest currency unit (cents).
deliveryPaymentSplitPflichtOrders, gross (without tips) and tips of one part.
Felder darin (3)
ordersintegerPflichtCounted orders.
grossintegerPflichtGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerPflichtTips. Integer amount in the smallest currency unit (cents).
dine_inPaymentSplitPflichtOrders, gross (without tips) and tips of one part.
Felder darin (3)
ordersintegerPflichtCounted orders.
grossintegerPflichtGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerPflichtTips. Integer amount in the smallest currency unit (cents).
cancelledobjectPflichtOrders placed (and paid, if online) and later cancelled; not part of the figures above.
Felder darin (2)
ordersintegerPflichtHow many.
grossintegerPflichtTheir totals. Integer amount in the smallest currency unit (cents).
Fehler
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
- Recht:
reports:read- Tarif:
- jeder Tarif
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.
Parameter
| Name | Ort | Beschreibung |
|---|---|---|
fromstring (date)Pflicht | query | First day of the report, a local date of the restaurant (YYYY-MM-DD). Included. |
tostring (date)Pflicht | 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 |
Antwort200
OK
objectstringPflichtAlways
list.Werte:
"list"dataProductSales[]PflichtThe items of this page.
Felder darin (5)
objectstringPflichtAlways
product_sales.Werte:
"product_sales"product_idstring (uuid)Pflichtkann null seinThe dish; null when it was deleted from the menu.
namestringPflichtThe dish's latest name in the period.
quantityintegerPflichtUnits sold.
grossintegerPflichtSum of its order lines (incl. options, before order discounts). Integer amount in the smallest currency unit (cents).
has_morebooleanPflichtWhether another page follows.
next_cursorstringPflichtkann null seinPass as
cursor(with the same filters) to get the next page; null on the last page.
Fehler
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
}Etwas unklar geblieben? Schreib an support@flavoso.com und nenne die Kennung aus X-Request-Id. Damit finden wir deine Anfrage im Protokoll.