Skip to content

Reports

Sales are written by the point of sale, not by the API. What the partner surface gives you is the same aggregation the merchant sees in their back office, computed server-side. Reading four report endpoints is always cheaper and more accurate than paging thousands of sale rows and adding them up in your own code.

MethodPathScopeRow grain
GET/v1/reports/business-summaryreports.readTotals for the window
GET/v1/reports/itemsreports.readOne row per item sold
GET/v1/reports/pay-typesreports.readOne row per payment type
GET/v1/reports/salesreports.readOne row per sale
GET/v1/reports/daily-salesadsr.readOne row per store per day
ParameterTypeRequiredNotes
fromstringyesYYYY-MM-DD, inclusive
tostringyesYYYY-MM-DD, inclusive
storeIdnumbernoOmit for every store the token can see
page, limitnumbernoOn row-level reports. limit maximum 100
Terminal window
curl -s "$API_BASE_URL/reports/business-summary?from=2026-07-01&to=2026-07-31&storeId=1" \
-H "Authorization: Bearer $ACCESS_TOKEN"

Business summary answers “how did this period go?” — sales, tax, discounts, refunds and transaction counts for the whole window, optionally for one store. It is the right call for a dashboard tile or a nightly digest.

Items answers “what sold?” — one row per item with quantity and value, ordered by value. Use it for range reviews, supplier reporting and reorder suggestions.

Pay types answers “how did people pay?” — one row per payment type with the count and value taken. Use it for reconciliation against acquirer settlements.

Sales is the row-level list, one entry per completed sale, paged. Reach for it only when you genuinely need individual transactions — an accounting export, an audit trail — not to compute totals.

The four back-office reports return the same columns the merchant sees in the product, and those column sets differ per report and per region’s tax model. The exact schema for each is published in the Full API reference, generated from the service that produces it — read it there rather than inferring from a sample.

Every report uses the standard envelope:

{
"data": [ /* rows */ ],
"meta": { "page": 1, "limit": 100, "total": 412 }
}

Summary-grain reports return a single object in data and omit meta.

  • Window size. daily-sales is capped at 31 days (partner.window_too_large). The other reports accept longer ranges, but a month at a time keeps responses small and cacheable.
  • Cache by closed day. Yesterday’s numbers do not change once the trading day is closed. Cache them and only re-pull today.
  • Refunds are negative movement, not deletions. A refunded sale stays in the sales list; the refund reduces net totals. Never compute net by filtering out rows.
  • Multi-store. Omit storeId to aggregate across stores. If the merchant’s grant restricts your app to specific stores, the report is limited to those automatically.