Skip to content

Bulk operations

The container detail page has a bulk-action toolbar. It operates on the BOMs you’ve selected with the row checkboxes. There are roughly a dozen verbs available — this page is the reference.

  • The verb inventory
  • Subscription gates
  • How bulk actions are dispatched (and what that means for failure modes)
  • Bulk operations NOT yet available
VerbWhat it doesSubscription
Bulk activateSet status=‘active’ on each selected member.
Bulk deactivateSet status=‘inactive’.
Bulk remove from containerSet bomAutoId=NULL — un-groups, doesn’t delete.
Bulk deleteHard-delete each selected member (cascade removes references).
Bulk enable dynamic adjustmentSet dynamicAdjustmentEnabled=1.
Bulk disable dynamic adjustmentSet dynamicAdjustmentEnabled=0.
Bulk enable maintain inventory levelSet maintainSameInventoryLevel=1.
Bulk disable maintain inventory levelSet maintainSameInventoryLevel=0.
Bulk enable auto-generate material listSet autoGenerateMaterialList=1.Enhanced
Bulk disable auto-generate material listSet autoGenerateMaterialList=0.
Bulk enable keep assembled on returnSet onReturnKeepAssembled=1.
Bulk disable keep assembled on returnSet onReturnKeepAssembled=0.
Bulk enable only sell pre-assembledSet onlySellPreassembled=1. With option to also seed pre-assembled to current max-available.Enhanced
Bulk disable only sell pre-assembledSet onlySellPreassembled=0.
Bulk sync with raw materialsTrigger a one-shot dynamic-adjustment recompute for each member.
Bulk BOM creation (from template)Create N new BOMs against a template, all into this container.

That’s roughly 16 verbs — about a dozen common ones plus the creation paths.

Two are Enhanced-only:

  • Bulk enable auto-generate material list.
  • Bulk enable only sell pre-assembled quantities.

The corresponding disable verbs work on all plans (so you can always unset Enhanced settings if your subscription lapses).

Each bulk verb iterates over the selected member IDs and calls the per-BOM endpoint that the BOM detail page uses. There’s no special “bulk update” endpoint — the work is split into N per-BOM updates, each in its own transaction.

This has implications:

  • Not atomic. If a failure happens halfway through, some BOMs are updated and others aren’t. The error toast tells you what succeeded and what didn’t.
  • Sequential. Calls await each other. Large containers (100+ members) can take several seconds.
  • No deduplication. A bulk-enable on a flag that’s already 1 is a no-op for that BOM (the column doesn’t change), but the row’s lastUpdated advances.
  • Mutual exclusion is not bulk-aware. The dynamic adjustment / maintain inventory level toggle pair is mutually exclusive in the per-BOM UI. The bulk verbs don’t replicate this check — bulk-enabling both would produce inconsistent state. Avoid stacking conflicting bulk operations.

This deserves its own callout. The “Synchronize with raw materials” action triggers a dynamic-adjustment recompute for the BOM. Bulk-running this across a 100-member container makes 100+ Shopify API calls — watch for rate-limit issues.

Use cases:

  • After a manual inventory adjustment that affected many components.
  • After fixing a botched execution log.
  • During incident recovery.

The verb list above is exhaustive. Things you might expect but won’t find:

  • Bulk pre-assembled quantity adjust. Today operators must adjust per-BOM. There’s no “set all members’ pre-assembled to 0” verb.
  • Bulk container-membership transfer. No “move all selected to a different container” — only remove (then add to another).
  • Bulk price/cost edit. No bulk-set unit price across members.
  • Bulk Shopify resync. No bulk equivalent of the per-BOM enrich-data operation.

If your workflow needs one of these, file a feature request — they’re not bug reports.

  • Bulk delete is irreversible. No soft-delete. Audit logs survive (the execution log doesn’t FK to BOM rows), but the BOMs themselves are gone.
  • Dynamic-adjustment + maintain-same level mutex. Don’t bulk-enable both on the same selection.
  • Mixed-state selections. Toggle verbs are absolute — Bulk enable dynamic adjustment sets =1 for everyone, even those already at =1 (no-op for them) and those currently at =0 (flipped).