ShipStream Knowledge Base
Release Notes

Version 2026.7

2026.7November 11, 2026

Packed and Shipped Inventory

Inventory now leaves On Hand when a Shipment ships instead of when it is packed, so On Hand includes packed goods still waiting on your dock. Packing moves inventory from Picked to a new Packed quantity. Product Inventory shows it in the Admin UI and Client UI, and clicking it lists the Shipments holding it.

Orders have a new Packed status between Processing and Complete, and become Complete when their last Shipment ships. Shipments are marked Shipped by Manifest Loading, carrier tracking, or a user or API action. A daily safety net marks Shipments that are still Packed after 30 days as Shipped. A Shipment with part of its quantity canceled can no longer be shipped by a user; void its label and revert it instead.

Update Impact: Action required for integrations. Merchant API responses and webhook timing change. Update your integrations using the Packed and Shipped API Migration Guide, which also describes a temporary setting that keeps the old reporting until version 2026.8.

Amazon Shipping (v2) and 3PL Buy Shipping

Sellers and Amazon-enrolled 3PLs can now buy Amazon labels through Amazon Shipping (v2), and a 3PL can buy shipping for the sellers it fulfills for. ShipStream chooses among Amazon's rates using your own Rate Tables, buys on-time delivery protection only within the premium you allow, and explains each choice in the Shipment's comments.

Configure it at System -> Configuration -> Shipping Methods -> Amazon Selling Partner. See Amazon Selling Partner for setup.

Update Impact: Opt-in. Existing sites stay on Merchant Fulfillment (v0) until you choose Amazon Shipping (v2). Before switching a Merchant, disable Require Rates from Preferred Carrier and use Order Item Ref Check to find open Orders missing an Order Item Ref, which Amazon Shipping (v2) requires.

Mark-For Stores

Retail consolidation programs ship cartons to a distribution center but need each carton labeled for the final store. An Order can now carry a Mark For store from the Retailer's Locations alongside its ship-to, so the store stays with the Order through picking, packing, labeling, and EDI.

Mark For shows on Order and Shipment pages and on the Scanner packing screen, and the optional Display Mark-For Store setting prints it on packing slips. For SPS Commerce Orders, the store comes from the 850 and fills in GS1-128 labels and the 856 ASN.

Update Impact: Workflow change for order entry. Retailer Locations no longer become a Retailer's default Ship-To automatically; check Default Ship-To on a Location to preselect it on new Orders.

Replenishment Tasks

Replenishment now goes all the way from "this pick face needs stock" to "the stock is there". A Replenishment Task carries out each move the Replenishment Report finds. Tasks are created automatically from Emergency, Min Threshold, and Top-off needs, within open-task limits you set, or manually at Operations -> Replenishment Tasks. A picker reporting a shortage raises an Emergency.

Operators work tasks from the new Replenishment Scanner menu: claim a task, scan the source, confirm the Product, then scan and place at the destination. The usual relocation checks apply, Order reservations always come first, and canceling a task never strands stock that was already picked.

Update Impact: Opt-in.Task Dispatch is off by default; set Warehouse and Lane open-task limits before enabling it. Grant the new Replenishment Tasks permissions to roles that create or work tasks.

Demand Context for Replenishment

Not every pick is customer demand. Promotions, kitting, and transfers all draw down a pick face, and sizing replenishment on them can stock a face for a spike that will not repeat. ShipStream now records why each pick happened, such as Customer fulfillment, Bulk fulfillment, Kitting, or Transfer. A Replenishment Policy's new Demand Context setting can count only the reasons you choose, with a live preview, and Slotting Density follows the same choice.

Update Impact: Opt-in. Policies default to All, so demand is measured as before until you choose.

Complete-Day Product Velocity

Product Velocity windows are now whole days in each Warehouse's own time zone. A 7-day figure covers the 7 complete days before today, so velocity and days of inventory hold steady through the day instead of creeping up until midnight. Renaming, deleting, or re-flagging a Location no longer changes past demand.

Update Impact: Workflow change for inventory planners. The last 90 days of velocity are rebuilt in the background after the update. Until that finishes, figures stay at their pre-update values and the Product Velocity grid shows a notice. Tiers should not shift.

Directed Put-Away Tour Controls

Directed Put-Away tours now handle a busy floor better:

  • When a stop's destination is being picked right now, a Picking in progress banner offers to skip it, so stock is not placed where a picker could take it. Continue anyway is always available.
  • Leads can send a stop to a Location of their choice with Choose location....
  • An Access with row shows which equipment can reach each stop, so operators know what they need before they walk to it.

