Skip to main content

Product detail page reference

The product detail page is where every facet of a single product lives, split across tabs. You reach it by opening any row from the products list. This page is a reference map of that screen: what each part shows, when it appears, and where the deeper documentation lives. For how the underlying record is put together, see Product fields & validation reference; for the list you came from, see Products list columns, search & filters reference.

Before you begin

Most read actions on the page require the products read scope. Specific controls are gated by permission:

ControlPermission
View the page and its tabsproducts read scope
Adjust Inventory actioninventory.adjust
Create Blemished Product actionproducts.update
Inline edits on any tabproducts.update (governed by a shared edit lock — see Editing model)

See Product permissions reference for the full permission list.

Page shell

The shell is the same for every product; only the tabs and stats vary by type. Top to bottom, the shell is: the tab bar, the header row, the stats bar, then the active tab's content.

Header row

ElementWhat it shows
Back arrowReturns to the previous screen (usually the products list, preserving your filters).
SKU titleThe product's SKU, shown large. Reads Loading… until the record arrives.
Type chipThe product type (standard, bundle, kit, matrix, blemished, manufactured), color-coded. See Product types explained.
Status chipActive (green) or Archived (grey), driven by archived_at. See Archive, unarchive & delete a product.
SubtitleProduct name, then Brand, primary category, and default supplier when set. The supplier is a clickable link to its record.
Presence avatarsWho else is viewing this product right now.
Record navigatorPrevious / next arrows to page through the product set you arrived from.
Refresh buttonRe-fetches the whole record from the server.
Actions menuType- and permission-gated actions. See Actions menu.

Not-found state

If the product ID doesn't exist (or was deleted), the page replaces its body with a Product Not Found message — "The product you're looking for doesn't exist or has been deleted." — and a Back to Products button. The legacy single-product API returns a 404 JSON envelope in this case.

Default tab

Opening a product with no tab in the URL redirects to the Overview tab. Each tab is a real link (right-clickable, openable in a new tab) and the bar stays pinned to the top as you scroll.

Stats bar

A single strip beneath the header summarizes live stock and financial figures. It's split into a Stock group and a Financial group. Every quantity picks up the product's stock unit-of-measure suffix (for example CASE) when that unit isn't EACH; see Units of measure reference.

Stock group

MetricMeaning
On HandPhysical stock across all warehouses. Hover for the full breakdown (see below).
Available to SellNet promiseable position: Available − Backorder Planned − Backorder PO Covered.
BackorderTotal backordered quantity. Tooltip splits it into Backorder Planned and Backorder PO Covered.
InboundQuantity expected from open purchase orders — ordered from suppliers, not yet received. Distinct from In Transit (warehouse-to-warehouse movement).

The On Hand tooltip shows exactly how the number is built:

Available
+ Allocated
+ On Hold
+ Non-Sellable
= On Hand
+ In Transit
= Total Inventory

On Hand deliberately includes Non-Sellable stock — it's the count of everything physically in your warehouses, sellable or not. For what each of these stock states means, see Stock states & fields reference and View a product's stock.

Negative Available to Sell

When Available to Sell is below zero, the figure turns red and becomes a clickable menu instead of a plain tooltip. Opening it explains the shortfall — "Overcommitted by N units. Open orders exceed free stock." — and lists two recovery paths:

  • Reduce demand — cancel or edit open orders.
  • Increase supply — accelerate inbound POs.

Work the shortfall from the backorder queue.

Financial group

MetricMeaning
Avg CostUnit-weighted average across active FIFO layers, refreshed on every inventory change. When the stock unit isn't EACH, it's shown per that unit (for example / CASE).
Stock ValueTotal valuation of on-hand stock. When on-hold stock has value, a (Reserved: …) figure is appended.
DACDaily Average Consumption — average units sold per day over the trailing window; drives forecasted demand and stock targets.

Avg Cost and FIFO valuation are owned by the inventory guide — see FIFO layers & COGS.

Inventory cache freshness

At the end of the bar, the stats show when the inventory cache was last recomputed as a relative time (hover for the exact timestamp), or Not calculated if it has never run. Next to it, a Refresh inventory cache button recomputes the cached stock figures and average cost on demand — see Refreshing the inventory cache.

Actions menu

