Safety-stock reservations
A safety-stock reservation lets you declare “at this location, keep enough raw materials to build N units of this finished good (or assembly bill).” Assemblified resolves the recipe, deducts the required components from available stock, and tracks the hold so you can release it later — either restoring the raws to available, or converting them into finished pre-assembled stock.
This is useful when a fulfilment commitment depends on having stock buildable on demand: wholesale contracts, retail buffers, planned production runs. Without a reservation, a sudden flurry of normal orders could drain the components your buffer depends on.
On this page
Section titled “On this page”- What a reservation is
- Creating, editing, and releasing
- The availability check, and what it can tell you
- Where a reservation can be held, and where its materials come from
- The two release methods
- Reserving and releasing for many finished goods at once
- How Shopify-managed vs virtual materials behave
- What a hold does to a finished good’s shelf, and to a partner store
- The safety-stock column on raw materials
- Failure handling and the retry button
- Edge cases & gotchas
What it is
Section titled “What it is”A reservation has three parts:
- An owner — a finished good, or an assembly bill (also called a sub-assembly).
- A location — exactly one location per reservation.
- A target unit count — “keep enough raw materials to build this many.”
There is at most one active reservation per (owner, location). Editing a reservation changes that hold in place — you don’t pile up multiple reservations for the same bill at the same warehouse.
The components the reservation actually holds are derived by recursive recipe expansion — assembly bills are expanded down to raw materials, waste percentages are applied. The resolved component list (the “plan”) is stored as a snapshot at write time, so a release later reverses exactly what the create reserved, even if the BOM’s composition has changed in the meantime.
Creating a reservation
Section titled “Creating a reservation”Reservations are their own tab on the finished-good detail page, and on the assembly-bill detail page too. (Stock by location lives on the Overview tab, and the stock ledger on History — reservations are separate from both.)
- Click “Add reservation.” A dialog opens.
- Pick a location and a target unit count.
- Optionally add a reason — free text, surfaced in the audit log.
- Click “Check availability.” This step is required — the Create button only appears once a check has finished. The check shows exactly which raw materials will be deducted, at what quantities, and flags anything that would stop the reservation. If you change the unit count or the location afterwards, the button turns back into “Check again”: the reservation is always written against a check that matches what is on screen.
- Create the reservation. Available stock drops by the resolved amounts; Shopify-managed materials move from available into Shopify’s own safety stock bucket; virtual materials decrement on the Assemblified side.
What the check can tell you
Section titled “What the check can tell you”The check asks several different questions, and they have different answers. Two of them stop a reservation outright; the rest you can act on and carry on.
“Not stocked at this location” — on a material. Shopify has no inventory for that component at that location at all; it is simply not set up there. This blocks the reservation, and the fix is to activate the inventory at that location. The dialog offers to do that for you: confirm the activation and the check continues.
“Not stocked at this location” — on the finished good itself. A product that has no inventory at a location cannot hold a reservation there, and this one the dialog will not repair for you. Stocking a product at a warehouse is a merchandising decision, not something a reservation check should do behind your back, so the row is flagged and reads “Reserve it at a location where it is stocked, or remove it from this run.” If the product really does belong at that location, set it up in Shopify first and run the check again.
“Disabled at this location.” A location rule switches this bill off at the location you picked — the check says so in as many words: “A location rule switches this bill off here.” Orders fulfilled from there consume nothing, so a buffer there would hold materials that nothing will ever draw on. The fix is a rule change, not a smaller unit count, and there is no way to force it through.
The other location rules do not block a reservation. A bill that is pre-assembled-only or made-to-order at the location reserves as normal, and a rule that changes the recipe simply changes which materials the reservation holds — the check is always run against the recipe that actually builds at the location you picked.
“Not enough stock” means the item is stocked at the location, there is just less of it than the reservation needs. You can restock, lower the unit count, or use “Create anyway”, which writes the reservation and lets the stock go negative. “Create anyway” covers stock shortfalls only — it never pushes past a finished good that is not stocked at the location or a bill a rule has switched off there. Those rows are dropped from the run instead.
If the check itself cannot be completed (Shopify could not be reached), nothing is written and you can simply try again — a reservation is never created on a guess.
The check belongs to one location and one set of quantities
Section titled “The check belongs to one location and one set of quantities”A check is a snapshot of a particular location at a particular set of unit counts, so anything that changes either of those has to be checked again:
- Change a unit count and the dialog says “The quantities changed since the last check. Check again before creating.”
- Change the location and the result is thrown away entirely — a snapshot can only ever be true of the location it was taken at. The dialog says “The location changed since the last check. Check again before creating.” and the button turns back into Check availability.
Nothing re-runs by itself, and nothing is written against a stale result.
Where a reservation can be held, and where its materials come from
Section titled “Where a reservation can be held, and where its materials come from”A reservation is always held at one location, and two things have to be true of that location before it can be created there.
The finished good has to be stocked there. A reservation is a promise about units you can build and ship from that location, so the product itself needs inventory set up there in Shopify. If it does not have any, the check flags it and the row cannot be created — reserve it at a location where it is stocked, or set the product up at that location in Shopify first. Materials are different: a material that is not active at the location can still be activated straight from the check.
A location rule must not have switched the bill off there. A bill that is Disabled at the location is not fulfilled from there at all, so it cannot hold a buffer there either. Every other rule is fine — including one that rewrites the recipe, which just changes what the reservation holds.
Assembly bills are exempt from the first rule. An assembly bill’s pre-assembled stock can sit at any of your locations, and a location with none yet simply starts at zero, so an assembly-bill reservation can be created anywhere.
Materials are held where the bill draws them from
Section titled “Materials are held where the bill draws them from”The reservation’s own location is the default for its components, not a hard rule. If the recipe pins a material to a specific location — a component always drawn from your central warehouse, say — then that material is measured, held and released at its own location, whichever location the reservation itself is at. That is exactly where orders consume it, so the hold and the consumption can never disagree about where the stock is.
The availability check spells this out per line: a component that sits somewhere other than the reservation’s location is labelled with · at the location it comes from. A component at the reservation’s own location shows nothing extra.
Editing a reservation
Section titled “Editing a reservation”Click an existing reservation’s “Edit” action. You can change the target unit count and the reason. Location is locked — moving a reservation between locations requires releasing it and creating a new one (this avoids accidentally creating two active reservations for the same scope).
Behaviour by direction:
- Edit up (target increases) — the additional component quantities are deducted from available stock.
- Edit down (target decreases) — the freed component quantities are restored to available stock. This works the same way as a full release.
Lowering or releasing a hold is never refused. If a location rule has switched the bill off at that location since the reservation was taken, you can still reduce it and still release it — and reducing it keeps the remaining components held at the quantities the reservation was actually taken at, rather than quietly dropping them. Only raising a hold is refused at a location where the bill is disabled.
Releasing a reservation
Section titled “Releasing a reservation”Each reservation row has a ⋯ menu with Edit, Release, and — only when a Shopify write actually failed — Retry Shopify sync. A released reservation carries no menu at all: there is nothing left to edit and nothing left to release.
Release opens a dialog, and the dialog is where you choose. It asks for Units to release and a Release method, and it states the rule above the fields:
0 keeps a reservation. Entering the full reserved amount releases it; entering less lowers it and keeps the reservation.
So a partial number is not a partial release — it is a reduction, at the lower target, and the release method does not apply to it. Releasing several reservations at once gives you a table with one row per hold, and a Release everything button that fills in every full amount.
Restore raw materials
Section titled “Restore raw materials”The default method. Every held component returns to available stock — Shopify-managed materials move out of safety stock back into available; a virtual material’s own available figure goes back up and a history entry is written. The reservation is kept as a released record for the audit history.
Use when the planned demand evaporated or you no longer need the buffer.
Convert to pre-assembled stock
Section titled “Convert to pre-assembled stock”The held raw materials are considered definitively consumed — they don’t return to available. The BOM’s pre-assembled inventoryPre-Assembled InventoryStock of finished goods and assembly bills already built and on the shelf, counted per location. A work order draws assembly bills from the shelf first, building fresh only if it runs short; an order consumes a finished good's shelf before its components. Read more → for that location increments by the target unit count. For BOMs with a Shopify variant, Shopify’s available figure is pushed up too — your storefront immediately reflects the new buildable units.
The dialog states the consequence in words as you pick the method, naming the count, the item and the location.
This is essentially “the reservation is now built.” Use when you’ve actually finished the production run that the reservation was holding components for.
Available for assembly-bill reservations too — the assembly bill’s pre-assembled shelf increments. Assembly bills typically don’t have a Shopify variant, so the Shopify push is skipped.
Reserving and releasing in bulk
Section titled “Reserving and releasing in bulk”When a whole set of finished goods needs the same buffer, do it from the list rather than one detail page at a time. On the Finished goods page, tick the rows you want, then open the Inventory dropdown in the bar along the bottom and choose Reservations → Create (or Release).
It is the same dialog you get on a detail page, just with a table of rows instead of one.
Reserve safety stock asks for the same three things a single reservation does — a Location, the number of Units to keep reserved, and an optional Reason — and applies them to every selected finished good. You can then set a different unit count per row.
Check availability runs first here too, and the same rules apply: a material that is not stocked at the location is flagged with an activate offer, anything merely short is flagged as a shortage, and a finished good that is not stocked at the location — or whose bill a location rule has switched off there — is flagged as blocked, with nothing to activate and nothing to override. When some rows are flagged you get two exits: Create anyway, which writes the merely-short ones and drops the blocked ones, or Remove flagged items, which drops every flagged row and keeps the rest of the run. If every row in the selection is blocked, removing them is the only exit — there is nothing left to force through. Changing a quantity afterwards asks you to check again, and changing the location throws the check away entirely.
Then click Create reservations and a progress bar tracks the batch. Each finished good ends up with one of four outcomes, listed in the dialog:
| Outcome | What it means |
|---|---|
| Done | The reservation was written. |
| Not enough stock | A component was short. The dialog names the material, how much was needed, and how much was available. |
| Failed | Something else went wrong for that finished good; the reason is shown next to it. |
| Nothing to release | Release only — that finished good had no active reservation at the location. |
The run is per finished good, so a shortage on one doesn’t stop the rest. A finished good whose bill is disabled at the location by a rule is reported as failed with that reason named — “…is disabled at this location by a location rule, so no reservation was created” — and the rest of the run goes through as normal.
How materials behave
Section titled “How materials behave”| Material kind | On reserve | On restore-raw-materials | On convert-to-pre-assembled |
|---|---|---|---|
| Shopify-managed | Shopify available → safety stock | Shopify safety stock → available | Safety stock decrements (consumed); the finished good’s Shopify availability increments |
| Virtual (Assemblified-only) | Assemblified’s own available figure decrements; a history entry is written | Available increments; a history entry is written | A history entry is written; the stock was already deducted at reserve |
Available means available, everywhere. Build-run pre-checks, availability displays, dynamic adjustment and the storefront all read the same figures — and those have already been reduced by the active reservation. You don’t need to subtract reservation amounts in your head; the system has already done it.
Two places a hold reaches beyond the material itself
Section titled “Two places a hold reaches beyond the material itself”If the material you are holding is itself a finished good, holding it moves that finished good’s pre-assembled stock by the same amount. Some materials are both: an assembly bill you also sell, a box that is a product in its own right. Reserving 5 of it as safety stock takes 5 off the shelf of the bill it belongs to, so the two never disagree about how many are really available to build with — and releasing the reservation puts them back.
If you run more than one store, a hold on a material shared with a partner store is broadcast to that store like any other stock movement, so the partner’s own numbers move with yours. The store the hold was made in is not double-counted. Releasing returns the stock to the whole group the same way.
The safety-stock column on raw materials
Section titled “The safety-stock column on raw materials”The raw-material detail page’s Overview tab has a Stock per location table, and one of its columns is Safety stock — the total this material is holding for every active reservation at that location. Open the cell (“Show which bills hold this stock”) for the breakdown: which bill, how much.
This is read-only — to change the held amount, edit the reservation that produced it.
Failure handling
Section titled “Failure handling”Shopify-side mutations can fail (rate-limited, session expired, mid-flight network drop). When they do:
- The local reservation tables still commit — the operator-facing intent is preserved.
- The reservation card shows a “Has Shopify failures” badge.
- Per-line status flips to failed with the error captured.
- A “Retry Shopify sync” button appears on the card.
Clicking retry replays the Shopify mutation for just the failed lines. Successful lines aren’t re-pushed. Recovery from a full retry clears the badge.
Edge cases & gotchas
Section titled “Edge cases & gotchas”- The availability check is not optional. Every reservation — one finished good or a whole selection — is written against a completed check. Change a unit count and the check has to run again before anything is created; change the location and the result is discarded outright.
- “Create anyway” is for shortages, not for missing setup. It lets stock go negative on a material that is stocked at the location. A finished good that is not stocked there, and a bill a location rule has switched off there, are never forced through.
- The finished good itself has to be stocked at the location. Reserving materials at a warehouse where the product is not stocked would leave the buffer with nowhere to land, so the check flags it and blocks the row. The dialog will not activate the product for you — reserve it where it is stocked, or set it up at that location in Shopify first. Materials are still activatable straight from the check. Assembly bills are exempt — their pre-assembled stock can sit at any location.
- A bill that a location rule disables cannot be reserved at that location. Nothing is fulfilled from there, so nothing needs holding there. Reductions and releases are never refused by a rule, so a hold taken before the rule existed can always be lowered or cleared.
- Location is fixed for active reservations. The Edit dialog disables the location selector. To move a reservation between locations, release it and create a new one.
- Edit-down freed inventory is non-discretionary. The freed materials return to available immediately — the reservation can’t “park” a partial release.
- Convert-to-preassembled is one-way. See the caution above.
- A failed Shopify push leaves the system de-synced until you retry. Use the per-card “Retry Shopify sync” button — that is the recommended recovery path. Re-editing the reservation also fixes it, but is the long way around.
- Assembly-bill reservations recurse. A reservation on an assembly bill that itself contains assembly bills expands down to raw materials. The reservation owns the resolved component list; the intermediate assembly bills are not held as pre-assembled.
- Per-material location override. If the recipe pins a material to a specific location, the reservation honours that pin — the component is measured, held and released at its designated location even when the reservation is held elsewhere, and the check labels the line with · at that location.
- Audit history is permanent. Every event is kept: created, target changed, released, converted to pre-assembled, Shopify synced, Shopify sync failed. The reservation card surfaces that history so you can trace what happened.
Where to next
Section titled “Where to next”- Pre-assembled inventory — the shelf that convert-to-pre-assembled feeds into.
- Location rules — how one bill can behave differently, or not at all, at a single location.
- Inventory tracking — where stock lives and how it’s read.
- Shopify-linked materials — how Assemblified uses Shopify’s own safety-stock bucket.