Update Impact: Workflow change for put-away operators. The Picking in progress prompt is on by default under System -> Configuration -> Warehouse -> Scanner -> Put-Away. Grant Scanner -> Overrides -> Override Directed Put-Away Destination to leads who should redirect stops. Equipment shows on stops only once you create an Asset Policy with the Other operation.

Directed Put-Away Follows Location Priority and Slotting Rules

Directed Put-Away now sends received stock where you reserve from first. Destinations are ranked by Location Priority, the same way Shipment Reservation chooses Locations, and a Product's own empty slot is refilled before another Product's slot is reused. The Pick Route now only sets the order in which a tour visits its stops.

Prefer and Discourage Slotting Rules now steer where stock goes, not just which warnings operators see. Tours fill a Product's preferred Locations first and its discouraged Locations last, and fall back to the next-best Location instead of blocking when the preferred ones are full. See How Directed Destinations Are Chosen.

Update Impact: Action required for Warehouses using Directed Put-Away. Before you update, review your Prefer and Discourage rules, because a rule written only to warn will now pull stock toward or away from its Locations. Set a Default Priority on the Locations you want put-away to prefer, for example with Set Default Priority on the Locations grid; Locations without one rank last.

Bulk Fulfill Pick Plans

Bulk Fulfill Orders can now be planned to free up space, not just to minimize picks. Each group offers two pick plans: Least Picks, the existing behavior, and Reclaim Locations, which picks as many Locations empty as possible so they are ready for new stock. The Create Bulk Fulfill Order grid compares both plans for every group, and Choose Locations suggests group sizes that avoid partial picks. A new Product Velocity Tiers filter finds groups by the tiers of their Products.

Update Impact: Workflow change for Bulk Fulfill planners. The Create Bulk Fulfill Order grid and Choose Locations page have new columns, filters, and plan choices. Group size suggestions can be turned off per Warehouse with Recommend Group Sizes at System -> Configuration -> Warehouse -> Operations -> Bulk Fulfill Order.

Shipment Documents in Packing Instructions

Shipping documents that arrive after an Order is placed, such as Amazon FBA pallet labels or a Bill of Lading, can now be attached to the exact Shipment they belong to instead of being emailed to the floor. Packing Instructions have a document type, such as Bill of Lading, Amazon FBA, or Commercial Invoice, and can target one Shipment, every Shipment, or every Package. The Shipments grid's Unconfirmed Instructions filter gives the floor a queue of documents still to print.

Update Impact: Workflow change for packers. Downloading a document no longer counts as confirming that it was printed. Existing Packing Instructions keep working as before.

Lot Recall Quarantine

Quarantining a recalled component now quarantines what was made from it. Quarantine Lot also holds every kit assembled with the Lot and every component de-kitted from it, in every Warehouse, and lists them before you submit. Release Quarantine can release the whole group at once and shows every reason a Lot is held, so you release exactly what you mean to. The nightly expiry check no longer releases a manual Expired or Near Expiry quarantine.

Update Impact: Action required for Global API integrations. Integrations that quarantine related Lots through the Global API should review the changes under Global API Updates. Let staff who handle recalls know that Quarantine Lot now also holds related Lots.

Shopify Admin API 2026-07

The Shopify plugin now uses Shopify Admin API 2026-07, ahead of Shopify retiring the version it used. Store pickup and local delivery orders are no longer imported, and orders that mix shipping with pickup or are split into several shipments now map correctly. Several long-standing issues are fixed too, such as stock levels that reach zero now syncing to Shopify right away.

Update Impact: Workflow change for Shopify merchants. Orders that another app creates in Shopify without marking their items as requiring shipping are now rejected instead of imported. Otherwise merchants do not need to change anything.

ShipStream Packer Thorough and Angled Placement

ShipStream Packer now compares many possible packings and keeps the best one instead of taking the first that fits, which cut postage by about 4% in testing on real orders. Items slightly too long for a carton can lie diagonally instead of forcing a larger carton, and the 3D packing viewers show them at their angle, such as 31.6°, so packers can place them the same way. See Packing Solutions.

Update Impact: Workflow change for packers. Packers will start seeing angled items in the 3D viewer, and some orders will use different cartons. Picking Class scripts that check for the box_packer source should also accept the new thorough source.

