> ## 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.

# Correct a completed assembly order's quantities

> Corrects a **completed** assembly or disassembly order. You can set the
produced quantity and each component line's actual quantity independently.
The original quantity logs are rewritten in place, later running balances on
each stock shift by the on-hand change, and the stock total and bin always
move by the same delta. **By default a balancing adjustment then posts the
opposite deltas so today's on-hand does not change** (a historical fix).
Planned quantities are never changed. After apply, the rewritten quantity
logs are rematerialized into Core inventory immediately; no full Core
rebuild is needed.

To rescale the finished good together with its planned quantity, use
`POST /posted-quantity-corrections` instead (same balancing defaults). This
endpoint never changes planned quantity.

Send only the legs you want to change. A leg whose quantity equals the posted
one is ignored; at least one leg must change. Each value is in the leg's order
unit of measure, and the base quantity scales by the same ratio.

**Balancing entry**

- **Default** (no `balancing_entry.date`, `allow_shelf_change` not true): a
  balancing adjustment is posted **today** with the opposite of each stock's
  net change, so today's on-hand does not move.
- **With `balancing_entry.date`**: the balancing adjustment is posted on that
  date instead (not in the future; a back-dated entry is dated at the start of
  that day).
- **`allow_shelf_change: true`**: no balancing adjustment is posted and
  today's on-hand moves by each change. Use this only when the shelf really
  holds the corrected amount. Rejected (422) when a later shipment, location
  transfer, transfer order, fulfillment order, stock pull, cycle count,
  adjustment or recount already exists on an affected stock.

The adjustment's remarks reference the order and the reason; running balances
for those stocks are recomputed in date order from the earlier of the order's
log and the adjustment.

**Rejected (422) when** the order is not completed or not an
assembly/disassembly order, a line id is not on this order, nothing changes,
a changed leg does not have exactly one posted on-hand log, the balancing
date is in the future, `allow_shelf_change` is true but later movements exist
on an affected stock, or the order's completion date or the balancing date is
in a closed period.




## OpenAPI

