API de FlavosoReferencia de la APIInformes

Informes

Ventas por día, semana o mes y ventas por plato, con las mismas reglas que las cifras del panel. Más en Informes.

Endpoints

Sales report

get/reports/sales

Permiso:
reports:read
Plan:
todos los planes

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.

Parámetros

NombreUbicaciónDescripción
fromstring (date)obligatorioqueryFirst day of the report, a local date of the restaurant (YYYY-MM-DD). Included.
tostring (date)obligatorioqueryLast 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"

Respuesta200

OK

  • objectstringobligatorio

    Always sales_report.

    Valores:"sales_report"

  • currencystringobligatorio

    ISO 4217 of all amounts.

  • timezonestringobligatorio

    The time zone the days are counted in.

  • fromstring (date)obligatorio

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

  • tostring (date)obligatorio

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

  • group_bystringobligatorio

    The period of each bucket.

    Valores:"day""week""month""total"

  • totalsSalesBucketobligatorio

    The whole period.

    Campos anidados (14)
    • period_startstring (date)obligatorio

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

    • period_endstring (date)obligatorio

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

    • ordersintegerobligatorio

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

    • grossintegerobligatorio

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

    • netintegerobligatorio

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

    • taxintegerobligatorio

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

    • tipsintegerobligatorio

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

    • delivery_feesintegerobligatorio

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

    • service_feesintegerobligatorio

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

    • discountsintegerobligatorio

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

    • by_tax_rateTaxLine[]obligatorio

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

      Campos anidados (4)
      • rate_bpsintegerobligatoriopuede ser 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.

      • grossintegerobligatorio

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

      • netintegerobligatoriopuede ser null

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

      • taxintegerobligatoriopuede ser null

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

    • by_payment_methodobjectobligatorio

      Split by payment method.

      Campos anidados (2)
      • onlinePaymentSplitobligatorio

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

        Campos anidados (3)
        • ordersintegerobligatorio

          Counted orders.

        • grossintegerobligatorio

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

        • tipsintegerobligatorio

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

      • on_sitePaymentSplitobligatorio

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

        Campos anidados (3)
        • ordersintegerobligatorio

          Counted orders.

        • grossintegerobligatorio

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

        • tipsintegerobligatorio

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

    • by_typeobjectobligatorio

      Split by order type.

      Campos anidados (3)
      • pickupPaymentSplitobligatorio

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

        Campos anidados (3)
        • ordersintegerobligatorio

          Counted orders.

        • grossintegerobligatorio

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

        • tipsintegerobligatorio

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

      • deliveryPaymentSplitobligatorio

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

        Campos anidados (3)
        • ordersintegerobligatorio

          Counted orders.

        • grossintegerobligatorio

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

        • tipsintegerobligatorio

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

      • dine_inPaymentSplitobligatorio

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

        Campos anidados (3)
        • ordersintegerobligatorio

          Counted orders.

        • grossintegerobligatorio

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

        • tipsintegerobligatorio

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

    • cancelledobjectobligatorio

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

      Campos anidados (2)
      • ordersintegerobligatorio

        How many.

      • grossintegerobligatorio

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

  • bucketsSalesBucket[]obligatorio

    Every period of the range, also those without orders.

    Campos anidados (14)
    • period_startstring (date)obligatorio

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

    • period_endstring (date)obligatorio

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

    • ordersintegerobligatorio

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

    • grossintegerobligatorio

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

    • netintegerobligatorio

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

    • taxintegerobligatorio

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

    • tipsintegerobligatorio

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

    • delivery_feesintegerobligatorio

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

    • service_feesintegerobligatorio

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

    • discountsintegerobligatorio

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

    • by_tax_rateTaxLine[]obligatorio

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

      Campos anidados (4)
      • rate_bpsintegerobligatoriopuede ser 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.

      • grossintegerobligatorio

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

      • netintegerobligatoriopuede ser null

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

      • taxintegerobligatoriopuede ser null

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

    • by_payment_methodobjectobligatorio

      Split by payment method.

      Campos anidados (2)
      • onlinePaymentSplitobligatorio

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

        Campos anidados (3)
        • ordersintegerobligatorio

          Counted orders.

        • grossintegerobligatorio

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

        • tipsintegerobligatorio

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

      • on_sitePaymentSplitobligatorio

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

        Campos anidados (3)
        • ordersintegerobligatorio

          Counted orders.

        • grossintegerobligatorio

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

        • tipsintegerobligatorio

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

    • by_typeobjectobligatorio

      Split by order type.

      Campos anidados (3)
      • pickupPaymentSplitobligatorio

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

        Campos anidados (3)
        • ordersintegerobligatorio

          Counted orders.

        • grossintegerobligatorio

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

        • tipsintegerobligatorio

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

      • deliveryPaymentSplitobligatorio

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

        Campos anidados (3)
        • ordersintegerobligatorio

          Counted orders.

        • grossintegerobligatorio

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

        • tipsintegerobligatorio

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

      • dine_inPaymentSplitobligatorio

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

        Campos anidados (3)
        • ordersintegerobligatorio

          Counted orders.

        • grossintegerobligatorio

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

        • tipsintegerobligatorio

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

    • cancelledobjectobligatorio

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

      Campos anidados (2)
      • ordersintegerobligatorio

        How many.

      • grossintegerobligatorio

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

Errores

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

Todos los códigos de error

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

Permiso:
reports:read
Plan:
todos los planes

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.

Parámetros

NombreUbicaciónDescripción
fromstring (date)obligatorioqueryFirst day of the report, a local date of the restaurant (YYYY-MM-DD). Included.
tostring (date)obligatorioqueryLast 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

Respuesta200

OK

  • objectstringobligatorio

    Always list.

    Valores:"list"

  • dataProductSales[]obligatorio

    The items of this page.

    Campos anidados (5)
    • objectstringobligatorio

      Always product_sales.

      Valores:"product_sales"

    • product_idstring (uuid)obligatoriopuede ser null

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

    • namestringobligatorio

      The dish's latest name in the period.

    • quantityintegerobligatorio

      Units sold.

    • grossintegerobligatorio

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

  • has_morebooleanobligatorio

    Whether another page follows.

  • next_cursorstringobligatoriopuede ser null

    Pass as cursor (with the same filters) to get the next page; null on the last page.

Errores

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

Todos los códigos de error

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

¿Algo no ha quedado claro? Escribe a support@flavoso.com e indica el identificador de X-Request-Id. Así podremos encontrar tu solicitud en el registro.