Password Login for Social Login Users

Once your team signs in with Google or Microsoft, you can turn off password sign-in instead of setting passwords nobody is meant to know. The new Password Login setting at System -> Configuration -> Advanced -> Social Login can stay Enabled, move each User over at their next Google or Microsoft sign-in with Disabled for Linked Accounts, or be Disabled. Client Users and Login via Badge are unaffected. See Password Login.

Update Impact: Opt-in. Password sign-in works as before until you change Password Login. Before restricting it, confirm Social Login works by signing in with Google or Microsoft in a private browser window.

Login Protection

ShipStream now slows down password guessing. Repeated failed logins are turned away for a while, but a User signing in from a network they have used recently is never locked out by someone else's guessing. A User whose password login succeeds after many failures gets a "Was this you?" email. Deactivating a User, or changing their password, username, or email, now signs them out everywhere right away. See Login Throttling.

Update Impact: Workflow change for admins. Every failed login now shows Invalid Username or Password., including for Users who must use the Google or Microsoft button, so remind those Users to use it. If many people sharing one internet connection are turned away after typing errors, contact ShipStream support.

Other Improvements

  • Added a Number of Copies choice to Print Bill of Lading: one copy, one per package, or any number up to 100.
  • Improved the Retailer popup on Create New Order and Edit Order to sort Retailers and Locations by name and code, with the default Location first.
  • Added a Location Profile column and filter to the Locations grid, so you can see exactly which Locations a Slotting Rule or Replenishment Lane will act on.
  • Improved tracking updates for a shipping account that keeps failing: they pause for a while instead of retrying constantly, and resume as soon as the account is saved.
  • Added receiving date columns, such as Putaway At and Completed At, to a Product's Deliveries tab, and a Committed At column to the Put-Aways grids.
  • Improved script isolation: each Merchant's scripts now run separately from other Merchants' scripts, and Client UI users can manage only their own Merchant's scripts.
  • Updated the Shrinkage Adjustment Reason to read simply Shrinkage.
  • Added Use Separate Manifest Code for FedEx Ground Economy (SmartPost), a per-warehouse FedEx setting. Set it to "No" where FedEx picks up Ground Economy packages with Ground packages: they are then loaded on FedEx Ground manifests and follow FedEx Ground's Manifest Courier Overrides. The setting applies to packages labeled after it changes. See Manifest Couriers.

Bug Fixes

  • Fixed a weight typed into the Scanner's Actual Wt. field being cleared after a failed weight check, which forced packers to re-enter it.
  • Fixed photo uploads reporting success when nothing was saved. Rejected photos now show why.
  • Fixed Change Shipping Method on an Order's Shipments tab listing system-wide shipping methods instead of the Merchant's.
  • Fixed placing an Order on hold and releasing it sometimes leaving the wrong Target Ship Date, so its Shipments were reported as shipped late.
  • Fixed large ASNs with many Put-Aways showing a blank page instead of opening.
  • Fixed putting away a quarantined Lot into a Location holding another Lot of the same Product releasing the held units. A Lot on hold now cannot be mixed with other stock.
  • Fixed Shopify fulfillment orders with more than 100 lines importing only the first 100.
  • Fixed Client UI users with user-management permission being able to change users outside their own Merchant.
  • Fixed a first Microsoft sign-in being linked to the ShipStream User with the same email even when Microsoft reported that the user's organization had not verified that email's domain. Microsoft lets any Entra administrator set a user's email, so ShipStream now checks Microsoft's xms_edov claim before linking a first Microsoft sign-in, and the new Require Verified Microsoft Email setting also refuses one whose token lacks the claim. Sign-in callbacks for a provider that is turned off are now ignored. See Microsoft Entra ID.
Update Impact: Action required for admins. Add the email and xms_edov optional claims to the ID token of your Microsoft app registration (step 7 of Microsoft Entra ID), then set Require Verified Microsoft Email to Yes and check by signing in with a User who has never signed in with Microsoft. Until you turn the setting on, a first Microsoft sign-in whose token lacks the claim is still matched by email, as before. If the claim is missing when the setting is on, Users who have not yet signed in with Microsoft cannot link their account, and where Password Login is Disabled or Force SSO for Domains applies they cannot sign in at all; set it back to No to restore their access. Users who already signed in with Microsoft are not affected.
  • And various other minor bug fixes.

