Bulk BOM attachment

Luminous now supports attaching one or more Bills of Materials to many SKUs in a single step, both from the in-app SKU list and via the External V1 API.


From the SKU list (UI)

  1. Go to Inventory → SKUs.
  2. Check the checkboxes next to the SKUs you want to update.
  3. Click the N Selected SKUs button that appears above the list and select Attach BOMs.
  4. In the dialog, search for and select one or more BOMs from the autocomplete field.
  5. Choose an attachment mode:
    • Add (default): adds the selected BOMs without removing any already attached.
    • Replace: removes all currently attached BOMs on each selected SKU and replaces them with the selected ones.
  6. Click Attach N BOMs. The dialog shows a per-SKU result summary; if everything succeeded it closes automatically after a short delay.

Tip: The dialog shows a count of successes and failures. Expand the details panel to see which SKU+BOM pairs failed and why (e.g. SKU not found, BOM not found).


Via the External V1 API

Endpoint: POST /external/api/v1/products/bulk-attach-boms

Request body:

{
  "items": [
    { "internal_sku": "SHIRT-RED-S",  "bom_name": "BOM-SHIRT-RED" },
    { "internal_sku": "SHIRT-RED-M",  "bom_name": "BOM-SHIRT-RED" },
    { "internal_sku": "PANTS-BLUE-32", "bom_name": "BOM-PANTS-BLUE" }
  ],
  "mode": "add"
}
FieldRequiredDescription
itemsYesArray of { internal_sku, bom_name } pairs. Maximum 10,000 items per call.
modeNo"add" (default) — preserves existing BOMs; "replace" — replaces all BOMs on each touched SKU.

Example response:

{
  "processed": 3,
  "succeeded": 2,
  "failed": 1,
  "mode": "add",
  "results": [
    { "internal_sku": "SHIRT-RED-S",   "bom_name": "BOM-SHIRT-RED",  "status": "attached" },
    { "internal_sku": "SHIRT-RED-M",   "bom_name": "BOM-SHIRT-RED",  "status": "attached" },
    { "internal_sku": "PANTS-BLUE-32", "bom_name": "BOM-PANTS-BLUE", "status": "error", "reason": "BOM not found" }
  ]
}

Result statuses:

  • attached — the BOM was successfully attached to the SKU.
  • error — the pair was skipped; the reason field explains why (common causes: "SKU not found", "BOM not found").

Notes:

  • Lookups are case-sensitive for both internal_sku and bom_name.
  • A 200 response is returned even when some pairs fail — check failed and the results array.
  • The endpoint performs all SKU and BOM lookups in bulk (two queries), so very large requests are efficient.