Skip to main content

Adjust stock (increase, decrease, set)

An inventory adjustment is the direct way to correct on-hand stock: add units you found, write off units you lost, or set a warehouse's count to a number you just physically confirmed. Every adjustment posts real inventory movements and touches FIFO layers and COGS, so an increase creates a new cost layer and a decrease consumes existing ones — the same mechanics fulfillment uses. This guide covers all three adjustment types, the unit-cost choice, lot handling, and every guard that can stop an adjustment.

For the model behind the numbers, see How adjustments move stock and cost. To review, edit, or delete an adjustment after the fact, see Review, correct, and delete adjustments.

Before you begin

RequirementWhy it's needed
Adjust inventory permission (inventory.adjust)The Add Adjustment button, the Adjust Inventory action on a product, and the underlying POST /api/inventory-adjustments endpoint all require it.
An inventory-bearing productYou can adjust standard, kit, blemished, and manufactured products. Bundle and matrix products are rejected — see You can't adjust a bundle or matrix product.
A stock-holding warehouseOnly direct and 3PL warehouse types are selectable. The warehouse must have a default location.
A unit cost, for increasesAn increase (and the increase side of a Set To) needs a unit cost unless the product already carries an average cost — see Choose the unit cost.
One dialog, two entry points

Both entry points open the same Adjust Inventory dialog with identical fields and rules. The only difference is whether the product is pre-selected.

Open the Adjust Inventory dialog

From the Adjustments area — when you don't have a product in hand yet:

  1. Go to Inventory → Adjustments.
  2. Click Add Adjustment (or press C).
  3. In the Product field, search by SKU or name and select the product.

From a product page — when you're already looking at the item:

  1. Open the product and use its More menu.
  2. Click Adjust Inventory.

The product is pre-bound, so there's no product search. If the product stocks in a single warehouse, that warehouse is auto-selected. Once you pick a warehouse, a current-stock panel appears showing On Hand, Available, Allocated, On Hold, and Non-Sellable for that warehouse so you can see what you're changing before you commit. The dialog emits an update when you save, so the product's stock view refreshes in place. For the full picture of those columns, see View a product's stock across warehouses and Stock states.

Fill in the shared fields

Every adjustment, whatever its type, shares these fields:

  1. Set the Adjustment Date — the date the movement is recorded on.
  2. Choose the Warehouse. Only direct and 3PL warehouses appear in the list.
  3. Optionally set the Location (bin). This field renders only for a locations-enabled warehouse and defaults to the warehouse's default location if you leave it blank. See Move stock between bins.
  4. Pick the Adjustment TypeIncrease, Decrease, or Set To.
  5. Enter the quantity. The label follows the type: Increase By, Decrease By, or Set To. Increase and decrease require at least 1; Set To accepts 0 and up.
  6. Add optional Notes.

As you type, a New quantity preview shows the resulting on-hand figure for that warehouse, in red with a (negative stock) flag if the result would go below zero.

Increase stock (add units)

An increase adds units and creates a new FIFO layer valued at the unit cost you choose. Use it for found stock, an opening balance, or a receipt you're recording by hand.

  1. Open the dialog and select the product and warehouse.
  2. Set Adjustment Type to Increase.
  3. Enter the quantity in Increase By (minimum 1).
  4. Choose the unit cost the new layer is valued at.
  5. If the product is lot-tracked, capture the lots.
  6. Click Increase Inventory.

What you'll see: a new FIFO layer is created at your unit cost, the warehouse's on-hand rises, and the product inventory cache (and average cost) is rebuilt. The quantity is always stored as a positive number. If the increase covers demand that was waiting, the freed stock can release backorders — see Work the backorder queue.

Decrease stock (remove units)

A decrease removes units and consumes existing FIFO layers, oldest first (FIFO) — or soonest-to-expire first (FEFO) for a lot-tracked product. Use it to write off damage, shrinkage, or a miscount.

  1. Open the dialog and select the product and warehouse.
  2. Set Adjustment Type to Decrease.
  3. Enter the quantity in Decrease By (minimum 1).
  4. Review the cost and consumption preview (below). You don't enter a cost on a decrease.
  5. Click Decrease Inventory.

What you'll see: the named FIFO layers are consumed, the warehouse's on-hand falls, and the quantity is stored as a negative number. The cost field is read-only on a decrease — it shows the FIFO weighted-average cost with the label "(FIFO weighted avg)" and a tooltip noting it's an estimate that "may differ if inventory changes before this adjustment is processed."

The Expected FIFO Consumption preview

For a non-lot-tracked product, the dialog renders an Expected FIFO Consumption table so you can see exactly which layers will be drawn down:

ColumnMeaning
IDThe FIFO layer being consumed.
Layer DateWhen the layer was created.
SourceWhat created the layer (receipt, adjustment, transfer…) and its reference.
AvailableUnits available on the layer.
To UseUnits this adjustment will take from the layer.
Unit CostThe layer's cost per unit.
COGSExtended cost for the units taken.

The footer totals the units and shows the weighted-average unit cost and total COGS. See Browse FIFO layers and FIFO layer fields and statuses.

Decreasing past available stock creates negative FIFO entries

If your quantity exceeds what the FIFO layers hold, the preview warns that "N unit(s) exceed available FIFO layers — system will create negative FIFO entries." The adjustment still posts, on-hand can go negative, and any sales-order lines that were backed by the now-consumed stock are re-backordered so they wait for the next receipt. See Allocations and backorders.

