sales

Net sales at category × channel type × period, the actuals feed for finance

Net sales bucketed by category, channel type and period: one row per combination with net_sales and net_items_sold, plus the window, the grain, the calendar, a coverage block counting the orders and dimensions behind the rows, and a basis note. This is the coarse actuals feed a plan is measured against.

start_date and end_date are required and end_date is INCLUSIVE, as it is on get_stock_on_hand: the service turns it into the exclusive bound, so two callers asking for 2026-01-31 and 2026-02-01 each see the period once. The window may not exceed 400 days; a caller wanting more asks twice.

categories and channel_types filter and never change the grain, and coverage then describes the filtered population, so a filtered total is honest about its own denominator instead of reading as the whole book.

Use get_sales_table when the question is per variant. This is the same book at a coarser grain, keyed the way a plan is keyed.

A key issued to one account is refused with account_mismatch: this read covers every account on the book. That account's own sales are at GET /sales/table.

Scope: sales:read.

get/api/v1/sales/net-sales

Request

  • Base URL: https://api.app.tightly.io
  • URL: https://api.app.tightly.io/api/v1/sales/net-sales
  • Auth: HTTP bearer

Query parameters

group_by'category' | 'product'

Product adds product_id and product_name to the grouping while preserving category, channel, period and commitment scope.

commitment_idstring

Scope to this commitment's exact merchandise membership and dates. Channel commitments also restrict the sales channel. Rolling commitments use the requested bounded window. The response confirms commitment_scope; an unknown id is refused, never treated as the company.

start_datestring date required
Example:2026-01-01

First day of the window (YYYY-MM-DD).

end_datestring date required
Example:2026-06-30

Last day of the window, inclusive (YYYY-MM-DD). At most 400 days after the start.

grainstring

The period the rows are bucketed into.

categoriesstring

Comma-separated categories to filter to. Filters; never changes the grain.

channel_typesstring

Comma-separated channel types to filter to.

Headers

Tightly-Versionstring
Example:2026-11

The date train to answer on. One train exists today, 2026-11, the one this reference describes and the one every key is minted on, so the call answers on it with or without this header. Send it anyway, so a client built now names its train from the start.

Response

One row per category × channel type × period, the window actually read, the calendar and grain behind it, and a coverage block describing the population these totals were measured over.

messageobject

severity, service and desc.

Changes

No recorded changes to this operation across all 1 revision of this API.