products

What the scoped products are missing for planning, and how many each gap costs

A statement about a whole scope rather than a page of it: how many products it holds, how many are planning-complete, and one row per planning attribute saying how many products are missing it.

The six attributes are category, price_band, size_curve, selling_window, cost and lifecycle. Each row carries the label a face prints, the reason the gap matters, missing_products (planning should ask for this), review_products (declared and detected disagree, worth a look) and affected_pairs, the variant-by-sales-channel pairs those products cover.

affected_pairs and pairs are null, not 0, for an organisation with no channel pairs at all. Absence and zero are different answers and are served differently.

It takes the same filter_args and search as the products table, so a completeness figure can be read for exactly the set a table page came from. It is not paginated: offset and limit are accepted and ignored, because completeness describes the scope and not a page of it.

Scope: products:read.

get/api/v1/products/completeness

Request

  • Base URL: https://api.app.tightly.io
  • URL: https://api.app.tightly.io/api/v1/products/completeness
  • Auth: HTTP bearer

Query parameters

searchstring
Example:overshirt

Free text over product title, SKU and vendor, as on the products table.

filter_argsstring
Example:[{"key":"category","operation":"eq","value":"Outerwear"}]

A JSON array of {key, operation, value}, the same keys the products table accepts.

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

The scope's product count, its complete count, and one row per planning attribute.

messageobject

severity, service and desc.

Changes

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