Set stock to a target (Set To)

Set To is a shortcut for "make the count exactly this." SKU.io reads the warehouse's current on-hand (the sum of its inventory movements), computes the difference against your target, and then routes the difference through the increase or the decrease path automatically:

  1. Open the dialog and select the product and warehouse.
  2. Set Adjustment Type to Set To.
  3. Enter the target count in Set To (0 or more).
  4. If the target implies an increase, choose the unit cost. If it implies a decrease on a lot-tracked product, you can override the lot consumption.
  5. Click Adjust.

Because a net-negative Set To routes through the decrease path, it can trigger the same lot-consumption override and hard-allocation guard a plain decrease does.

Choose the unit cost

Increase and Set To (increase side) surface a Cost field. Decrease has no editable cost — it uses the FIFO weighted average. On an increase, SKU.io offers two quick toggles beneath the cost field and auto-selects the best available option; you can also type any cost (0 or more) by hand.

Cost optionDefinitionDisabled when
Best COGSThe best available COGS for this product in this warehouse (best_available_cogs).There's no COGS history for the product in that warehouse — the button is greyed with "No COGS history available for this product in this warehouse."
Default CostThe product's default unit cost.The product has no default cost — greyed with "No default cost set on this product."
ManualAny value you type (≥ 0).Never — always available.

The chosen cost becomes the value of the new FIFO layer, so it flows straight into COGS the next time that stock is consumed. To correct a cost later, see Revalue COGS. For the wider costing model, see Correcting COGS: revalue vs rebuild vs recalculate.

Unit cost is required when the product has no average cost

On an increase (and the increase side of a Set To), the unit cost is required unless the product already carries an inventory average cost. If it doesn't, and you leave the cost blank, the adjustment is rejected with "The unit cost is required for an increase adjustment if the product does not have an average cost." A decrease never asks for a cost.

Capture lots when increasing a lot-tracked product

When you increase a lot-tracked product, a lot capture panel appears. Each row you add — batch number, manufacture date, expiry date, quantity, and notes — becomes its own FIFO layer, so every batch is valued and later consumed (FEFO) independently.

  1. With Increase selected on a lot-tracked product, add a lot row for each batch.
  2. Enter the batch, dates, and quantity for each.
  3. Make the lot quantities sum to the total increase quantity.
  4. Click Increase Inventory.

Manual adjustments are lenient about lot detail: batch and expiry aren't required (requireLotDetails is off), so you can record found stock or an opening balance as an unknown lot — a blank batch is auto-generated, and an undated lot is valid. Lots apply to increases only; switching the adjustment type clears them. If a lot row fails validation, the error is mapped back to that specific row and field.

Override lot consumption when decreasing

For a decrease (or a Set To that nets negative) on a lot-tracked product, a lot consumption panel replaces the read-only FIFO preview. FEFO — soonest expiry first — is suggested, but you can override it and pick exactly which layers to draw down, for example to remove a specific spoiled batch.

  • Your allocation must reference active layers that are within on-hand stock.
  • The units you allocate must reconcile to the quantity being consumed. For a Set To, that's the implied drop — current minus target — and only when the result is negative.
  • The override respects your tenant's lot-consumption policy.

If an allocation row fails validation, the error is mapped back to that row and field.

Guards that can block an adjustment

Several checks can stop an adjustment before it posts. Each returns a specific, actionable message.

You can't adjust a bundle or matrix product

Only inventory-bearing product types (standard, kit, blemished, manufactured) can be adjusted. A bundle or matrix product is rejected up front with "Inventory adjustments cannot be created for bundle or matrix products." Bundles and matrices derive their stock from their components or variants, so there's nothing to adjust directly.

A decrease can be blocked by protected stock

A manual decrease (or a net-negative Set To) enforces a protected-inventory guard: it won't let you strand stock that's committed to in-flight work. The guard protects any stock that's:

  • Hard-allocated to a live sales-order fulfillment — an allocated line whose fulfillment is neither cancelled nor already fulfilled.
  • Committed to a non-closed warehouse transfer — an allocated line on a draft or open transfer.
  • Covered by an active inventory hold.

If your decrease would cut into that protected pool, it's refused with a 400 and the message "Cannot adjust inventory due to protected inventory allocations," plus detail naming how many units you requested, how many are actually free, and how many are protected. The response lists the conflicting allocations — the specific sales orders and transfers holding the stock — so you can resolve them first (ship or cancel the fulfillment, close or cancel the transfer, or release the hold) and try again.

The guard is a manual-path safeguard

Only the manual store endpoint enforces this guard. Programmatic paths — blemished-stock conversion, Amazon removal receipts, stock takes, and inventory-health repairs — bypass it by design, and editing an existing adjustment isn't guarded either. See How adjustments move stock and cost.

Not enough FIFO stock to consume

If a decrease can't find enough FIFO layers to satisfy it in a way that must fully cover (for example, a reversal), SKU.io raises an insufficient-stock error — a 400 reading that the FIFO layer doesn't exist for the product. Reduce the quantity, or add stock with an increase first. (An ordinary decrease past available stock doesn't error — it creates negative FIFO entries as described above.)

Setting to the current count is a no-op

If your Set To target equals the warehouse's current on-hand, the difference is zero, so there's nothing to post. No adjustment record is created, no FIFO or movement changes, and no event fires. The API returns a warning"The adjustment quantity equals the actual inventory count" — rather than an error or a success, so you know the count was already right.

Next steps

Last verified: