List product sales
Returns the quantity and value sold per product for a date range, like the dashboard product report. Needs
reports:read. Voided and comped lines are counted in their own columns, not in quantity.
bearerAuthAuthorizationBearer <api_key>branchId?stringString. One branch id from List branches. A branch outside the key's branch list returns 403 branch_forbidden; an id that is not in your company returns 404. Left out: every branch the key can read.
^[A-Za-z0-9_-]{1,128}$from?stringDate YYYY-MM-DD (a London day) or an ISO-8601 date-time with offset. Start of the range, included. Left out: 6 days before to.
to?stringDate YYYY-MM-DD (a London day, included) or an ISO-8601 date-time with offset (excluded). End of the range, at most 92 days after from. Left out: today in London.
groupBy?stringnone or day. day adds a breakdown per London day. Left out: none.
"none""none""day"limit?integerInteger, 1 to 500. Rows per page. Left out, 100.
1 <= value <= 500100cursor?stringString. pagination.nextCursor from the previous page, sent with the same filters. Left out: the first page.
length <= 2048Product rows
application/json- response
data*pagination*meta*curl -X GET 'https://europe-west2-fyre-pos.cloudfunctions.net/publicApi/v1/reports/product-sales?branchId=YOUR_BRANCH_ID&from=2026-11-11&to=2026-11-11&groupBy=none&limit=100'{ "data": { "currency": "GBP", "totals": { "rows": 2, "quantity": 14, "grossSales": 98, "discounts": 4, "netSales": 94, "voidedQuantity": 1 }, "rows": [ { "name": "Margherita Pizza", "productId": "prod_margherita", "categoryId": "cat_mains", "unitCost": 2.4, "quantity": 8, "grossSales": 80, "discounts": 4, "netSales": 76, "voidedQuantity": 1, "voidedAmount": 10, "compedQuantity": 0, "costOfGoodsSold": 19.2 }, { "name": "Cola", "productId": "prod_cola", "categoryId": "cat_drinks", "unitCost": 0.4, "quantity": 6, "grossSales": 18, "discounts": 0, "netSales": 18, "voidedQuantity": 0, "voidedAmount": 0, "compedQuantity": 0, "costOfGoodsSold": 2.4 } ] }, "pagination": { "limit": 100, "hasMore": false, "nextCursor": null }, "meta": { "requestId": "6f1c2a9e-4b1d-4c4b-9d8e-0a1b2c3d4e5f", "range": { "from": "2026-11-11T00:00:00.000Z", "to": "2026-11-12T00:00:00.000Z", "fromInput": "2026-11-11", "toInput": "2026-11-11", "timezone": "Europe/London", "toIsExclusive": true }, "branchIds": "all", "generatedAt": "2026-11-12T09:30:00.000Z" }}
