InventoryVelocity

Get the Inventory Velocity report

Changed on

Returns one row per product sold in the last 365 days with its sales over six windows, a daily demand rate, how many days its stock lasts and, given lead_time_days, when to reorder it and how much to order. This is a read-only snapshot computed at request time; it never changes inventory or purchases, and does not touch compliance systems (Metrc/BioTrack). Use it to plan purchases.

How the figures are built: • Sales are sales order lines (samples included) on orders in every status except Canceled and Merged (MERGED is not accepted; use statuses to narrow it), net of their returns. A return counts on the original order's date, whatever the return's status. • Sales count every order in your company, even when your API key's user may only view their own or their team's orders: reorder planning needs company-wide demand, and the report sits behind its own permission. • Every sales window ends yesterday in the company's timezone: today's partial sales are left out. • The demand rate (average_daily_sold) is half the 30-day average plus half the 365-day average, never below 0. Every forward figure divides by it, and is null when it is 0. • quantity_available is active minus reserved stock, the same figure as available_quantity in GET /public/v1/reports/inventory-valuation for the same location_ids and user_ids. quantity_incoming is the quantity still to receive on open purchases dated within stale_incoming_days; older ones count in stale_incoming_quantity and are left out of every forward figure. • Without lead_time_days no row gets a reorder point, reorder date or suggested quantity, and every reorder_status is UNKNOWN.

Only active products are listed, and only those with at least one sale in the last 365 days. Numeric cells are returned as plain strings (no $ or ,), dates as M/D/YYYY, and a value that does not apply as null. Report-level information (the generation date and the column definitions) is returned under meta. Every matching product is returned in one response; there is no pagination. Rows come back ordered by reorder_by_date, soonest first, with rows that have none last.

Each row also carries the IDs of the records it names — product_id, product_category_id, vendor_id and brand_id, each right after its name column — so a row can be followed to the product or company endpoints without a name lookup. The CSV export leaves these ID columns out.

Required permission: reports_permissions_inventory_velocity. The report must also be turned on for your company; until it is, the endpoint returns 403.

get/public/v1/reports/inventory-velocity

Request

  • Base URL
    https://app.distru.com
  • Auth
    HTTP bearer

Query parameters

lead_time_daysinteger

Days from placing a purchase order to receiving it, 1 to 365. Sets the reorder point, reorder_by_date, reorder_status and the suggested quantities. When omitted, those are null and every reorder_status is UNKNOWN.

target_days_of_supplyinteger

Days of demand an order should cover, 1 to 365. Defaults to 30. Sizes suggested_order_quantity and suggested_order_quantity_at_reorder_date.

service_levelinteger

The percentile of past demand over a lead_time_days-long stretch that the reorder point covers, 50 to 99. Defaults to 95. Higher means fewer stockouts and more stock.

no_sales_after_daysinteger

Days without a sale after which a product's reorder_status is NO_RECENT_SALES, with no reorder date or suggested quantity, 0 to 365. Defaults to 60. 0 turns the check off.

stale_incoming_daysinteger

Age in days, 1 to 3650, after which an open purchase counts in stale_incoming_quantity instead of quantity_incoming. Defaults to 90.

searchstring

Keeps only products that match the term. Matching is case-insensitive: a product is kept when the term appears anywhere in its name or SKU, or when the term is a close fuzzy match on the name. Omit (or pass empty) to keep every product.

product_idsstring[]

Keeps only these products, by product ID. At most 200. Omit to keep every product.

location_idsstring[]

Counts only sales shipped from, stock at and purchase lines received at these locations, by location ID. Combined with user_ids as a union: a sale, stock or purchase line counts if it is at any listed location OR belongs to any listed user. At most 200. Omit both to count every location and user.

user_idsstring[]

Counts only sales, stock and purchase lines belonging to these users, by user ID. Combined with location_ids as a union (see that param). At most 200.

statusesstring[]

Counts only sales on orders in these statuses. Values are SCREAMING_CASE and combine with OR. At most 200. When omitted, every status except Canceled and Merged counts (MERGED is not accepted).

below_reorder_pointboolean

true keeps only rows at or below their reorder point; false keeps only rows above it. Either way a row with no reorder point is left out. Omit to keep both.

below_quantity_available_threshold_minboolean

true keeps only rows at or below the product's inventory alert minimum; false keeps only rows above it. Either way a product with no minimum is left out. Omit to keep both.

max_days_of_supplyinteger

Keeps only rows whose days_of_supply is at most this many days, 0 to 36500. A row with no days_of_supply (a demand rate of 0) is left out.

product_category_idsstring[]

Keeps only products in these categories, by product category ID. Combines with product_subcategory_ids as one OR, except that listing a subcategory of a listed category narrows that category to the listed subcategories. At most 200.

product_subcategory_idsstring[]

Keeps only products in these subcategories, by product subcategory ID. See product_category_ids. At most 200.

product_tag_idsstring[]

Keeps only products carrying at least one of these tags, by tag ID. At most 200.

vendor_idsstring[]

Keeps only products supplied by these vendors, by company ID. At most 200.

brand_idsstring[]

Keeps only products under these brands, by company ID. At most 200.

product_group_idsstring[]

Keeps only products in these product groups, by product group ID. At most 200.

Response

The Inventory Velocity report

Changes