Table of Contents

Version 2021.3

Doc Updated by Doc

June 30, 2021

Pick Single Shipment or Order

Picking a single shipment is now much easier! From the Picking page you can scan a packing slip whether or not it belongs to a batch and tap "Pick Single Shipment" to instantly compose a new batch containing just one shipment and go straight to picking it. When picking a batch with only one shipment you will also no longer be required to scan a Cart Location to confirm your pick.

Scan and immediately pick a Shipment that doesn't belong to a batch:

Or extract and start picking a single shipment from an existing batch:

Partial Pick

If you need to make multiple trips to complete a pick you can now tap Partial Pick and count a number to be picked so that you can pick just what you need and return to pick the remainder later.

This feature is enabled by default but can be disabled in the System > Configuration > Scanner > Picking section.

Skip Pick

If for some reason you are unable to pick an item you can tap Skip Pick to go to the next pick and the skipped picks will be pushed to the end of the queue.

This feature is enabled by default but can be disabled in the System > Configuration > Scanner > Picking section.

Internationalization and Localization

ShipStream now supports configurable user-selectable locales affecting number formats, date formats and translations!

You can set a different default timezone, locale, unit of weight and unit of length for each merchant so that their client portal appears in their preferred locale. If allowed, users can also enter product dimensions and weights using the units of measure they prefer for each product.

Language switcher:

All areas regarding units of measure now support the common metric system units which you may choose to allow or not allow. If only one unit of measure is allowed the units will be displayed without an input element.

Product weight and dimensions with multiple options:

Spanish Translated Scanner UI

Hola! We've completed our first translation of the complete Scanner UI for the "Spanish (Mexico)" locale!

OnTrac Integration

We are happy to announce that OnTrac is now an officially supported carrier! The OnTrac integration is fully featured and includes shipping label generation, tracking, manifesting and rate shopping with the same easy-to-use and seamless functionality that ShipStream users enjoy with the other carriers!

Shipper Contact vs Origin Address

You can now configure a completely different address for the Shipper Contact (per-merchant/brand) and the Origin Address (per-warehouse). This allows you to print any address on the shipping label which is also often used as the return address while still submitting an accurate origin address so that rating and billing is not negatively impacted.

"Unable to Process" Order status

In situations where an Order cannot be processed into Shipments, the order status will be changed to "Unable to Process" and an email notification sent if configured. Making it much easier to identify the orders that may require additional attention, so that they are not easily overlooked.

Some reasons this error may occur include:

  • A Bill of Materials component that must be picked is missing a barcode (rendering it unpickable)
  • An international shipment contains products which are missing attributes required by customs
  • An international shipment is missing a valid phone number and there is no fallback number
  • An error was thrown by a Preprocess Packing Solution Script
  • Any reason which makes the shipping method chosen invalid for the order

When the error is resolved simply "Unhold" the order to cause it to be reprocessed. Other automatic holds such as "Invalid Address" will take precedence over this error state.

For notification emails to be sent the email address must first be configured in System > Configuration > Sales > Emails > Order Unable To Process.

"International" column for Shipments and Packages

In a multi-national environment an Order may or may not be international depending on where it ships from so special requirements for "international" orders are now only enforced on shipments. This determination is now also persisted as a filterable grid column on the Shipments and Packages grids and an "is_international" property is available to the API, Preprocess Packing Solution Scripts and Picking Class Matching Scripts making it very simple to identify and isolate international shipments regardless of where your warehouses are located.

Shopify Plugin Improvements

  • Add support for "Private apps" mode with access token (OAuth disabled)
  • Fix OAuth flow when triggered by Shopify "Public app" listing page
  • Push Tracking URLs to Shopify for better compatibility with less commonly supported regional carriers custom carriers.
  • Avoid falsely reported plugin errors by ignoring zero adjustments (virtual inventory SKUs)
  • Do not attempt to update inventory for products where Shopify has duplicate SKUs
  • Look back 10 extra minutes for old orders to account for potential replication lag
  • Fix webhook url validation improperly reporting invalid webhooks in connection status
  • Remove unnecessary postal code validation from Shopify plugin to support countries that do not require a postcode

Other Improvements

Shipping Integrations

  • Add 'International Duties and Taxes Payor' configuration option for UPS
  • Allow 'International Duties and Taxes Payor' to be overridden via Other Shipping Options
  • Support UPS Consignee Billing option via Other Shipping Options
  • Support UPS Carbon Neutral shipping via Other Shipping Options
  • Add 'Allow ORM-D/LQ/SQ via UPS SurePost' configuration to prevent unauthorized shipping by SurePost if not supported
  • Prevent regulated goods from shipping via UPS Ground to Alaska and Hawaii
  • Support advanced Electronic Export Information filing (Export Compliance) for UPS and FedEx via Other Shipping Options
  • Fix false error with FedEx SmartPost and UPS SurePost for non-US Post Office addresses
  • Fix tracking popup with UPS shipments
  • Add Carrier Service Status test for UPS
  • Add max dimension check for USPS First Class and First Class International
  • Fix the UnitPrice and CustomsValue submitted to FedEx when a Customs Value is submitted at the order level (override product Customs Value USD)


  • Improve address validation for General Delivery addresses
  • Apply full shipping method validation every time before shipping method is changed
  • Enforce goods type validation on final packing submission
  • Improve error message when "allowed_stock_ids" does not contain allowed warehouses
  • Increase Paccurate timeout to accommodate Packing Solutions for larger orders

