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

# Bulk attach BOMs to products

> Attach BOMs to many products in a single request by matching each
product's `internal_sku` to a BOM `bom_name`. Each item is an independent
SKU + BOM pair (this is not a one-BOM-to-many-SKUs operation), and every
row is reported individually so partial success is possible.

Rows whose SKU or BOM cannot be resolved are skipped and returned with an
`error` status and a `reason`; the rest are still attached. The overall
request returns `200` even when some rows fail — inspect the `results`
array and the `failed` count to detect per-row problems.

**Modes**
- `add` (default): preserves existing BOM attachments on each touched SKU
  (`syncWithoutDetaching`).
- `replace`: replaces all BOMs on each touched SKU with the ones supplied
  in this request (`sync`).




## OpenAPI

````yaml /api-reference/build.yaml post /products/bulk-attach-boms
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: 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 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: Integration Mappings
    description: Manage integration mappings for external systems
  - name: Integration Field Mappings
    description: Manage field-level mappings between Luminous and external systems
paths:
  /products/bulk-attach-boms:
    post:
      tags:
        - Products
      summary: Bulk attach BOMs to products
      description: >
        Attach BOMs to many products in a single request by matching each

        product's `internal_sku` to a BOM `bom_name`. Each item is an
        independent

        SKU + BOM pair (this is not a one-BOM-to-many-SKUs operation), and every

        row is reported individually so partial success is possible.


        Rows whose SKU or BOM cannot be resolved are skipped and returned with
        an

        `error` status and a `reason`; the rest are still attached. The overall

        request returns `200` even when some rows fail — inspect the `results`

        array and the `failed` count to detect per-row problems.


        **Modes**

        - `add` (default): preserves existing BOM attachments on each touched
        SKU
          (`syncWithoutDetaching`).
        - `replace`: replaces all BOMs on each touched SKU with the ones
        supplied
          in this request (`sync`).
      operationId: bulkAttachBomsToProducts
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - items
              properties:
                items:
                  type: array
                  minItems: 1
                  maxItems: 10000
                  description: SKU + BOM name pairs to attach.
                  items:
                    type: object
                    required:
                      - internal_sku
                      - bom_name
                    properties:
                      internal_sku:
                        type: string
                        maxLength: 255
                        description: The product's internal SKU.
                      bom_name:
                        type: string
                        maxLength: 255
                        description: The name of the BOM to attach.
                mode:
                  type: string
                  enum:
                    - add
                    - replace
                  default: add
                  nullable: true
                  description: >
                    Attachment mode. `add` (default) preserves existing BOM

                    attachments; `replace` replaces all BOMs on each touched
                    SKU.
            example:
              items:
                - internal_sku: RED-S
                  bom_name: BOM-RED-S
                - internal_sku: RED-M
                  bom_name: BOM-RED-M
              mode: add
      responses:
        '200':
          description: |
            Processing summary. Returned even when some rows fail; inspect
            `results` and `failed` for per-row outcomes.
          content:
            application/json:
              schema:
                type: object
                properties:
                  processed:
                    type: integer
                    description: Total number of items in the request.
                  succeeded:
                    type: integer
                    description: Number of SKU + BOM pairs successfully attached.
                  failed:
                    type: integer
                    description: Number of pairs that could not be attached.
                  mode:
                    type: string
                    enum:
                      - add
                      - replace
                    description: The mode used for this request.
                  results:
                    type: array
                    description: Per-row outcome, one entry per input pair.
                    items:
                      type: object
                      properties:
                        internal_sku:
                          type: string
                          description: The product internal SKU for this row.
                        bom_name:
                          type: string
                          description: The BOM name for this row.
                        status:
                          type: string
                          enum:
                            - attached
                            - error
                          description: Outcome for this pair.
                        reason:
                          type: string
                          description: >
                            Failure reason when `status` is `error` (e.g.

                            `SKU not found`, `BOM not found`). Absent on
                            success.
              example:
                processed: 2
                succeeded: 1
                failed: 1
                mode: add
                results:
                  - internal_sku: RED-S
                    bom_name: BOM-RED-S
                    status: attached
                  - internal_sku: RED-M
                    bom_name: BOM-RED-M
                    status: error
                    reason: BOM not found
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
        '422':
          description: Validation error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  errors:
                    type: object
                    additionalProperties:
                      type: array
                      items:
                        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.

````