API FlavosoRéférence de l'APIRapports
Rapports
Chiffre d'affaires par jour, semaine ou mois et ventes par plat, selon les mêmes règles que les chiffres du tableau de bord. Plus de détails sous Rapports.
Points de terminaison
Sales report
get/reports/sales
- Droit:
reports:read- Offre:
- toutes les offres
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.
Paramètres
| Nom | Emplacement | Description |
|---|---|---|
fromstring (date)obligatoire | query | First day of the report, a local date of the restaurant (YYYY-MM-DD). Included. |
tostring (date)obligatoire | 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" |
Réponse200
OK
objectstringobligatoireAlways
sales_report.Valeurs:
"sales_report"currencystringobligatoireISO 4217 of all amounts.
timezonestringobligatoireThe time zone the days are counted in.
fromstring (date)obligatoireFirst day, included. A date YYYY-MM-DD in the restaurant's time zone.
tostring (date)obligatoireLast day, included. A date YYYY-MM-DD in the restaurant's time zone.
group_bystringobligatoireThe period of each bucket.
Valeurs:
"day""week""month""total"totalsSalesBucketobligatoireThe whole period.
Champs contenus (14)
period_startstring (date)obligatoireFirst day of the period (cut to from). A date YYYY-MM-DD in the restaurant's time zone.
period_endstring (date)obligatoireLast day of the period (cut to to), included. A date YYYY-MM-DD in the restaurant's time zone.
ordersintegerobligatoireCounted orders (not cancelled; online ones only when paid).
grossintegerobligatoireWhat guests paid without tips: items, delivery and service fees, minus discounts. Integer amount in the smallest currency unit (cents).
netintegerobligatoiregross − tax. Integer amount in the smallest currency unit (cents).
taxintegerobligatoireVAT contained in gross, computed per day, payment method and rate. Integer amount in the smallest currency unit (cents).
tipsintegerobligatoireTips (pass-through, not revenue). Integer amount in the smallest currency unit (cents).
delivery_feesintegerobligatoireDelivery fees, included in gross. Integer amount in the smallest currency unit (cents).
service_feesintegerobligatoireService fees, included in gross. Integer amount in the smallest currency unit (cents).
discountsintegerobligatoireDiscounts (stamp card), already subtracted from gross. Integer amount in the smallest currency unit (cents).
by_tax_rateTaxLine[]obligatoiregross, net and tax per rate; rate_bps null for amounts without a stored rate.
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.
by_payment_methodobjectobligatoireSplit by payment method.
Champs contenus (2)
onlinePaymentSplitobligatoireOrders, gross (without tips) and tips of one part.
Champs contenus (3)
ordersintegerobligatoireCounted orders.
grossintegerobligatoireGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerobligatoireTips. Integer amount in the smallest currency unit (cents).
on_sitePaymentSplitobligatoireOrders, gross (without tips) and tips of one part.
Champs contenus (3)
ordersintegerobligatoireCounted orders.
grossintegerobligatoireGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerobligatoireTips. Integer amount in the smallest currency unit (cents).
by_typeobjectobligatoireSplit by order type.
Champs contenus (3)
pickupPaymentSplitobligatoireOrders, gross (without tips) and tips of one part.
Champs contenus (3)
ordersintegerobligatoireCounted orders.
grossintegerobligatoireGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerobligatoireTips. Integer amount in the smallest currency unit (cents).
deliveryPaymentSplitobligatoireOrders, gross (without tips) and tips of one part.
Champs contenus (3)
ordersintegerobligatoireCounted orders.
grossintegerobligatoireGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerobligatoireTips. Integer amount in the smallest currency unit (cents).
dine_inPaymentSplitobligatoireOrders, gross (without tips) and tips of one part.
Champs contenus (3)
ordersintegerobligatoireCounted orders.
grossintegerobligatoireGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerobligatoireTips. Integer amount in the smallest currency unit (cents).
cancelledobjectobligatoireOrders placed (and paid, if online) and later cancelled; not part of the figures above.
Champs contenus (2)
ordersintegerobligatoireHow many.
grossintegerobligatoireTheir totals. Integer amount in the smallest currency unit (cents).
bucketsSalesBucket[]obligatoireEvery period of the range, also those without orders.
Champs contenus (14)
period_startstring (date)obligatoireFirst day of the period (cut to from). A date YYYY-MM-DD in the restaurant's time zone.
period_endstring (date)obligatoireLast day of the period (cut to to), included. A date YYYY-MM-DD in the restaurant's time zone.
ordersintegerobligatoireCounted orders (not cancelled; online ones only when paid).
grossintegerobligatoireWhat guests paid without tips: items, delivery and service fees, minus discounts. Integer amount in the smallest currency unit (cents).
netintegerobligatoiregross − tax. Integer amount in the smallest currency unit (cents).
taxintegerobligatoireVAT contained in gross, computed per day, payment method and rate. Integer amount in the smallest currency unit (cents).
tipsintegerobligatoireTips (pass-through, not revenue). Integer amount in the smallest currency unit (cents).
delivery_feesintegerobligatoireDelivery fees, included in gross. Integer amount in the smallest currency unit (cents).
service_feesintegerobligatoireService fees, included in gross. Integer amount in the smallest currency unit (cents).
discountsintegerobligatoireDiscounts (stamp card), already subtracted from gross. Integer amount in the smallest currency unit (cents).
by_tax_rateTaxLine[]obligatoiregross, net and tax per rate; rate_bps null for amounts without a stored rate.
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.
by_payment_methodobjectobligatoireSplit by payment method.
Champs contenus (2)
onlinePaymentSplitobligatoireOrders, gross (without tips) and tips of one part.
Champs contenus (3)
ordersintegerobligatoireCounted orders.
grossintegerobligatoireGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerobligatoireTips. Integer amount in the smallest currency unit (cents).
on_sitePaymentSplitobligatoireOrders, gross (without tips) and tips of one part.
Champs contenus (3)
ordersintegerobligatoireCounted orders.
grossintegerobligatoireGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerobligatoireTips. Integer amount in the smallest currency unit (cents).
by_typeobjectobligatoireSplit by order type.
Champs contenus (3)
pickupPaymentSplitobligatoireOrders, gross (without tips) and tips of one part.
Champs contenus (3)
ordersintegerobligatoireCounted orders.
grossintegerobligatoireGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerobligatoireTips. Integer amount in the smallest currency unit (cents).
deliveryPaymentSplitobligatoireOrders, gross (without tips) and tips of one part.
Champs contenus (3)
ordersintegerobligatoireCounted orders.
grossintegerobligatoireGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerobligatoireTips. Integer amount in the smallest currency unit (cents).
dine_inPaymentSplitobligatoireOrders, gross (without tips) and tips of one part.
Champs contenus (3)
ordersintegerobligatoireCounted orders.
grossintegerobligatoireGross without tips. Integer amount in the smallest currency unit (cents).
tipsintegerobligatoireTips. Integer amount in the smallest currency unit (cents).
cancelledobjectobligatoireOrders placed (and paid, if online) and later cancelled; not part of the figures above.
Champs contenus (2)
ordersintegerobligatoireHow many.
grossintegerobligatoireTheir totals. Integer amount in the smallest currency unit (cents).
Erreurs
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
- Droit:
reports:read- Offre:
- toutes les offres
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.
Paramètres
| Nom | Emplacement | Description |
|---|---|---|
fromstring (date)obligatoire | query | First day of the report, a local date of the restaurant (YYYY-MM-DD). Included. |
tostring (date)obligatoire | 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 |
Réponse200
OK
objectstringobligatoireAlways
list.Valeurs:
"list"dataProductSales[]obligatoireThe items of this page.
Champs contenus (5)
objectstringobligatoireAlways
product_sales.Valeurs:
"product_sales"product_idstring (uuid)obligatoirepeut être nullThe dish; null when it was deleted from the menu.
namestringobligatoireThe dish's latest name in the period.
quantityintegerobligatoireUnits sold.
grossintegerobligatoireSum of its order lines (incl. options, before order discounts). Integer amount in the smallest currency unit (cents).
has_morebooleanobligatoireWhether another page follows.
next_cursorstringobligatoirepeut être nullPass as
cursor(with the same filters) to get the next page; null on the last page.
Erreurs
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
}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.