````yaml /api-reference/build.yaml post /assembly-orders/{assemblyOrderId}/ledger-correction
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:
  /assembly-orders/{assemblyOrderId}/ledger-correction:
    parameters:
      - in: path
        name: assemblyOrderId
        required: true
        schema:
          type: integer
        description: ID of a completed assembly or disassembly order.
    post:
      tags:
        - Assembly Orders
      summary: Correct a completed assembly order's quantities
      description: >
        Corrects a **completed** assembly or disassembly order. You can set the

        produced quantity and each component line's actual quantity
        independently.

        The original quantity logs are rewritten in place, later running
        balances on

        each stock shift by the on-hand change, and the stock total and bin
        always

        move by the same delta. **By default a balancing adjustment then posts
        the

        opposite deltas so today's on-hand does not change** (a historical fix).

        Planned quantities are never changed. After apply, the rewritten
        quantity

        logs are rematerialized into Core inventory immediately; no full Core

        rebuild is needed.


        To rescale the finished good together with its planned quantity, use

        `POST /posted-quantity-corrections` instead (same balancing defaults).
        This

        endpoint never changes planned quantity.


        Send only the legs you want to change. A leg whose quantity equals the
        posted

        one is ignored; at least one leg must change. Each value is in the leg's
        order

        unit of measure, and the base quantity scales by the same ratio.


        **Balancing entry**


        - **Default** (no `balancing_entry.date`, `allow_shelf_change` not
        true): a
          balancing adjustment is posted **today** with the opposite of each stock's
          net change, so today's on-hand does not move.
        - **With `balancing_entry.date`**: the balancing adjustment is posted on
        that
          date instead (not in the future; a back-dated entry is dated at the start of
          that day).
        - **`allow_shelf_change: true`**: no balancing adjustment is posted and
          today's on-hand moves by each change. Use this only when the shelf really
          holds the corrected amount. Rejected (422) when a later shipment, location
          transfer, transfer order, fulfillment order, stock pull, cycle count,
          adjustment or recount already exists on an affected stock.

        The adjustment's remarks reference the order and the reason; running
        balances

        for those stocks are recomputed in date order from the earlier of the
        order's

        log and the adjustment.


        **Rejected (422) when** the order is not completed or not an

        assembly/disassembly order, a line id is not on this order, nothing
        changes,

        a changed leg does not have exactly one posted on-hand log, the
        balancing

        date is in the future, `allow_shelf_change` is true but later movements
        exist

        on an affected stock, or the order's completion date or the balancing
        date is

        in a closed period.
      operationId: applyAssemblyOrderLedgerCorrection
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - reason
              properties:
                reason:
                  type: string
                  maxLength: 500
                  example: Counted 24 gaskets used, not 2
                produced_quantity:
                  type: number
                  nullable: true
                  exclusiveMinimum: true
                  minimum: 0
                  description: >
                    New actual quantity of the order's own SKU (the finished
                    good on an

                    assembly, the parent on a disassembly). Greater than zero.
                  example: 12
                lines:
                  type: array
                  nullable: true
                  items:
                    type: object
                    required:
                      - order_line_id
                      - quantity
                    properties:
                      order_line_id:
                        type: integer
                        description: A line on this order.
                        example: 88
                      quantity:
                        type: number
                        exclusiveMinimum: true
                        minimum: 0
                        description: New actual quantity of that line. Greater than zero.
                        example: 24
                balancing_entry:
                  type: object
                  nullable: true
                  properties:
                    date:
                      type: string
                      format: date
                      nullable: true
                      description: >
                        Date of the balancing adjustment. Not in the future.
                        When

                        omitted (and `allow_shelf_change` is not true) the
                        balancing

                        entry is dated today.
                      example: '2026-10-19'
                allow_shelf_change:
                  type: boolean
                  default: false
                  description: >
                    `true` skips the balancing adjustment so today's on-hand
                    moves by

                    each change. Rejected (422) when later inventory movements
                    exist

                    on an affected stock.
      responses:
        '200':
          description: Correction applied
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: >-
                      Order quantities corrected. Rewritten quantity logs were
                      rematerialized into Core where Core tables exist.
                  data:
                    type: object
                    description: >
                      Result of a ledger correction on a completed assembly or
                      disassembly order.

                      The preview omits `correction_ids`, `adjustment_id`,
                      `rematerialized_log_ids`

                      and `balance_warnings`.
                    properties:
                      order_id:
                        type: integer
                        example: 500
                      type:
                        type: string
                        description: Order type.
                        enum:
                          - assembly
                          - disassembly
                        example: assembly
                      rows:
                        type: array
                        description: One row per changed leg.
                        items:
                          type: object
                          properties:
                            order_line_id:
                              type: integer
                              nullable: true
                              description: >-
                                Order line ID, or `null` for the order's own
                                SKU.
                              example: 88
                            sku:
                              type: string
                              example: GASKET-02
                            role:
                              type: string
                              enum:
                                - produced
                                - consumed
                              description: >
                                `produced` when the leg adds stock (the finished
                                good on an assembly,

                                the outputs on a disassembly); `consumed` when
                                it removes stock.
                            old_quantity:
                              type: number
                              example: 2
                            new_quantity:
                              type: number
                              example: 24
                            onhand_delta:
                              type: number
                              description: Signed change to on-hand.
                              example: -22
                            onhand_after:
                              type: number
                              description: >
                                Today's on-hand after every change on that
                                stock. With a balancing

                                entry (the default) this equals the current
                                on-hand; with

                                `allow_shelf_change` it moves by the net change.
                                A negative value

                                is allowed.
                              example: 78
                            later_count_warning:
                              type: boolean
                              description: >
                                A cycle count, adjustment entry or manual
                                recount was posted on this

                                stock after the order. That count may already
                                have absorbed the

                                difference, so consider a balancing entry. A
                                warning, not a block.
                            later_count_transaction:
                              type: string
                              nullable: true
                              example: CYCLE COUNT
                            later_count_date:
                              type: string
                              format: date
                              nullable: true
                              example: '2026-10-02'
                      balancing_entry:
                        type: object
                        nullable: true
                        description: >
                          The balancing adjustment that keeps today's on-hand
                          unchanged (dated

                          `balancing_entry.date`, or today when omitted). `null`
                          only when

                          `allow_shelf_change` was true.
                        properties:
                          date:
                            type: string
                            format: date
                            example: '2026-10-19'
                          lines:
                            type: array
                            items:
                              type: object
                              properties:
                                sku:
                                  type: string
                                  example: GASKET-02
                                quantity:
                                  type: number
                                  description: >-
                                    Adjustment quantity (the opposite of the net
                                    change).
                                  example: 22
                                onhand_after:
                                  type: number
                                  example: 100
                      requires_full_core_rebuild:
                        type: boolean
                        description: >-
                          Always `false`; rewritten quantity logs are
                          rematerialized into Core immediately.
                        example: false
                      message:
                        type: string
                        example: >-
                          Rewritten quantity logs were rematerialized into Core
                          where Core tables exist.
                      correction_ids:
                        type: array
                        description: Save only. IDs of the correction records written.
                        items:
                          type: integer
                        example:
                          - 41
                      rematerialized_log_ids:
                        type: array
                        description: >
                          Save only. IDs of the rewritten quantity logs whose
                          Core inventory

                          transactions were deleted and re-ingested. Empty when
                          the tenant has no

                          Core tables.
                        items:
                          type: integer
                        example:
                          - 7781
                      adjustment_id:
                        type: integer
                        nullable: true
                        description: >-
                          Save only. ID of the balancing adjustment entry, when
                          one was posted.
                        example: 9001
                      balance_warnings:
                        type: array
                        description: >
                          Save only. Stocks whose recomputed ledger balance
                          differs from their

                          on-hand. On-hand is left unchanged in that case.
                        items:
                          type: object
                          additionalProperties: true
        '400':
          description: Request validation failure (missing `reason`, quantity ≤ 0).
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
        '404':
          description: Assembly order not found.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Assembly order not found.
        '422':
          description: The order cannot be corrected.
          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.