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

NomePosizioneDescrizione
fromstring (date)obbligatorioqueryFirst day of the report, a local date of the restaurant (YYYY-MM-DD). Included.
tostring (date)obbligatorioqueryLast 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"

Risposta200

OK

  • objectstringobbligatorio

    Always sales_report.

    Valori:"sales_report"

  • currencystringobbligatorio

    ISO 4217 of all amounts.

  • timezonestringobbligatorio

    The time zone the days are counted in.

  • fromstring (date)obbligatorio

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

  • tostring (date)obbligatorio

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

  • group_bystringobbligatorio

    The period of each bucket.

    Valori:"day""week""month""total"

  • totalsSalesBucketobbligatorio

    The whole period.

    Campi interni (14)
    • period_startstring (date)obbligatorio

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

    • period_endstring (date)obbligatorio

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

    • ordersintegerobbligatorio

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

    • grossintegerobbligatorio

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

    • netintegerobbligatorio

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

    • taxintegerobbligatorio

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

    • tipsintegerobbligatorio

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

    • delivery_feesintegerobbligatorio

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

    • service_feesintegerobbligatorio

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

    • discountsintegerobbligatorio

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

    • by_tax_rateTaxLine[]obbligatorio

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

      Campi interni (4)
      • rate_bpsintegerobbligatoriopuò essere null

        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.

      • grossintegerobbligatorio

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

      • netintegerobbligatoriopuò essere null

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

      • taxintegerobbligatoriopuò essere null

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

    • by_payment_methodobjectobbligatorio

      Split by payment method.

      Campi interni (2)
      • onlinePaymentSplitobbligatorio

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

        Campi interni (3)
        • ordersintegerobbligatorio

          Counted orders.

        • grossintegerobbligatorio

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

        • tipsintegerobbligatorio

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

      • on_sitePaymentSplitobbligatorio

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

        Campi interni (3)
        • ordersintegerobbligatorio

          Counted orders.

        • grossintegerobbligatorio

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

        • tipsintegerobbligatorio

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

    • by_typeobjectobbligatorio

      Split by order type.

      Campi interni (3)
      • pickupPaymentSplitobbligatorio

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

        Campi interni (3)
        • ordersintegerobbligatorio

          Counted orders.

        • grossintegerobbligatorio

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

        • tipsintegerobbligatorio

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

      • deliveryPaymentSplitobbligatorio

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

        Campi interni (3)
        • ordersintegerobbligatorio

          Counted orders.

        • grossintegerobbligatorio

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

        • tipsintegerobbligatorio

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

      • dine_inPaymentSplitobbligatorio

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

        Campi interni (3)
        • ordersintegerobbligatorio

          Counted orders.

        • grossintegerobbligatorio

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

        • tipsintegerobbligatorio

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

    • cancelledobjectobbligatorio

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

      Campi interni (2)
      • ordersintegerobbligatorio

        How many.

      • grossintegerobbligatorio

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

  • bucketsSalesBucket[]obbligatorio

    Every period of the range, also those without orders.

    Campi interni (14)
    • period_startstring (date)obbligatorio

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

    • period_endstring (date)obbligatorio

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

    • ordersintegerobbligatorio

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

    • grossintegerobbligatorio

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

    • netintegerobbligatorio

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

    • taxintegerobbligatorio

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

    • tipsintegerobbligatorio

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

    • delivery_feesintegerobbligatorio

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

    • service_feesintegerobbligatorio

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

    • discountsintegerobbligatorio

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

    • by_tax_rateTaxLine[]obbligatorio

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

      Campi interni (4)
      • rate_bpsintegerobbligatoriopuò essere null

        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.

      • grossintegerobbligatorio

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

      • netintegerobbligatoriopuò essere null

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

      • taxintegerobbligatoriopuò essere null

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

    • by_payment_methodobjectobbligatorio

      Split by payment method.

      Campi interni (2)
      • onlinePaymentSplitobbligatorio

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

        Campi interni (3)
        • ordersintegerobbligatorio

          Counted orders.

        • grossintegerobbligatorio

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

        • tipsintegerobbligatorio

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

      • on_sitePaymentSplitobbligatorio

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

        Campi interni (3)
        • ordersintegerobbligatorio

          Counted orders.

        • grossintegerobbligatorio

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

        • tipsintegerobbligatorio

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

    • by_typeobjectobbligatorio

      Split by order type.

      Campi interni (3)
      • pickupPaymentSplitobbligatorio

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

        Campi interni (3)
        • ordersintegerobbligatorio

          Counted orders.

        • grossintegerobbligatorio

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

        • tipsintegerobbligatorio

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

      • deliveryPaymentSplitobbligatorio

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

        Campi interni (3)
        • ordersintegerobbligatorio

          Counted orders.

        • grossintegerobbligatorio

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

        • tipsintegerobbligatorio

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

      • dine_inPaymentSplitobbligatorio

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

        Campi interni (3)
        • ordersintegerobbligatorio

          Counted orders.

        • grossintegerobbligatorio

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

        • tipsintegerobbligatorio

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

    • cancelledobjectobbligatorio

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

      Campi interni (2)
      • ordersintegerobbligatorio

        How many.

      • grossintegerobbligatorio

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

Tutti i codici di errore

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

NomePosizioneDescrizione
fromstring (date)obbligatorioqueryFirst day of the report, a local date of the restaurant (YYYY-MM-DD). Included.
tostring (date)obbligatorioqueryLast 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

Risposta200

OK

  • objectstringobbligatorio

    Always list.

    Valori:"list"

  • dataProductSales[]obbligatorio

    The items of this page.

    Campi interni (5)
    • objectstringobbligatorio

      Always product_sales.

      Valori:"product_sales"

    • product_idstring (uuid)obbligatoriopuò essere null

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

    • namestringobbligatorio

      The dish's latest name in the period.

    • quantityintegerobbligatorio

      Units sold.

    • grossintegerobbligatorio

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

  • has_morebooleanobbligatorio

    Whether another page follows.

  • next_cursorstringobbligatoriopuò essere null

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

Tutti i codici di errore

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