---
title: "List inventory movements"
method: GET
path: "/api/v1/inventory-movements"
tags: ["inventory-movements"]
---

# List inventory movements

`GET /api/v1/inventory-movements`

Returns a paginated history of inventory movements (SNAPSHOT and DELTA records) read from the Elasticsearch audit log, scoped to the caller account and ordered newest-first ("occurred_at" desc) by default. Filter by exact "sku", free-text "q" matching SKU or product name (case-insensitive substring), "strategyCode", "reason" and "updateType". Each item exposes the running balance ("balance_after") recorded when the movement occurred, which may be null for deltas still awaiting backfill.

## Query parameters

- `sku` string
- `q` string
- `strategyCode` string[]
- `reason` string
- `updateType` string
- `occurredFrom` string
- `occurredTo` string
- `page` number
- `limit` number
- `sortBy` string
- `sortOrder` string

## Response `200`

Paginated history of inventory movements.

- InventoryMovementsListResponse
  - `data` InventoryMovementListItemResponse[], required
    - `update_type` 'SNAPSHOT', required
    - `reason` 'ADJUSTMENT' | 'ERP_SYNC' | 'ORDER_RELEASED' | 'ORDER_RESERVED' | 'POS_SALE' | 'RETURN_RECEIVED' | 'SAFETY_STOCK_CONFIG' | 'STOCK_SHORTAGE' | 'TRANSFER', required
    - `balance_after` InventoryMovementBalanceAfterResponse, required
      - `on_hand` number, required
      - `reserved` number, required
      - `blocked` number, required
    - `product_name` string, nullable, required — Product name at the time the movement was recorded; null for older documents and unregistered SKUs.
    - `strategy_name` string, nullable, required — Strategy name at the time the movement was recorded; null for older documents and unregistered strategies.
    - `id` string, required
    - `event_id` string, required
    - `sku` string, required
    - `strategy_code` string, required
    - `quantity` number, required
    - `occurred_at` string, required
  - `meta` PaginationMetaResponse, required
    - `total` number, required — Total number of records that match the filter.
    - `pages` number, required — Number of pages available.
    - `current_page` number, required — Page number returned in this response.
    - `next_page` number, nullable, required — Next page number, or null when on the last page.
    - `previous_page` number, nullable, required — Previous page number, or null when on the first page.
    - `limit` number, required — Page size used to compute pagination.

## Other responses

- `400` — Invalid query parameters (pagination, sorting, or filter values).
- `401` — Authentication is missing, malformed, expired, or refers to a session that is no longer active.
- `403` — The caller is authenticated but lacks the required permission for this action.
- `500` — Unexpected server error. The response body never leaks internal details.

---

[API](https://skmtc.net/kruzer-corp/apis/oms-api.md) · [All operations](https://skmtc.net/kruzer-corp/apis/oms-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/kruzer-corp/oms-api/revisions/38ef6e16a7a8/schema)
