Program summary Coming soon
GET/v1/reports/program_summary
Returns totals for the date range and one row per local day.
Permissions: Secret key with reports:read.
Guide
Data sharingQuery parameters#
fromstring (date)RequiredFirst local date, for example2026-11-05.tostring (date)RequiredLast local date, included. Not beforefrom.location_idstring (uuid)Only this location, in its time zone. Leave it out for the whole brand.
Response fields#
Returns 200 with ProgramSummaryReport
fromstring (date)The range you asked for.tostring (date)The range you asked for.location_idstring (uuid)NullableThe location filter, or null for the whole brand.time_zonestringIANA time zone the days are counted in, for exampleAmerica/Chicago.currencystringUSD.totalsReportFiguresThe whole range, in the shape below.Show attributesReportFigures
membersobjectShow attributesHide attributes
totalintegernewintegeractiveinteger
pointsobjectShow attributesHide attributes
issuedintegerredeemedintegeradjustedintegeroutstandinginteger
rewardsobjectShow attributesHide attributes
issuedintegerredeemedintegerdiscount_centsinteger
ordersobjectShow attributesHide attributes
member_ordersintegermember_sales_centsintegernon_member_ordersintegernon_member_sales_centsinteger
daysarray of object + ReportFiguresOne object per local date, oldest first, each withdateand the shape below.
Each of totals and the days entries holds:
| Field | Description |
|---|---|
members.totalinteger | Members enrolled at the end of the period, not counting deleted members. Brand-wide even with location_id. |
members.newinteger | Members enrolled during the period. With location_id, members whose first order was at that location. |
members.activeinteger | Distinct members with at least one credited order in the period. In totals each member counts once, so it's usually less than the sum of the days. |
points.issuedinteger | Points from earn and bonus activity. |
points.redeemedinteger | Points spent on rewards, as a positive number. |
points.adjustedinteger | Net of points adjustments and refund reversals. Usually negative. |
points.outstandinginteger | Sum of all members' balances at the end of the period. Brand-wide even with location_id. |
rewards.issuedinteger | Wallet items issued. |
rewards.redeemedinteger | Redemptions captured by an order: points rewards, wallet items and codes used by members. |
rewards.discount_centsinteger | Sum of discount_cents on those redemptions. |
orders.member_ordersinteger | Orders with a member, from every channel, including points earned at the register. |
orders.member_sales_centsinteger | Subtotal minus discounts on those orders. Tax and tip aren't included. |
orders.non_member_ordersinteger | Orders unPLUG recorded with no member. |
orders.non_member_sales_centsinteger | Subtotal minus discounts on those orders. |
Refunds count on the day they happen, not on the order's day, so a day's figures don't change after it ends.
Outstanding points move by issued minus redeemed plus adjusted: 2,104,380 + 55,210 - 28,000 - 90 = 2,131,500.
Error descriptions#
400Bad request
missing_param
from or to is missing.
400Bad request
invalid_param
A date isn't YYYY-MM-DD, or to is before from.
403Forbidden
missing_scope
The key doesn't have reports:read.
404Not found
location_not_found
No location with that id in your brand.
Any endpoint can also return the common errors.