Place lot-level Hold (with optional BOM cascade)
Places holds on every active putaway location currently carrying the named lot. A lot-level hold is kept as well, so inventory of the lot put away later is held too.
cascade_bom=false (default) — the engine’s Hold::placeByLot path. Only the named lot is held.
cascade_bom=true — the engine’s Hold::cascadeLotHold path. The hold also covers every lot
made from the named lot through work orders, recursively and within the same merchant: kit
lots assembled with it (work_lot_input → work_lot) and component lots de-kitted from it
(work_lot → work_component_lot). Lots the named lot was made from are never held. Each
related lot gets its own lot-level hold under the named lot’s, and its locations are held in
every warehouse. A related lot that already has a lot-level hold, for any reason, is left
unchanged and listed in cascade.detached_lot_ids: it keeps that hold, and the quarantine
covers it, so the lot moves into the quarantine when that hold ends. Locations already held for
any reason are skipped.
With cascade_bom=true, if the named lot already has a lot-level hold, the call returns 422 and
nothing is held, unless that hold is the lot’s own open quarantine with the same reason: then the
quarantine is run again, and its related lots that were released on their own are held again.
With cascade_bom=false, an existing lot-level hold with the same reason is reused and one with a
different reason returns 422.
To lift the quarantine, release the named lot with
POST /v1/inventory/holds/lot/{lot_id}/release and release_cascaded=true. The lots listed in
cascade.detached_lot_ids keep their own hold: that release ends the quarantine’s cover, and
their own hold is released with the same endpoint on each of them.
Authorizations
Generate a JWT access token through a Custom Global Integration and provide it with each request in the Authorization header prefixed with "Bearer" and then a single space.
Body
Response
Lot hold placed.
Present only when cascade_bom=true. Every related lot of the same merchant is
quarantined: it gets a lot-level hold, or keeps the one it already has (listed in
detached_lot_ids). held_lots and the skipped_lots_no_putaway,
skipped_lots_fully_already_held and skipped_lots_no_holdable_qty counts split the
lots that got a lot-level hold by whether this call held stock now. Lots counted in
skipped_lots_cross_merchant are not held.