Skip to main content

What’s new at Endless

Changelog

The latest features, improvements, and fixes across Endless Commerce.

improvement

ShipHero: Fulfillment Instructions Reach The Packing Note

Instructions written on a fulfillment now travel to ShipHero. What an operator types into a fulfillment’s instructions arrives as the packing note on the ShipHero order, so the person packing the box sees it.

A fulfillment with no instructions of its own falls back to the order’s note, which is what ShipHero received before. Nothing needs setting up, and it applies to every order sent to ShipHero from here on.

improvement

Purchase Orders: Import And Export Got A Real Upgrade

Purchase orders can now make a clean round trip through CSV. Both the import tool and the export tool got a pass so you can pull POs out of Endless, edit them, and feed the file back in without losing fidelity.

On import, the PO Number is now the key. A row whose PO Number doesn’t exist creates a new PO; a row whose PO Number matches an active PO updates it; archived POs are rejected so an old one cannot be revived by accident. Line items inside a PO match on Item SKU: quantity, unit cost, and lead time update on existing lines, new SKUs add a line, and lines you didn’t reference are left alone. The header is editable too — supplier (matched against your active suppliers by name), terms, instructions, key dates, financial status, and cost allocation status — and you can submit a header-only row to update or create a PO without listing any items. Imports fail loudly when something doesn’t add up (unknown supplier, invalid date, conflicting headers, duplicate SKU in a single import). Columns the importer doesn’t recognize are skipped instead of failing the file, listed back to you in the import result.

On export, there’s a new Export dialog matching the orders and inventory flow. Exports honor the filters you have set on the Purchase Orders list, so what you see is what you get, and you can pick between an import-ready export — round-trippable through the importer — and a complete export that includes every field on the PO.

Behind these two flows, the PO Number is now a real natural key: a simple format (letters, numbers, _, -, .) and unique within a company across active and archived POs. Duplicates can’t be created, imported, or generated.

improvement

List Page Toolbars: Tighter, More Uniform, With Hover Labels

The toolbars across list pages — products, orders, POs, shipments, suppliers, and the rest — got a pass for consistency. The big “Add Product” / “Add Order” buttons that opened a dialog are now a compact + icon, since + and the edit pencil are already the standard add/edit affordances throughout the app and the long label was taking more space than it earned. The button still sits in the primary spot; it just doesn’t shout.

Filter buttons, the “More actions” overflow, and the new add-as-+ all share a single chrome treatment so they read as one toolbar instead of three different ones. The view picker (table / cards / tags) that used to live next to the toolbar moved into the Display Options menu, matching the pattern most apps use and giving the toolbar back the row of horizontal space.

Hovering any icon-only button in those toolbars now shows a tooltip naming what it does — the + add action, the view-options slider, the more-actions overflow, the column toggle — and the same label is exposed to screen readers. The … that used to trail the add label is gone now that there’s a hover label to lean on.

improvement

Shopify: Auto-Import Missing Products When Orders Come In

Two changes to how Shopify orders connect to products in your catalog.

The “Import products” action on a Shopify integration always works now. Before, the action was silently blocked on integrations whose product-import setting was off, so the only way to pull in products was to turn that setting on first. Whether to import is your call from the UI; nothing else gates it.

The same setting still exists, but it now controls a narrower behavior: whether Endless should automatically import a missing product when a Shopify order comes in referencing one. The default is off, so order ingest no longer creates products on its own unless you opt in. Integrations that already had this setting on stay opted in.

Regardless of that setting, an order item that arrived without a matching product is now linked to one as soon as the product shows up — created later, imported manually, or updated with the SKU the order is referencing — so an order that landed before its product did doesn’t stay orphaned. V2 orders behave the same way as V1.

fix

EDI 850 Orders Without A Carrier Service Now Import

EDI 850 orders coming in through the Orderful path could fail to import on every order when the inbound template didn’t include a shipping carrier service. Order creation was rejecting the input outright, even though the carrier service is supposed to be set later at fulfillment, not on the inbound PO.

EDI 850 orders without an inbound carrier service now import as expected. Any carrier mapping the template does send is still picked up.

fix

Extensiv: ASNs No Longer Fail On Items Without Lot Tracking

ASNs to Extensiv buildings were silently failing on items that don’t have lot tracking turned on in Extensiv. Endless was attaching a lot number to every receiver line, and Extensiv was rejecting the whole receiver when the item wasn’t lot-tracked, so the ASN never landed.

There’s now a “Send lot number” setting on the Extensiv integration, off by default. Turn it on for accounts where every item is lot-tracked; leave it off otherwise and ASNs go through without a lot number attached. Integrations already configured to send a reference number as the lot number are unaffected — that setting still wins.

improvement

Orders List: Refreshes In The Background

The orders list now keeps itself current as your team works. When a teammate moves an order — fulfills it, marks it in progress, holds, releases, allocates, edits details — the list picks up the change in the background instead of staying stale until you reload. Refreshes from your own actions don’t trigger an extra reload, so the page doesn’t flicker as you work.

A few order changes — cancel, uncancel, and unfulfill — don’t refresh the list yet; the list will start picking those up automatically once they’re being broadcast.

improvement

Purchase Orders: Archive, Browse, And Restore

Archived purchase orders are now first-class on the PO list. A new filter lets you switch between active POs (the default), archived-only, or everything; archived rows can be opened and read on the detail page, with notes, events, milestones, live status, and the archived line items (each marked with an Archived badge in the items table) all available, and a clear Restore action is offered from both the list row menu and the PO details actions menu. Restoring runs through the same in-app process tracker the rest of the bulk PO actions use, so you can see when the restore lands instead of guessing from a toast.

The Archive action is also no longer hidden on POs that aren’t in a draft state — you can archive a PO at any status, which matches how teams actually use archive (clearing out a mistakenly-created or no-longer-relevant PO regardless of where it got to). Write actions on archived POs still require restoring first; only reads were opened up.

improvement

Settings: Team & Roles And Brands Pages Rebuilt

Two more Settings pages have been rebuilt into the new Settings layout.

Team & Roles replaces the old team list. Search across members, and use the All / Admins / Operators segmented filter — each with a live count — to narrow the list. The table shows name with an avatar, email, role as a badge (with a clear “No roles” state), status (Verified vs. Pending), and the date each member joined; click any row to open the existing member dialog. “Add member” opens the same invite flow as before.

Brands has been rebuilt as a standard table with debounced search, an “Add brand” action in the toolbar, skeleton and empty states, and the existing pagination footer; clicking a row opens a dedicated brand detail page where you can edit a brand’s fields in place, with a back affordance to the list. The previous card grid is gone.

improvement

Fulfillment Order PDFs Show The Components Being Picked

Exporting a fulfillment order PDF for a bundle that has been decomposed into components now shows the component rows the warehouse actually needs to pick, the same way the on-screen decomposition table does. The parent bundle row is muted so it reads as a header, the fulfillable component rows sit on the normal row background, and the PDF totals are calculated from the components — so what’s on the PDF matches what’s on the page and what the warehouse will be packing.