Flavoso APIAPI referenceReports
Reports
Sales per day, week or month and sales per dish, by the same rules as the figures in the dashboard. More under Reports.
Endpoints
Sales report
get/reports/sales
- Scope:
reports:read- Plan:
- every plan
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.
Parameters
| Name | In | Description |
|---|---|---|
fromstring (date)required | query | First day of the report, a local date of the restaurant (YYYY-MM-DD). Included. |
tostring (date)required | 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" |
Response200
OK
objectstringrequiredAlways
sales_report.Values:
"sales_report"currencystringrequiredISO 4217 of all amounts.
timezonestringrequiredThe time zone the days are counted in.
fromstring (date)requiredFirst day, included. A date YYYY-MM-DD in the restaurant's time zone.
tostring (date)requiredLast day, included. A date YYYY-MM-DD in the restaurant's time zone.
group_bystringrequiredThe period of each bucket.
Values:
"day""week""month""total"totalsSalesBucketrequiredThe whole period.
Child fields (14)
period_startstring (date)requiredFirst day of the period (cut to from). A date YYYY-MM-DD in the restaurant's time zone.
period_endstring (date)requiredLast day of the period (cut to to), included. A date YYYY-MM-DD in the restaurant's time zone.
ordersintegerrequiredCounted orders (not cancelled; online ones only when paid).
grossintegerrequiredWhat guests paid without tips: items, delivery and service fees, minus discounts. Integer amount in the smallest currency unit (cents).
netintegerrequiredgross − tax. Integer amount in the smallest currency unit (cents).
taxintegerrequiredVAT contained in gross, computed per day, payment method and rate. Integer amount in the smallest currency unit (cents).
tipsintegerrequiredTips (pass-through, not revenue). Integer amount in the smallest currency unit (cents).
delivery_feesintegerrequiredDelivery fees, included in gross. Integer amount in the smallest currency unit (cents).
service_feesintegerrequiredService fees, included in gross. Integer amount in the smallest currency unit (cents).
discountsintegerrequiredDiscounts (stamp card), already subtracted from gross. Integer amount in the smallest currency unit (cents).
by_tax_rateTaxLine[]requiredgross, net and tax per rate; rate_bps null for amounts without a stored rate.
Child fields (4)
rate_bpsintegerrequirednullableThe rate in basis points (700 = 7 %). null: no rate was stored for this part (not the same as 0 %); then net and tax are null.
grossintegerrequiredGross amount at this rate. Integer amount in the smallest currency unit (cents).
netintegerrequirednullablegross − tax, in cents. null when rate_bps is null.
taxintegerrequirednullableVAT contained in gross: round(gross × rate / (10000 + rate)), in cents. null when rate_bps is null.
by_payment_methodobjectrequiredSplit by payment method.
Child fields (2)
onlinePaymentSplitrequiredOrders, gross (without tips) and tips of one part.
Child fields (3)
ordersintegerrequiredCounted orders.
grossintegerrequiredGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerrequiredTips. Integer amount in the smallest currency unit (cents).
on_sitePaymentSplitrequiredOrders, gross (without tips) and tips of one part.
Child fields (3)
ordersintegerrequiredCounted orders.
grossintegerrequiredGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerrequiredTips. Integer amount in the smallest currency unit (cents).
by_typeobjectrequiredSplit by order type.
Child fields (3)
pickupPaymentSplitrequiredOrders, gross (without tips) and tips of one part.
Child fields (3)
ordersintegerrequiredCounted orders.
grossintegerrequiredGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerrequiredTips. Integer amount in the smallest currency unit (cents).
deliveryPaymentSplitrequiredOrders, gross (without tips) and tips of one part.
Child fields (3)
ordersintegerrequiredCounted orders.
grossintegerrequiredGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerrequiredTips. Integer amount in the smallest currency unit (cents).
dine_inPaymentSplitrequiredOrders, gross (without tips) and tips of one part.
Child fields (3)
ordersintegerrequiredCounted orders.
grossintegerrequiredGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerrequiredTips. Integer amount in the smallest currency unit (cents).
cancelledobjectrequiredOrders placed (and paid, if online) and later cancelled; not part of the figures above.
Child fields (2)
ordersintegerrequiredHow many.
grossintegerrequiredTheir totals. Integer amount in the smallest currency unit (cents).
bucketsSalesBucket[]requiredEvery period of the range, also those without orders.
Child fields (14)
period_startstring (date)requiredFirst day of the period (cut to from). A date YYYY-MM-DD in the restaurant's time zone.
period_endstring (date)requiredLast day of the period (cut to to), included. A date YYYY-MM-DD in the restaurant's time zone.
ordersintegerrequiredCounted orders (not cancelled; online ones only when paid).
grossintegerrequiredWhat guests paid without tips: items, delivery and service fees, minus discounts. Integer amount in the smallest currency unit (cents).
netintegerrequiredgross − tax. Integer amount in the smallest currency unit (cents).
taxintegerrequiredVAT contained in gross, computed per day, payment method and rate. Integer amount in the smallest currency unit (cents).
tipsintegerrequiredTips (pass-through, not revenue). Integer amount in the smallest currency unit (cents).
delivery_feesintegerrequiredDelivery fees, included in gross. Integer amount in the smallest currency unit (cents).
service_feesintegerrequiredService fees, included in gross. Integer amount in the smallest currency unit (cents).
discountsintegerrequiredDiscounts (stamp card), already subtracted from gross. Integer amount in the smallest currency unit (cents).
by_tax_rateTaxLine[]requiredgross, net and tax per rate; rate_bps null for amounts without a stored rate.
Child fields (4)
rate_bpsintegerrequirednullableThe rate in basis points (700 = 7 %). null: no rate was stored for this part (not the same as 0 %); then net and tax are null.
grossintegerrequiredGross amount at this rate. Integer amount in the smallest currency unit (cents).
netintegerrequirednullablegross − tax, in cents. null when rate_bps is null.
taxintegerrequirednullableVAT contained in gross: round(gross × rate / (10000 + rate)), in cents. null when rate_bps is null.
by_payment_methodobjectrequiredSplit by payment method.
Child fields (2)
onlinePaymentSplitrequiredOrders, gross (without tips) and tips of one part.
Child fields (3)
ordersintegerrequiredCounted orders.
grossintegerrequiredGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerrequiredTips. Integer amount in the smallest currency unit (cents).
on_sitePaymentSplitrequiredOrders, gross (without tips) and tips of one part.
Child fields (3)
ordersintegerrequiredCounted orders.
grossintegerrequiredGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerrequiredTips. Integer amount in the smallest currency unit (cents).
by_typeobjectrequiredSplit by order type.
Child fields (3)
pickupPaymentSplitrequiredOrders, gross (without tips) and tips of one part.
Child fields (3)
ordersintegerrequiredCounted orders.
grossintegerrequiredGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerrequiredTips. Integer amount in the smallest currency unit (cents).
deliveryPaymentSplitrequiredOrders, gross (without tips) and tips of one part.
Child fields (3)
ordersintegerrequiredCounted orders.
grossintegerrequiredGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerrequiredTips. Integer amount in the smallest currency unit (cents).
dine_inPaymentSplitrequiredOrders, gross (without tips) and tips of one part.
Child fields (3)
ordersintegerrequiredCounted orders.
grossintegerrequiredGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerrequiredTips. Integer amount in the smallest currency unit (cents).
cancelledobjectrequiredOrders placed (and paid, if online) and later cancelled; not part of the figures above.
Child fields (2)
ordersintegerrequiredHow many.
grossintegerrequiredTheir totals. Integer amount in the smallest currency unit (cents).
Errors
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
- Scope:
reports:read- Plan:
- every plan
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.
Parameters
| Name | In | Description |
|---|---|---|
fromstring (date)required | query | First day of the report, a local date of the restaurant (YYYY-MM-DD). Included. |
tostring (date)required | 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 |
Response200
OK
objectstringrequiredAlways
list.Values:
"list"dataProductSales[]requiredThe items of this page.
Child fields (5)
objectstringrequiredAlways
product_sales.Values:
"product_sales"product_idstring (uuid)requirednullableThe dish; null when it was deleted from the menu.
namestringrequiredThe dish's latest name in the period.
quantityintegerrequiredUnits sold.
grossintegerrequiredSum of its order lines (incl. options, before order discounts). Integer amount in the smallest currency unit (cents).
has_morebooleanrequiredWhether another page follows.
next_cursorstringrequirednullablePass as
cursor(with the same filters) to get the next page; null on the last page.
Errors
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
}Still unclear? Write to support@flavoso.com and include the id from X-Request-Id. It lets us find your request in the log.