Reports
Six report endpoints cover the questions back-office tools ask most. All are
GET, all accept the shared parameters below, and all return integer
minor-unit money.
Shared parameters
Section titled “Shared parameters”| Parameter | Type | Notes |
|---|---|---|
from, to | YYYY-MM-DD | Inclusive date range, required on every report except store-health. Maximum span 366 days |
store_id | string | Limit to one store; omit for the whole organization |
group_by | enum | day (default), week, month, or store. Not every report supports every value — noted per endpoint |
timezone | IANA name | Defaults to the store’s configured timezone (or the organization’s, for cross-store reports). Buckets and day boundaries are computed in this zone |
Sales summary
Section titled “Sales summary”GET /reports/sales-summary — revenue, order counts and averages per bucket.
Supports every group_by.
curl -s "https://api.quiqqy.ai/api/v2/reports/sales-summary?from=2026-07-01&to=2026-07-28&group_by=day&store_id=st_8fk2c1p9" \ -H "Authorization: Bearer $ACCESS_TOKEN"const params = new URLSearchParams({ from: '2026-07-01', to: '2026-07-28', group_by: 'day', store_id: 'st_8fk2c1p9',});
const response = await fetch( `https://api.quiqqy.ai/api/v2/reports/sales-summary?${params}`, { headers: { Authorization: `Bearer ${accessToken}` } },);const report = await response.json();import requests
response = requests.get( "https://api.quiqqy.ai/api/v2/reports/sales-summary", headers={"Authorization": f"Bearer {access_token}"}, params={ "from": "2026-07-01", "to": "2026-07-28", "group_by": "day", "store_id": "st_8fk2c1p9", },)report = response.json(){ "currency": "USD", "timezone": "America/New_York", "buckets": [ { "period": "2026-07-01", "orders": 118, "gross_sales": 412350, "discounts": 8210, "refunds": 4599, "net_sales": 399541, "tax": 35958, "tips": 21200, "average_order_value": 3494 } ], "totals": { "orders": 3287, "gross_sales": 11492801, "net_sales": 11170322 }}Orders export
Section titled “Orders export”GET /reports/orders — the raw order feed for warehousing, cursor
paginated. Filter with the shared parameters plus status and
order_type.
curl -s "https://api.quiqqy.ai/api/v2/reports/orders?from=2026-07-01&to=2026-07-28&limit=200" \ -H "Authorization: Bearer $ACCESS_TOKEN"{ "data": [ { "id": "ord_9d31f2", "order_number": "ORD-20260730-0042", "store_id": "st_8fk2c1p9", "status": "delivered", "order_type": "delivery", "payment_status": "paid", "currency": "USD", "subtotal": 3548, "tax": 319, "tip": 300, "total_amount": 4367, "created_at": "2026-07-30T12:34:56.000Z", "items": [ { "product_name": "Margherita Pizza (Large)", "quantity": 1, "unit_price": 1699, "external_id": "SKU-MARG" } ] } ], "next_cursor": "eyJpZCI6Im9yZF85ZDMxZjIifQ"}Pass cursor=<next_cursor> to fetch the next page; a null next_cursor
means you have everything. Cursors are opaque and expire after 15 minutes —
resume a stale export by restarting from the last order’s created_at.
limit accepts 1–500 (default 100).
Top items
Section titled “Top items”GET /reports/top-items — best sellers by quantity and revenue. group_by
supports store only; add limit (default 20).
{ "currency": "USD", "items": [ { "external_id": "SKU-MARG", "product_name": "Margherita Pizza", "quantity": 1841, "net_sales": 2612359, "orders": 1502 }, { "external_id": "SKU-TIRAMISU", "product_name": "Tiramisu", "quantity": 964, "net_sales": 723000, "orders": 811 } ]}external_id is the catalogue id (yours, if your app also
manages the catalogue) — the join
key back to your own systems.
Hourly demand
Section titled “Hourly demand”GET /reports/hourly-demand — order volume by hour of day and day of week,
for staffing and prep planning. The range’s orders are folded into a 7×24
matrix in the report timezone.
{ "timezone": "America/New_York", "matrix": [ { "day": "fri", "hours": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 9, 31, 44, 27, 12, 8, 14, 38, 52, 41, 22, 9, 3] } ], "peak": { "day": "fri", "hour": 19, "orders": 52 }}Store health
Section titled “Store health”GET /reports/store-health — an operational snapshot per store, no date range
needed. This is the report to poll for a chain dashboard.
{ "stores": [ { "store_id": "st_8fk2c1p9", "name": "Main Street Pizza", "status": "active", "is_open": true, "orders_today": 62, "acceptance_rate_7d": 0.994, "avg_accept_seconds_7d": 48, "cancellation_rate_7d": 0.006, "items_snoozed": 2, "last_order_at": "2026-07-30T13:02:10.000Z" } ]}Payments summary
Section titled “Payments summary”GET /reports/payments-summary — takings by payment method and provider per
bucket, for reconciliation. Supports every group_by.
{ "currency": "USD", "buckets": [ { "period": "2026-07-28", "methods": [ { "payment_method": "card", "provider": "stripe", "orders": 84, "gross": 301220, "refunds": 4599, "net": 296621 }, { "payment_method": "cash", "provider": null, "orders": 21, "gross": 61780, "refunds": 0, "net": 61780 } ] } ]}