The stock ledger, newest first
Every plus and minus of stock, newest first, each naming the document that caused it: a receipt, a count, a fulfilment, a return, an adjustment, a transfer leg, the opening the ledger started from, or a correction the nightly sweep booked against a source that disagreed.
With no filter the page is the organisation's latest movements across every product and warehouse. Name a product and a warehouse, a document (document_type with document_id), a kind or a window to narrow it; every filter narrows the ledger itself, so filtered_max_size counts the matching rows.
Sums are the point. The rows for one product at one warehouse sum to that pair's on hand, which is what get_position serves as one figure. evidence rides a sync_correction alone, where it carries the source's snapshot, the ledger's sum and how many nights running they disagreed.
Nothing writes here, ever. A movement is written by the document that moved the stock; correcting one is a reversing movement against it, not an edit.
Scope: movements:read.
Request
- Base URL: https://api.app.tightly.io
- URL: https://api.app.tightly.io/api/v1/inventory/movements
- Auth: HTTP bearer
Query parameters
The product.
The warehouse.
One of ledger_opening, purchase_order_delivery, transfer_order_delivery, stocktake, fulfilment_request, channel_fulfilment, return, approval_request, etl_run, manufacturing_build, quarantine_disposition, transfer_custody, outbound_custody.
The document's own id, as text. Sent with document_type.
Comma-separated movement kinds to filter to: opening, receipt, fulfilment, return, adjustment, transfer_out, transfer_in, stocktake, sync_correction.
Only movements that occurred at or after this instant.
Only movements that occurred at or before this instant.
How many movements to skip, for paging through a long ledger.
How many movements to return, newest first.
Headers
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
A page of the ledger, newest first.
Changes
No recorded changes to this operation across all 1 revision of this API.