The Actions menu appears only when at least one action is available for this product and you. Each item is independently gated:

ActionShown whenResult
Adjust InventoryYou have inventory.adjust. Enabled only for inventory-bearing types (standard, kit, blemished, manufactured); for other types it's disabled with the tooltip <type> products don't carry inventory.Opens the Adjust Inventory dialog.
Create Blemished ProductProduct is standard or kit and you have products.update.Opens the create-blemished dialog. See Create a blemished product.
Assemble KitProduct is a kit.Navigates to the assemblies workflow in the Inventory area, pre-set to assemble this product.
Disassemble KitProduct is a kit.Navigates to the assemblies workflow, pre-set to disassemble this product.

Assemble / Disassemble build or break down kit stock from its components. Kits carry their own inventory (unlike bundles) — see Kits vs bundles and Build bundles & kits in the Workshop.

Adjust Inventory dialog

The dialog performs a manual stock adjustment against one warehouse. Its fields:

FieldNotes
ProductDefaults to the current product; searchable if you need to switch.
Adjustment DateThe effective date of the movement.
WarehouseRequired — you must pick one before saving.
LocationShown only for a locations-enabled warehouse.
Adjustment TypeSegmented control: increase, decrease, or set (set-to-value).
QuantityFor set, the minimum is 0; otherwise 1.
CostFor an increase, choose the cost basis (default COGS or a unit cost).
Lot allocationFor a lot-tracked product being decreased (or a "set" that nets to a decrease), a FEFO-suggested, user-overridable lot picker appears.
FIFO consumption previewFor a decrease on a non-lot-tracked product, previews which FIFO layers will be consumed.

Manual adjustments are part of the inventory domain — the concepts, reasons, and ledger effects are documented under Adjust stock, How adjustments work, and Stock adjustment reference.

Tab visibility rules

There are 21 possible tabs. Two rules decide which ones render for a given product:

  • Inventory-only tabsMovements, Allocations, FIFO Layers, Lots & Expiry, COGS, and Holds — appear only for inventory-bearing types (standard, kit, blemished, manufactured). They're hidden for bundle and matrix, which hold no stock of their own.
  • eBay Settings appears only when an eBay integration instance exists on the account.

All other tabs show for every product type.

The tabs

TabPurposeVisibilityDeeper docs
OverviewLanding summary — key fields, performance chip, and (for bundles) bundle potential.AlwaysThis page
InventoryStock by warehouse, min-stock, preferred bins, POs, transfers, FBA.AlwaysInventory tab
MovementsPer-product view of the movement ledger.Inventory typesThe movement ledger
AllocationsAllocations and backorders for this product.Inventory typesAllocations & backorders
FIFO LayersThe product's FIFO cost layers.Inventory typesFIFO layers & COGS
Lots & ExpiryLot and expiry tracking, with a lot-genealogy view.Inventory typesFIFO layers & COGS
COGSCost-of-goods history and recalculation.Inventory typesCOGS tab
HoldsStock holds placed on this product.Inventory typesHolds tab
ImagesProduct images.AlwaysAdd & manage product images
SuppliersSupplier links, costs, and the default supplier.AlwaysManage a product's suppliers
AnalyticsPeriod-comparison sales KPIs and charts.AlwaysAnalytics tab
Pro FormaLanded-cost and margin modeling.AlwaysPro Forma tab
PricingPrice, pricing tiers.AlwaysSet a product's price
ShippingShipping-related fields.AlwaysProduct fields & validation reference
Categories & AttributesCategory and attribute assignments.AlwaysSet a product's categories & attributes
AccountingFinancial line type and nominal codes.AlwaysSet a product's accounting
ListingsSales-channel listing status and counts.AlwaysComing in the Listings guide
eBay SettingsPer-product eBay listing settings.eBay instance existseBay Settings tab
BOMsBills of materials.AlwaysBOMs tab
Units of MeasureThe product's units and conversions.AlwaysConfigure units of measure
ActivityNotes and audit history.AlwaysActivity tab

Inventory tab

Beyond the numbers the inventory guide already owns, the tab surfaces product-detail-specific sections:

  • Warehouse Inventory table — stock per warehouse, with the reorder point (min stock level) editable inline and preferred bins shown per row.
  • Purchase Orders section — open POs feeding this product.
  • Warehouse Transfers section — transfers moving this product.
  • Preferred Bin dialog — set the preferred storage bin. See Manage preferred storage bins.
  • FBA Inventory dialog — Amazon FBA breakdown.