Order Management

  • Improve order history comment when address is classified
  • Improve order History when an order is placed on hold
  • Add missing 'Desired Delivery Date' field in client UI shipping options edit form


  • Update updated_at timestamp when user uses "Unlink Products" mass action
  • Support importing of Dangerous Goods product attributes using Import Task


  • Automatically add tracking numbers from Return Labels to associated ASNs and RMAs and add Tracking Numbers column to Return Labels tab
  • Fix client UI was unable to add comments to deliveries


  • Do not show plugin error notification for clients unless user has permission to access errors grid
  • Plugin events, webhooks and other internal events use more retries over a longer period with approximately exponential back-off


  • Improve carrier logo presentation in Loading UI on narrow screens
  • Skip final 'Load Manifest' step for 'Truck/Trailer' Manifest Container Type
  • Fix 'Require Packaging Scan: No' when used in combination with Packing Solutions
  • Added "Pick Quantity" to Locate Item screen so the user can preview the number to be picked


  • Copy "Rate Plans" when duplicating a Rate Group
  • Allow rates to be resolved even if there are errors resolving individual allocations (a carrier is only valid from one warehouse and not the other)
  • Expected inventory will no longer be considered as already available for rate quoting
  • Fix rated package total weight was not including container weight
  • Fix DAS was not being added to rate quotes
  • Increase number of digits supported for surcharges
  • Use the Default Cutoff Time for all carriers that cannot resolve a specific cutoff time (e.g. External Shipping Methods)


  • Multiple improvements to import tools for Location, Racks, Zone Maps, Zones
  • Support importing Excel files with hyphens in dates in Import Task imports
  • Remove "Ref" from default shipping label reference when Order # is used as reference number (Order Ref # is not specified)
  • Remove 'Automatic Carrier Fallback' feature
  • Prevent password managers from inadvertently filling or clearing password fields in configuration
  • Improve performance for various operations but in particular sealing large manifests
  • And 19 others

API Changes


  • All null values specified for datetime fields are no longer converted to unix epoch, they are left null


  • Added a new method delivery.update to update delivery attributes and add or remove items
  • The method now returns new fields:
    • delivered_at
    • ready_to_process_at
    • processed_at
    • putaway_at
    • tracking_numbers as an array
    • containers.$.weighed_at timestamp in ISO format
  • Add support in for filtering by tracking_numbers
  • Delivery container.contents is no longer serialized, the unserialized data is returned instead


  • The order.unhold API method will throw an error if an order could not be unheld due to a processing error (see Unable to Process).


Add tracking_urls to shipment:packed webhook payload

  • Add url to track:created webhook payload
  • Add service to shipment:packed, shipment:reverted and track:created webhook payloads


  • Allow filtering by external_id in API method
  • Added a new webhook topic product:sku_changed to notify when a product's SKU has changed


  • Add $detailed parameter to state.get method to get state details (update count and timestamp)
  • Add $ifEquals parameter to state.set method to only update if the current data equals the provided value


  • Standardize handling of JSON fields in scripts: empty JSON fields will always be empty objects
  • Always initialize order.options.instructions to be an array to simplify adding Packing Instructions through scripting

External Shipping Methods

  • Add other_shipping_options to External Shipping Method payload
  • Add _unit suffix field with new units of measure (_units suffix is kept for backwards compatibility)

Grid Changes

  • Increase max export file size to 500MB and 3 million rows
  • Add 'Priority' column to Orders grid
  • Update Collected Data grid for consistency with other grids:
    • Added 'Warehouse'
    • Shipment Increment -> Shipment #
    • Order Increment -> Order #
    • Order Ref -> Order Ref #
  • Added 'International' column to Shipments and Packages grids and exports
  • Updates to Product grid:
    • Strip "Qty" from labels
    • Add Expected to UI and export
    • Processed and Put-Away already existed in export, add them in UI
    • Add On Hand to UI and export
    • Move Backordered before all other qty columns
  • Updates to Packaging Features grid:
    • Strip "Qty" from labels
    • Add Expected to UI and export
    • Processed and Put-Away already exist in export, add them in UI
    • Add On Hand to UI and export
  • Add "Shipment Items" export type for Shipments grid in Client UI
  • Added Lot Type "Allow Mixing Locations" and "Allow Mixing Fulfillment" grid columns
  • Add ID column to Lot Types and Regulations grids
  • Add 'Delete' mass action to Packing Solutions grid
  • Fix 'Lot Number' and 'Target Ship Date' column in Shipment Items Lots/Expirations export
  • Fix unassigned lots not showing on Lots grid with 'Show data from all warehouses'
  • Fix filtering Scripts grid by '--All Merchants--'

How did we do?

Version 2021.4

Version 2021.2