Get own sales report summary
Get your own top-line sales figures for a period.
Reports
/api/v1/scent/reports/sales/summaryOrder volume, gross revenue, returns value, net revenue, and average order value for YOUR OWN
orders only — self-only by construction, there is no partnerId parameter anywhere on this
surface. It reports your own sales figures only. fromUtc is inclusive, toUtc is exclusive; both default to the
last 30 days when the window is omitted entirely (toUtc defaults to now, fromUtc to 30
days before it).
Revenue is GOODS-only (excludes the order-level shipping fee) and GROSS-as-sold — a later
return doesn’t rewrite it; the return is its own separately-dated returnsValue figure. See
the Sales & cart analytics guide.
Query parameters
fromUtcstring (date-time)Period start (UTC), inclusive. Defaults to 30 days before toUtc. Read as UTC when it carries no offset; a date-only value means 00:00Z. An unparseable value, or a from/to pair with from after to, returns 400 VALIDATION_INVALID_DATE.
toUtcstring (date-time)Period end (UTC), exclusive. Defaults to now. Read as UTC when it carries no offset; a date-only value means 00:00Z. An unparseable value, or a from/to pair with from after to, returns 400 VALIDATION_INVALID_DATE.
Response
fromUtcstring (date-time)toUtcstring (date-time)orderCountintegerCount of your own Confirmed orders whose tax point falls in [fromUtc, toUtc).
revenuenumber (decimal)Gross (VAT-inclusive) GOODS sales value, as originally invoiced — excludes the order-level shipping fee.
returnsValuenumber (decimal)Gross (VAT-inclusive) GOODS value refunded via a confirmed return, dated by the return event’s own creation time (independent of when the original order was sold).
netRevenuenumber (decimal)revenue − returnsValue.
averageOrderValuenumber (decimal)revenue / orderCount, rounded to 4dp; 0 when orderCount is 0.
Other responses
400An invalid window — fromUtc equal to toUtc (VALIDATION_INVALID_PERIOD), fromUtc after toUtc or an unparseable date (VALIDATION_INVALID_DATE), or a window over 400 days (VALIDATION_REPORT_WINDOW_TOO_LARGE). Any other rejected query input uses the shared query codes (VALIDATION_UNKNOWN_QUERY_PARAMETER, VALIDATION_INVALID_QUERY_PARAMETER, VALIDATION_INVALID_PAGE_SIZE, VALIDATION_INVALID_PAGE, VALIDATION_INVALID_DATE) — see the Errors guide.401No bearer token (UNAUTHORIZED_MISSING_TOKEN), an invalid token (UNAUTHORIZED_INVALID_TOKEN) or an expired one (UNAUTHORIZED_TOKEN_EXPIRED — mint a new token). UPSTREAM_AUTH_FAILED is different: a dependent service refused the Gateway itself. That is a server-side fault — retry later and do NOT re-mint your token. See the Errors guide.403The route is not available to your credential (FORBIDDEN).404No API route matches this path (NOT_FOUND_ROUTE). A missing resource on a real route returns that service’s own NOT_FOUND_* code instead.429Too many requests — see the Rate limits guide. Retry after the Retry-After header (seconds).502A dependent service returned an invalid response (BAD_GATEWAY). Retry with backoff.503The service is temporarily unavailable (SERVICE_UNAVAILABLE). Retry with backoff.504A dependent service did not respond in time (GATEWAY_TIMEOUT). Retry with backoff.curl --request GET \ --url https://api-omni.linra.net/api/v1/scent/reports/sales/summary \ --header 'Authorization: Bearer $TOKEN'const res = await fetch('https://api-omni.linra.net/api/v1/scent/reports/sales/summary', { headers: { Authorization: `Bearer ${token}`, },});const { payload } = await res.json();var response = await httpClient.GetAsync("https://api-omni.linra.net/api/v1/scent/reports/sales/summary");
var envelope = await response.Content.ReadFromJsonAsync<ApiResponse<PartnerSalesReportSummaryResponse>>();Response
{ "state": "SUCCESS", "payload": { "fromUtc": "2026-08-22T09:14:03Z", "toUtc": "2026-08-22T09:14:03Z", "orderCount": 0, "revenue": 0, "returnsValue": 0, "netRevenue": 0, "averageOrderValue": 0 }, "details": null}
