inventory

Stock on hand at each period boundary, the level a stock ladder is anchored on

Stock at each period boundary, per category and location: one row per period with its opening and closing level, plus the window, the grain, the calendar it was bucketed on, a coverage block and a basis note.

A level and not a flow. A period's opening stock is the level on its first day and its closing stock the level on its last, and a period's closing boundary is the next period's opening boundary read from the same row, so a ladder built from these ties by construction.

start_date and end_date are required and end_date is INCLUSIVE, as it is on get_net_sales: 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, which is also the archive's retention, and a wider one asks for boundaries that have been deleted. categories and locations filter without changing the grain.

There is deliberately no channel filter: stock sits at a location and a unit in a warehouse is not allocated to a sales channel, so a channel argument could only be answered by inventing an allocation. Use get_inventory_table when the question is per variant rather than per period.

Scope: inventory:read.

get/api/v1/inventory/stock-on-hand

Request

  • Base URL: https://api.app.tightly.io
  • URL: https://api.app.tightly.io/api/v1/inventory/stock-on-hand
  • Auth: HTTP bearer

Query parameters

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 ladder is cut into. The same two keys the net sales feed serves.

categoriesstring

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

locationsstring

Comma-separated location ids 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 period boundary and category with opening and closing, the window actually read, the calendar and grain behind it, and a coverage block that describes the population these figures were measured over.

messageobject

severity, service and desc.

Changes

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