The warehouse stock rows, opening balance, min-stock concept, and per-product stock numbers are documented in the inventory guide — see Set up product inventory and Browse the product inventory list. This tab doesn't re-explain them.

COGS tab

Shows the product's cost-of-goods-sold history and current valuation, drawn from warehouse FIFO layers only — Amazon FBA inventory is tracked separately (on a weighted-average-cost ledger) and summarized in its own Amazon FBA panel rather than mixed into the warehouse figures. A Recalculate COGS action rebuilds the cost history from scratch; the last rebuild time is shown on the list. COGS rebuild and correction concepts live in the inventory guide — see Rebuild COGS and Correcting COGS.

Holds tab

Lists stock holds on the product, with a Released (30d) summary. You can Release or Delete holds one at a time from each active row, or select several and use the bulk Release / Delete actions; each path asks for confirmation first. Releasing requires inventory.adjust. The hold concept and how holds affect availability are documented at Place a stock hold.

Analytics tab

Sales and consumption analytics scoped to this product. A period-comparison toggle drives the comparison window, and each metric shows its period label. When the current period isn't yet complete, the tab notes "This period is still in progress" and compares against an equivalent partial window so the comparison stays fair.

Pro Forma tab

A thin wrapper around the shared Pro Forma Analyzer, keyed to this product — landed-cost and margin modeling. See also Bundle pricing & revenue proration for how bundle economics are apportioned.

BOMs tab

Lists the Bills of Materials tied to this product (used by manufactured products). When none exist it shows "No BOMs for this product." Product types are explained in Product types explained.

eBay Settings tab

Per-product eBay listing settings, one row per eBay integration instance. The tab only renders when an eBay instance exists, and it still guards for the empty case ("No eBay integration instances found."). Channel publishing itself is out of scope here — that's coming in the Listings guide.

Activity tab

Two sections: an activity/audit history table and a Notes panel with an Add a note input. See Activity log & notes for what the history captures.

Overview widgets

Two small widgets can appear on the Overview tab:

  • Product performance chip — a composite scorecard (a banded score with a trend chip and sparklines for sales volume and units sold). When there is too little data it shows "Insufficient data" with the sales-order count for the period rather than a misleading score.
  • Bundle potential — for bundle products, surfaces the maximum assemblable quantity given current component stock, broken down by component and warehouse. See Kits vs bundles.

Editing model

The detail page has no single edit form — editing is spread across many independent sections and tabs. The page holds one pessimistic record lock for the whole product: the first section you open acquires it and the last you close releases it. If another user (or your own other browser tab) holds the lock, a banner explains who is editing and lets you request edit access or take over. If your lock is taken over mid-edit, open sections drop back to read-only and the record is re-fetched so you are never left with unsaveable changes.

Loading relations

The single-product API returns a default set of relations — brand, primary image, primary category, tags, default supplier product, and total inventory — and accepts an optional with= comma-separated list to load more. Only relations on a fixed allowlist (for example images, components, variations, warehousesInventory.warehouse, productBlemished.originalProduct, notes.user) are honored; anything not on the list is ignored. This keeps the payload predictable regardless of what a caller requests.

Refreshing the inventory cache

The Refresh inventory cache button (in the stats bar) recomputes the product's cached stock figures and average cost synchronously — it runs the inventory recompute immediately rather than queuing a job — then reloads the record and confirms with "Inventory recalculated." If the recompute fails, the server returns an error and the message is surfaced to you. Use it after out-of-band changes when the cache-freshness timestamp looks stale. This is distinct from the header Refresh button, which only re-fetches the record without recomputing.

Activity log & notes

The Activity tab's history is an aggregated audit trail: it rolls up events from the product itself plus its supplier products and supplier product pricing, grouped by the product so supplier-side changes appear alongside product-side ones. Logging records only changed fields (dirty attributes), excludes updated_at, and skips empty logs — so the trail stays signal, not noise. You can search the history by the person who made the change, the event, the changed properties, or the subject type.

Notes are free-text entries attached to the product, newest first, each stamped with its author.

Next steps

Last verified: