> ## Documentation Index
> Fetch the complete documentation index at: https://docs.joinluminous.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List a product's Qty Log movements

> Returns a product's (SKU's) Qty Log movements — the SKU's Qty Logs tab —
filtered, sorted and paged on the server. Use it to trace a lot's
inventory history: pass the IDs from
`GET /products/{productId}/lots?include_deleted=1` to `lot_id[in]`
(the same lot number can exist as a deleted lot and a live lot, so pass
both IDs to see the lot's full history).

Without `stock_type`, unfulfillable movements are left out unless the
tenant tracks unfulfillable stock, as on the Qty Logs tab.

Returns `404` for an unknown product.




## OpenAPI

````yaml /api-reference/build.yaml get /products/{productId}/qty-logs
openapi: 3.0.0
info:
  title: Luminous API
  version: 1.0.0
  description: API documentation for Luminous
servers:
  - url: https://{companyName}.api.joinluminous.com/external/api/v1
    variables:
      companyName:
        default: companyName
        description: Your company-specific subdomain
security: []
tags:
  - name: Products
    description: Get and manage products
  - name: Pricing
    description: Manage price schedules, levels, and customizations
  - name: BOMs
    description: Manage Bills of Materials (BOMs)
  - name: Labels
    description: Label rendering via Labelary ZPL service
  - name: Companies
    description: Manage business accounts and their associated data
  - name: Contacts
    description: Manage contact information for individuals
  - name: Suppliers
    description: Manage suppliers (factories) — vendors used on purchase orders
  - name: Supplier SKUs
    description: Manage per-supplier SKU and unit-cost overrides for products
  - name: Locations
    description: Manage warehouses and locations
  - name: Inventory
    description: Get and adjust product stock levels
  - name: Lots
    description: Create, update, and delete product lots (batches)
  - name: Transfer Orders
    description: Manage transfer orders
  - name: Fulfillment Orders
    description: Manage fulfillment orders and picklists
  - name: Freight
    description: >-
      Freightview LTL freight — quotes, booking and documents for fulfillment
      orders
  - name: Fulfillment Priority Lists
    description: Configure fulfillment routing priority lists
  - name: Purchase Orders
    description: Get and modify purchase orders
  - name: Supplier Portal
    description: >-
      Read a supplier's response to a purchase order and control the one-click
      portal link
  - name: Receiving Reports
    description: Manage receiving reports
  - name: Payment Obligations
    description: Manage payment obligations for purchase orders
  - name: Sales Orders
    description: Manage sales orders and sales order shipments
  - name: Purgatory
    description: >-
      Inspect and resolve non-posted sales orders in the purgatory staging
      workflow
  - name: PickFlow Warehouse
    description: >-
      Warehouse-floor lookups for PickFlow — barcode resolution, bin and product
      stock, bin search, and receivables
  - name: PickFlow Shipping
    description: >-
      Provider-agnostic shipping rates, services, packages, and label purchase
      for PickFlow
  - name: Cycle Counts
    description: >-
      Create, drive, and post PickFlow cycle counts — batches, per-warehouse
      sessions, and CSV import/export
  - name: Print Stations
    description: List paired print stations and enqueue print jobs to them
  - name: Invoices
    description: Get and manage invoices
  - name: Work Orders
    description: >-
      Manage work orders — production lifecycle, steps, materials, links,
      shipments, and comments
  - name: Production Batches
    description: Group and manage work orders as production batches
  - name: Bills
    description: >-
      Accounts payable bill management, payments, attachments, allocations, and
      variance
  - name: Prepayments
    description: Manage vendor prepayments and applications
  - name: Vendor Credits
    description: Manage vendor credits and applications
  - name: Vendor Returns
    description: Manage vendor returns and credit generation
  - name: Customer Returns
    description: Manage customer returns (sales returns), receiving, and restock behavior
  - name: Stock Snapshot
    description: Point-in-time stock snapshots with export support
  - name: Consumption
    description: Consumption reports and exports
  - name: Inventory Aging
    description: Cost-layer-based inventory aging reports
  - name: Bills Reports
    description: Accounts payable bills aging reports
  - name: Forecast
    description: Materialized forecast data
  - name: Reports
    description: Close the books, inventory discrepancy, transaction COGS, and EDI reports
  - name: Tags
    description: Add/remove tags across various resources
  - name: Custom Fields
    description: Get and set custom fields across various resources
  - name: Currency
    description: Currency configuration, exchange rates, and conversion
  - name: Drive
    description: >
      Browse, upload, tag and manage files in your Luminous Drive. An API token
      sees the shared

      drive only, never My Files or restricted folders and files. Every write
      and download made

      through the API is recorded in the file's activity log (`GET
      /file-cabinet/files/{id}/activity`)

      with `actor_kind: api_token`.
  - name: Integration Mappings
    description: Manage integration mappings for external systems
  - name: Integration Field Mappings
    description: Manage field-level mappings between Luminous and external systems
  - name: Automations
    description: Create, test, and inspect automation rules and their runs
paths:
  /products/{productId}/qty-logs:
    get:
      tags:
        - Lots
      summary: List a product's Qty Log movements
      description: |
        Returns a product's (SKU's) Qty Log movements — the SKU's Qty Logs tab —
        filtered, sorted and paged on the server. Use it to trace a lot's
        inventory history: pass the IDs from
        `GET /products/{productId}/lots?include_deleted=1` to `lot_id[in]`
        (the same lot number can exist as a deleted lot and a live lot, so pass
        both IDs to see the lot's full history).

        Without `stock_type`, unfulfillable movements are left out unless the
        tenant tracks unfulfillable stock, as on the Qty Logs tab.

        Returns `404` for an unknown product.
      operationId: listProductQtyLogs
      parameters:
        - in: path
          name: productId
          required: true
          schema:
            type: integer
          description: Luminous product (rfq) ID
        - in: query
          name: lot_id[in]
          required: false
          schema:
            type: string
          example: 460,1039
          description: |
            Lot IDs, comma-separated (`lot_id[in]=460,1039`) or repeated
            (`lot_id[in][]=460&lot_id[in][]=1039`). `lot_id=460` and
            `lot_id[]=460` also work. IDs of deleted lots work. Any other shape
            is a 422 (never a fallback to the whole SKU's history).
        - in: query
          name: stock_type
          required: false
          schema:
            type: string
            enum:
              - onhand
              - on_hand
              - pending
              - incoming
              - committed
              - unfulfillable
          description: Which quantity moved (`on_hand` is an alias for `onhand`)
        - in: query
          name: transaction_type
          required: false
          schema:
            type: string
            maxLength: 100
          description: |
            A Qty Logs tab key (`adjustment_entry`, `receiving_report`,
            `sales_order`, `transfer_order`, `pick_auto`, …) or the stored text
            itself (e.g. `ASSEMBLY ORDER ITEM`)
        - in: query
          name: order_number
          required: false
          schema:
            type: string
            maxLength: 100
          description: Contains match on the movement's order number
        - in: query
          name: channel_id
          required: false
          schema:
            type: integer
            minimum: 1
          description: The order's channel
        - in: query
          name: warehouse_id
          required: false
          schema:
            type: integer
            minimum: 1
          description: Warehouse of the movement
        - in: query
          name: date[gte]
          required: false
          schema:
            type: string
            format: date
          description: Movements on or after this date (`YYYY-MM-DD`, inclusive, UTC)
        - in: query
          name: date[lte]
          required: false
          schema:
            type: string
            format: date
          description: Movements on or before this date (`YYYY-MM-DD`, inclusive, UTC)
        - in: query
          name: sort
          required: false
          schema:
            type: string
            enum:
              - '-date'
              - date
            default: '-date'
          description: Newest (`-date`) or oldest (`date`) first; ties keep insertion order
        - in: query
          name: page
          required: false
          schema:
            type: integer
            default: 1
            minimum: 1
          description: Page number
        - in: query
          name: per_page
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 500
            default: 50
          description: Results per page (max 500)
      responses:
        '200':
          description: A page of the product's Qty Log movements
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      description: >
                        One Qty Log movement for a product (a row of the SKU's
                        Qty Logs tab).

                        The three balances are snapshots stored with each
                        movement, one per

                        scope, and are returned as stored — summing `qty_change`
                        can differ

                        from them, because some writes move a balance without a
                        row of their

                        own. No balance across all warehouses is stored.
                      properties:
                        id:
                          type: integer
                          description: Qty Log row ID
                        date:
                          type: string
                          format: date-time
                          description: When the movement was recorded
                        transaction_type:
                          type: string
                          description: >-
                            Stored transaction text, e.g. `ADJUSTMENT ENTRY`,
                            `RECEIVING REPORT`, `ASSEMBLY ORDER ITEM`
                        stock_type:
                          type: string
                          description: Which quantity moved
                          enum:
                            - onhand
                            - pending
                            - incoming
                            - committed
                            - unfulfillable
                        action:
                          type: string
                          description: Movement action, e.g. `ADD`, `SUBTRACT`
                        qty_change:
                          type: number
                          format: float
                          description: >
                            Signed quantity change — negative for `SUBTRACT`, as
                            on the Qty Logs

                            tab. Uses the row's ordered quantity, or its
                            quantity when no ordered

                            quantity was recorded (the tab shows 0 for those
                            rows).
                        running_balance:
                          type: number
                          format: float
                          description: >-
                            Stored balance of the SKU in that warehouse after
                            the movement
                        location_running_balance:
                          type: number
                          format: float
                          description: Stored balance of the bin after the movement
                        lot_running_balance:
                          type: number
                          format: float
                          description: >-
                            Stored balance of the lot (on that stock row) after
                            the movement
                        order_number:
                          type: string
                          nullable: true
                          description: Order number of the movement
                        channel:
                          type: object
                          nullable: true
                          description: The order's channel
                          properties:
                            id:
                              type: integer
                            name:
                              type: string
                              nullable: true
                        warehouse:
                          type: object
                          nullable: true
                          description: Warehouse of the movement
                          properties:
                            id:
                              type: integer
                            name:
                              type: string
                        location:
                          type: object
                          nullable: true
                          description: The bin
                          properties:
                            id:
                              type: integer
                            name:
                              type: string
                        lot_id:
                          type: integer
                          nullable: true
                          description: Lot ID
                        lot_number:
                          type: string
                          nullable: true
                          description: Lot number; present for deleted lots too
                        lot_deleted:
                          type: boolean
                          description: '`true` when the lot has been deleted'
                        user:
                          type: object
                          nullable: true
                          description: User who recorded the movement
                          properties:
                            id:
                              type: integer
                            name:
                              type: string
                        note:
                          type: string
                          nullable: true
                          description: Adjustment remarks, or the movement's own remarks
                  links:
                    type: object
                    description: Pagination links
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                        description: The current page number
                        example: 1
                      from:
                        type: integer
                        description: The starting index of the paginated results
                        example: 1
                      last_page:
                        type: integer
                        description: The last page number
                        example: 5
                      per_page:
                        type: integer
                        description: Number of items per page
                        example: 10
                      to:
                        type: integer
                        description: The ending index of the paginated results
                        example: 10
                      total:
                        type: integer
                        description: Total number of items across all pages
                        example: 50
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
        '404':
          description: Product not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
        '422':
          description: >-
            Validation error (e.g. an unreadable `lot_id` shape, an unknown
            `stock_type`, or `per_page` over 500)
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
      security:
        - BearerAuth: []
components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: >-
        Authenticate using a bearer token. To create a token, navigate to
        /settings/api-tokens and click Create API Token.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.