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

NameOrtBeschreibung
fromstring (date)PflichtqueryFirst day of the report, a local date of the restaurant (YYYY-MM-DD). Included.
tostring (date)PflichtqueryLast day of the report, a local date (YYYY-MM-DD). Included. At most 366 days after from.
group_bystringqueryday (default), week, month or total. Periods at the edges are cut to from and to."day""week""month""total"default "day"

Antwort200

OK

  • objectstringPflicht

    Always sales_report.

    Werte:"sales_report"

  • currencystringPflicht

    ISO 4217 of all amounts.

  • timezonestringPflicht

    The time zone the days are counted in.

  • fromstring (date)Pflicht

    First day, included. A date YYYY-MM-DD in the restaurant's time zone.

  • tostring (date)Pflicht

    Last day, included. A date YYYY-MM-DD in the restaurant's time zone.

  • group_bystringPflicht

    The period of each bucket.

    Werte:"day""week""month""total"

  • totalsSalesBucketPflicht

    The whole period.

    Felder darin (14)
    • period_startstring (date)Pflicht

      First day of the period (cut to from). A date YYYY-MM-DD in the restaurant's time zone.

    • period_endstring (date)Pflicht

      Last day of the period (cut to to), included. A date YYYY-MM-DD in the restaurant's time zone.

    • ordersintegerPflicht

      Counted orders (not cancelled; online ones only when paid).

    • grossintegerPflicht

      What guests paid without tips: items, delivery and service fees, minus discounts. Integer amount in the smallest currency unit (cents).

    • netintegerPflicht

      gross − tax. Integer amount in the smallest currency unit (cents).

    • taxintegerPflicht

      VAT contained in gross, computed per day, payment method and rate. Integer amount in the smallest currency unit (cents).

    • tipsintegerPflicht

      Tips (pass-through, not revenue). Integer amount in the smallest currency unit (cents).

    • delivery_feesintegerPflicht

      Delivery fees, included in gross. Integer amount in the smallest currency unit (cents).

    • service_feesintegerPflicht

      Service fees, included in gross. Integer amount in the smallest currency unit (cents).

    • discountsintegerPflicht

      Discounts (stamp card), already subtracted from gross. Integer amount in the smallest currency unit (cents).

    • by_tax_rateTaxLine[]Pflicht

      gross, net and tax per rate; rate_bps null for amounts without a stored rate.

      Felder darin (4)
      • rate_bpsintegerPflichtkann null sein

        The 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.

      • grossintegerPflicht

        Gross amount at this rate. Integer amount in the smallest currency unit (cents).

      • netintegerPflichtkann null sein

        gross − tax, in cents. null when rate_bps is null.

      • taxintegerPflichtkann null sein

        VAT contained in gross: round(gross × rate / (10000 + rate)), in cents. null when rate_bps is null.

    • by_payment_methodobjectPflicht

      Split by payment method.

      Felder darin (2)
      • onlinePaymentSplitPflicht

        Orders, gross (without tips) and tips of one part.

        Felder darin (3)
        • ordersintegerPflicht

          Counted orders.

        • grossintegerPflicht

          Gross without tips. Integer amount in the smallest currency unit (cents).

        • tipsintegerPflicht

          Tips. Integer amount in the smallest currency unit (cents).

      • on_sitePaymentSplitPflicht

        Orders, gross (without tips) and tips of one part.

        Felder darin (3)
        • ordersintegerPflicht

          Counted orders.

        • grossintegerPflicht

          Gross without tips. Integer amount in the smallest currency unit (cents).

        • tipsintegerPflicht

          Tips. Integer amount in the smallest currency unit (cents).

    • by_typeobjectPflicht

      Split by order type.

      Felder darin (3)
      • pickupPaymentSplitPflicht

        Orders, gross (without tips) and tips of one part.

        Felder darin (3)
        • ordersintegerPflicht

          Counted orders.

        • grossintegerPflicht

          Gross without tips. Integer amount in the smallest currency unit (cents).

        • tipsintegerPflicht

          Tips. Integer amount in the smallest currency unit (cents).

      • deliveryPaymentSplitPflicht

        Orders, gross (without tips) and tips of one part.

        Felder darin (3)
        • ordersintegerPflicht

          Counted orders.

        • grossintegerPflicht

          Gross without tips. Integer amount in the smallest currency unit (cents).

        • tipsintegerPflicht

          Tips. Integer amount in the smallest currency unit (cents).

      • dine_inPaymentSplitPflicht

        Orders, gross (without tips) and tips of one part.

        Felder darin (3)
        • ordersintegerPflicht

          Counted orders.

        • grossintegerPflicht

          Gross without tips. Integer amount in the smallest currency unit (cents).

        • tipsintegerPflicht

          Tips. Integer amount in the smallest currency unit (cents).

    • cancelledobjectPflicht

      Orders placed (and paid, if online) and later cancelled; not part of the figures above.

      Felder darin (2)
      • ordersintegerPflicht

        How many.

      • grossintegerPflicht

        Their totals. Integer amount in the smallest currency unit (cents).

  • bucketsSalesBucket[]Pflicht

    Every period of the range, also those without orders.

    Felder darin (14)
    • period_startstring (date)Pflicht

      First day of the period (cut to from). A date YYYY-MM-DD in the restaurant's time zone.

    • period_endstring (date)Pflicht

      Last day of the period (cut to to), included. A date YYYY-MM-DD in the restaurant's time zone.

    • ordersintegerPflicht

      Counted orders (not cancelled; online ones only when paid).

    • grossintegerPflicht

      What guests paid without tips: items, delivery and service fees, minus discounts. Integer amount in the smallest currency unit (cents).

    • netintegerPflicht

      gross − tax. Integer amount in the smallest currency unit (cents).

    • taxintegerPflicht

      VAT contained in gross, computed per day, payment method and rate. Integer amount in the smallest currency unit (cents).

    • tipsintegerPflicht

      Tips (pass-through, not revenue). Integer amount in the smallest currency unit (cents).

    • delivery_feesintegerPflicht

      Delivery fees, included in gross. Integer amount in the smallest currency unit (cents).

    • service_feesintegerPflicht

      Service fees, included in gross. Integer amount in the smallest currency unit (cents).

    • discountsintegerPflicht

      Discounts (stamp card), already subtracted from gross. Integer amount in the smallest currency unit (cents).

    • by_tax_rateTaxLine[]Pflicht

      gross, net and tax per rate; rate_bps null for amounts without a stored rate.

      Felder darin (4)
      • rate_bpsintegerPflichtkann null sein

        The 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.

      • grossintegerPflicht

        Gross amount at this rate. Integer amount in the smallest currency unit (cents).

      • netintegerPflichtkann null sein

        gross − tax, in cents. null when rate_bps is null.

      • taxintegerPflichtkann null sein

        VAT contained in gross: round(gross × rate / (10000 + rate)), in cents. null when rate_bps is null.

    • by_payment_methodobjectPflicht

      Split by payment method.

      Felder darin (2)
      • onlinePaymentSplitPflicht

        Orders, gross (without tips) and tips of one part.

        Felder darin (3)
        • ordersintegerPflicht

          Counted orders.

        • grossintegerPflicht

          Gross without tips. Integer amount in the smallest currency unit (cents).

        • tipsintegerPflicht

          Tips. Integer amount in the smallest currency unit (cents).

      • on_sitePaymentSplitPflicht

        Orders, gross (without tips) and tips of one part.

        Felder darin (3)
        • ordersintegerPflicht

          Counted orders.

        • grossintegerPflicht

          Gross without tips. Integer amount in the smallest currency unit (cents).

        • tipsintegerPflicht

          Tips. Integer amount in the smallest currency unit (cents).

    • by_typeobjectPflicht

      Split by order type.

      Felder darin (3)
      • pickupPaymentSplitPflicht

        Orders, gross (without tips) and tips of one part.

        Felder darin (3)
        • ordersintegerPflicht

          Counted orders.

        • grossintegerPflicht

          Gross without tips. Integer amount in the smallest currency unit (cents).

        • tipsintegerPflicht

          Tips. Integer amount in the smallest currency unit (cents).

      • deliveryPaymentSplitPflicht

        Orders, gross (without tips) and tips of one part.

        Felder darin (3)
        • ordersintegerPflicht

          Counted orders.

        • grossintegerPflicht

          Gross without tips. Integer amount in the smallest currency unit (cents).

        • tipsintegerPflicht

          Tips. Integer amount in the smallest currency unit (cents).

      • dine_inPaymentSplitPflicht

        Orders, gross (without tips) and tips of one part.

        Felder darin (3)
        • ordersintegerPflicht

          Counted orders.

        • grossintegerPflicht

          Gross without tips. Integer amount in the smallest currency unit (cents).

        • tipsintegerPflicht

          Tips. Integer amount in the smallest currency unit (cents).

    • cancelledobjectPflicht

      Orders placed (and paid, if online) and later cancelled; not part of the figures above.

      Felder darin (2)
      • ordersintegerPflicht

        How many.

      • grossintegerPflicht

        Their 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. param names the field.
  • 401unauthorized: missing, malformed, expired or revoked access token, or the app was disconnected or suspended.
  • 403insufficient_scope, plan_required (with param when an order type is not in the plan) or account_inactive.
  • 429rate_limited: more than 120 requests per minute on this connection. Wait Retry-After seconds.
  • 500server_error. Safe to retry with the same Idempotency-Key.

