---
title: "Get the Inventory Assets report"
method: GET
path: "/public/v1/reports/inventory-assets"
tags: ["InventoryAssets"]
---

# Get the Inventory Assets report

`GET /public/v1/reports/inventory-assets`

Read-only report. Returns one row per on-hand inventory asset — a product held at a location, and when the product is batch- or package-tracked, split further by batch or by package. Each row carries the asset's descriptive attributes (product, SKU, vendor, owner, unit type, category, subcategory, license, location, package number, batch number, expiration date, harvest date, tracking method), its `active`, `assembling`, and `selling` quantities, its unit price, and its actual and default unit and total costs.

Quantities and costs are a point-in-time snapshot. Omit `datetime` to report the position as of now, or pass a past `datetime` to reconstruct the position at that instant. A `datetime` earlier than the earliest supported snapshot (before `2023-08-03T11:00:00Z`) is rejected — positions are only reconstructable from the instant the point-in-time inventory history begins. The snapshot counts only inventory that was in an `active`, `selling`, or `assembling` state at that instant; and it drops assets whose product was deleted or whose batch was deleted or whose package was inactivated as of the snapshot, so a deletion made after the snapshot instant still shows in a past-dated report. This is a computed position, not a live table — it does not create, reserve, consume, or otherwise change inventory, and it pushes nothing to Metrc or BioTrack.

Pass `style=granular` to expand each asset into the individual cost inputs that produced it: each asset's `Final` row is followed by one `Input` row per traced cost component. This mode adds the `final_input`, `cost_origin`, and `cost_quantity` columns, and requires permission to view cost details — the request is rejected without it. In the default `collapsed` style each asset is a single row and those three columns are absent.

The four cost columns (`unit_cost_actual`, `unit_cost_default`, `total_cost_actual`, `total_cost_default`) are present only for callers with permission to view costs; without it they are dropped from every row and from `meta.columns`. `location_id` narrows the report to a single location.

Every value is returned as it appears in the report's CSV export, with numeric cells returned as strings (currency and comma formatting stripped, matching the rest of the API) and enum cells (`tracking_method`) normalized to their SCREAMING_CASE tokens. Report-level information — the resolved snapshot date and the exact column set for this request — is returned under `meta`.

Required permission: `reports_permissions_inventory_assets` (granular style additionally requires permission to view cost details).

## Query parameters

- `style` 'collapsed' | 'granular'
- `location_id` string
- `datetime` string

## Response `200`

The Inventory Assets report

## Other responses

- `400` — Invalid parameters
- `401` — Missing or invalid API token
- `403` — The API token lacks the required permission

---

[API](https://skmtc.dev/distru/apis/distru-api.md) · [All operations](https://skmtc.dev/distru/apis/distru-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/distru/distru-api/revisions/f8930b2c2924/schema)