Global API Updates

  • Added an opt-in mark_for_location field on Orders and Shipments (/v1/shipping/orders, /v1/shipping/shipments) referencing the Retailer location the cartons are marked for, with the same nested field expansion as retailer_ship_to_location.
  • Fixed paging on endpoints that scope their results before paging, such as GET /v1/inventory/warehouses/{id}/replenishment-report, when a plain record id cursor is combined with a non-id sort. The page boundary is now resolved only from records within the request's scope, so rows are no longer skipped or repeated at a page boundary. A plain id cursor that refers to a record outside the requested scope, such as a Product not stocked in the requested Warehouse, now returns a 400 "record referenced by the cursor no longer exists" response.
  • Fixed Product weights and dimensions reporting values in a different unit from the unit named in the response, so each value now matches its unit label.
  • Added qty_packed to inventory levels (/v1/inventory/levels/warehouse, /v1/inventory/levels/total), and the packed Order status.
  • Added /v1/inventory/warehouses/{id}/replenishment-tasks to list and create Replenishment Tasks, /replenishment-tasks/{task_id} and /replenishment-tasks/{task_id}/cancel to read and cancel one, and /replenishment-tasks/health for a Warehouse's task health. Replenishment Policies gain emergency_floor_qty, and the Replenishment Report produces the emergency trigger and a count_locked advisory.
  • Added demand_context_mode (all or include) and demand_contexts to Replenishment Policies. include with an empty or unknown context is rejected.
  • Updated POST /v1/inventory/holds/lot with cascade_bom=true to hold only the Lots made from the Lot, in every Warehouse. The cascade response drops release_mode, root_hold_ids, skipped_lots_no_origin_in_stock, and skipped_locations_no_origin_in_stock, and adds detached_lot_ids. Releasing with release_cascaded=true now works, returns requarantined_lot_ids, and returns 422 asking to retry when the Lot changed during the request. On a Lot that was released on its own, release_cascaded=true releases the related Lots still quarantined with it. Holds written through the Global API record the API token as the requester, and the new BackgroundJob requester type identifies the nightly Lot expiry check.
  • Added reason_hold_ids to POST /v1/inventory/holds/lot/{lot_id}/release to release only some of the reasons that hold a Lot, as the Admin Release Quarantine popup does, and left_origin_lot_ids to its response. An id that is no longer a reason of the Lot returns 422 and nothing is released.
  • Added GET /v1/inventory/holds/lot/{lot_id}, which returns the reasons that hold a Lot (with their hold_id for reason_hold_ids), the Lot it was quarantined with, the related Lots that a release with release_cascaded=true releases, in leaving_related_lot_ids the related Lots that such a release takes out of the quarantine while they keep another hold, and in still_quarantined_lot_ids the related Lots still quarantined with a Lot that was released on its own.
  • Added POST /v1/inventory/holds/lot/{lot_id}/release-related-lots, which releases the related Lots still quarantined with a Lot that was released on its own and leaves the Lot's own holds unchanged, as the Admin Release Related Lots button does.
  • Added kind, kind_label, identifier, shipment_id, and is_shipment to Order instructions, the shipment presentation, and the upload print target. note is kept as an alias of identifier.

Merchant API Updates

  • Updated stock_movement.list to distinguish pack and unpack from actual ship and unship, with qty_packed, qty_shipped, parent_type, and parent_id fields. Inventory methods return qty_packed, Order status can now be packed, order:completed is sent when the last Shipment ships, and track:created is no longer sent when a tracking number is removed. See the migration guide.
  • Added the document type, reference, and Shipment association to Order packing instructions, keeping the existing note fields and method signatures so current integrations are unaffected.
  • Added a packages array to each entry in the rate.quote rates response, so an integration can compare rates using the expected size and weight of each package. Every physical package has its own entry, including packages with identical measurements, and the count matches package_count. Each entry contains warehouse_id, length, width, height, dimension_unit, weight, and weight_unit, where weight is the estimated packed weight including packaging. Unknown measurements are returned as null and never as zero. Existing response fields and rate calculations are unchanged.
  • Added a mark_for_location option on order.create that matches an existing Retailer location by qualifier and code. For Wholesale Retailers, a code that matches no location is rejected unless location auto-creation is enabled, in which case the store is created from the address fields supplied. order.info and shipment.info return a mark_for_location block including the store's address, and order.search and shipment.search return it when requested through fields.
  • Added abbreviation to each Warehouse in the warehouse.list response.