Alle Fehlercodes

Anfrage
curl "https://api.flavoso.com/v1/reports/sales?from=2026-10-01&to=2026-10-31" \
  -H "Authorization: Bearer $ACCESS_TOKEN"
Antwort
{
  "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

NameOrtBeschreibung
fromstring (date)PflichtqueryFirst day of the report, a local date of the restaurant (YYYY-MM-DD). Included.
tostring (date)PflichtqueryLast day of the report, a local date (YYYY-MM-DD). Included. At most 366 days after from.
limitintegerqueryHow many dishes, 1 to 100. Default 25.1 to 100 · default 25

Antwort200

OK

  • objectstringPflicht

    Always list.

    Werte:"list"

  • dataProductSales[]Pflicht

    The items of this page.

    Felder darin (5)
    • objectstringPflicht

      Always product_sales.

      Werte:"product_sales"

    • product_idstring (uuid)Pflichtkann null sein

      The dish; null when it was deleted from the menu.

    • namestringPflicht

      The dish's latest name in the period.

    • quantityintegerPflicht

      Units sold.

    • grossintegerPflicht

      Sum of its order lines (incl. options, before order discounts). Integer amount in the smallest currency unit (cents).

  • has_morebooleanPflicht

    Whether another page follows.

  • next_cursorstringPflichtkann null sein

    Pass 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. param names the field.
  • 401unauthorized: missing, malformed, expired or revoked access token, or the app was disconnected or suspended.
  • 403insufficient_scope, plan_required (with param when an order type is not in the plan) or account_inactive.
  • 429rate_limited: more than 120 requests per minute on this connection. Wait Retry-After seconds.
  • 500server_error. Safe to retry with the same Idempotency-Key.

Alle Fehlercodes

Anfrage
curl "https://api.flavoso.com/v1/reports/products?from=2026-10-01&to=2026-10-31" \
  -H "Authorization: Bearer $ACCESS_TOKEN"
Antwort
{
  "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.