Get Product Inventory Tally
GET/api/v2/products/:product/inventory-tally
Get the enriched inventory tally for a product at a specific warehouse — a chronological movement ledger with running balances.
products:readGrant this scope to your token under Settings → Developer → Personal Access Tokens.
The movements array is a merged ledger of two row kinds, discriminated by row_kind:
movement— a real inventory movement. Carriesid,type,quantity,reference, and the ledgerrunning_balance.channel_debt— a sales order line the sales channel fulfilled while the warehouse had no stock. No inventory movement exists for these units, so the row never changesrunning_balance. Carriessales_order_id,sales_order_line_id, the gross owedquantity(negative),outstanding_quantity(gross minus active allocations), andis_covered.
Every row also carries implied_physical_balance — the ledger running balance minus cumulative channel debt so far, i.e. the physical stock level implied once channel-shipped-but-never-deducted units are counted.
Channel-debt rows are only interleaved when inventory_status is active (the default); an in_transit tally returns zeroed channel-debt totals.
Summary fields: movement_count counts movement rows only; channel_debt_count, channel_debt_units (gross), channel_debt_outstanding_units, and channel_debt_order_count describe the debt; implied_physical_closing_balance = closing_balance minus gross channel debt.
Authentication: Requires Bearer token.
Movement rows also carry recorded_at — when the movement was booked. A sale recorded well after its movement date is the settled-fulfillment-debt signature: the deduction was minted when stock arrived, backdated to the ship time.
Movement rows carry the polymorphic source document (link_type, link_id, parent_link_id, detail_link_id) so the reference can link to its page. A channel_debt row's date is its chronological settlement position: the channel ship time when a recorded shipment exists, else the order date — the date its movement will carry once settled. Scarce arriving stock settles debt in exactly this order.
Request
Responses
- 200
- 401
- 403
- 404
- 422
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Not found — no record with the given identifier (or the route does not exist). Verify the ID before retrying.
Unprocessable Entity
Response Headers
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.