Yielded sales report
Paginated list of every sale where a yield rule moved the price — up at peak, or down to fill quiet spells. Sales made when no rule applied (the implicit standard tier) are not included.
Each row is a snapshot taken at the time of sale: the rule, tier, fill rate, and baseline price are read from provenance stored when the price was resolved, never recomputed from the current rule or price configuration. Editing, renaming, or deleting a rule after a sale does not change how that sale reports.
Money fields are integers in the minor units of each row's currency. Totals are grouped per currency and are never summed across currencies. Rows whose status is refunded or cancelled stay in the list, flagged, but are excluded from the revenue and net-uplift totals so the numbers reconcile with other sales reports.
Results default to most recent sale first, tiebroken on id so ordering is stable when sales share a timestamp. The response also includes a CSV variant when requesting with Accept: text/csv; for large date ranges or background delivery use /shop/reports/yielded-sales/queue.
Requires the reports.view permission (reports.download for the CSV variant). Sites without the advanced_yield_management feature respond 404.
Query parameters
Restrict the report to yielded sales at the given site.
The page to retrieve results from
The number of results to return per page
Restrict to sales made on or after this date, in the site's local timezone.
Restrict to sales made on or before this date, in the site's local timezone.
Restrict to sales whose order reference or offering name contains the given text, case-insensitively.
A comma-separated list of offering IDs to filter on.
A comma-separated list of offering types to filter on.
A comma-separated list of yield rule IDs to filter on. Matches the rule recorded at the time of sale, so a rule that has since been deleted still matches its historical sales.
A comma-separated list of reporting tiers to filter on.
Response
The report was successfully generated.
Example response
{
"data": [
{
"id": "60a8c0901d210625e3a87667",
"basket_id": "60a8c0901d210625e3a87668",
"order_ref": "TRY03",
"status": "completed",
"offering_name": "60 Minute Massage",
"offering_exists": true,
"yield_rule_exists": true,
"adjustment": {
"value": 15
},
"fill_rate_percent": 85,
"currency": "GBP",
"baseline_price": 5000,
"price_paid": 5750,
"delta_amount": 750,
"delta_percent": 15
}
],
"meta": {
"from": 1,
"to": 2,
"total": 2,
"current_page": 1,
"last_page": 2,
"per_page": 15,
"path": "http://example.com/api"
},
"links": {
"first": "http://example.com?page=1",
"next": "https://example.com?page=3",
"prev": "https://example.com?page=1",
"last": "https://example.com?page=4"
},
"totals": {
"count": 342,
"currencies": [
{
"currency": "GBP",
"revenue": 1966500,
"net_uplift": 256500,
"tiers": [
{
"count": 120,
"revenue": 690000,
"net_uplift": 90000
}
]
}
]
}
}