Introducing Endless AI and Endless MCP. Operate from anywhere.

Changelog

Stay up to date with the latest updates, features, and improvements to Endless Commerce.

Category
Type

Showing 341 updates

Improvement
Integrations Inventory

Manage building connections and inventory sharing

Connect external locations to Endless buildings from one mapping dialog. Find locations where supported or enter them manually. The integration’s Connected Buildings table shows each connection’s location, fulfillment processing, and inventory push settings.

Faire, Sellbrite, and Orderful now share inventory only from connected buildings enabled for inventory push. Faire and Orderful combine eligible stock; Sellbrite uses each connection’s location ID. Faire applies its buffer and maximum to the combined quantity.

Disabling inventory push or removing a connection leaves previously published stock in the other system. A confirmation explains this before you proceed.

Feature
Integrations Platform

Send webhooks from automations

Use the Send Webhook action to notify another tool when an order is created, a fulfillment is created, or a fulfillment becomes ready.

Set the destination in the automation and review recent deliveries there. Failed deliveries are retried; repeated failures pause delivery until you save the rule again.

Improvement
Supply Inventory Integrations

Review ShipBob receiving details and packing before sending

ShipBob receiving hubs now appear when you connect or map a building. Each option identifies whether it is a location, a receiving destination, or both.

Before sending a supply shipment, choose how it arrives, whether boxes contain one SKU or several, and whether to include lot numbers. Review packing shows the proposed carton or pallet contents and packing assumptions before you accept. Matching product pack quantities are used for single-SKU packing. Products not registered in ShipBob are listed as omitted, and failed inventory checks or conflicting receiving orders block sending.

You can return to the shipment to adjust it before sending. ShipBob does not allow the receiving settings to change after the receiving order is created. Bulk sends use each shipment’s defaults.

Feature
Platform

Pause an automation before its next action

Add a Wait action to pause an automation for one minute to twenty-four hours. Optionally schedule it within selected weekdays and hours. Conditions on the next action are checked when it runs, so it can respond to changes made during the wait. Actual execution may be later than the scheduled time.

Orders show waiting automations, their remaining steps, and scheduled times in your local time zone. Create Fulfillments also waits for order approval; canceled orders and waits lasting thirty days are skipped.

Improvement
Integrations Inventory

Rithum inventory uses mapped SKUs and selected buildings

Rithum inventory updates now use the SKU mapped for the integration and run hourly. If a product has no mapping, Endless uses its own SKU. Conflicting mappings for one destination stop the update with an error.

Quantities include only active buildings configured as inventory destinations for that connection. Each building counts once; allocations, demand, and bundle availability still apply. If no destination has a Rithum warehouse code, Endless skips the update.

Failed or partly accepted batches are retried. Updates remain unconfirmed until Rithum reports that it has processed them.

Improvement
Supply

Tariffs Tool: HTS 2026 Revision 21 And Pharmaceutical Updates

The tariffs tool is now on HTS 2026 Revision 21, so classifications and duty rates match the latest release the ITC published.

The Updates feed has three new items: the September 21 BIS guidance on Section 232 pharmaceuticals, the Federal Register notice that defines the categories exempt from the pharmaceutical tariff, and the October 6 launch of CBP’s CAPE Phase 3. The simulator’s note about programs it cannot resolve on its own now states the real reason: the schedule does not carry patent status, onshoring commitments, or drone specifications.

Feature
Sales

See units ordered and filter orders by ship date

The sales order list now shows the total units ordered next to the order count, for the orders that match your filters. The count is hidden on narrow screens. A new Ship Date filter finds orders with a shipment shipped in a date range. When it is on, the number is the units ordered on those orders, not the units shipped.

The Ship Date filter matches only shipments that are currently in the Shipped state. Canceled, archived, and deleted shipments no longer match. Exports use the same filters.

Improvement
Supply Inventory

Delivery, received, and payment due dates on supply shipments

A supply shipment now has separate Delivery and Received dates, plus a Payment Due date. Delivery is when the shipment reaches the building. Received is when it is received into inventory. The new Dates card on the shipment shows Shipment, Delivery, Received, and Payment Due, with an Expected and Actual toggle and a net-terms calculator.

Moving a shipment to In Transit, Delivered, or Received opens a date picker, and the date you choose is recorded. The shipments list has sortable Received and Payment Due columns, and the arrival columns and filter are now labeled Delivery. The row that was called Received Date in Key Information was the arrival date and is now Delivery.

Inventory now uses the Received date, and falls back to Delivery, for the date stock was received and for the landed cost date. CSV import and export include both new dates.

Improvement
Products Sales

Enter weight and dimensions in any unit

In Create Shipment, weight and dimensions each have a unit menu, so you can enter kilograms or centimeters without converting first. Endless stores the values in pounds and inches, as before.

Products work the same way. On the Dimensions card and in the product sheet view, enter weight and dimensions in kilograms or centimeters, and Endless converts the shipping, inner pack, master carton, and pallet measurements too.

The Package details on a shipment and the product Dimensions card can switch between inches and pounds and centimeters and kilograms. The choice affects only what you see and is not saved. On a product, switch units in read mode, then start editing. The toggle does not change while you edit.

Feature
Supply Products

Supplier contacts, locations, and costs

The supplier page now has an overview with a primary contact, a ship-from address, a remit-to address, and company details. A Contacts and locations tab keeps saved locations. A Products tab lists the supplier’s costs by SKU, where you can add, edit, bulk edit, and remove costs and edit the supplier SKU. Dropship cost tiers always have a minimum order quantity of 1.

Default addresses now point to the saved location they came from. Editing a location updates every default that uses it, and editing a default edits its location. Archiving a location keeps the address on the default and removes the link. Locations tables show a Default for column, and addresses are edited through locations. Editing a contact no longer removes the primary contact unless you change it.

Improvement
Platform

CSV exports no longer change in Excel

Excel changes some values when it opens a CSV file: it drops leading zeros, turns long numbers into scientific notation, and treats values that start with +, =, @, or - as formulas. Exports now put a leading apostrophe on those values so Excel shows them as written. Imports remove one leading apostrophe and accept it in SKU, UPC, GTIN, HTS, PO number, warehouse, location, shipment, and tracking number columns.

Imports reject a number already in scientific notation, such as 6.00106E+13, and read two-digit years in dates, so 8/3/26 becomes 2026. Anything other than a spreadsheet that reads an export will now see the apostrophe.

Feature
Sales Inventory

Fulfill an item only from a chosen location

On a draft fulfillment, open an item’s menu and choose Assign location or Change location. Stock for that item is reserved only from the location you choose. If the location cannot cover the quantity, the fulfillment shows an error that names the location. Items without a chosen location allocate across the warehouse as before.

An assigned item shows “Only fulfill from” and its location under the quantity. Each component of a bundle can have its own location. Clear the assignment to let the item allocate across eligible locations again. The location must be active and pickable in the same building. To change a location on an allocated fulfillment, revert it to draft first.

Feature
Integrations Sales

Sell on Mirakl marketplaces

Mirakl is now an integration. It pulls orders, accepts them, reports shipments with tracking numbers, and pushes inventory. The integration was built for Best Buy US and Best Buy Canada.

Orders import when they reach the Shipping status. Mirakl does not list warehouses, so you enter them by hand on the integration. Cancellations, refunds, and returns are not handled yet. Orders from Mirakl show a Mirakl origin badge.

Improvement
Products

Assign packaging GTINs that no other product uses

Assign GTINs no longer reuses a code that another product already carries. The dialog suggests an unused indicator digit and tells you which product holds the code you configured. When all eight digits are in use, it says a new UPC is needed and skips that packaging level. The carton packout fixer uses the same dialog.

Cloning a product now leaves its packaging GTINs blank and keeps the quantities and dimensions. Suggestions are not reserved, so two people assigning at the same moment can still pick the same code.

The products list can also filter by packaging GTIN.

Feature
Inventory Sales

Delete Imported ECHO Data In Bulk

ECHO has an Actions menu with a Delete ECHO data option. Use it to remove incorrect imported order history, shipment history, or inventory snapshots across every page of a filtered view, rather than one row at a time.

The dialog starts with the filters of the view you came from, and you can change them before deleting. It shows how many manual and adjustment records match and asks you to type a confirmation such as DELETE 24 RECORDS. Records ECHO created automatically are never deleted. Table bulk selection is replaced by this dialog. Editing a quantity and deleting a single row work as before.

Improvement
Sales Integrations

Send Shipments Retries Only What Is Outstanding

Send shipments now follows the same rules as the automatic send. Each integration decides whether to create a shipment, update its tracking, or skip it. Clicking it again retries shipments that failed and updates changed tracking where the integration supports that. It does not submit a shipment the integration already accepted.

Faire now waits until every item on the order has shipped, then receives all packages in one request.

Actions that send data to another system or fetch data from it now sit at the bottom of each menu under an Integrations label, with the integration’s logo. Each one opens a dialog that names the integration and explains what will happen. Workflow actions such as Send for fulfillment keep their place at the top. Purchase orders have one Send purchase order action, and you choose the destination in its dialog.

Improvement
Inventory

Combined Inventory Exports Include Every Matching Item

A combined inventory export now includes every item that matches your filters instead of stopping at a row limit. Exports split by warehouse or location keep their existing filters and row limit.

A combined export cannot use a location filter. The export dialog disables Combined while a location filter is active, explains how to turn it on, and switches to Split by location when the current choice would be invalid. Your filters are kept. If the request fails, the dialog stays open and shows the error.

Feature
Integrations

Operations Integration For Custom Tools

Operations Integration is now an option under Custom Integrations. Choose it to let your own tools read products, submit orders and purchasing records, adjust stock, report shipments and tracking, and request exports. API credentials are created for you and use the existing credentials panel.

The integration cannot create, edit, or delete products. It cannot change allocation, routing, templates, or fulfillment workflow controls, and it cannot change company setup, integration settings, or user access. Existing integrations and roles keep their current permissions.

Feature
Sales Inventory

Revert A Sales Order To Draft

A sales order that is Pending, Ordered, or In Progress can now be reverted to Draft from the Actions menu or the command palette. Use it to keep a future order on record without reducing current inventory availability.

Cancel every fulfillment order first. Revert to Draft is blocked until each fulfillment is canceled, and the dialog explains why. The order keeps its details, history, and payment status, including payment already received. The reversion appears on the order timeline, and inventory and demand reporting refresh when you revert and when you confirm the order again.

Improvement
Integrations Sales

Warehouse Cancellations Ask For Attention Instead Of Closing Fulfillments

When a warehouse integration reports that it canceled an order, Endless now moves the fulfillment to Failed to fulfill and raises a needs-action signal. The inventory allocation and the warehouse’s external reference are kept, and the cancellation details appear on the timeline. Shipments already recorded stay in place, and a fulfillment that was already complete is flagged for reconciliation. A repeated report does not create another failure.

This covers Extensiv, ShipStation, ShipHero, ShipBob, Packiyo, Trackstar, Jazz, MasonHub, Infoplus, Shipfusion, and Mintsoft. After reviewing the warehouse status, you can move the failed fulfillment back to Allocated or Ready. Returning to Allocated respects order holds. Automatic sending stays blocked while the external reference is present, so clear it before you resend. GoBolt, VeraCore, and the custom Business Central connector do not report cancellations yet.

Fix
Integrations Sales

Walmart Orders Split Into Several Purchase Orders Now Import

Walmart sometimes splits one customer order into several purchase orders that share the same customer order ID. Endless used that ID as the order number and refused any order whose number already existed on the sales channel, so the second and later purchase orders never imported and never shipped.

Purchase orders from the same customer order now import as separate sales orders. A manually created order still cannot reuse an existing order number.

Feature
Integrations Inventory Sales Supply

Sync shipments and inventory with Mintsoft

Mintsoft shipments now bring item quantities, tracking, and dispatch dates into Endless automatically. Pickable inventory updates every fifteen minutes, with manual pulls available when needed.

You can also send inbound supply shipments to mapped Mintsoft warehouses using Send to WMS. Products must already exist in Mintsoft. Confirm the warehouse’s database time zone before the first shipment import.

Improvement
Sales

Create shipments with item quantities and freight references

Create Shipment replaces Mark Fulfilled on a fulfillment. Select the items and quantities that shipped, then enter the shipping date, tracking number, and carrier service. Partial shipments leave the remaining items open for another shipment.

Freight shipments can include a bill of lading and a reference number alongside the tracking or PRO number. Add Cost And Packaging reveals optional shipping costs, packaging, weight, and dimensions. A canceled shipment does not reduce the quantities available for the next shipment.

Improvement
Integrations Sales

Extensiv: Canceled Orders And Prepaid Billing

Canceled Extensiv orders no longer mark fulfillments shipped. Extensiv reports a canceled order with a closed status and sometimes tracking data, and Endless used to treat that as a shipment, complete the fulfillment, and send shipping notifications. Shipment creation and updates now skip any Extensiv order whose status is canceled. Existing incorrect shipments are not reversed. Contact support if a past order needs correcting.

Orders sent to Extensiv now use Prepaid carrier billing by default. Third-party billing is sent only when it is enabled for the fulfillment and a billing account is present, with the account and billing ZIP code you supply. A missing ZIP code stays empty rather than using the recipient’s. Orders already sent are unchanged.

Fix
Integrations Sales

Send DSCO shipments and optional SSCC tracking values

Sending a shipment from a DSCO fulfillment now sends that fulfillment’s shipping information. An operator can send it again even if it was previously sent; automatic sending still skips a fulfillment already sent.

The DSCO setting Send Tracking Number As SSCC places the tracking number in the SSCC barcode field for retailers that require it. It is off by default and can be enabled per integration. The timeline identifies the operator who sent the shipment.

Improvement
Integrations Sales Supply

Endless EDI: Per-Fulfillment Documents And Simpler Settings

On an EDI order that split into several fulfillments, each fulfillment’s 856 now lists only its own shipments and cartons. Before, it listed every fulfillment’s, so a retailer could receive tracking numbers that belonged to another ASN. Forward Shipment on a fulfillment card now previews and sends the same 856 the automatic send builds, and always sends when an operator starts it. Order-level documents and single-fulfillment orders are unchanged.

Each fulfillment card, and an accounting invoice scoped to one fulfillment, has a Send Invoice action that opens the EDI preview for an 810 scoped to that fulfillment. It applies to any Endless EDI connection whose invoice template is set up per fulfillment.

The EDI tab’s Variance view now shows the correct variance per column when the same SKU shipped on more than one fulfillment order. The ASN sent to the retailer did not change.

The integration settings no longer offer per-transaction ISA sender or receiver overrides or a Packing Strategy choice. Neither affected what Endless sent. The remaining settings have clearer labels and help text.

Improvement
Sales

Review order signals by Issues, To do, and Information

Order signals are grouped into Issues, To do, and Information. The Signals page opens on Issues. On an order, signals appear in a dedicated Signals tab instead of banners above the details. Its badge counts active signals and highlights when any need attention.

Issues include differing fulfillment plans, excess shipped quantities, and fulfillments blocked by requirements such as a shipping address or carrier service. Held orders remain available through the on-hold filter. To do covers work such as creating missing fulfillment plans. Information covers partial allocations, inventory shortages, and shipments in transit.

The separate Awaiting shipment creation signal is removed. Saved filters discard retired signal selections. Actions remain beside the signals they apply to.

Feature
Platform

Stronger passwords and account protection

Change your password from Profile Settings → Security. Password forms show the requirements as you type, including a minimum of twelve characters and a mix of letters, numbers, and special characters.

Passwords expire after a year. Ten consecutive failed sign-ins lock an account until its password is reset, including access through magic links. The sign-in screen explains when a reset is needed; existing sessions stay signed in.

Improvement
Supply Products

Manage Suppliers, POs, And Cost Estimates From A Product

The Supply Chain tab on a product now handles supplier associations end to end. Link an existing supplier or create a new one from the tab; already-linked suppliers cannot be selected again, and each attempt reports success or failure inline. Saving a purchase order also links its products to its supplier automatically, so a supplier that appears on a PO is a supplier on the product without a second step.

Each supplier card shows Part Number, Default MOQ, Purchase Orders, and Cost Estimates in a responsive grid. The Purchase Orders count includes every matching PO for that supplier and product, independent of what the table shows, and refreshes when a PO changes. Cost Estimates opens the existing estimate workflow filtered to that supplier, with adding, editing, duplicating, and deleting; a new estimate opened from here keeps the supplier automatically. Part Number and Default MOQ have their own cards on larger screens; clicking either opens a dialog that edits or clears just that value and leaves the rest of the relationship intact.

Edit supplier, Contact supplier, and Create PO are grouped under an Actions menu on each card. Default Lead Time stays on the supplier profile and appears in the summary alongside incoterms and quality rating.

Improvement
Inventory Sales

Clearer ECHO reporting

ECHO now uses one date range across charts, tables, and exports. The overview brings together units ordered, units shipped, and inventory, with breakdowns by sales channel and warehouse. Sort records and filter by multiple SKUs to investigate the details.

Shipping reports use the actual ship date when known and the recording date otherwise. Missing inventory history appears as gaps. Inventory reporting remains in beta.

Improvement
Sales

Rebuild Signals From An Order

Company and brand operators can now rebuild an order’s signals from the Actions menu on the order page and its quickview, including fulfilled orders. The action stays disabled while the rebuild runs, reports the result, and refreshes the displayed signals when it finishes.

Until now the action was hidden in the app even though the permission existed, so a stale signal on a single order needed a bulk rebuild from the list. The bulk action from the list is unchanged.

Improvement
Integrations Sales

ShipStation shipments include item quantities

Shipments imported from ShipStation now show which items shipped and their quantities. Separate packages count only the units still outstanding, so repeated item reports do not double the shipped quantity.

If an item cannot be matched, Endless keeps the tracking and records the unmatched SKU in the order history. Existing shipments with missing items can gain them when ShipStation sends an update; historical records are not changed automatically.

Improvement
Supply

Import supply shipment status and actual ship date

Supply shipment CSV imports now accept Status and Actual Ship Date. Use them to record a shipment that has already progressed instead of starting it at Pending with today’s date. Both columns are optional and are included in the importable export.

Imported statuses must follow the same requirements as changes made in the app. A shipment that cannot advance reports an import error. Canceled is not an available import status.

Improvement
Sales Supply Integrations

Timelines name the integration behind API activity

Activity performed through an API client linked to an integration now shows the integration’s name on timelines. An unlinked client keeps its own name and an API client label.

Historical activity also displays the current integration name. The original API client identity remains available for auditing.

Improvement
Integrations Sales Supply

VeraCore shipments include package contents

Orders sent to VeraCore now use the fulfillment number as their reference, and the warehouse chooses lots when it ships. Imported shipments include the items and quantities in each package, including later quantity corrections. Multiple packages are recorded separately, so a partial shipment does not complete the whole fulfillment.

When package contents cannot be matched, Endless preserves tracking and known quantities and records a warning. Before retrying an older failed send, confirm whether VeraCore already accepted an order under the sales order number. Reconcile or void that record first to avoid creating a duplicate.

Feature
Supply Integrations Sales

Send purchase orders and shipments to Business Central

Send purchase orders and inbound shipments to Business Central from Endless. Map the supplier to a Business Central vendor, then use Send on the purchase order. You can link an existing document instead of creating a duplicate.

Links on purchase orders, sales orders, and products make it easier to move between the two systems.

Improvement
Sales Supply

Distribution Center In Fulfillment Order Numbers

The second fulfillment-number format — order number with fulfillment index — now uses the distribution center number when the fulfillment order has one. An order routed to distribution center 842 numbers its fulfillment SO12345-DC-0842 rather than SO12345-FO1. A fulfillment order without a distribution center still uses the index, so a company that does not ship to distribution centers is unaffected.

When two fulfillment orders on one order share a distribution center — for example, when a strategy sources one distribution center across two buildings — the second appends its index (SO12345-DC-0842-2). This applies only to fulfillment orders created from now on, as the setting already states.

Improvement
Integrations Inventory Sales

More reliable Shopify fulfillment and tracking

Endless follows fulfillment changes from Shopify while preserving local work and shipment history. Partial shipments send their tracking to Shopify as they are recorded, so customers can follow each package without waiting for the whole order to ship.

Store owners can connect through a secure invitation link without an Endless login. Existing connections can reconnect to update permissions.

Feature
Sales Platform

Order Signals

Endless works out what needs attention on every order and writes it as a sentence with the numbers already in it: “3 units have no fulfillment plan,” “3 units have no inventory at any building,” “sent to Windsor, no shipment created.” You no longer have to know what to look for, or build a filter to find it.

Each signal sits in one of three groups that say what you can do about it. Needs action means you can fix it now. Blocked means something has to change first. Waiting means someone else is already working on it and the order needs nothing from you. Knowing an order is accounted for saves as much time as knowing one is broken.

Signals keep themselves current. One appears within seconds of the change that caused it and clears when it stops being true, so nothing remains on an order after it has been handled. The most urgent sit at the top.

The order list has a Signals column, and the Signals page opens on Needs action with shortcuts for Blocked, Waiting, and All. On an order, its needs-action signals sit at the top of the page, each with the action that resolves it.

Feature
Sales Integrations

Shopify Orders: Endless Owns Fulfillment Planning After Import

Shopify supplies the initial fulfillment plan when an order is created in Endless. Later planning — splitting, moving between buildings, changing quantities, or cancelling — happens in Endless. Reload Order and later Shopify webhooks bring current sales quantities across, but they do not add, move, split, or remove operational fulfillments to match Shopify’s structure.

Removed lines stay on the order at their original quantity, so you can see what was purchased alongside the current quantity Shopify reports. Fulfillment work is reconciled to the current quantities: reservations are released for reductions, fulfillments emptied by a reduction are cancelled, and ready, in-progress, and completed work is preserved. A shipment that already went out is kept even when Shopify later reduces the sales line, and an Excess demand signal is raised so you can see why a fulfilled quantity now exceeds the order.

Seeing And Applying What Shopify Reports

The saved source fulfillment plan and its change history are visible on the order regardless of whether it differs from Endless. Open the source plan viewer from the order to see the last complete plan Shopify reported and the meaningful changes since — location, grouping, active state, and quantity. Display-only differences and retried polls do not create timeline entries.

When Shopify’s fulfillment orders differ from Endless in warehouse, quantity, or grouping, an amber “Fulfillment orders differ” badge shows in the order source bar and a Fulfillment orders differ signal is raised on the order. Warehouse comparison falls back to your Shopify location mappings when the identity registry has no entry, so a fulfillment created at the same warehouse on both sides does not read as a difference.

Update Fulfillments is available from the order Actions menu and from a right-aligned button on the drift alert. Draft and allocated differences are replaced and their reservations released; ready, in-progress, and completed work must already match, or the operation is refused. New fulfillments land in draft without running fulfillment-created automations, so the arrangement can be reviewed before it moves.

Improvement
Integrations Inventory

See Which Shopify Inventory Updates Were Skipped

The integration timeline now records each Shopify inventory push: the number of updates Shopify accepted, and any items that were skipped because they are not stocked at their mapped Shopify locations. The details for each skipped item include its SKU, the mapped Shopify location, and the quantity that would have been sent.

Enable the affected items for stocking in Shopify and the next scheduled push will send their quantities. Successful updates and existing retries are unchanged.

Improvement
Products Inventory

Choose Whether Component Stock Counts Toward Available To Sell

Products with components have a new setting that decides whether the components in stock count toward the product’s Available to Sell. It is on by default, matching current behavior. Turn it off on a product whose components you would rather keep for other uses.

Set the choice from the Components tab on the product, or with the bulk editor and product import when changing many products at once. The Components view in the product sheet shows the current setting next to Auto Decompose and lets you edit either one in place.

When components are excluded, Available to Sell drops Available to Make, so the waterfall shows Unallocated Stock minus Ordered. Available to Make itself is unchanged, and allocation and decomposition continue to work the same way.

Improvement
Integrations

Edit The API Token On An Amazon Integration

You can now edit the API token on an Amazon integration from its settings. Update the token when Amazon issues a new one, or after rotating credentials, without removing and re-creating the integration.

Shopify still keeps its API token locked, because it is issued through the Shopify install flow and rotating it there would not update Endless.

Feature
Sales Integrations Supply

B2B Orders: Each Split Ships To Its Own Destination, And The Packout Plan Shows It

When a B2B order split into fulfillments going to different destinations, warehouse integrations and EDI documents read the retailer’s PO, vendor, department, distribution center, ship window, and routing straight off the order, so every split fulfillment shipped against the order’s original destination. Each fulfillment now carries its own effective data — its override where one is set, the order’s where it is not — and every warehouse payload and every EDI 856 and 810 scoped to a single fulfillment reads that. A fulfillment with no override produces the same payload as before. Third-party billing carrier can be overridden per fulfillment as well; special instructions stays on the order.

The EDI tab on any order carrying a store distribution has a Store Packout Plan section showing the plan the retailer sent. Items are rows and stores are columns, with the item pinned left and its total pinned right, across three views: As Ordered from the purchase order, As Packed rolled up from every fulfillment’s containers, and Variance between them. Filter by distribution center and store, search by SKU, name, UPC, or purchase-order identifier, and download exactly the view you are looking at.

When the order splits, the plan groups by fulfillment order. Each becomes its own collapsible section headed by its number, distribution center, and store and unit counts, holding only the stores it ships — a purchase order across six distribution centers reads as six sections rather than one 87-column table, and two fulfillments shipping the same store stay apart instead of merging their units. A Fulfillment Order filter appears when the order is split, the CSV carries a Fulfillment Order column, and an unsplit order renders as it did. Two things to know about the numbers: store distribution lines match order lines on the purchase-order line identifier both sides already carry, so any identifier scheme resolves, though orders imported before this change keep the previous matching path; and a quantity that could not be restated in eaches is treated as unknown rather than zero, so it stays out of every total and Variance does not read as a full overage.

Feature
Integrations Sales

Import Order From Integration: Endless EDI

Import Order From Integration now covers Endless EDI. Search a retailer’s purchase order number, see the matching 850s with an In Endless or Not In Endless badge, and import one from the same dialog you already use for the other integrations. The retailer’s PO number is the only searchable field — everything else on the vendor side is envelope data, and there is no search into the message body.

An imported 850 runs through the same processing an incoming poll does, so the order lands exactly as a polled one would and the acknowledgement and shipment documents read it the same way. Re-importing an 850 that is already in Endless deduplicates against the existing order rather than landing beside it, and a purchase order that is already an order is skipped, so a partner resending under a new transaction id does not create a second copy.

Feature
Sales Platform

Automations: Process A Fulfillment Without Building A Processing Rule

Automations gain a Process Fulfillment action. Add it to the fulfillment-created trigger and choose what should happen to each new fulfillment: allocate it, mark it ready, or hand it off to the warehouse.

It is a simpler alternative to a fulfillment processing rule rather than a replacement for one. Reach for the action when the same few steps should run on every new fulfillment; keep processing rules for the more involved workflows they are built for. Both take the same steps in the same order, so choosing one over the other does not change what happens to the fulfillment.

A fulfillment that already has a processing rule attached is left to the rule, so the two never both try to move it. When a step fails the completed ones are kept — a fulfillment with no integration lands ready with its inventory reserved and the failed handoff is logged, rather than the allocation rolling back.

Feature
Sales Inventory

Routing Strategies: Shortfall Policy, Destination Grouping, And Clearer Building Rules

A routing strategy now says in plain language what to do when its buildings can’t cover an order. Pick one of four shortfall policies on the strategy: ship what’s available and backorder the rest (the default for new strategies), ship what’s available and leave the remainder unplanned, wait until the whole order can ship, or create the fulfillment orders anyway so the warehouse sees the work. Max fulfillments stays a separate control — how many buildings a strategy may split across — and a backorder doesn’t count against it. Each strategy states itself on its list row and at the top of its quickview, so telling two apart no longer means opening them.

A Destinations setting decides how an order’s addresses are grouped: one shipment to a single address, one fulfillment per distribution center, or one per store. It sits above Max fulfillments because grouping decides how many destinations exist and the cap applies within each one. Wholesale orders naming several distribution centers on one purchase order can now split the way the retailer sent them.

Routing rules record which buildings are included rather than a decision about every building in the company, so a building added after a rule was set up no longer lands on that rule’s excluded list the next time anyone edits it. Leftover exclusions clear themselves the next time each rule is saved. The building actions are labelled Include and Exclude, a strategy whose only rule has no buildings is flagged, and every building’s Settings tab lists the rules that can use it.

Placement reads available-to-allocate — the same figure the building menu and order signals show — so an oversold product no longer blocks placement at a building holding unclaimed units, and stock that could be built from components at that building counts. Routing also builds its plan before cancelling anything and cancels only what the plan replaces, so a fulfillment already ingested from a sales channel survives a re-run.

Every existing strategy carries over as it stood, and nothing changes behavior until a team picks a new policy.

Fix
Integrations Sales

Update Fulfillments: Split A Shopify Order After Its Add-Ons Have Shipped

Running Update Fulfillments on a Shopify order that had already fulfilled its add-on lines — shipping protection, carbon offsets, and similar non-physical items — errored out instead of reconciling against what was left, so any split, move, or merge spanning the add-on was blocked.

Update Fulfillments now plans against the quantities Shopify still shows outstanding, ignores lines with nothing remaining, and leaves already-shipped add-on lines alone. Two cases that used to give a generic failure now say what to do about them: a partial quantity spanning more than one Endless fulfillment, and Shopify having more remaining than Endless has planned. An unrelated hold on the order no longer blocks a valid plan.

Feature
Supply

Supply Shipments: Import And Export A List Of Shipments As CSV

Supply shipments could only be created one at a time. Import Shipments and Export Shipments are now in the table actions menu on the shipments list, mirroring the flow on purchase orders, and the first-run empty state offers Import Shipments so a company with no shipments can reach the importer before there is any data.

The export is import-ready: run it, edit the file in a spreadsheet, and re-import it. Item rows link to a purchase order line by PO Number plus Item SKU, and unit cost, HTS code, and carton data are filled from that line. Container Size, Incoterms, and Cost Allocation are list columns rather than free text, so a raw value cannot leave the shipment unreadable. Shipment status is export-only, because it moves through a validated transition graph and stays a UI action.

Feature
Products Platform

Labels: One Create Labels Tool With Uploaded Lists, Barcodes, And Saved Recipes

The separate product-label and carton-label trays are now one Create Labels tool. Rows can come from selected products on the products list, an uploaded CSV or Excel file, pasted rows, or order lines, and every column on the source can print on the label. A row is matched to a product by SKU or UPC, and an uploaded file is read in the browser rather than stored — the list is a lookup, not data to keep.

The tool adds Code 128 barcodes from any field, multi-across roll stocks with sheet gutters, printing order and rotation options, and retailer identifiers as printable fields, so a label can carry a retailer-specific SKU or UPC alongside the Endless one. Company-wide saved recipes let a label configuration be reused across the team, and can be created, updated, and archived.

Improvement
Sales Platform

Carton Labels: The Printed PDF Is Filed On The Order

Generating carton labels for a fulfillment downloaded the PDF to the browser and nowhere else, so the compliance artifact lived on whichever laptop the packer used rather than on the order.

The generated PDF is now filed in the order’s Documents section alongside the rest of the order’s files. The file name comes from the fulfillment number, so regenerating labels replaces the existing document instead of stacking copies. Filing happens in the background, so the confirmation says the labels downloaded and the document is on its way — give it a moment before looking for it under Documents.

Feature
Sales

Cancel A Shipment To Reopen Its Fulfillment

Correcting a shipment that shouldn’t have been reported meant asking support to walk the state back. Fulfilled fulfillments couldn’t be cancelled, and shipments couldn’t be undone once they existed. The path forward for a mis-shipped order was manual.

Every active fulfillment shipment card now has a Cancel Shipment action. Cancelling it returns the fulfillment to In Progress so the shipped work can be walked back or fulfilled again, and the shipment stays in fulfillment history rather than disappearing. A confirmation dialog explains the outcome before the cancellation runs.

Cancelled shipments drop out of current coverage, shipment costs, exports, and shipped metrics, so an accidental report doesn’t skew the numbers. Cancel Fulfillment on the fulfillment itself stays hidden once a fulfillment has shipped; the shipment is the entry point for reversing shipped work. Shipments reported through an integration follow the same rules: an integration-reported cancellation now records a cancelled shipment rather than removing it.

Feature
Supply

Purchase Orders: Expected Ship Dates On Every Line

A purchase order used to carry one set of dates for the whole order, which forced buyers to keep partial-ship schedules in a spreadsheet on the side. Each PO line now has its own Expected Ship Date, and the PO Details tab is reworked around expected and actual milestones. Header and line dates are independent — setting the header does not push down to the lines.

Fill the lines three ways: type a date directly, copy the header date onto the selection, or calculate each line’s date from its lead time added to a base you pick at run time — issue date, confirmed date, or one you supply. Lines without a lead time come back in a Skipped list rather than failing the action, and every strategy resolves to a concrete date before it is saved, so a later rebuild does not recalculate to a date the buyer never agreed to. The header ship window is derived from the line dates, so an order with mixed dates reads as a range. PO dates now honor clear, set, and omit correctly for every date including Payment Due, and both the CSV export and import carry the Expected Ship Date columns.

Feature
Supply

Purchase Orders: Import And Export Every Field An Operator Can Edit

Bulk-editing a purchase order’s dates or status meant opening the orders one at a time, because the importer covered about half the fields on a PO. Every operator-writable field is importable now, and the default export lines up with the import, so a file can be exported, edited in a spreadsheet, and re-imported without remapping.

The importer accepts all ten header dates, Short Description, and PO Status, under the labels the UI uses. PO Status offers every value the status control offers, and a status set through the import records the same history row, timeline event, and log entry as one set by hand. Suppliers resolve by handle rather than legal name — the supplier export and import both carry a Handle column and existing suppliers are filled with a slug from their name, so there is a short value to type instead of reproducing “Acme Widgets & Sons, Incorporated” exactly. A handle that resolves wins over a stale name, and one that does not resolve is a row-level error rather than a silent fall back to a different supplier. A blank cell leaves the stored value alone, and a renamed column errors and names its replacement.

Dates export month-first with a four-digit year, which is what survives a spreadsheet save. One behavior change reaches beyond the importer: a purchase order’s own payment terms and incoterms no longer inherit from the supplier’s defaults when the incoming value is blank, so an update or import that clears the field keeps it clear. A new PO still inherits, having nothing of its own to keep.

Improvement
Integrations Sales Products

QuickBooks Integration: Native Shipping, Payment Terms, And Better Matching

Sales receipts and invoices put freight on QuickBooks’ own shipping field rather than on a line item, so document totals separate merchandise from shipping the way QuickBooks expects. A setting on the integration controls whether Endless uses that field, and saving it checks what your QuickBooks account reports — turning it on for an account that has the field off is refused at save time rather than failing on the next push. Item descriptions are no longer sent on receipts and invoices; the product name is what appears on the document.

Two new settings set defaults for what Endless sends: default payment terms on invoices, and a default deposit account on sales receipts. Leave either empty and QuickBooks applies the customer’s default or Undeposited Funds. Both can be overridden per document from the accounting card on an order, and a document that inherits shows the default by name — “Net 30 (default)”. Pushed documents carry line descriptions from the accounting item’s sales description, falling back to the SKU. The Send button is now Push To QuickBooks, the Sent To QuickBooks badge opens the document directly in QuickBooks, and an Items Linked badge in the card header, with Linked and Unlinked badges per line, says whether every line resolves to an accounting item.

Importing matches better in two places. A product whose first mapping field is ambiguous is resolved by a later mapped field when the two agree; a genuine conflict stays unlinked and is written to the integration log rather than silently skipped. Customers and vendors match on display name, which is what QuickBooks uses to keep records unique, so a record sharing an email address with another one imports instead of being dropped. Run Import Terms once per QuickBooks integration after this deploys to fill in terms imported earlier.

Improvement
Platform

Tariffs Tool: HTS 2026 Revision 17 And August Updates Feed

The embedded tariffs tool is up to HTS 2026 Revision 17, so classifications and duty rates match the latest release the ITC published. Three August news items missed on the primary Federal Register and USTR sweep are added to the tool’s Updates feed after being verified against official sources.

Feature
Supply Inventory Integrations

Veracore: Send ASNs, Pull Received Quantities, And Track Lots

Veracore now handles the full supply-shipment loop. A shipment sent to a Veracore-backed warehouse posts as an expected-arrival record, and the key Veracore returns stays on the Endless shipment for reconciliation. Received quantities come back through Veracore’s Expected Arrivals report on the same daily schedule the other warehouse integrations use, and a shipment closes when every line is fully received. Veracore’s owner ID is derived from the System ID already on the integration, so there is nothing new to configure. A missing System ID or Expected Arrival Date is reported before the send is attempted rather than as a generic failure afterwards, and re-sending the same ASN is safe.

Veracore integrations also get a Lot Tracking toggle. With it on, each ASN line sends the shipment item’s lot number as the product version Veracore reads, so a receiving warehouse keeps the lot on record. Pull Inventory branches on the same flag: lot-tracked accounts submit the Product Detail with FIFO report and each SKU version is mirrored into its own warehouse location, with Default Available zeroed so a versioned SKU is not double counted. Non-lot-tracking accounts are unchanged, and a partially versioned account still reconciles — rows with a blank version fall back to a single total on Default Available.

Feature
Products

Bundles: Set Decomposition Behavior On The Product

Decomposition — whether a bundle ships pre-made, decomposes into its components, or refuses to decompose at all — used to be a single setting on the fulfillment plan. That forced every bundle on a plan to behave the same way, so a traditional kit and a virtual bundle could not sit on the same order without a plan swap.

Every composable product now carries its own decomposition setting on the Relationships tab, next to its component list. Four options:

  • Use fulfillment plan default — the current behavior. Defer to whatever the plan says.
  • Never decompose (require pre-built inventory) — a finished unit or nothing.
  • Use pre-made if available, otherwise decompose into components — pre-made stock first, then decompose when short.
  • Use pre-made if available, and only decompose if components are in stock — pre-made stock first, then decompose only when components can cover the shortfall.

A product’s setting always wins over the plan, including an explicit Never against a plan asking to decompose. The plan is only consulted when the product is silent.

The two inventory numbers the decision actually turns on sit right beside it — the unallocated stock “use pre-made” draws from, and the available-to-make that “decompose into components” draws from. Component rows now show available-to-allocate per SKU, so an operator can see the stock behind each branch of the rule.

The setting is on every composable product type, aliases included. Manufactured products default to Never rather than inheriting a decomposing plan, so a base item with a released bill of materials no longer ships its raw components in place of the finished good. Existing products with no setting keep their previous behavior exactly — the plan default still applies.

The products export and CSV importer round-trip the setting losslessly. A blank cell leaves the value alone; Use fulfillment plan default is the only way to clear a product back to the plan from a spreadsheet.

Feature
Platform

Documents: Tag And Filter By What Each File Is

Documents attached to a record used to be a list of filenames — usually whatever the supplier’s system produced — so a Bill sat next to a Packing List with no way to tell them apart at a glance and no way to narrow the list.

Every attachment now takes an optional short tag. Set it once from the row’s edit icon and pick from the tags already used on that record type across the company: the fourth PO you open offers Invoice, Packing List, BOL, and Specs on its first upload. Type to search, hit Create when nothing matches, or clear the tag with Remove. Every click saves and closes.

A filter above the list scopes the visible documents to one tag, with Untagged shown when the record has both tagged and untagged files. The tag itself renders as a badge next to the filename so the list reads as a set of categories rather than a stack of file names.

Tags are per-record, plain text, and capped at 50 characters. Orders, products, purchase orders, supply shipments, and suppliers all get it in the same shape. A read-only record — an archived PO, a non-editable product — shows the badge without the edit control.

Improvement
Sales

New Orders Default To Pending Payment Instead Of Paid

An order that arrives without an explicit payment status now defaults to Pending. The old default was Paid, which had the order claiming a payment that had not been confirmed. This covers orders created by hand and orders ingested from an integration that arrive without a status. An order that carries an explicit payment status — set by an operator, sent by an API caller, or supplied by an integration — is kept exactly as sent.

If a fulfillment profile has a transition that requires Paid to advance, the payment status can still be changed on the order or through the API.

Feature
Integrations Products

Business Central: Publish Products, With Real Field Names And Partial Pushes

Business Central appears on the listings surface with product publishing available. The publishing table reads its rows from the integration, and each row shows the caption an operator sees in Business Central — Search Description, not Search_Description. Fetch Attributes and Auto-Map are on the attribute mapper, so a field is picked from a live list instead of typed, and a saved mapping shows up in the publishing table without a page reload.

A push no longer loses everything to one refused field. The item card write is a single request, so any field Business Central rejects used to take the whole card with it. The push now reads the refusal, drops the field it names, and retries with the rest, up to four rounds — what lands is every field Business Central accepted, plus a note on the product naming what was refused and why. Four more Endless attributes pair to fields on the card and are ready to enable: landed cost, packaging URL, specs URL, and shipping weight. Each is off by default, because another system may already be writing those fields; turn one on when you have decided Endless is the source. When a call does fail outright, the operator reads Business Central’s own message — a wrong or blank environment, bad credentials — rather than a generic parser error.

Feature
Sales Integrations

Sales Orders: Delete And Reimport

The two halves of “wipe a bad copy of an order and pull a fresh one” now line up.

Import from your integration, directly from the Sales Orders list. The Add control on the Sales Orders list is a menu now — Manual Order or Import From Integration. Import From Integration takes the external order reference you already recognize (for example, a Shopify order name like #1104) and shows every match across the integrations you have connected, with each one labelled as either already in Endless or ready to import. Picking a match already in Endless takes you to that order; picking a new one pulls it in through the same import path new orders normally take, and refreshes the list when it lands. The first-run empty state on the list carries the same import action. The field reads Order reference and, once you pick an integration, an optional hint tells you what to type — for Shopify, either the displayed order number (including any prefix or suffix your store uses) or the full Shopify Order GID; both are accepted. Only integrations that support lookup and single-order import appear in the menu; today that is Shopify.

Delete, including legacy orders. Deleting an order now covers legacy orders too, using the same typed confirmation and the same background progress the newer flow uses. Delete works from an individual legacy order’s detail page and from the Actions menu on the Sales Orders list, including bulk selections and mixed sets of legacy and newer orders. Two small races on the delete path have been cleared up along the way: QuickView no longer briefly flashes “Order not found” after a delete when a background refresh was still in flight, and a bulk delete no longer errors when a sales-channel lookup is still finishing on a row you are removing.

Put together: find a bad copy, delete it, look it up again by its integration reference, and pull a clean one in — from one list, without leaving it.

Improvement
Sales

Shipment Financials: Line Weight And Volume Fill In From The Product

A shipment line now shows a weight and a volume whenever the product carries the measurements, rather than only when the master carton was complete. Lines that used to come out blank can be reviewed, and shipping cost distributes across them by weight or by volume again.

Each line takes the first measurement it finds: what is stored on the line, then the carton recorded on the shipment, then the carton on the purchase order, then the product’s current master carton, then the product’s shipping dimensions, and last its base dimensions. A carton supplies a volume only when it has a length, a width, and a height. The figure on the line is the one the cost distribution uses, so what you review is what allocates.

Feature
Sales

Shipment Item Costs: See Them, Refresh Them, In Bulk

Every shipment now carries a stored unit-cost valuation on each line, resolved from your product’s cost data the first time the shipment line is reported and held stable through normal shipment updates. The valuation walks the fulfillment item’s supplier cost first (including an explicit zero, so a free item stays free), then the product’s landed cost, then its unit cost, and is left null when none of those is available — a missing cost is called missing, rather than filled in with a zero that would look like real data.

A new Shipments tab on a sales order gathers every shipment across every fulfillment on the order, grouped by fulfillment order and linked back to it. Each shipment card shows shipped date and tracking on a summary bar, with Items, Details, and Metadata tabs underneath. The Items tab lists the shipped products, unit costs, extended line costs, shipping cost, and the shipment’s total cost. When any line is missing a compatible cost, or currencies do not match, the totals stay marked Incomplete rather than showing a number that would not stand up. A Refresh costs action on each shipment recalculates the current values behind a short confirmation, so a shipment recorded before its cost data was ready can be re-valued as soon as the data is. Externally reported shipments show up with a note explaining line-level costs are not available for them, and the same lines and costs render on the fulfillment order page.

A Refresh Shipment Costs bulk action on the Sales Orders list runs the same refresh across the orders you have selected. It confirms that historical costs may change before it starts, queues in the background so you can leave the page, and sends a notification when the run finishes with counts for fully costed, still-incomplete, skipped, and failed orders. Orders with no active shipments are skipped, and lines with no available cost data are left incomplete.

Improvement
Integrations Sales

Shopify Integration: A Big Round Of Fixes And Simplifications

A broad pass across the Shopify integration. Everything below is live and connected accounts benefit automatically.

Order sync is one setting, starting from here. Import & Update Orders replaces the topic-level toggles and a legacy Manage Orders Locally setting. Turning it on connects the webhooks and starts polling from that moment, so a first-time connection stops pulling a day of back-history in as if it were current activity, and a late webhook against an older order that was never in Endless no longer conjures it into the list. New orders carry the store’s processed date as their Endless order date instead of ingest time. Manual and bulk import are still the way to bring history in.

Cancellations behave the way you’d expect. Canceling in Shopify now cancels a fulfillment that is still in draft or allocated; if fulfillment has moved past those states, Endless refuses the source cancellation instead of unwinding work in flight. A Shopify replacement — original canceled, new one issued — retires the canceled work at import instead of carrying it in as active. Historical orders that were already canceled before Endless first saw them come in canceled directly, with none of the “new order” side effects. Any canceled order with no successful fulfillment lands canceled the same way. On active orders, line quantities reflect what actually happened: units shipped plus units still owed, with pre- and post-fulfillment refunds netting out correctly.

Multi-fulfillment imports land in full, or fail cleanly. Importing an order with more than one closed fulfillment used to partially succeed — the first transferred authority to Endless and the rest failed silently. Closed fulfillments now stay ready until their shipments come across, and the order completes when the recorded shipments cover every unit; partial coverage stays incomplete, and a failure surfaces as a real error. On the related failure mode, closed and non-handoff fulfillments now ingest before any in-progress one takes authority, so an in-progress fulfillment no longer rolls the whole import back.

Inventory and SKUs track the current state. When Shopify is a building’s inventory source, physical stock in Endless follows what Shopify records as on-hand instead of what it reports as available, which had made items look emptier than they were and could send Endless below zero. Damaged units still go to Default Unavailable and are no longer counted twice. Order lines now come in with the current variant SKU when Shopify has one, so a rename in Shopify no longer leaves the sales-order line and its fulfillment inventory item pointing at different SKUs for what is the same variant.

Support: bulk historical order import. A preview-first support task can now pull a date-bounded cohort of Shopify orders back through the normal ingestion pipeline for account recoveries, skipping anything already in Endless.

Feature
Products

Product Labels: Print UPC Barcodes At The Unit Level

A Create Product Labels tray prints GS1-conformant UPC-A and EAN-13 barcodes for your products — the unit-level companion to the carton label generator. Fitting follows the printed spec: 80–200% magnification, full bar height when possible, and truncation only when height alone forces it and never at the expense of the text you asked for.

Stock options cover the common roll and sheet sizes, including a few that can’t carry a conformant barcode (flagged as such, since the generator can still print other things onto them), plus a custom size for anything not listed. Content is a reorderable list of fields — SKU, price, brand, country of origin, dimensions, weight, custom text, or any of your product attributes. Settings stick between sessions. Output is a PDF, either downloaded or sent straight to the browser print dialog, with per-product copy overrides and a calibration offset for squaring sheet stock up to a printer’s actual feed.

Improvement
Integrations Sales

Accounting: Simpler QuickBooks Connect, Per-Channel Customer Mapping

Two changes this week on how Endless talks to your accounting integration.

Connecting QuickBooks Online no longer asks you for an app API key and secret. Every Endless customer uses the same Endless-side QuickBooks connector app, so those credentials are managed for you now. The connect flow just walks you through picking the QuickBooks account you want to link.

You can pick which accounting customer a sales channel bills to. Sales Channel Settings and the Data Mapping tab render the same picker against the same mapping, so a change made in one place shows up in the other. For an accounting integration the picker chooses by name and stores that name alongside the reference, so a rename in QuickBooks does not leave a stale label in front of the right customer. Every order financial on the channel inherits that customer by default, and you can override it on a single document from its Accounting tab; the field is labelled to distinguish an inherited value from an overridden one, and Cancel reverts, Save commits, like every other field on the card. A sent document’s customer can be changed and pushed to QuickBooks — the update path used to copy the remote value and skip the write, so an edit was a silent no-op. Consolidated receipts group by customer as well as by channel and date, so a channel with overridden documents produces more than one receipt per cadence where it produced one before. When a channel has no accounting route, or more than one, the override field is hidden with a short explanation instead of listing customers from an arbitrary integration.

Improvement
Integrations Sales

Fulfillment History Keeps Its Lines

An order can now hold fulfillment lines that don’t line up with a current order item. When an integration records a replacement — one sales-order line but two real fulfillment orders and two shipments — the historical shipment stays visible under the fulfillment it actually shipped from, and the current line still shows the current demand covered by the current shipment. Before this, retaining that historical line would have made the order look over-fulfilled, so it was dropped from history.

On the order detail, a fulfillment line without a linked order item now shows its inventory product — SKU, name, image — instead of a blank row, and is labelled so you can tell it stands on its own. Coverage rules for lines that do link back to an order item are unchanged, and outbound integration planning skips standalone-only work cleanly.

Feature
Integrations

Connect Through Celigo

Celigo is a first-class integration now, listed on the integrations screen and available as a filter on the integrations list. Behavior that had been sitting inside a generic custom sales integration for Celigo has moved into the Celigo integration itself, and a task migrates any existing Celigo setups over so nothing needs to be reconnected.

Feature
Integrations Sales

Ship With Mintsoft

Mintsoft is a connected fulfillment integration now. Set it up from the integrations screen with your Mintsoft username and password, map its carriers to yours, and pick which warehouses to route through it. Endless sends shipment requests, and shipment updates come back on the normal pull.

Feature
Integrations Sales

Ship With Shipfusion

Shipfusion is a connected fulfillment integration now. Set it up from the integrations screen: connect, map its carriers to yours, and pick which warehouses to route through it. Endless sends shipment requests, and shipment updates come back on the normal pull.

Fix
Platform

Roles: Permission Changes Take Effect Without A Sign-Out

Adding or removing a role for someone who was already signed in used to need them to sign out and back in before the app noticed. Controls the server would now let them use stayed hidden, and controls they had lost stayed visible — until they re-signed in. The app now checks each person’s current roles when their tab regains focus, so a change made in Team & Roles takes effect on the next look at the tab, with no reload and no re-sign-in.

Roles are also scoped to the company you are viewing. Someone who is an admin of one company and an operator of another sees admin controls only in the company where they hold that role, instead of seeing them in both and then getting a Not authorized message from the server.

Fix
Sales Integrations

Carton Labels Print On Closed Fulfillments

Carton labels can now be generated on a fulfillment already closed by its source integration. The label itself had always been made — the failure was in a step running after it, which records when labels were generated and refused any closed fulfillment. So a packer saw an error, and the label sat on the fulfillment rather than being handed back. On an auto-fulfill channel every fulfillment is closed by the time a packer reaches the containers screen, so the button did not work there at all.

Labels now print through and stay on the fulfillment to reprint from the containers screen.

Improvement
Sales

Draft Sales Orders: Products Come In At Their Resolved Price

Adding a product to a draft sales order now fills in a starting price for you. The price is the applicable sales-channel tier for the item and the quantity you are adding, and falls back to the product’s MSRP when no channel tier applies. The line stays fully editable — changing the quantity or the sales channel afterward leaves the price you have set. Products with no configured price come in blank instead of at zero, and a real zero price is still respected.

Improvement
Integrations

Packiyo: Simpler Warehouse Mapping Setup

Setting up a Packiyo integration no longer asks for a 3PL Customer ID. The warehouse picker lists every warehouse on the connected Packiyo tenant, and you map a building to the one you want. Any value still stored on an existing integration is ignored.

Fix
Sales Platform

Sales Orders: Search Runs Fast On The Largest Catalogs

The orders list search is faster and steadier. Filtering by an order number, a customer name or email, a SKU, a shipping name, a tracking number, a tag, or a sales channel returns in about a second on any catalog size, and the list stays responsive around it — a slow search no longer drags the rest of the app.

Before, on the largest catalogs, a keyword search worked through the whole order set and could take up to a minute and a half. Every order update refetched the list, so searches were stacking up in the background as orders arrived, and the slowdown reached beyond the list to the rest of the API — on 2026-08-20 that came out as a period of site-wide timeouts. The search now works through each part of what you type — order number, customer, item, tracking, channel — on its own path, and three of those paths (customer name on the shipment, product name, sales channel name) which used to have no fast lookup now have one.

Fix
Inventory Sales

Canceled Orders No Longer Count Toward Recent Order Totals

The last-90-days order figure, and the days of supply it feeds, were counting canceled orders. The check meant to leave canceled orders out was looking for a state value the records no longer use, so it matched nothing and let every canceled order through — around 3,240 canceled orders in the last 90 days. Those figures now exclude canceled orders, so recent-order totals and days of supply reflect only orders that still stand.

Feature
Sales

Delete Orders

You can now permanently delete an order, one at a time or in bulk. Delete Order sits in an order’s Actions menu, and Delete Orders is in the bulk menu on the orders list. Deleting asks you to type the order number to confirm, or “DELETE N ORDERS” for a selected set, and a bulk delete runs in the background with progress you can follow.

Deletion is permanent and cannot be undone. It removes the order and its related fulfillment and inventory records from Endless. The source the order came from is untouched, so an order can import again later unless you stop it at the source. This is available on the newer sales orders.

Fix
Platform

Exports: Progress Now Shows On Every Export Type

A running export now shows live progress on its Inbox card for every export type — products, suppliers, inventory (all three granularities), purchase orders, demand, historical inventory, historical shipments, and composition lines. Before, only order-family exports were reporting progress, so every other export sat at “Starting export” from the moment it began until the file was ready. A long-running export in one of those types could also be marked as failed while it was still running, because the timeout that catches a stalled export was reading the silence as a stall.

Two exports that had no upper row limit — historical shipments and composition lines — now honor the same row cap as the rest, so a very large export completes with a bounded file instead of running the row count up to whatever is on hand.

Improvement
Products

Media Tools: A Few Refinements

A handful of small improvements across the media tools:

  • Find Images has select-all and clear toggles per product row and across the whole review, with a live count of how many images are selected. Every candidate tile shows a keyboard focus outline as you tab through the grid.
  • The Associated Products search inside the image editor now floats above the page, so the whole match list stays inside the viewport instead of being clipped by the sidebar.
  • In the image editor, Save and Cancel stay pinned to the top of the panel as you scroll, and Archive sits below a divider at the end of the panel and says why it is disabled when it is.
Feature
Products Supply

Create Carton Labels From Products

Select products in the product list and choose Create Carton Labels from Bulk Actions, or use the same action on a product’s detail page, to generate master and inner carton labels as a PDF from each product’s packout data. Each file holds one carton type, in 6x4 landscape or 4x6 portrait. The GTIN prints as a real ITF-14 barcode at the size the GS1 spec requires, and the on-screen proof shows the label at print size, so what you approve is what prints. Products missing a unit count or GTIN are listed first and can be fixed in the same tray before you generate.

The creator opens as a dialog, so menus and selects on the page behind it stay usable while it is open, including fulfillment-rule menus. This is separate from the GS1-128 carton labels generated on an EDI fulfillment’s Containers tab; those still work the same way.

Feature
Sales Integrations

Pull A Fulfillment Back From The Warehouse Holding It

A fulfillment sent to the wrong warehouse can now be pulled back from the order screen. Revert to Allocated has always been there for a ready fulfillment; it now also appears on a fulfillment that is already out, and asks the system holding it to cancel first before releasing the fulfillment inside Endless.

When the warehouse or system on the other end cannot accept a cancellation, the action turns into a question rather than a refusal. Confirming drops the link — the fulfillment stops counting as sent and can be routed again, edited, sent from a different building, or shipped later — and if the outside system was in fact carrying a copy, any later reconciliation reaches you through company notifications. Endless is the record either way.

The cancel dialog now tells the truth about what the outside system can do. It used to say “the external system will be notified” whatever was on the other end, which was false for the four integrations that never accept a cancellation. It now reads whether cancellation is available and says one of three true things: nobody outside holds a copy, they will be told, or they cannot be told and the link will be dropped.

Some fulfillments had already accumulated in a stuck state because those four integrations declared cancellation as available without wiring the action, so a background failure never reached the user. Those integrations now read as “cannot cancel” up front, and this flow is the way through them.

Feature
Sales

Shared Fulfillments: Download A PDF, Sender Branding On The Page

A shared fulfillment page now has a Download PDF button. The download carries the same items, destination, supplier costs, carrier and service, and notes as the page on screen, paged over as many sheets as it takes to fit. A recipient forwarding the fulfillment to a supplier, a warehouse, or a filing system can save or print a copy without keeping the web page open.

The header and footer of a shared page — and the exported PDF — now carry the name of the company that sent the link, so a recipient sees who it came from. The password prompt on a protected link used to read “link not available,” which was misleading; it now says the link needs a password.

Fix
Integrations Sales

Get Shipment: Manual Repair Records Line Items

The Get shipment action, used to re-record a shipment from the warehouse when the periodic poll missed one, used to record the shipment with no line items and mark the fulfillment fulfilled outright. That left a repaired shipment indistinguishable at a glance from one the poll recorded properly — the record read as complete on the fulfillment, but what actually shipped could not be seen on it.

The action now records the same shipment shape as the poll, with the line items on the shipment, and lets the fulfillment’s state follow from what was covered. A partial shipment repaired by hand leaves the fulfillment in progress instead of forcing it to fulfilled, so a partial repair reads correctly on the order.

Applies to newer sales orders. Older sales orders are unchanged.

Feature
Platform Integrations

AI Assistants: Progress Toward A Public Launch

Work is underway to let Endless connect with AI assistants like Claude and ChatGPT. The connecting, sign-in, and permissioning pieces are in place, and answers to a range of everyday order and account questions are being wired up. It is not open for general use yet — the pieces are still coming together internally, and access will open when we are ready to say more.

Fix
Integrations Products

QuickBooks: Push To Accounting Updates A Linked Item

Push to Accounting can now update a linked item in QuickBooks Online. Before, an update could be issued and Endless would report it as pushed, but nothing in QuickBooks changed. Update requests now include the fields QuickBooks requires, preserve the fields Endless does not map, and retry once against the current version if QuickBooks has changed the item since the last import. An item without a sales or a purchase side is refused up front instead of failing on the way out. A refusal that QuickBooks itself blocks — clearing the income account on some existing items — now reaches the operator as a failure instead of a green result.

Fix
Platform

A Tab Left Open Overnight Signs You Out

A tab left open past the point where your session expires now takes you to the log-in screen when you return to it, instead of sitting there with every request failing behind the scenes. Come back to a sleeping tab, sign in again, and carry on.

Nothing changes while you are working. Sessions last exactly as long as they did before.

Improvement
Sales

Order Item Changes On The Timeline

Adding, removing, or updating an item on an order now records a before-and-after entry on the order timeline. Both bulk edits and single-line edits are covered, and each entry names the item, the fields that changed, and the values on each side, so the timeline explains what changed without opening the item. The existing backfill task for older item edits picks up the same format.

Improvement
Integrations Sales

ShipStation: Full Error Response On The Timeline

When ShipStation refuses a new order, the timeline entry for the failure now carries the full response from ShipStation under the More details row, alongside the short error message. The visible line stays concise, and the underlying reason — which used to be discarded, leaving customers with only “no orderId returned” — is there when you need to see it.

Fix
Integrations Sales

Extensiv: Partial Shipments Recorded, Stuck Fulfillments Cleared

Extensiv fulfillments used to be marked as fully shipped the moment Extensiv returned a tracking number, so a partially shipped order looked complete in Endless and was reported complete to any downstream sales channel. Endless now records what each Extensiv package actually contained as a shipment on the fulfillment, and the fulfillment stays in progress until every item has shipped. Inventory is committed once every item has shipped rather than on the first tracking number, packages without a tracking number are recorded rather than dropped, and re-polling a fulfillment without changes leaves it alone, so the 15-minute Extensiv poll no longer duplicates shipment activity over its 24-hour visibility window. Miscounted orders can be repaired one fulfillment at a time; orders already reported complete to Shopify cannot be corrected there, since Shopify does not accept shrinking an existing fulfillment.

Extensiv sometimes leaves the SKU off a package content and names the line through its own order item id instead. Endless resolved contents by SKU alone, so those contents matched nothing and no shipment was recorded — the fulfillment stayed in progress after the order shipped, with nothing on the log to say so. A package content now falls back to the Extensiv order item id to find the matching line, where the SKU is reliably present. A content that still cannot be resolved is reported on the fulfillment’s log with its Extensiv line rather than dropped, so a mismatch shows up on the order. A background sweep re-ingests already-stuck fulfillments once the fix is deployed. It checks each candidate against Extensiv’s API, only touches orders that report shipped quantities, paces its calls against Extensiv’s rate limit, and reports throttled orders so the next run picks them up.

Feature
Integrations Sales

EDI Fulfillments: Real GS1 Carton Labels

Generate Labels on a fulfillment’s Containers tab now produces real scannable GS1-128 carton labels for retailers with a GS1 label mapping. What the button rendered before looked like a carton label and carried no barcode symbology, so a carton sent against it was refused at the retailer’s dock. Labels are requested once per non-archived container on the fulfillment, ordered so the carton number on the label matches the “Container N” shown in the packer’s tab. Fulfillments with no retailer label mapping keep the local label they always used, so nothing changes for anything outside EDI.

Before a batch is sent, cartons without a valid GS1 SSCC are refused and the missing codes become the primary action, so an operator gets a fix rather than a disabled button. When a retailer expects GS1 labels but the account is not set up to generate them, the action blocks and explains rather than substituting a local label the retailer would reject. Once labels exist the menu item reads Regenerate Labels.

Feature
Sales Integrations

Working Imported Orders Without Claiming Authority

The Claim Authority and Reset Order controls are gone from imported orders. You can edit sales-order details, add and change fulfillments, and cancel the order without first taking authority away from its source integration. Fields the source integration manages carry a caution and a save-time confirmation on the fields that use them, so an edit that the source may later overwrite goes through with a warning rather than as if nothing had changed. The fulfillment plan follows the source until a fulfillment change is made in Endless or work begins on it; from that point Endless drives the plan and the activity timeline records the handoff. Canceling an in-progress order cancels every unfulfilled fulfillment order under it, preserves shipments that already went out, and stops the source from restoring the plan on its next pass.

Sales and fulfillment order details are reshaped around the new default. Internal notes live on their own Notes tab with a count badge, and the tab you had open stays selected as you move next or previous through the orders list. The two separate banners at the top of an imported order — one for source-managed ownership, one for fulfillment sync — collapse into a single sync card that names the source, whether it is still sending updates, and whether the fulfillment orders match what the source said. Fulfillment cards default to expanded on active fulfillments and collapse to their items list once fulfilled or cancelled. Advanced view splits an active fulfillment across tabs for Items, Details, Metadata, Timeline, Shipment, and Containers; simple view shows items only. Blockers on a fulfillment list every unmet condition rather than only the next one, with a per-condition Resolve button next to each. The sync card no longer overloads the word “blocked”, and the copy on bulk Reload from source, refresh toasts, and the timeline explains changes in terms of fulfillment orders rather than an internal fulfillment plan.

Shopify keeps sending updates and shipments back after a local change. A Shopify order used to stop accepting webhook updates the moment an Endless user claimed it to route a fulfillment somewhere — cancellations, quantity changes, and other source-side edits were rejected without a trace on the order, and only surfaced later when the mismatch was investigated. Routing a fulfillment no longer takes ownership of the order itself. Shopify keeps sending order-level updates and Endless keeps applying them, while the routed WMS remains the one that reports the shipment. A refused webhook update now shows on the order timeline instead of disappearing, so a rejection is visible where the update would have landed. Canceling an order also refuses up front when one of its fulfillments cannot be modified by the person acting, rather than partially applying and leaving the order in a mixed state. Separately, a Shopify-owned order shipping from a building that had a Default WMS attached was failing to close through Shopify — the warehouse default was being treated as if the order had already been re-routed away from Shopify, and the ship confirmation was rejected on the way back in. Shopify now keeps the fulfillment until you re-route it explicitly or hand it off to a downstream system, so the close-and-ship flow completes even when the building has a Default WMS set; explicit re-routes still transfer control right away.

Improvement
Inventory Integrations

Inventory Export Setup: Copy Now Names Both Controls

The inventory export setup copy on Rithum, Walmart, Shopify, Amazon FBM, Skubana, and Faire now names both switches that decide what gets sent: the integration-level permission that controls whether inventory exports at all, and the per-building inventory settings that control which building’s stock counts toward it. The previous copy only mentioned one, so a channel that looked configured to export could still send nothing because no building was included.

Improvement
Supply Sales

Carriers: Royal Mail Added

Royal Mail is now selectable as a carrier alongside the rest of the built-in carrier list. Pick it from the carrier picker anywhere a carrier is set.

Feature
Sales Supply Integrations

Retail EDI: Split Orders And Pack Cartons By Store

A retail EDI purchase order that names a per-store breakdown now splits into fulfillments that carry that plan, and the containers tab knows how to pack against it. Auto-Pack gains a By store (retailer plan) strategy — one container per destination store, pre-filled to the retailer’s quantities, selected by default when the fulfillment carries a store distribution. Before anything is generated it lists shortfalls, identifiers it could not resolve, and units the retailer named no store for. Non-EDI orders and retailers that ship to one destination see no change — the strategy, warnings, validator option, and pick list export all depend on the distribution being present.

Every carton carries its mark-for store as a badge, and a Store column appears on the summary tab. Contents flagged against the retailer’s plan — “Store 0204 expects 25 units”, “Not on store 0201’s plan” — sit on the specific item row that caused them, and the checks aggregate across a store’s cartons so a surplus on one SKU does not offset a shortfall on another. The Validate Containers dialog gains a Pack for Store Quantity option that requires every store’s cartons to match the plan before Close Containers is allowed; the option turns itself off on fulfillments without a distribution and never persists true. Export Store Pick List (DC, Store, SKU, UPC, Product Name, Quantity) is offered whenever a fulfillment has containers, including on cartons an operator assigned stores to by hand.

Rollout note: takes effect per integration once the destination grouping is set on the routing strategy, store codes are added to the integration’s location code mapping, and the trading partner’s live template is updated to emit the store distribution.

Improvement
Products Platform

Media And Images: One Upload Dialog, Broken Images Fixed

Uploading images from the Media library and from a product page now uses the same dialog. The two were built separately and looked and worked differently — different drop areas, different copy, and one started uploading on drop while the other staged files behind an Upload button. They now share the same shape and per-file progress with the filename, and stay a consistent size whether the page already has images or not. The Media library dialog starts uploading as soon as files are dropped, and you can add a second batch before continuing on to link them to products. Freshly uploaded images no longer render as a broken placeholder — 271 images in production across seven companies had been stuck that way — because uploads now match up through the upload request that started them, so the client-side row and the server-side confirmation always land on the same image record. And under the Associated Products heading, the search box now names what you can search on and what happens when you pick a result, so it reads as the way to add an association instead of a filter over the ones already there.

Behind the scenes, image-upload webhooks now record activity through the same path as other actions, so duplicate deliveries no longer create duplicate rows, and image archive and bulk-upload actions show up in the activity feed. Archived timestamps record when the archive happened, so the value stays stable if the record is rebuilt. A few smaller cleanups landed alongside: unused arguments dropped off four of the five media actions that never read them, and a redundant ownership check that the caller already guaranteed came out.

Improvement
Supply

Purchase Orders: Empty-State Import, Date Handling, And Editable PO Number

Four updates to creating and importing purchase orders.

Import from the empty state. The purchase orders empty state only offered Create PO, so a company with no purchase orders yet had no way to reach the CSV importer — the import trigger only appeared in the list toolbar, which stays hidden until at least one PO exists. The empty state now has an Import Purchase Orders action alongside Create PO, matching how Products and Suppliers already work.

Month-first dates now import. The importer already advertised MM/DD/YYYY — the default Excel and Google Sheets export — as an accepted format, but read every value day-first. A single such date on a purchase order upload failed the whole file; on demand and historical uploads the same values were silently recorded as the wrong day. All four date-bearing CSV imports now read month-first dates correctly. Day-first values like 25/08/2026 no longer parse, and demand or historical data imported before this fix may carry dates from the earlier misparse.

Ship Date is a purchase order import column. The Ship Date on an existing PO already round-tripped through the export, but the importer would silently drop it on re-upload; it also had no column on new POs, so backfilling historical purchase orders that had already shipped meant hand-editing every one after import. Ship Date is now part of the purchase order import on both create and update rows, and the import UI validates it against the same rules Endless uses everywhere else, rather than whatever the CSV service dashboard happened to be configured for.

The PO Number on a new order is editable. The PO Number at the top of the New Purchase Order drawer is a labelled input. The placeholder shows the number the server would assign next, and the helper text reads “Leave blank to auto-generate”. Type over the placeholder to set a specific number, and the format is validated against your company’s PO number template before save. Leave the field blank and the server assigns the next available number when the order is created, so two operators creating purchase orders side by side each get the next number in sequence. Before this change the PO number rendered as a plain heading — it read like a value already fixed to that order, and the number shown was generated on the client, never sent, and never became the PO’s number.

Feature
Integrations

One-Click Import For QuickBooks Online

QuickBooks Online has a new Import All action that pulls your chart of accounts, vendors, customers, items, and payment terms into Endless in one step, so setting up the integration no longer means running each import from a separate menu. Payment terms come in as part of the initial import and no longer appear as a standalone action afterwards. Sending invoices, sales receipts, or product data to QuickBooks before Import All has run returns a clear message that the integration has not been initialized, instead of sending records with missing references and leaving unmatched entries on the QuickBooks side.

Items match to your existing products through whichever product field your item defaults say each accounting field comes from. Tenants whose QuickBooks items are named from the product SKU and coded from the UPC — where the previous match compared against the SKU and then the name and could link almost nothing — now link on the actual mapping. The same rules run in both directions, so a product looked up from the item and an item looked up from the product resolve to the same pair. When two products carry the same mapped value the item is left unlinked rather than attributed to one of them at random. An unlinked product tries to match on demand the next time an operator asks for it, and mass import does the same on the integration-level mapping.

Improvement
Integrations Products

QuickBooks: Map Suppliers To Vendors, And A Safer Push

The QuickBooks Data Mapping tab has a Suppliers table. Each supplier gets a picker that searches your QuickBooks vendors as you type, and selections stage in the table so you can work through several and save them together. Pull vendors re-imports the list without leaving the tab, and a vendor already mapped to one supplier is unavailable in the others, so the same vendor cannot be used twice. If you connected QuickBooks before this, run Import Vendors once so vendors you have already synced appear in the picker.

Two changes on the product header. Push to Accounting asks for confirmation before it runs, rather than overwriting the QuickBooks record on the first click. The Synced to accounting badge is gone: it recorded that a push had happened, not that the two records still agreed, so a product that had drifted still read as up to date.

Sales enabled now defaults on when you apply defaults, matching QuickBooks’ requirement that inventory and service items carry an income account; records created with it off were refused. A company with more than one accounting integration connected can push to the one it names rather than whichever was found first.

Improvement
Platform

Small Interface Polish

Six small fixes across the app.

Product sheet: smoother tab switching and scrolling. Switching between the Key Info, Images, and Relationships preset tabs on the product sheet, and scrolling down a catalog with large product photos, used to stutter — every cell was being rebuilt on each tab change and every image in the row was being decoded whether it was on screen or not. Tab switches, quickview open and close, and vertical scrolling now stay smooth: cells reconcile in place instead of remounting, images decode only when they come into view, and the Images column caps at four thumbnails with a +N overflow label so a row with dozens of photos no longer pulls all of them at full resolution.

Order detail tables sort. Two tables on the order detail view sort now. Order items sort by item, price, discount, quantity, or total; fulfillment items sort by product or quantity. Blank values move to the bottom, equal values keep their original order, and sorting is disabled while you are in bulk edit or single item edit, since those modes need to hold the original row order.

Sidebar collapse preference sticks. The sidebar’s collapsed or expanded state sticks across page loads. Toggling by click or with the ⌘\ shortcut saves the choice right away, and returning from a narrow viewport — where the sidebar auto-collapses — restores the last preference you set rather than an older one. The ⌘\ shortcut is disabled inside Settings, where the sidebar always stays expanded.

Date picker: sized right and stays on screen. The date picker’s day-number grid is the same size as the weekday row and the month/year caption above it. Day numbers had been sitting a step larger than everything around them since the shared calendar was inheriting the browser’s default text size, so the fix touches every date field in the app — Purchase Order Issue Date, Shipment Received Date, and every other picker built on the shared calendar. The popover also no longer sits flush against the edge of the browser window. Opening a date field close to the right edge — the Received Date on the Shipment quickview was the reported case — had been clipping the popover off screen; it now keeps eight pixels of padding from the edge on both sides, so even the wide three-month range picker stays fully visible down to iPad mini widths.

Sales channel picker searches and no longer stops at twenty. The sales channel dropdown used across the app only ever loaded the first twenty channels and had no search, so companies with more than that could not pick their older channels from anywhere — and integration data mappings pointing at those channels rendered a raw ID instead of the channel name. The picker is now a searchable list. It shows the twenty most recent channels by default, searches by name against the server, and always resolves the currently selected channel by ID so the name shows up even when the channel sits outside the loaded page or has been archived. Integration Data Mapping tabs read the channel name straight off the mapping, so archived channels and channels past the old cap render with their real names in place of the ID they used to show.

Product confirmation modals: body copy is the right size. The body copy in the Clone Product, Archive Product, and Unarchive Product modals was rendering larger than the modal title above it. All three share one modal underneath, so the fix lands on all three at once. The description now uses the smaller size that matches the rest of the modal.

Fix
Products

Archiving Large Product Attributes No Longer Stalls

Archiving a product attribute definition used to update every value on every product one at a time. Definitions with roughly 153,000 values could stall out and roll the archive back, so a large attribute could not actually be archived. Archiving is now a single change on the definition itself and hides its values across every product through that change, so a large definition archives as quickly as a small one.

Clearing a value on a product now removes it rather than leaving an archived-empty record in place. Restoring a definition brings back only the values that still exist, and filters, integrations, unit-of-measure conversion, cloning, and value suggestions all follow the parent’s visibility.

Feature
Products

Product Costs: Defaults, Estimates, And Bulk Tools

The three product-level costs — Unit Cost, Landed Cost, and Dropship Unit Cost — read as Default Unit Cost, Default Landed Cost, and Default Dropship Unit Cost on the product sheet, the product detail, purchase orders, bulk edit, and the CSV import and export columns. The new name reflects how the value is used: a default that a supplier estimate can override, entered by a person, and blank if none has been set. Gross margin uses Default Landed Cost when it’s present and falls back to Default Unit Cost, so a product with only a unit cost still shows a margin figure.

The Pricing & Costs section on a product separates defaults from estimates. Default Unit Cost, Default Landed Cost, and Default Dropship Unit Cost sit in editable cards at the top. Below them, a Cost Estimates table lists every estimate — your own or from a supplier — with add, edit, duplicate, and archive on each row, a popover for the labor, materials, packaging, freight, and duties breakdown, and a way to promote a single value from an estimate straight to the matching default. Each estimate can carry an effective date, and Current, Scheduled, and Archived badges show what’s live, what’s queued to take over, and what’s been retired. An estimate no longer needs a supplier attached — the question “what should this cost to make?” is stored directly. Profitability at the top of the page is computed from MSRP and Default Landed Cost, falling back to Default Unit Cost if the landed value isn’t set. Completeness for a product accepts either the full stocked cost set or just the dropship unit cost, so a dropship-only product no longer needs a stocked cost to count as complete.

Product Cost Estimates now round-trip through CSV, supplier costs and internal estimates together. Imports create or update by SKU, supplier, cost type, and quantity tier, and carry lead times and cost breakdowns row for row. Row-level errors call out what did not import. Omitting a cost field leaves the current value alone; blanking it clears it. Unit cost is required and must be greater than zero, and effective date is a supported column. Exports respect the current filters on the Products page and produce a file that can be edited and re-imported directly. The Products list Import and Export actions have also been consolidated behind two menus, each opening a dialog that lets you pick Products, Product Cost Estimates, or Relationships. Command palette, table menu, and first-run empty state all point at the new dialog.

Improvement
Integrations Sales

ShipStation: Full Ship-Notify Pages, Timeline For Failed Shipments, Traceable Nightly Job

The ShipStation ship-notify webhook was reading only the first page of a shipment batch, capping it at 100 shipments per call — anything past the hundredth was dropped with no error and no retry. The webhook now walks every page. Measured in production over the last thirty days, 89 batches exceeded that limit and at least 21,565 shipments never reached Endless. A nightly reconciliation job had been backfilling those shipments once a day, so the missing ones only became visible when that job stopped running. Two guards land alongside: a shipment already recorded with the same tracking number is skipped on repeat callbacks, and voided labels are excluded so a canceled label does not mark an order shipped. When ShipStation reports a shipment that Endless cannot apply to the order, the dispatch step now writes a timeline entry tagged as a ShipStation shipment failure, with the human-readable reason and the technical detail kept apart. Forty-one orders in production had been sitting with the fulfillment marked shipped and the order still in progress, with nothing on the timeline saying why; the run still continues over the remaining shipments and only the failing one leaves a trace.

The ShipStation nightly reconciliation writes a summary log on every run, including runs that find nothing to do, with counters for shipments fetched, orders touched, fulfillments matched, fulfillments reconciled, lookback window, and duration. Fetch failures are logged before they propagate — before, that path sat outside the error handler and left no trace — and each per-fulfillment failure records its own error message. Between 2026-07-25 and 2026-08-02 the job had stopped running and produced the same trace as a healthy no-op run; matched versus reconciled now separates those cases. This change makes the job observable; retry, backoff, and rate-limit handling are separate work.

Improvement
Integrations Sales

Shopify: Push Local Fulfillment Changes, Reliable Reconciliation, Structural Sync

On a Shopify order, the Fulfillments tab opens with a banner naming who currently manages the fulfillment orders — the source or Endless. When Endless holds the order and you have restructured the fulfillments locally — split one, canceled one, added a new one — an Update fulfillment orders button pushes those changes back to Shopify. The sync runs in the background, the tab re-fetches when it finishes, and the button disappears once both systems match. The button stays disabled while any line has unassigned or over-covered units — a partial set is not something the source can accept — and lists the offending lines so you know what still needs coverage. When a sync fails, order timeline events show an expandable More details row with the Shopify error, the fulfillment order it refers to, and the destination location, instead of a bare failure line.

Fulfillment changes made in Endless — moving items between buildings, splitting a fulfillment, merging fulfillments — did not always take hold on the Shopify side. A structural edit could invalidate the link between the two systems in cases where Shopify could not rebuild its own fulfillment plan, so the change looked applied in Endless while Shopify still held the previous plan. The sync now rebuilds Shopify’s fulfillment orders by moving, merging, and splitting locations until they match Endless, and only rebinds the two together after Shopify confirms. Partial or rejected changes stay visibly unsynchronized on the order rather than looking done, so a divergence is obvious and retrying the sync resolves it. Source-owned changes and integrations that do not sync fulfillment plans behave as before.

The Shopify order reconciliation was reading the same window of recent orders on every run and reprocessing orders it had already handled, which added duplicate fulfillment warnings to the timeline for the same underlying condition. Each successful run now moves its start point to when that run began, so the next pass reads new activity forward from there instead of re-reading everything since the day started. A failed run holds its position, so nothing is skipped. Webhook handling is unchanged.

Feature
Sales Supply

Dropship On Fulfillment Orders: Supplier Costs And Email Delivery

Fulfillment orders now carry the dropship workflow end to end. When a fulfillment has a supplier, you can capture and edit unit costs, line totals, and shipping and other charges on the fulfillment itself. Assigning or updating a supplier can optionally refresh line costs from the supplier’s dropship cost tiers with a fallback to the product default; keeping the option off leaves costs untouched, and any line with no matching cost is cleared rather than left stale. Costs travel through to the fulfillment PDF and the public share view, including a supplier cost summary. The public share header no longer shows the sales order number.

A new Email Fulfillment Order action sends the share view directly from Endless. To and CC recipients are separate, each address gets its own revocable link, and the dialog suggests every supplier contact with an email, the building’s email address, and the current user, so the right recipients are one click away. Buildings now hold one primary email address, editable from a Contact Information card on the building’s General tab and reachable from the fulfillment email dialog. Delivery goes through SendGrid and retries asynchronously if it fails.

Feature
Products

GS1 Prefixes, UPC Assignment, And Packaging GTINs

Companies with a GS1 licence can now manage their prefixes in Endless and assign UPCs from them to products, without hand-typing codes or tracking a spreadsheet on the side. Each prefix records its item-reference space, so the number of codes still available comes straight from what the licence actually grants, and Endless will not mint the same code twice or hand out a code that falls inside another company’s prefix. Blocks of assigned codes can be exported to CSV.

UPC assignment lives on the product. Clearing a UPC keeps other product fields untouched, and the app asks whether to release the code back to the prefix once the product has moved off it — kept as a separate step because GS1 does not allow a released code to be reused. Product packaging can also carry GTINs, tied to the same prefix rules. The feature is in early access and available on request.

Improvement
Supply

Suppliers: Archived Status, Legal Name, And Cost-Driven Relationships

Three updates to Suppliers.

Archived suppliers show as Archived. An archived supplier used to still show Active or Inactive on the list and detail page, because archiving only marked the record archived and left the underlying status alone. The badge now shows Archived when the supplier is archived, so the status column matches the detail page. Archiving from the detail page or quick view also keeps the page open, so the archived banner and the Archived badge update in place instead of the view closing.

Suppliers carry a Legal Name alongside their display name, so the name that appears on paperwork and accounting records does not have to be the same one shown in the app. Legal Name is available in the Add Supplier dialog, editable from the Company Details card on the supplier’s detail page, and shown as a sortable column on the Suppliers list. Optional throughout — empty renders as an em-dash — and searchable from the Suppliers list search box. The existing Supplier Name column and the Edit Name action have been renamed to Supplier Display Name and Edit Display Name, so it is clear which name a screen is reading.

Supplier–product relationships now come from product costs. Adding a product cost for a supplier creates the relationship on its own, and archived relationships are restored on the same signal. Purchase orders no longer create these relationships as a side effect, so a purchase order for a supplier that has never quoted a cost for a product does not link the two. Imports keep the supplier’s minimum order quantity intact: the supplier link is created before its costs, so the imported MOQ is not overwritten by the default. Purchase order line lookups read cost and MOQ from the supplier relationship directly.

Fix
Integrations Inventory

Integrations Without A Warehouse Lookup Can Be Mapped To A Building Again

Six integrations — Veracore, Infoplus, Jazz, MasonHub, QBO, and ShipHero — showed a warehouse mappings table on their Data tab with no way to add a mapping, so a building could not be pointed at any of them as an inventory source. Manage Mappings only appears for integrations that can fetch their own warehouse list, and Add Mapping was hidden unless an integration opted in.

Any integration without a fetchable warehouse list now shows Add Mapping by default, and the empty state tells you which option to use — Manage Mappings when the integration can look up its own warehouses, Add Mapping with the external code the system sends when it cannot.

Improvement
Sales

Filter Fulfillment Orders By Sales Order Date And Tags

The fulfillment order list has two new filters that reach through to the parent sales order: Sales Order Created Date, with the same range presets as the sales order date filter, and Sales Order Tags, which multi-selects across the tags on the parent order. Both compose with the existing fulfillment order filters, so you can, for example, look at fulfillments for last week’s VIP-tagged orders in one view.

Improvement
Sales

Order Bulk Actions Split By Version

The bulk actions on the Orders list now respect V1 and V2 order versions. Select V2 orders and the toolbar offers Create Fulfillments, Approve, Reload From Source, and Resend Shipment Updates. Select V1 orders and the toolbar offers the full V1 action set. A mixed selection shows both menus side by side, each labeled with how many of the selected rows it applies to, so a V1-only action never fires on V2 rows and vice versa.

Reload From Source and Resend Shipment Updates now open a confirmation dialog before running — the Resend dialog names its scope, so you know the resend covers every shipment on the order. Reload From Source is also hidden when the source integration does not support reload, so it will not appear next to orders it cannot help. Selection now clears when you change page or page size, since the same rows are rarely still on screen.

Feature
Products

Archive And Restore Product Attributes

Product attributes can now be archived and restored, the same way products, suppliers, and images already can. Archived attributes drop out of the default attributes list; a filter at the top of the list includes them alongside active ones or shows them on their own, each carrying an Archived badge. Opening an archived attribute lands on a read-only detail view with a Restore action and an Archived banner at the top. On a product, an archived attribute keeps its tag with an archived treatment, and the edit toggle switches to a View details link that opens the same read-only view.

Creating a new attribute with the same name or handle as an archived one now says exactly that — an archived attribute already uses this name, restore it instead — so an operator does not silently mint a duplicate. The archive confirm dialog also reads correctly in both directions now: it was only offering Archive, and now offers Restore when the attribute is archived.

Improvement
Platform

System Updates: Renamed From Activity

The company-wide feed of human-written notes on entities is now called Updates. In the system sidebar it reads Updates rather than Activity, and its page has moved from /system/activity to /system/updates. Bookmarks pointed at the old URL will not resolve.

Activity is now reserved for system-generated logs — the ones on entity detail pages and the Recent activity card on the dashboard — so the two feeds are named for what they are. Same notes, same replies, same feed.

Feature
Sales Platform

Fulfillment Order Numbers: Pick The Format

New fulfillment order numbers can now follow one of three formats. The default keeps today’s shape: the order number followed by -FO- and six random hex characters, like SO12345-FO-4414A3 (a small change from the five hex characters used before). The two other options are SO12345-FO1, an order number plus a per-order sequence, and FO-4222A3, a plain code with no order prefix.

Pick a format under Settings → Creating Fulfillments → Fulfillment Order Numbers, and it saves the moment you select it. The choice applies to fulfillments created from then on; existing fulfillment numbers are never rewritten. Downstream systems that treat the fulfillment number as an opaque identifier keep working across the change.

Improvement
Products

Product Sheet Loads Smaller Thumbnails For Shopify-Hosted Photos

When product photos are hosted on Shopify, the product sheet, table, and grid now ask for the thumbnail size the cell actually renders at, instead of the full-resolution original. On a catalog of print-resolution photos, page one dropped from about 13 MB of image transfer to about 270 KB, and the browser is decoding roughly one percent of the pixels it used to.

Photos hosted on our own storage or on Cloudinary are unchanged; those fall through to the original as before, and the separate variant work covers them.

Feature
Platform

Recent Activity On The Dashboard

A Recent activity section at the bottom of the dashboard lists what’s happened across the company — order changes, product edits, inventory movements, integration events — with each entry linking to the record it came from. The list scrolls back through older history instead of stopping at a fixed count.

The Activity card on individual orders and products keeps the same behavior, and now scrolls into older entries the same way.

Improvement
Integrations Sales

Business Central Ship Orders: Bundles Break Into Their Components

Ship orders sent from Endless to Business Central now expand bundled SKUs into their component SKUs, the same way accounting exports already handled bundles. A bundle no longer arrives as a single parent line the receiving Business Central job did not know what to do with.

Feature
Sales Inventory

ECHO: Order Analytics Without The Data Prep

Anyone who has tried to answer a simple question like “How many units of this SKU did we sell each week?” knows how much work can sit behind an ordinary chart. First you export orders and line items, then clean them up, join them together, categorize them, and aggregate the result. By the time the data is useful, most of the work has already happened.

ECHO does that preparation inside Endless. It organizes detailed order history into consistent daily records, then uses them to show what was ordered and what shipped over time. Filter by date, SKU, sales channel, or source; compare periods; review channel mix and top products; or open the underlying records to see exactly where the numbers came from.

You can also bring your old history with you. Export the messy detail from the systems you used before Endless, prepare it in ECHO’s simple import format, and upload it. Endless adds new history automatically from that point forward, giving you one continuous view across the systems your business has used.

The prepared data remains visible and usable. Imported records can be maintained separately, adjustments can be added without changing the original orders and shipments, and any filtered view can be exported again. Use the dashboards in Endless for quick answers, or take the same prepared history into a spreadsheet, business intelligence tool, or AI tool for everything else.

Feature
Integrations

Ship Through Jazz OMS

Jazz OMS is now a connected fulfillment channel. Endless sends orders to Jazz for shipping, reads ship confirmations back on its own, and syncs inventory in both directions. A webhook installs on connect so ship notifications arrive as they happen.

Fix
Products Platform

Product Exports Finish On Large Catalogs

Product exports now finish for the largest catalogs. The export was loading every combination of image, tag, and attribute row into memory before writing the first row, so a company with a few hundred products was pulling in more than a hundred thousand rows and the worker ran out of memory. The request would sit in Processing and then disappear from the list.

Five companies had exports that never completed since May. Those same catalogs now export in about a second. The row counter is also wired to the same progress update every other export uses, so the request no longer times out after fifteen minutes and vanishes while the job is still running.

Improvement
Sales

Editing Sales Order Quantities After Fulfillment

Sales order line quantities can now be edited, one at a time or in bulk, after part of the line has been fulfilled. Quantities can drop as low as the amount already allocated or in an active fulfillment, and can be raised freely above that. Before, any fulfillment activity locked the line.

Improvement
Integrations Sales

ShipBob: Automatic Webhooks, ASNs Sent With Box Contents

Two updates to the ShipBob integration.

Webhook subscriptions are set up automatically once the OAuth handshake finishes, so updates from ShipBob start arriving without a follow-up step. Advance shipping notices — ASNs from an inbound purchase order shipment — flow through to ShipBob the way the other WMS integrations already worked, and each box on the ASN carries its line items resolved from the source ASN, so warehouse staff no longer fill in box contents by hand. SKUs ShipBob does not have on file are dropped from the send with a warning in the system log, and on completion the shipment is marked received rather than closed — matching the other WMS integrations.

The warehouse mapper shows one row per building. ShipBob’s location id already carries the fulfillment id, so fulfillment centers and locations are treated as one set now, and one mapping covers both outbound orders and inbound receiving at the same building.

Improvement
Integrations

Integration Failures Read As Plain Sentences

When an integration cannot complete something, the failure recorded against it now says what could not be done and for which integration or order, in one sentence. The provider’s raw response is kept alongside for whoever needs to dig into it, rather than filling the line you read first.

This covers Shopify inventory, missing products on orders imported from Shopify, Skubana and Cin7, ASN sync with Gobolt and InfoPlus, inventory sent to Sellbrite, orders shipped through Trackstar, and EDI documents. Two failures that never made it onto the record at all — some Gobolt and InfoPlus responses, and a missing-product case from Shopify — now do, and Trackstar failures are no longer labelled as InfoPlus.

Improvement
Integrations Sales

EDI Acknowledgments Speak The Partner’s Language

Outbound 855 acknowledgments got two corrections that make them line up with what the retailer actually reads.

Lines can be acknowledged in the partner’s own unit. Whole Foods orders in cases, Endless stores in eaches — an outbound 855 template could only echo back whatever unit the 850 arrived in, so there was no clean way to acknowledge a line back in the partner’s code, and no way to state a corrected quantity in it either. Templates can now ask for the acknowledgment on a specific basis (“each”, “inner pack”) and the code the partner uses for that basis is pulled from the integration’s UOM mapping — so renaming CA to CS for one partner is a one-token change on the mapping and needs no template edit. The same pass fixed several ways an acknowledgment could tell a retailer we had dropped a line they ordered (two lines of the same SKU collapsing, archived or unresolved products disappearing, partially numbered purchase orders cancelling their unnumbered lines).

The header now agrees with the detail. BAK02 — Amazon’s mandatory “acknowledgment type” field — was hardcoded to AD (“completely accepted”) on every 855, including ones whose per-line ACK segments rejected a line or cut a quantity, so the header was contradicting the detail on exactly the orders where the detail mattered. The header now reads AC (“cannot be fully accepted”) whenever any line was rejected or short-shipped, and AD only when every line came back accepted.

Feature
Sales

Order Timeline Records Every Status Transition

Order status changes used to leave no mark on the timeline. Only the creation events and fulfillment moments were being subscribed to, so an order moving out of Pending — whether by auto-accept, an automation rule, or a person — showed up with an empty history. An EDI order that reached “Ordered” with nothing on its timeline is what surfaced this.

Eleven lifecycle events now write to the timeline: accepted, released, cancelled, held and released from hold, completed, duplicated, and the rest of the transitions the order aggregate can apply. Holds carry their reason and release note into the message, so the timeline records why an order stopped rather than only that it did, and cancellations and holds render in red, completion in green, the others in neutral. The activity feed also picks up a lifecycle chip treatment: a status-change row reads “Status Pending → Ordered” as two coloured chips instead of a plain sentence.

Improvement
Integrations Sales

Sales Channel Settings Show The Auto-Approve Toggle

Every sales channel has always had an auto-approve setting — it controls whether an integration-sourced order that lands in Pending gets advanced to Ordered on its own — but the toggle had been missing from the settings page for months. The value was reachable only through the database, so a channel that was auto-approving orders, or not, had no way to show which in the app.

The toggle is now on each sales channel’s settings card, reading and writing the same setting that has been driving behaviour all along. Nothing about how auto-approve works changes; the switch is just visible again.

Improvement
Supply

Tariffs Tool On The Current Duty Regime

The public tariffs estimator at tariffs.endlesscommerce.com was still doing pre-February duty math against a 2026 HTS Rev 9 schedule, so anyone running a Rev 14 entry through it saw IEEPA duties that no longer apply and missed the Section 122 surcharge and the July 24 forced-labor tariffs entirely. Since customers use this to estimate what they’ll pay at the border, stale numbers were wrong numbers.

The bundled schedule, duty engine, and news feed are now on Rev 14 with the current post-July regime, and the Updates tab reflects the change.

Fix
Integrations Sales

ShipStation: Orders Route To The Mapped Building, Notifications Arrive From Every Store

Two ShipStation problems landed together.

Orders now route to the mapped building. ShipStation was ignoring the building each order was mapped to and dropping every order onto the store’s default Ship From Location — so a parcel could ship with the wrong return address and be rated from the wrong postal code, and nothing in the logs said anything had gone wrong. The mapping now takes effect: orders land in the right building, and if a mapping is set but doesn’t hold a ShipStation ID, the fulfillment fails cleanly instead of silently shipping from the wrong place. That failure is easy to correct — repair the mapping and re-send — whereas a wrong-address label already at the printer is not.

Ship notifications come through from every store on the account. The webhook subscription had been pinned to one store per integration, so any store a sales channel routed orders into produced no notification and only reached Endless via the nightly poll, up to a day late — and if that one poll failed, the shipment slipped past the lookback window entirely. Subscriptions are now account-wide; each fulfillment is matched to its owner by order ID, and shipments from other tenants are ignored the same way they always were. Existing integrations get resubscribed automatically on deploy.

Feature
Products

Product Costs: Enter Once, Used Everywhere

Unit Cost, Landed Cost, and Dropship Unit Cost are now three clear, distinct fields on every product — editable from the product page, the Costs product sheet, or CSV import. Purchase order lines and dropship fulfillment lines default to the right cost automatically, and margin uses Landed Cost with Unit Cost as a fallback, so an incomplete cost is never shown as profitability. All three carry their full precision everywhere they’re shown, including the product sheet.

Fix
Inventory Products

Available-To-Make Uses The Same Availability Fulfillment Does

Available-to-make on a bundle understated its component every time the component itself was composable and had no physical stock on hand. The rollup was reading each component’s plain “available” number — which leaves out anything that has to be built from its own components — so a bundle whose components had to be made returned zero, and an alias (which gets its whole availability from one component) reported the same.

Available-to-make now measures each component the same way fulfillment does when it decides whether the parent can be allocated. The number on the page and the number a real allocation would use no longer disagree, so a bundle whose components can be built and an alias whose source component can be built both report the units that can actually go out. Nested composables refresh in the right order in a single sweep, so the rollup converges the first time instead of catching up on the next hourly pass.

Feature
Sales

Fulfillment Containers

Fulfillment orders now have Containers — a real record of how you packed the boxes, pallets, or master cartons that leave your building, one line at a time. Open a fulfillment, add a container, drop items into it, print its label with the shipping container barcode, and mark it closed when the packout is done. Create as many as the shipment needs, and edit or delete a container after the fact if you catch a mistake — you’re no longer stuck with whatever the first save recorded.

Container barcodes (SSCCs) are minted by Endless from your GS1 prefix at save time instead of being generated in the browser, so they’re valid, unique across your company, and stable across reloads. The container’s type — carton, inner pack, master carton, pallet, or generic — is derived from what’s inside it when you close it, and the person who created it is recorded on the record. A container whose barcode isn’t valid GS1 is still saved with a warning rather than rejected, so a scan-in-progress packout doesn’t get blocked at the wrong moment.

Feature
Integrations Supply Inventory Sales

ShipBob Is Now A Connected Fulfillment Integration

ShipBob joins the set of connected fulfillment integrations alongside ShipHero, MasonHub, Veracore, and ShipStation. Connect from Integrations with a personal access token or OAuth; the integration comes up with the writable channel already set, and its fulfillment centers appear in the warehouse mapping picker so you can point Endless buildings at them.

Once mapped, DTC, B2B, and dropship orders push through with retailer program data and third-party billing already in place, and per-order channel routing follows your sales-channel mapping. Fulfillment-level gift messages take precedence over the order-level value on the way out. Shipments come back through ShipBob’s webhook by default, with a scheduled poll as a fallback, and the resulting cartons — with tracking, dimensions, and the line breakdown per carton — land on the shipment page. Sending an ASN opens a work-receiving order in ShipBob and a follow-up cancel on your side cancels it there too. Pulling inventory paces itself against ShipBob’s rate limit so a large sync doesn’t crowd out other work.

Feature
Supply

Shipment Financials: Costs Distributed To Items, Saved In Place

The Financial tab on shipment detail is rebuilt. Shipping costs assigned to a shipment are now distributed explicitly to line items and saved on those items, and single-shipment saves go through synchronously — the page reflects what’s saved right after you save, instead of catching up on a background pass. Per-category duty assignment is atomic: a category is either fully assigned or not, so the totals no longer disagree with the item breakdown mid-save.

Underneath, the parallel system that recomputed cost allocations at read time is gone, so what you see on the item is what’s stored on it. The tab picks up a cleaner assignment panel and cost-items card, and a bulk-edit path for adjusting costs across many items at once.

Feature
Supply

You Can Now Archive A Supplier

Archiving a supplier no longer breaks anything that references them. An archived supplier still shows up wherever they’re linked — purchase orders, order fulfillments, products, and supplier contacts all keep the supplier’s name and details instead of going supplier-less. Their own detail page still marks them as archived.

You can still edit an archived supplier’s record, and a PO whose supplier is archived still falls back to the supplier’s email when there’s no other contact on file. Adding a new line item to a PO with an archived supplier no longer tries to create a fresh product-to-supplier link behind the scenes — the line item is just added.

Feature
Sales

Assign A Fulfillment Rule To Many Fulfillment Orders At Once

The Fulfillment Orders list has a new Apply Rule action. Select the fulfillment orders you want, pick one rule, and apply it to all of them in one go. The batch runs in the background — the app stays usable while it works instead of blocking for the twelve-or-so seconds each fulfillment order used to take.

Progress shows in the list toolbar while the batch runs. Fulfilled and canceled fulfillment orders are filtered out before it starts; anything that couldn’t be processed once the batch is running — wrong company, archived, or already past the point of accepting a rule — is listed with the reason when it ends. Up to 200 fulfillment orders can go through in one batch.

Feature
Supply

Purchase Orders Get A Description Field

Purchase Orders have a new optional Description field, so you can label a PO with something you’ll recognize at a glance — “Q3 fall reorder — hoodies” — instead of relying on the PO number alone. Up to 255 characters.

The PO list keyword search matches on Description as well as PO number and item SKU, and the standard and complete PO exports pick up a Description column.

Feature
Supply

Archive Suppliers

Suppliers can now be archived, the same way warehouses already can. Archiving hides a supplier from the default supplier list and pickers while preserving every historical link — purchase orders, product relationships, receipts — untouched. It is fully reversible.

Archive lives on the supplier detail header. If the supplier still has open POs or linked products, the confirmation shows those as advisory warnings but leaves the button enabled — the pattern is warn, don’t block. Archived suppliers get a top banner with a one-click Unarchive. The suppliers list picks up an Archived filter (Include archived / Archived only), and the default view hides archived rows.

Improvement
Sales Inventory

Bulk Fulfillment: Another Speed Pass

Fulfilling many orders at once is faster. The job that runs each order’s allocation and fulfillment used to repeat the same database work for every order it processed; that cost added up during large bulk fulfillments and kept database locks held longer than necessary. That redundant work is gone across inventory allocation, fulfillment materialization, and the fulfill command’s order validation. Nothing changes about what fulfillment does — just how much it does per order.

Improvement
Supply

Create Purchase Order: A Cleaner Supplier Step

The Create Purchase Order drawer used to open with the entire supplier list expanded, pushing the Products and Notes steps below the fold. Now:

  • The supplier list starts collapsed to the first five, with a Show more / Show less toggle — the same control the shipments list uses. It resets to five when you start a new search.
  • Picking a supplier collapses the Supplier step and opens Products automatically, so the flow reads top-down (Supplier → Products → Notes) and the later steps stay in view without scrolling.
  • Products uses the same standard Show more toggle instead of the old full-width “Load more products” button, so the drawer looks consistent step to step.
Feature
Integrations Sales

Shopify: Choose Where the Note From Customer Lands

Shopify imports now let you pick where the Note from Customer on a Shopify order lands: Instructions (default), Gift message, Both, or Neither. Set it per-integration under Shopify → Orders in the integration settings.

Before this, the note always went to the order’s Instructions. Stores that treat the customer note as a gift message never received it; stores using it for PO / handling instructions were fine. The new setting fixes both directions: pick Gift message and the note lands there instead, pick Both and it’s written to both fields.

Each mode only writes the fields it names, so switching modes never overwrites data in the other field. The audit line on the order timeline (Note from Shopify: …) is preserved in every mode.

Feature
Products

Manage Images: Remove Images from the DAM

You can now remove a product image from the DAM. In Manage Images, each image card gets a Trash action, and the sidebar exposes destructive Archive Image / Archive Images actions for single and multi selection. Pick one or many, confirm the archive dialog, and they’re removed from the DAM; unsaved edits are guarded before the archive runs, and the grid refreshes when it’s done.

Underneath, archiveImage soft-deletes the image and cascades the cleanup — the original is archived, every image variant is archived via the same cascade, and every image_relationships row pointing at it is destroyed in one transaction. Guarded by media:update_image and scoped so an image belonging to another company is rejected before anything is touched.

Feature
Sales

Automations: Set A Fulfillment’s Details When It’s Created

Automations can now set fulfillment details automatically when a new fulfillment lands. Pair the new “Set Fulfillment Dynamic Field” action with the “fulfillment created” trigger, pick a field, and set the value once — every fulfillment created under that rule picks it up.

Four fields are supported: instructions, gift message, third-party billing (on/off), and carrier service. Carrier service routes through the shipping-instructions update path so the requested carrier name and id land together; the other three go through the fulfillment-details update path.

Feature
Sales Supply Platform

Internal Notes: Edit Your Own Notes In Place

Internal notes on Sales Orders, Purchase Orders, and Shipments can now be edited. Each note you wrote shows an Edit action that opens the same dialog you used to add it, prefilled with the current content. Saving updates the note in place and marks it with an “(edited)” indicator so anyone reading the timeline knows it changed since it was posted. Only the note’s author can edit their own notes; everyone else’s stay read-only.

Feature
Products Inventory

Alias: A New Composable Product Type For Legacy And External SKUs

Alias is now a product type alongside Base Item, Bundle, and Part. Reach for it when a legacy or external identifier — an old SKU your customers still order under, a channel’s catalog code, a vendor part number — needs to point at the real product without duplicating its data. An Alias is defined by its components, so it inherits its price, weight, dimensions, and imagery from what it stands for.

Alias shows up everywhere Bundles do. Create and edit Aliases from the product form with the same component manager (Base Items and Parts are valid components, and the quantity stays as guidance rather than hard enforcement so alternate-unit aliases are workable). Filter by Alias in the product list, inventory views, and Purchase Order product pickers. Import Aliases through product imports, and target them in bulk edit. The identity styling and badge make Aliases easy to spot at a glance in lists and on the product sheet.

Available-to-make inventory keeps up with Alias just like Bundles. Adding, changing, or removing an Alias’s components immediately recalculates its available-to-make, company-wide inventory recalculation includes Aliases, and removing the last composition line clears its available-to-make cleanly. Orders decompose Aliases through the same composition path as Bundles, so fulfillment picks the underlying components.

Feature
Sales Integrations

Orders: Change Where An Order Came From

Sometimes an order ends up stuck on the wrong integration — the store’s old connection was replaced, or the integration got reconnected under a fresh record and the order is still pointing at the archived one. It can now be moved.

Open a V2 order and choose Assign source integration (or Change source integration) from the action menu — the command palette has it too. Pick another live integration for the same store from the picker, confirm, and the order is repointed. The new integration takes ownership and, if it supports it, refreshes the order data on its next pass.

A few guardrails so nothing surprising happens: the order has to be claimed locally (not currently owned by another integration), it needs an external order id, and it can’t have active fulfillments. If any of those aren’t in place, the dialog spells out what to fix. Reassignments have to stay within the same integration type. Admin, operator, and order-receiver roles have the permission by default.

Alongside this, skipped Shopify order updates and unsupported order resets now show the actual reason on the order timeline — “authority not held”, “no warehouse”, “reset unsupported” — instead of a generic error.

Fix
Products Supply Sales

Product Search: Fast Again On Very Large Catalogs

Searching for a product to add to a Purchase Order, a Supply Shipment, a bundle, an echo SKU, or from the command palette now returns results quickly on very large catalogs — pages that used to time out and show “No products found” on accounts with over a hundred thousand products come back in a fraction of a second. Name and SKU search return the same products as before, just fast enough to actually use.

Improvement
Supply

Purchase Orders And Shipments: Faster Detail Pages

Purchase Order and Supply Shipment detail pages load faster across the app, and the improvement is biggest on large documents — pages that used to take several seconds now open quickly no matter how many line items they have. Product names, images, and cost totals appear together instead of trickling in row by row, with no change to the numbers themselves.

Feature
Sales

Report & Reship, And More Control When Duplicating An Order

Report Issue — the action for flagging an operational problem on an order, which tags the order, adds a note, and can alert your ops team in Slack — can now reship in the same step. Tick “Reship order?” in the Report Issue dialog and the button becomes “Report & Reship”: the report is filed, then a Duplicate Order dialog opens already filled in, with the new order number suggested as the original plus an -R suffix and a reship tag applied (for example, OPS - Reship - No Movement).

Duplicate Order also gains more control at every entry point, including reship: a sales channel selector — defaulting to the source order’s channel, so you can send a duplicate to a different channel and keep channel reporting clean — and an additional-tag field that adds a tag to the copy alongside the ones it carries over. Reporting an issue also works on every order now; it had been failing on some newer orders, and that’s fixed.

Improvement
Supply

Supply Shipments: Detail Page Refresh

The Supply Shipment detail page is refreshed to match the Purchase Order redesign. Destination is an always-available sidebar selector — building, location, or a custom destination — that saves automatically, and closed shipments show it read-only. The item table folds the product image into the details column, keeps the purchase-order grouping, and moves sorting into Actions → Sort. Status changes live under a single “Change Status” action with everything else in a three-dot menu, and the tabs are more compact, with document and note counts and a dedicated Notes tab.

Feature
Sales

Fulfillments: Change The Fulfillment Integration From The Fulfillment Itself

You can switch a fulfillment’s fulfillment integration directly from the fulfillment. A small edit modal lets you pick a different integration and save without dropping into the underlying order or rebuilding the fulfillment. Useful when an order lands with the wrong integration attached and needs to move without a full recreate.

Improvement
Sales

Fulfillment Orders List: Much Faster To Open

The Fulfillment Orders list opens quickly now, even for companies with a huge number of fulfillments — on the largest accounts it went from tens of seconds to roughly a tenth of a second. Only the page you’re looking at is loaded, rather than the whole company’s fulfillments, and the rows appear as soon as they’re ready while the total count fills into the pagination bar a moment later. The header count is the real filtered total, blocker details load when you open a status instead of on every page load, and switching sort stays fast.

Improvement
Products Inventory

Ordered Quantities: Faster For High-Volume Products

Ordered-quantity calculations return much faster for products with a lot of order history. The query for a hot SKU used to take around 20 seconds and get worse under load; it now takes about 7 seconds with the same results. The V2 unassigned-quantity calculation also stopped joining every warehouse just to zero most of them out — totals are unchanged, it’s just less work per call.

Improvement
Supply

Purchase Orders: Sort Line Items

You can now sort the line items on a purchase order. Open Actions → Sort, pick a column, and choose ascending or descending.

Improvement
Supply

Supply Shipments: New Received Step Before Closed

Supply shipments now pass through a Received step between In Receiving and Closed. WMS integrations (Extensiv, Gobolt, Infoplus) mark a shipment as received automatically once the downstream system reports receiving complete, so the shipment no longer jumps straight to closed while receiving finishes. Closing is now a deliberate manual step from Received, which keeps Closed as the finalized state you commit to when you’re done.

The timeline, status badges, filters, and shipment status groupings all pick up the new step. Cancelling from In Receiving and Received is allowed. A shipment needs at least one item and a destination to enter Received.

Improvement
Integrations Supply

Extensiv: Choose What The Lot And Receipt Advice Numbers Carry

Each Extensiv integration now decides, separately, what Endless sends as the line-item lot number and as the receipt advice number. Choose the real lot recorded on the shipment line, the shipment reference, the shipment number, or nothing at all, from the integration’s settings.

The two overlapping switches this replaces keep working until you edit the integration, at which point you pick a source for each. Receiving a shipment that carries the same SKU on more than one line no longer posts the quantity twice.

Improvement
Supply

Purchase Orders: Filter By Status On The List

The Purchase Orders list has a status filter — draft, issued, in production, in transit, delivered, closed, canceled — matching the status lifecycle the PO detail page already used. The old “approved” filter, which never quite worked, is gone.

Fix
Integrations Sales

Shopify Fulfillments: Archived Ones No Longer Block New Ones

Creating a new fulfillment on a Shopify order no longer fails when the order has an archived fulfillment sitting behind it. The next per-order fulfillment index now looks across archived rows too, matching the database uniqueness rule, so the new fulfillment picks an unused index instead of colliding.

Feature
Platform

Cmd-K: A Global Actions And Search Palette

Cmd-K (Ctrl-K on Windows) now opens a global palette across the app. It searches actions, navigation, and recently-viewed entities from anywhere. Anything you can trigger with a button on a page shows up in the palette too, grouped under “On this page” for the entity you’re looking at, so common actions — duplicate an order, change sales channel, link a product — are one keystroke away. Destructive actions still go through their confirm modals; the palette is a faster way to reach an action, not a way around the safety net.

To use it, press Cmd-K from anywhere and start typing. The palette filters as you go across three kinds of result: actions for whatever you’re currently looking at (grouped under “On this page”), places to navigate to, and records you’ve opened recently. Arrow keys move through the list and Enter runs the highlighted result, so you can jump to a record or fire a common action without leaving the keyboard or hunting for the button.

Improvement
Sales

Fulfillments: One Creation Menu, Items In The Dialog, Automations Warn Ahead

The fulfillment creation experience on a sales order is now one coherent workflow. A single Create Fulfillments menu offers three ways in — Choose Building, Use Strategy, or Add to existing — and item selection has moved into the creation dialog itself, defaulting to all unassigned items with per-line quantity editing, removal, and building-specific availability shown inline. The menu stays hidden while the order is still a draft.

Automations are surfaced before they run: creating a fulfillment, applying a routing strategy, or assigning a fulfillment rule now warns you about active automations that will fire as a result, so nothing runs behind your back.

Improvement
Sales Products

Order Items: “Not In Catalog” Badge Opens Link Product

The “Not in Catalog” status badge on an order item is now clickable and opens the Link Product action directly. Before, that action lived behind the item’s edit menu and then a three-dot menu, so most people never found it. Clicking the badge takes you straight there.

Feature
Supply Inventory

Supply Shipments: Track Lot Numbers On Items

Supply shipment items now carry a lot number, so one PO line can be split into multiple shipment rows — same SKU, different production batches — each with its own quantity and its own lot. Assign lot numbers when adding items to a shipment, edit or split an existing line across lots, and filter shipments by lot number from the list. Lot-aware product costs surface on rows where they’re relevant. Coverage math sums per lot bucket, closing a case where two lots on the same PO line collided and one row’s quantity silently vanished from the totals.

WMS/ASN payloads and lot-aware inbound sync aren’t wired yet — those follow once the WMS side sends a lot identifier.

Improvement
Integrations Sales

Orders: EDI Documents Live On An EDI Tab

For EDI orders, the EDI document list, create, and deliver flows now have their own “EDI” tab on the order page, alongside Sales Order, Fulfillments, and Timeline. Same documents and actions as before, just easier to find. The tab appears only when the order is actually an EDI order — other orders don’t get it. The old hidden /edi URL, which nothing linked to, is gone.

Improvement
Integrations Inventory

Inventory Sync Runs On A New Schedule

Inventory syncs on a different cadence now, with no change to what is sent or received.

Counts pulled from warehouse systems — Extensiv, GoBolt, InfoPlus, MasonHub, ShipHero and Veracore — refresh every three hours rather than every fifteen minutes, and Business Central hourly. Shopify pulls speed up from once a day to every three hours. Pushes to Sellbrite and Rithum move to twice a day, and Faire to every three hours. Shopify’s push stays at every fifteen minutes, and Amazon and Endless EDI stay daily.

A manual refresh still pulls counts on demand whenever you need them sooner than the schedule.

Fix
Sales

Fulfillments: Failed Ones Can Be Cancelled

A fulfillment stuck in Failed To Fulfill can now be cancelled. Cancelling first walks the fulfillment back to draft so allocation unwinds cleanly, instead of erroring on the state check and stranding the fulfillment.

Feature
Sales

Fulfillment: Rules (Was Profiles), Now Optional

“Fulfillment Profile” is now “Fulfillment Rule” throughout the app, and rules are no longer required to process a fulfillment. A draft fulfillment can be allocated manually or have a rule applied — either works, and nothing forces you to attach one to move forward.

The fulfillment settings screens got a pass too: language across routing strategies, rules, and profiles was tightened to match how the ops team actually talks about it, informed by interviews with people who live in these screens.

Fix
Integrations Sales

Order Reset: Now Recreates Fulfillments Even If One Was Already Cancelled

Resetting a Shopify order previously left the order with no fulfillments when it already had a cancelled one. Reset only unhooked active fulfillments from the identity index, so the cancelled fulfillment’s Shopify FulfillmentOrder link stayed live — the replay then resolved the FO back to that dead fulfillment and no-oped instead of rebuilding a fresh one.

Reset now clears the identity link on every non-archived fulfillment, cancelled or not, and the replay rebuilds reliably.

Feature
Integrations Sales

Orders: Reset From The App

Resetting an order — handing authority back to the source integration and rebuilding the order from what the integration currently says — is now available from the order page. The underlying reset flow shipped earlier; this puts a control on it so you can trigger it without a console.

Improvement
Supply Platform

Purchase Orders: Notes Move To The Shared Internal Notes System

Purchase-order notes now live in the same Internal Notes system every other object uses, so the notes card on the PO Details tab behaves the same way it does everywhere else in the app. Milestone progress updates stay on the milestone card and are separate from notes — the two are no longer tangled together.

Existing PO notes were migrated over with their original ids, timestamps, archived state, and author preserved.

Feature
Supply Inventory

Supply Shipments: Pick A Destination Location Inside A Warehouse

Supply shipments can now be routed to a specific location inside the destination warehouse, on both create and edit, from the shipment dialog and the Route & Destination card. The location picker filters to the selected warehouse, and receiving drops the inventory into that location on arrival. Leave it blank and the shipment keeps behaving the way it always has, routing to the warehouse’s default location. Custom destinations that aren’t a warehouse still work the same.

Improvement
Platform

Inbox: Import Notifications Show Their Full Detail

Import notifications in the inbox no longer truncate their body text, so the reason and any per-row detail is visible without having to open the source. The title stays intact, and a collapsed raw metadata panel sits underneath the download attachment for anyone who wants to look at exactly what was posted.

Fix
Sales

Sales Orders: Next Number Picks The Highest Sequence, Not The Newest

Sales order numbers could duplicate when an older order held a higher sequence than the most recently created one. The next-number lookup used the newest order by created-at; it now uses the maximum sequence across all matching orders, archived ones included — the same approach purchase orders already use.

Improvement
Supply

Purchase Orders: Status Drives Lifecycle, Milestones Track Progress

Purchase-order status is now the single source of truth for where a PO sits in its lifecycle — draft, issued, in production, in transit, delivered, closed, canceled. The active milestone is derived from that status rather than something you move separately: boundary statuses (Draft, Closed, Canceled) simply have no active milestone.

Milestone progress is now its own layer. You can update a milestone’s progress percentage, timeline status, dates, and notes without also moving the PO to a different lifecycle status — the two used to fight each other, and now they don’t. Auto-populating milestone dates now happens in a single update from the PO detail page.

On the PO detail page: the duplicate status-change path that lived in the status dropdown has been removed, and the milestone controls line up cleanly.

Feature
Integrations Sales

Veracore: Ship Orders And Pull Shipments Back

Veracore is now connected on the shipment path in both directions. Orders sent to Veracore for fulfillment can be shipped from Veracore and Endless picks up the shipment, and the Ship Order flow records the Veracore shipping-order id as the external reference so later polls line up. Extra carrier mappings were added alongside so more of Veracore’s carrier codes resolve to the built-in list without a manual mapping.

Feature
Sales

Sales Orders: Duplicate An Order

You can now duplicate any sales order — from the order’s Actions menu, pick Duplicate Order and a new draft is created from the source, however the source order was created. The duplicate copies items, quantities, prices, discounts, tags, notes, gift message, ship-to and bill-to addresses, carrier and routing selection, B2B data, and shipping and tax. It does not copy identifiers, status, or fulfillments — the source order stays exactly as it was, and the duplicate has no history of its own.

You can pick a new order number or leave it blank. If you leave it blank the number is derived from the source — ORD-1 becomes ORD-1-01, ORD-1-02, and so on — which keeps duplicates identifiable and unique within a sales channel. The dialog also gives the option to open the new draft in quick view right away. Bulk duplication is available over the API today; a bulk action in the UI will follow.

Improvement
Sales Integrations

Order And Fulfillment Instructions

Customer instructions are now called instructions everywhere. The order detail reads and writes through the new field, and fulfillment instructions behave the same way gift messages now do — a fulfillment’s instructions override the order’s if set, otherwise the order’s instructions apply. Packing notes sent to ShipHero and Packiyo use whichever value resolves.

The older note name is kept as a compatibility alias for anyone reading or writing through it, so nothing breaks — but new integrations should reach for instructions.

Fix
Integrations Sales

Shopify: Failed Single-Order Imports Now Surface Instead Of Silently Doing Nothing

Manually importing an older Shopify order used to look like nothing happened — no order, no error, no note anywhere. The failure was always there: Shopify blocks import of orders older than 60 days without an extra permission grant, and that failure was getting silently dropped instead of shown.

Failed imports now log a clear line against the Shopify integration explaining what happened — whether the order couldn’t be found, the connection needs to be reconnected, or it’s a temporary issue that will retry on its own. Actually pulling in orders older than 60 days still needs a permission change on our end — that’s a separate follow-up.

Feature
Supply

Suppliers: Optional Handle

Suppliers now carry an optional handle — a URL-friendly identifier, unique per company where set. You can set it when creating a supplier (the create dialog suggests a kebab-cased handle from the name and lets you override it) and edit it later from the supplier detail page’s Actions menu. Two suppliers in different companies can still share the same handle, and the field is validated to lowercase letters, numbers, and hyphens up to 50 characters. The suppliers list has a Handle column (hidden by default, toggleable from column settings), and the supplier detail page shows the handle inline in the header. Uniqueness is enforced by a partial unique index (company_id, handle where handle is present).

Improvement
Sales

Edit A Fulfillment Without Claiming The Order

Fulfillment-owned details — the shipping address, carrier and service, notes, B2B info, external ID, and decompose / recompose — can now be edited without first claiming authority over the sales order. These edits were always allowed; the app was gating them behind the same authority as order-structure changes. Order structure itself still needs authority; only the fulfillment-scoped fields opened up.

Improvement
Sales Integrations

Fulfillments: Gift Message Inherits From The Order

A fulfillment’s gift message now falls back to the order’s gift message whenever the fulfillment doesn’t have one of its own. Setting a gift message on the fulfillment still overrides the order, same as before. Outbound payloads to ShipStation, ShipHero, Packiyo, MasonHub, and Infoplus use whatever the fulfillment resolves to — so a gift message set once on the order shows up on the shipping label without having to be re-entered on every fulfillment split from it.

Improvement
Supply Sales

Carriers: Kingsgate Logistics Added

Kingsgate Logistics LTL Freight is now selectable as a carrier alongside the rest of the built-in carrier list. Pick it from the carrier picker anywhere a carrier is set — no SCAC or tracking URL is prefilled, so those stay editable per shipment.

Improvement
Integrations Sales Inventory

Sales Channel And Warehouse Mapping: Many Internals To One External

Multiple internal sales channels can now map to a single external store on the same integration — for example, Faire USA and Faire Canada both pointing at one “Faire” store in ShipStation. Warehouse mappings work the same way (two internal buildings, one ShipStation ship-from address). Before, the mapping refused to save with an “already mapped” error, because a defensive uniqueness rule assumed one internal per external per integration.

The mapping modals have been inverted to match. The internal value is now the row, and the external ShipStation option is the dropdown — the reverse of the old layout. That’s the shape you need to have many internals pointing at one external, since whichever side owns the rows is the side you can repeat. Each internal channel or building can still only claim one external key, so mistakes like the same building mapping twice are still caught.

Feature
Platform Sales

Automations: Order Approved Trigger

Automations can now run the moment an order gets approved — the transition from draft or pending into ordered. Pick Order Approved as the trigger, and conditions and actions that only make sense after approval — checking the sales channel, applying a routing strategy — are available from the same picker. Approvals coming in through less common paths still route to the right company automatically.

Fix
Sales

Orders: “Order Created” Now Shows In The Timeline

Orders now log an “Order created” entry on their activity timeline, with the name of the person who created it, the moment they’re created — whether they come in as draft, pending, or ordered. Before, the timeline was blank until the first later action, so there was no record of who created an order or when. Existing orders without a create entry stay as they are; new ones from here on carry the line.

Feature
Products Integrations

Product External Identifiers: A Registry For How Partners Know Your Products

Each product now has a place to record how outside systems identify it — Amazon’s ASIN, Whole Foods’ UPC, Target’s TCIN, and so on — kept in one registry per product rather than scattered across integration configs. On the Relationships tab of a product, a new grid lets you add, edit, and remove these identifiers, with a Linked / Unlinked badge so you can see at a glance whether an identifier is already attached to a specific connected integration or is sitting in the registry waiting to be linked. Adding one pulls the partner name straight from the connected integration you pick, previewing exactly how it will be stored once linked, and duplicate entries surface a clear message instead of a silent failure.

From the integration side, a new Link External IDs action on the integration’s Actions menu opens a bulk-link modal that attaches all of an integration’s unlinked identifiers at once by partner name. Linking runs as a background job, so a big backfill returns to you immediately and completes on its own. Linked rows are click-throughs — opening the connected integration in a stacked side view without leaving the product page.

Underneath, this is a first-class registry with its own permissions and audit trail; every add, edit, remove, or link event is captured. Inbound order ingest already reads this registry to resolve products from partner-supplied identifiers — see the separate EDI 850 entry — so what you curate here directly drives how partner orders find their way to the right product.

Fix
Sales Inventory

Bundles Sharing Components Allocate On A Single Fulfillment

Two lines on the same fulfillment that resolve to the same product in the same warehouse — two bundles that share a component, or a bundle plus a standalone line of that same component — now allocate together instead of stopping with a “split these items into separate fulfillments” message. The two lines are added up, allocated against the summed quantity, and split back across the lines with each keeping its own identity, and the commit that follows decrements the location once by the combined amount rather than by whichever line wrote last.

The same aggregation now runs during the availability check when you edit items on a fulfillment, so two lines of the same product whose combined increase would exceed stock are rejected together instead of each passing a check that only saw its own share.

Improvement
Products Supply

Product Costs: Lead Time Is Optional

Lead time is no longer required on a product cost. Saving a supplier cost or a purchase order cost tier without entering a lead time works — the value is stored empty rather than as a stand-in zero. If you do enter one, it still has to be a positive whole number.

Feature
Platform

Notifications Move Into An Inbox

Notifications have their own home now. The bell inside the profile drawer is gone; in its place is an Inbox entry in the sidebar with an unread count and an active-process indicator, opening a dedicated page instead of a small drawer. Filtering lines up with the notification categories the API supports, so what you see under each filter matches what’s actually there. Long-running processes still surface progress the same way — the Inbox is where you go to look through them without stacking a drawer over the app.

Improvement
Platform

Sidebar: Settings And Help Move Up, Announcement Bar

Settings and Help have moved off the sidebar and into the company menu in the top-left, which frees up room for the primary navigation. A reusable dismissible announcement bar is in place at the top of the app for one-off notices, and the sidebar itself is tightened up so more of the navigation fits without collapsing groups.

Feature
Sales Integrations

Bulk Forward Shipments

Forwarding shipments is now a bulk action. Select a set of shipments on the shipments list and forward them all in one go instead of opening each one individually. The bulk path runs the same forwarding logic per shipment as the single-shipment action, so any per-shipment failure is reported without holding up the rest.

Improvement
Sales Integrations Products

EDI: A Round Of Improvements

A broad round of improvements across the EDI order path — from how orders come in, to how they’re matched against your catalog, to how outbound documents go out.

Inbound matching and units. Inbound EDI orders now match products through the same partner-identifier registry you maintain on the product page — UPC, ASIN, TCIN, whatever the partner sends — and convert cases or inner packs to eaches automatically, using a per-partner unit-of-measure mapping so quantity and price land correctly. Those mappings now live on the integration’s Data mapping tab, so you can add, edit, and remove them yourself instead of asking engineering to. A line that can’t be matched or converted doesn’t fail the whole order — it’s flagged and held so you can finish the mapping and let it through.

Inbound carrier mapping. Incoming orders resolve their requested carrier through the same custom and global carrier mappings other integrations use, so per-brand and global mappings you’ve set up for a partner’s carrier codes are applied on the way in. When no mapping matches, the raw external value is kept on the order so it can be resolved on the fulfillment.

Inbound B2B data. Orders created from an inbound document now carry their B2B data — label and routing flags — straight onto the order.

Outbound documents. Acknowledgments, ship notices, and invoices are flowing reliably again. Acknowledgments carry the right PO references, a class of documents that used to render empty on certain orders now renders correctly, and ship notices and invoices that had silently stopped going out after an internal migration are going out again — each ship notice tied to its specific shipment, and the invoice sent once, when the order finishes shipping. The per-partner configuration you already have still controls which documents are sent, and a document that fails to send now surfaces instead of failing silently.

Forward Shipment now works on EDI orders, and moved to the per-fulfillment action menu — click it and the same Advance Ship Notice dialog opens for review before sending. For every other integration the button behaves as before.

Behind the scenes, order shipments are backstopped so a near-simultaneous webhook can’t create a duplicate, the admin bulk-deliver task sends acknowledgments alongside ship notices and invoices, and the internal tool used to author and validate a trading partner’s template got a faithful live preview plus a dry run that shows exactly how an order would resolve, without touching a real order.

Feature
Inventory Integrations

Inventory Syndication: Per-Channel Sync And Bulk Controls

Inventory sync is no longer all-SKUs-or-no-SKUs on a channel. The Inventory list has a Sync tab with one column per connected sales channel, showing whether each SKU is syncing and the quantity that would push. Select rows and use Bulk Actions → Disable / Enable Inventory Sync to mark a SKU out of stock on one channel without touching its inventory anywhere else, or open an item’s quickview and toggle individual channels from the Channel Sync card.

When a SKU is opted out on a channel, Endless pushes a quantity of zero on that channel; every other channel keeps pushing the real on-hand. The same SKU can be out of stock on one channel and live on another. Opt-outs take effect on each channel’s next scheduled push, on Shopify, Rithum, Walmart, Amazon FBM, Faire, Sellbrite, Skubana, and Orderful.

The item detail page’s Syndication card also picked up a header control that acts across every connected integration at once. A status badge reads Active, Out of Stock, or Mixed at a glance, and one button flips every channel to active or every channel to out of stock in a single call instead of toggling each row on its own. Per-integration quantities on the same card now read with thousands separators — 1,234 instead of 1234.

Feature
Integrations Inventory

Packiyo: Inventory Sync And A Warehouse Mapping Tool

The Packiyo integration picked up inventory alongside its order push. Available quantity is pulled from Packiyo on a schedule and on demand, and lands per warehouse: each Endless warehouse that’s mapped to a Packiyo warehouse gets its own quantity, allocated stock keeps being layered in from Endless on top, and warehouses with no Packiyo mapping are skipped.

Setting up those mappings now has its own tool. The Data Mapping section on the Packiyo integration lists the warehouses Packiyo returned and lets you map each one to an Endless warehouse from a single screen instead of hand-editing external relations. Existing setups keep the same shape.

On the shipping side, Packiyo now uses its own carrier mapping when Endless ships an order through it, so only the shipping method name has to line up on the Endless side, and the Packiyo order push carries the Endless carrier service name on each outgoing order. A few API response fields also read back correctly now.

Improvement
Supply

Purchase Orders And Shipments: Full-Precision Unit Costs

Unit cost fields on purchase order lines and shipment product costs now show and save their full supported precision — up to four decimal places — instead of being silently capped at two. The edit box starts at two decimals and expands only when a value actually has more precision, so 10.12 still reads as 10.12 and 10.123 reads as 10.123. The read-only Unit Cost column picks one precision per column — the most precise item in the column, up to four — so every row stays aligned without hiding any item’s precision. Extended cost and total columns still show at two decimals.

Improvement
Sales Integrations

Resolve Carrier Service: Save The Mapping For Next Time

When an order arrives with a carrier service Endless doesn’t recognize, the Resolve carrier service dialog on the fulfillment now offers a checkbox: Map to for future orders. Tick it and the chosen mapping is saved as a custom carrier mapping for that integration, so the next order with the same external carrier name resolves on its own. Leaving the checkbox unchecked applies the carrier to just this fulfillment, same as before. The dialog also skips offering the checkbox if a mapping already exists for that external name. The Resolve shipping address dialog now reuses the same form as the regular Shipping Info editor, so the entry surface is one consistent surface instead of two.

Feature
Sales

Sales Orders: Create Fulfillments In Bulk

Orders that land without a routing automation used to leave you creating fulfillments one order at a time. Sales Orders now has a Create Fulfillments bulk action: select up to 50 orders, choose a routing strategy, and Endless creates the fulfillments by running that strategy across them. Orders that already have fulfillments are skipped so nothing gets over-fulfilled, and the running progress and skip summary land in the notifications toast and panel.

Feature
Integrations Inventory

ShipStation And Shopify: Map Endless Warehouses To External Locations

ShipStation and Shopify integrations can now map each Endless warehouse to a specific external warehouse or location, instead of having a single one stand in for everything.

On the Integration Data tab, the Warehouses card has a Manage Mappings action that pulls the live list of warehouses (ShipStation) or locations (Shopify) from the integration and lets you pair them up. Mapped warehouses show their external name in the card; an existing mapping can be removed in place. ShipStation orders sent out for a mapped warehouse now route to that ShipStation warehouse, instead of falling back to the integration’s default. The Shipping Carriers and Sales Channels cards on the same tab were lined up with the new table layout and mapping status badges so all three read the same way.

Improvement
Products

Product Units Of Measure: More Options In The Dropdown

The unit of measure dropdown on the product page picked up a lot of new options. Weight now has Gram, Kilogram, Ounce, and Pound alongside the existing entries. Volume gains Fluid Ounce, Milliliter, Liter, and Gallon. Length and area cover Millimeter, Centimeter, Meter, Inch, Foot, Square Foot, and Square Meter. Container and grouping units — Bale, Bundle, Drum, Jar, Pair, Pallet, Roll, Sheet, Tin, Tray, and Tub — round out the list.

Improvement
Sales Integrations

ShipStation: Manual Shipment Fetch Is Logged On The Order

When you manually trigger Get External Shipment on a ShipStation fulfillment and ShipStation reports that the shipment hasn’t shipped yet, that result now lands as an activity log entry on the order — so it’s clear from the timeline that the fetch ran and what came back. The nightly background check keeps suppressing the same log entry to avoid noise; only the user-triggered case posts.

Improvement
Integrations Platform

EDI: Easier To Reach From Where You Work

EDI now shows up across the app instead of only on the EndlessEDI integration tile. The Orders, Channels, and Integrations empty states each include a Connect over EDI option, the Dashboard carries a small EDI card, and the sidebar footer has an EDI button. Each opens a Talk to us about EDI modal with a booking link, the EDI guide, and an email fallback.

The Integrations page also picks up a richer EDI-ready tray, opened from its empty state. The tray shows your account’s ISA ID, the qualifier, and the supported communication channels, and includes a drafted retailer-outreach email you can preview and copy when you’re starting EDI with a new partner.

Feature
Sales Integrations

Orderbot: Create Sales Orders By Forwarding An Email

Orderbot is a new way to capture sales orders that come in over email. Every company has a forwarding address ending in @orders.endlesscommerce.com — visible at Settings → Orderbot, on the Sales Orders ⋯ menu, and as a secondary action on the empty Sales Orders state. Forward an order email to that address and Endless turns it into a draft sales order. The primary Add order button is unchanged.

Feature
Sales Platform

Automations: Assign A Fallback Carrier Before Auto-Processing

Automations have a new Assign Fallback Fulfillment Carrier Service action. It sets a carrier on a fulfillment that doesn’t have one yet, leaving any fulfillment that already has one untouched. Run it before Assign Fulfillment Profile in the same automation and a fulfillment that arrived without a carrier picks up the fallback first and then auto-processes, instead of stalling because no carrier was set.

Useful when a sales channel — particularly a custom one — doesn’t carry a carrier through on the order, and the same fallback applies regardless of which fulfillment profile ends up running.

Improvement
Sales Integrations

Orders V2 Beta: A Week Of Improvements

Orders V2 — the new order and fulfillment system that most accounts are now running on while it works its way to general availability — picked up a wide round of improvements this week. None of these are large on their own; together they’re the shape of the system getting closer to GA.

Order data. Notes are now real fields on orders and fulfillments instead of being tucked into ad‑hoc data, and Shopify customer notes sync straight into the order note. B2B information lives in its own stable place on both the order and the fulfillment — so reports and integrations can read it without poking around — and the third‑party billing card is gone, with its fields rolled into B2B Info. The order timeline now reads from the system log and labels every event as System, Human, or coming from a connected integration.

Editing in‑flight orders. Item edits used to be blocked outside of draft. They’re now allowed in any non‑cancelled state, and lines that aren’t tied to an active fulfillment can be edited even when the order is in progress or already fulfilled — so a correction on a live order doesn’t require walking it backwards. Items that came in marked Not in catalog can be re‑matched by SKU, linked to an existing product, or turned into a new catalog product on the spot. Pending orders with an unrecognized SKU no longer get blocked from acceptance.

Fulfillment. The Refresh Order button works on V2. Fulfillment profiles can be assigned even on in‑progress fulfillments, and the Create button shows up when none exist. The Mark Fulfilled action stays visible (enabled only when the fulfillment can actually be marked or is running through a profile). The fulfillment integration button now points at the right system. The availability panel reads from an order‑scoped source so it loads on large orders. Cancelled orders no longer show an empty Items to Fulfill section. The metadata tab is cleaner, with external ID editable inline. Endless Window fulfillment profiles got a coverage follow‑up. Sales order details auto‑expand the sections that have content.

Shopify on V2. Several Shopify edge cases stopped surprising people: fulfillment state no longer slides backwards, cancellations propagate to Endless, digital order lines and fulfilled counts line up correctly, and near‑simultaneous webhooks can no longer duplicate a shipment. Cleanup tasks are bundled in for orders the bugs already touched.

We’ll start logging V2 changes individually once the beta closes; while it’s still in flux this often, grouping reads better than enumerating.

Improvement
Integrations Products

Push Product Data: From The Products List, And Now To Shopify Too

The Push Product Data action is reachable from the products list as a Bulk Actions → Push Product Data, alongside the existing entry on a product’s detail menu, and can now target Shopify as well as ShipHero. The dialog has an integration selector with a per-integration settings recap — Shopify shows the attribute mappings, ShipHero shows kit type and the rest — and pre-fills the toggle settings from each integration’s configured defaults. Settings categories with nothing visible are hidden, so the dialog stays focused on what matters for the chosen channel.

Feature
Sales Supply

Fulfillments: Assign A Supplier (Dropship)

A fulfillment can now carry an assigned supplier. The fulfillment detail page has a new Supplier card to assign, change, or remove the supplier; fulfillments with a supplier present show a Dropship badge, and the fulfillment orders list gains supplier and Dropship columns and filters. The underlying record stays neutral — it’s an association to a supplier — so the same data can later be reported on by supplier without a redesign; the Dropship treatment lives in the UI.

Feature
Integrations Products

ShipHero: Push Product Data From Endless

Product details can now be pushed from Endless into ShipHero. Run the new Push Products action and Endless looks each SKU up in ShipHero, then creates or updates the product with name, SKU, barcode, dimensions, country of manufacture, tariff code, customs description, value, and customs value. Bundles reconcile their kit components in the same pass. Inventory is never touched by the push — only the product record.

The ShipHero settings tile also got a small tidy: the kit-type choice (Virtual or Pre-Built) is now explicit, the wholesale and 3PL copy reads more clearly, and a few settings that were never wired to anything have been hidden.

Improvement
Integrations Sales

ShipStation: Pick Stores By Name Instead Of Typing Store IDs

The ShipStation sales-channel mapper no longer asks operators to paste in a raw store ID. On a ShipStation integration’s Data tab, Add Mapping is now Manage Mappings, which opens a modal that fetches your stores live from ShipStation and shows each as Store ID, Store Name, and the sales channel it’s mapped to. Existing mappings appear at the top, read-only; unmapped stores appear below with a sales-channel picker. Re-fetching the list never duplicates a store you’ve already mapped.

The store name is saved alongside the mapping, so reports and detail pages can show the human-readable name. The free-text edit pencil has been retired for ShipStation rows — to change a mapping, delete it and re-map through the modal, so the store ID and name can’t drift apart.

This is what last week’s channel-listing work was for. Any other integration that exposes a list-channels capability gets the same shape automatically.

Improvement
Inventory

Inventory Import: Items Made On Demand, Unrecognized SKUs Don’t Sink The File

The inventory CSV import no longer needs an inventory item to already exist for every SKU. If a row references a product that doesn’t have an inventory item yet and has stock to record, the item is created on demand and the stock is adjusted. Zero-stock rows for SKUs with no item are skipped — there’s no point creating an empty record.

Rows whose SKU has no matching product at all used to fail the entire import. Now they’re skipped and every skipped SKU is listed in the import summary, so the rest of the file goes through and you can fix the unrecognized SKUs afterwards. Rows with real data errors (bad warehouse, bad location, bad stock value) still fail the import — genuine CSV problems are not silently swallowed.

This unblocks operators whose products were created in bulk without ever provisioning inventory items.

Feature
Integrations Supply Sales

Packiyo Available As A Fulfillment Integration

Packiyo is now a connected fulfillment integration. Set up the connection from the integrations settings — the new Packiyo tile takes a per-brand bearer token and a tenant URL — and once it’s saved, Endless pushes allocated fulfillments to Packiyo as orders and records shipment and tracking back automatically: by webhook in normal operation, with a scheduled backstop that picks up anything the webhook missed.

This is the first phase of the Packiyo integration; it covers authentication, ship-order push, and shipment sync.

Improvement
Supply

Purchase Orders: Expected Complete Date In Details, Filterable By Range

The purchase order details card now shows and edits Expected Complete Date — the date you expect the PO to be fully complete — wired to the existing field that the CSV importer already populates. The purchase orders list and the export also gain the matching date-range filter for Expected Complete Date, so reports can be sliced by it the same way as the other PO date fields.

This consolidates around the existing Expected Complete Date instead of the briefly-shipped Ready Date field; per product direction, Ready Date is no longer surfaced in the UI.

Feature
Supply

Suppliers: Import Them From A CSV

Suppliers can now be imported into Endless from a CSV, using the same import flow as products and orders. The entry point lives on the Suppliers page — including its empty state — so the first set of suppliers can be brought in without entering each one by hand.

Improvement
Inventory

Inventory Refresh: Faster, And Now Targeted

The Inventory page’s refresh got faster on bigger catalogs and picked up two targeted actions to replace the single Refresh button. The general refresh used to do per-row work that ballooned into hundreds of thousands of small operations on larger accounts; it now runs the same recalculation in a small handful of bulk passes, so big accounts pick up correct counts much faster. Alongside that, the refresh dropdown now offers two targeted actions in addition to the full refresh: Recalculate Inventory Levels and Pull Inventory From Integrations. The two halves can be run independently — useful when only one side needs to re-run, or when troubleshooting which step is responsible for a stale number.

Feature
Supply Sales

Purolator Available As A System Carrier

Purolator is now selectable as a system carrier alongside the other system carriers, so brands shipping with Purolator can pick it on shipping methods and fulfillments without a custom carrier setup.

Improvement
Products

Attributes List: Tag View By Default

The attributes list opens to the tag view now instead of the table view. The tag view is denser and more visual, and the table view is still one click away in the display options.

Feature
Platform

Automations: A Real When / If / Then Builder

Creating and editing an automation now happens in a real builder instead of a name-and-trigger dialog. New automations open in a quickview that walks you through When (the trigger), If (conditions), and Then (actions); a toggle takes the same editor full page when you want more room. Editing an existing automation happens inline inside the Workflow card on the automation detail page — the header and tabs stay put, only the card content swaps between read and edit.

The trigger picker is searchable. Conditions group into Any/All blocks that can be nested, and each field gets a value editor appropriate to its type — chips for tag-like values, selects for fixed lists, numeric inputs for numbers, a date picker for dates, and live pickers for things like products and warehouses. Actions stack as cards with their parameters inline.

Improvement
Integrations Sales

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
Supply

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
Platform

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
Integrations Sales Products

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
Integrations Sales

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
Integrations Supply

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
Sales

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
Supply

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
Platform

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
Sales

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.

Improvement
Integrations Sales

ShipStation: Route Orders To The Right Store Per Sales Channel

If you run multiple ShipStation stores behind a single ShipStation connection, you can now route orders to the right store based on the sales channel they came in from. Map each sales channel to its ShipStation store id on the ShipStation integration, and orders from that channel will ship out of that store. Channels without a mapping continue to use the integration’s default store, so nothing changes until you start filling the mappings in.

Improvement
Sales

Order Update Notifications Now Identify The Order

When you have an order detail page open, the app already pops up a notification any time another teammate or an integration makes a change to that order, so what you’re looking at stays in step with what’s actually happening to the order. Those notifications now lead with the order number (“Order #1234 updated”) and call out which part of the order changed, instead of generically announcing that something was edited. If a few arrive at once, you can tell at a glance which order each one is about and where the change was.

Improvement
Products Inventory

Creating Products Is Faster On Accounts With Many Warehouses

Creating a new product — from the UI, a clone, an import, or an integration — used to do a round of work per warehouse location to seed its starting zero-stock inventory. On accounts with many warehouses and many locations per warehouse that added up to hundreds of database operations per product, which was the dominant cost of product import. It now does the same seeding in a single batch, so the time per product no longer grows with the number of warehouse-locations. Same set of locations gets seeded at zero stock; just much faster.

Improvement
Sales Integrations

One Building, Many Fulfillment Integrations

A single building can now serve more than one fulfillment integration. Instead of every fulfillment from a warehouse defaulting to that warehouse’s one integration, each fulfillment can carry its own — and playbooks can pick the right one automatically based on the rules you set up (order source, brand, customer type, anything a playbook condition can read).

In practice: one building can route some fulfillments to ShipHero, others to Extensiv, others to a 3PL — all from the same physical location, all automated. The Send / Resend button on the fulfillment card now shows the actual integration the fulfillment is going to, and downstream work — cancel, schedule, retry — follows the same routing the playbook chose, end to end.

Improvement
Sales

Sales Orders List: Refreshed Layout And Click-Through Status Details

The Sales Orders list has had a tune-up. Columns are tighter, you can reorder them, resize them, and the horizontal scroll stays put as you go. Use the new Source filter to narrow the list to one channel — Shopify, Faire, manual, and so on — without leaving the page.

The status badge is now interactive. Click it to open a details panel that surfaces what you usually want next: outstanding issues on the order, how many items are in each fulfillment, copyable tracking numbers, and on V2 orders, a callout for any items that aren’t yet assigned to a fulfillment.

Improvement
Integrations Sales

Sales Channel Mappings: New Editor

The Sales Channels panel on an integration’s Data tab has been rebuilt. The mapping table now shows External ID → Internal Sales Channel side by side, with Add, Edit, and Delete buttons on each row. Adding a mapping opens a dialog where you pick the internal channel from a dropdown. Editing a mapping lets you change the external ID; to point an external ID at a different internal channel, delete the row and add it back. Shopify, Orderful, and Veracore are on the new editor today.

An external ID can now map to at most one live internal channel per integration. If automatic discovery tries to write a mapping that would collide with one you already have, it stops and tells you instead of adding a duplicate.

Auto-discovery writes and the Infoplus ship-order step are reading and writing through the new system as well. Trackstar is still on the older one for now and will follow.

Improvement
Sales Inventory

Fulfillment Decomposition: Clearer Inventory At Decision Time

The fulfillment workspace on an order detail page now shows what you can fulfill with, rather than what exists on paper. Draft fulfillment items show building-level availability, and items made from components show both what’s already built and what can still be built from the parts on hand — hover any of those to see exactly which components feed the count. Decomposed rows are styled distinctly from regular order items so the structure is easy to read at a glance.

The items-to-fulfill table now includes availability, on-order quantity, and how many of each item are still left to fulfill — the same three numbers you’d otherwise have to click around to gather. The building selector also factors in what can be made from components, so it stops pointing you at a warehouse that has the parts but not the finished good.

Across the order, items-to-fulfill, and fulfillment tables, links now point at the inventory item where one exists, and fall back to the product when it doesn’t, so a click takes you to the more useful place.

Decomposition isn’t available on our legacy order system.

Improvement
Sales Platform

Sales Orders List: Faster Page, Steadier Filtering

The Sales Orders list is faster. The page now opens from a cached copy and refreshes in the background, so you see your orders right away instead of waiting through a full load. Filtering, sorting, searching, and paging keep your current rows on screen while the next set loads in behind them — no more flash to an empty skeleton between actions.

Underneath, the result count loads on its own so paging doesn’t recount the whole filtered set every time, and a few extras-only columns (PO Number, Customer Reference, Vendor Number) only fetch their data when they’re actually on screen. Two crashes also got cleared out: orders whose source integration had no name were taking the whole page down, and the cold-load skeleton used to leave a gap of empty table underneath.

Improvement
Sales

Edit Order Details After An Order Has Moved On

You can now edit details on an order — expected ship date, sales channel, B2B / PO / customs info — at any point in its life, not only while it’s in Ordered, Draft, or Error. Whether the edit is allowed comes down to who owns the order: if it’s an order you manage in Endless, you can update it; if it’s owned by an external system, the edit is still blocked the same way it always was.

Line items still lock once an order has been placed — this change is about the order-level details, not the cart. The Change Sales Channel dialog rides the same path and now opens cleanly on every order.

Improvement
Platform

Automation Actions Run As The System

Actions taken by an automation now show up in the activity log as performed by the system, rather than being credited to whichever user or integration happened to set the automation off. Automations can also run against events that didn’t have a user or integration behind them in the first place — anything kicked off on a schedule or by the platform itself.

Improvement
Integrations

Carrier Aliases Available On Most Integrations

The Add Alias button for shipping carriers is no longer Shopify-only. Custom carrier mappings can now be added on every integration except QBO — including EDI (Orderful), Amazon, Walmart, Rithum, Business Central, Cin7, Sellbrite, Skubana, Extensiv, Gobolt, Trackstar, MasonHub, Infoplus, ShipHero, ShipStation, Veracore, and Faire.

Improvement
Platform

Primary Nav Restructure And Settings Sidebar

The left sidebar is now organized into collapsible category groups — Catalog, Orders & Fulfillment, Inventory, Supply Chain — with Dashboard pinned on top. Admin has been folded back into the other groups: Buildings now lives under Inventory, Automations under Orders & Fulfillment.

Settings has moved off the bottom of the sidebar to the top company dropdown (or G+S). Opening it swaps the primary nav for a Settings sidebar grouped into Account, Workspace, and Operations, with a “Back to app” link at the top. G+S now goes to Settings; Supply Chain has moved to G+U.

Fix
Sales Products Platform

Products And Orders Pages Fast Again On Large Accounts

A round of performance work on the Products and Orders list pages and the order detail page. On large accounts these pages had been creeping up to tens of seconds, and on the largest order histories the Orders list was timing out entirely and falling through to an empty state. They’re all back down to milliseconds, regardless of how many products or orders an account has.

Order detail pages also return immediately again — the activity timeline fills in once the main page is up, instead of holding the whole page back until it’s ready.

Fix
Inventory

Inventory Locations Tab: Faster, Clearer On Errors

The Locations tab on inventory item detail now loads faster on high-volume buildings — previously it could time out — and shows a clearer error/retry state when the underlying query fails, instead of falsely showing “No warehouse inventory found yet.”

Improvement
Supply

Actual Arrival And Container No. On PO Shipments

Two new columns are available on the Shipments tab of purchase orders and the main supply shipments list: Actual Arrival and Container No. Both are sortable from the column header and can be toggled from the column menu.

Improvement
Platform

Automations: Fulfillment Triggers Cover Imported Orders

An automation on the fulfillment created trigger now runs for fulfillments that arrive from a connected channel, such as Shopify or Amazon, as well as for fulfillments created in Endless. Conditions that read order tags or other order details resolve correctly on those runs, so a rule you wrote for manual fulfillments applies to imported ones too.

The fulfillment updated trigger has been retired; the more specific fulfillment triggers beside it replace what it covered.

Feature
Supply

Book Freight Tool

Book Freight is now available from the Supply Chain menu in Endless. The tool walks teams through a freight booking request, collecting the shipper, consignee, pickup and delivery locations, cargo-ready date, freight mode, shipment type, incoterm, ports, container counts, cargo details, and special instructions.

It supports ocean, air, truck/LTL, and rail bookings, with FCL and LCL handling for ocean shipments. Compliance fields cover batteries, hazardous materials, dangerous goods, and other special cargo, and the review step summarizes the request before it is submitted to the forwarder.

Improvement
Integrations

DSCO: Brand Carrier Names Flow Through To Orders

DSCO orders now ship out with each brand’s own carrier service names. Up until now, every brand on a DSCO connection shared the same integration-wide carrier mapping — even when a brand had its own mapping set up. Brand-level mappings now take priority, with the integration-wide mapping kicking in only when a brand doesn’t have its own.

Feature
Supply

Tariffs Tool

The Tariffs tool is now available from the Supply Chain menu in Endless. It brings the HTS catalog into the app, so teams can search tariff descriptions and HTS numbers, browse chapters and headings, and look up general, special, and column-2 duty rates without leaving their workspace.

The tool also includes a duty and tariff simulator for checking an HTS code against country-of-origin rules and Chapter 99 overlays, including Section 301, Section 232, and IEEPA-related duties. Refund FAQs, claim guidance, and tariff updates are available from the same tool.

Improvement
Inventory

Choose The Granularity Of An Inventory Export

The inventory export now opens a granularity dialog so you can choose one row per SKU, one row per warehouse per SKU, or one row per warehouse location.

The active filters on the inventory list are also carried through to the export, so a filtered list produces a filtered export.

Improvement
Sales

Order Export Variants: Compact, Shipments, Cartons

Order exports now offer four formats: Orders + Items (the existing default), a compact Orders-only export, a Shipments export, and a carton-level export. The format is chosen in the Export dialog on the Orders list.

All orders are now included in every format — previously the export was missing orders from our newer order system.

Improvement
Integrations

ShipHero Shipments Flow Back Into Endless

Shipments from ShipHero now flow back into Endless automatically in real time, with a daily backfill catching anything missed. Endless also records the carrier service name on each shipment, so labels like “UPS Ground” appear on the order without manual entry.

This is a continuation of the ShipHero integration first announced in May.

Improvement
Sales

SKU Column On The Orders List

The SKU column on the Orders list now shows an interactive hover card listing every SKU on the order, instead of the previous misleading pill that looked like a button.

Improvement
Products

Tag View For Product Attributes

Product Attributes can now be viewed as color-coded tags as an alternative to the existing data-table view. The tag view groups attributes by section, color-codes each tag by attribute type, and offers per-tag actions for display, edit, move, and archive.

A toggle on the Product Attributes page switches between the two views.

Improvement
Products

Product Imports: Update Archived Products From A CSV

A product import can now update a product you have archived. Include its SKU in the file and the row is applied to the archived product, the same as any other row. Before this, a row matching an archived SKU stopped the import.

The row also decides where the product ends up. Mark it as archived and it stays archived with your changes saved; leave that column clear and the product returns to the active catalog.

Improvement
Supply

Delete A Purchase Order From Its Details Page

Eligible purchase orders can now be deleted directly from the PO detail page’s Actions menu, matching the option that already existed on the PO list. Same eligibility rules apply.

Improvement
Platform

Paginated Brand List With Handles

The Brands list now loads in pages (search still works as before) and shows each brand’s handle on both the list and the brand detail Settings view. This change is particularly relevant for retailers who may work with hundreds of brands.

Improvement
Supply

Purchase Orders Tab On Inventory Item Detail

Inventory item detail pages now include a Purchase Orders tab that lists every PO containing the SKU, with PO number, supplier, status, expected date, and ordered/received quantities.

The active tab is also reflected in the URL, so a link goes straight to the right tab.

Fix
Inventory

Archiving A Building Preserves Its History

Archiving a building now archives its locations and external data instead of deleting them. Inventory adjustments, ASN items, and transfers tied to those locations remain intact, and archiving large buildings — which previously failed outright — now succeeds.

Improvement
Products

CSV Imports Tolerate Whitespace

CSV imports now strip leading and trailing whitespace from each cell. Rows that previously failed silently because a SKU or identifier carried a stray space now import correctly. This applies to product, inventory, composition, and purchase order imports.

Improvement
Products

Import And Export Relationships

The Import Components and Export Components menu items on the products list are now called Import Relationships and Export Relationships, lining up with the rest of the catalog vocabulary. Behavior is unchanged.

Feature
Integrations

Rithum Integration

Rithum (formerly DSCO) is now available as a sales integration in Endless Commerce. Orders sent through the Rithum network arrive in Endless and can be fulfilled through the same workflows used for every other sales channel, with shipment information flowing back to Rithum on dispatch.

For businesses already selling through Rithum-connected retailers, this hooks that volume directly into the same inventory, order, and fulfillment tooling used for every other channel.

Improvement
Supply

Record Received Date On Supply Shipments

The supply shipment detail page now lets you record a Received Date directly from the Key Information edit form, so the actual arrival date is captured alongside the rest of the shipment metadata.

Fix
Platform

Dashboard Performance

Dashboard data now loads faster when opening the dashboard or refreshing its data.

The same data-loading work will also support future reporting features.

Improvement
Products

Product Status Has Been Deprecated

The legacy product status field, used to mark products as active or inactive, has been retired. Product lifecycle can now be handled by archiving a product to hide it from normal views, or by setting up a custom lifecycle attribute for catalog-specific stages.

Archived products can be viewed with the Archived filter on the products page.

Feature
Integrations

ShipHero Integration

ShipHero is now available as a fulfillment integration in Endless Commerce. Inventory and fulfillment data can flow between Endless and ShipHero alongside other 3PL connections like Extensiv and ShipStation.

Improvement
Platform

Filter The Activity Feed By Date

The activity feed on inventory, products, orders, purchase orders, and shipments now supports filtering by date range. This can be used to review changes within a specific period.

Improvement
Products

Filter And Export Products

The product export tool now respects the filters active on the product list. The export contains the filtered product set, and a count is shown before the file is generated.

Every product filter is supported, including the option to include archived products. This matches the filtered export pattern already available on orders.

Feature
Integrations

Pre-Sell Inventory On Shopify

Shopify integrations can now push Future Available To Sell numbers — inventory that is on the way to a specific building but has not arrived yet — instead of only the inventory that is currently on hand. When a shopper places an order against that future inventory, Endless Commerce can hold the order until stock physically lands, then release it for fulfillment.

Improvement
Products

Favorite Product Attributes

Product attributes can now be pinned to the Key Info tab on the product detail page. Unpinned attributes remain available on the Attributes tab.

Improvement
Products

Archiving Products

Products can now be archived. Archived products are hidden from the product list and from search across the app.

To view or restore archived products, apply the Archived filter on the products page.

Improvement
Inventory

Filter Inventory By Building

The inventory page now includes a building selector in the top right that filters the table to show counts for the selected location. Multi-select is supported, so inventory can be viewed across any combination of buildings.

Building filters can be combined with product attribute filters on the same page.

Feature
Supply

Reference Numbers On Extensiv ASNs

For buildings managed in Extensiv, the Create ASN action can now send a custom reference number that maps to the Lot # field in Extensiv. The same value can also be sent as the Receipt Advice Number on Extensiv receipts.

Both options are configured in the Extensiv integration settings.

Improvement
Platform

Multi-Brand Operations

All record types in Endless Commerce are now scoped to the company rather than to an individual brand. Products from different brands can share the same building, a single purchase order can cover multiple brands, and one inbound shipment can carry goods for several brands at once.

The Brands menu has moved under Catalog in the sidebar. More brand-level features are planned for brand-specific assets and settings.

Feature
Sales

Canada Post Is Now A System Carrier

Canada Post is now part of the system-defined carrier services in Endless Commerce, with both regular and expedited options available. Canada Post can be selected directly when assigning a shipping service to an order, without custom carrier setup.

Improvement
Integrations

Integrations Organized By Function

Integrations are now grouped by business function in the integrations list. Sales includes channels like Shopify and Walmart, Fulfillment includes warehouse and shipping systems like ShipStation and Extensiv, and Accounting includes finance tools.

The groups make it easier to find integrations by the work they support.

Feature
Integrations

Walmart Integration

Walmart is now available as an upstream integration in Endless Commerce. Like other upstream channels, it can send inventory updates out to Walmart and bring sales orders back in to be fulfilled through the rest of the Endless toolset.

For businesses already selling on Walmart or planning to start, this connects that channel directly into the same inventory, order, and fulfillment workflows used for every other sales channel.

Improvement
Inventory

Shopify Inventory Settings Have Moved

Shopify inventory settings have a new home. When sending inventory to Shopify, everything is now controlled from the building detail page — the place in Endless Commerce where a physical warehouse or fulfillment location is configured. From there, the inventory source for a building is defined, along with which connected buildings in other systems should receive that inventory.

Putting these controls next to the building they belong to makes it easier to keep Shopify and Endless in sync without hunting through separate settings screens.

Improvement
Platform

Faster Search for Orders and Products

Search now works like this: the default experience looks at the key identifiers of an order or product, so common lookups return results right away. When a broader search across all product or order data is needed, the deeper search is still available as a secondary tool on the same screen.

Most of the time, finding the right order or product should feel instant. For the times when a wider net is needed, the option is one click away.

Fix
Products

Product Attribute Groups

Related product attributes can now be grouped together, which makes product data a lot easier to scan and update. To set a group, open an attribute definition and fill in the Group field. The full list of groups in your account is simply the combination of every group name that has been typed in, so no separate setup is needed.

If “Taxonomy” and “taxonomy” end up side by side, the fix is quick: open each attribute definition and standardize the spelling. That fits the broader Endless approach of keeping data fixable where it lives, rather than generating meta work to clean it up somewhere else.

Feature
Inventory

New Inventory Definitions

Endless Commerce now includes three clearer inventory definitions that show up across the app. Available To Sell is the total amount of inventory that can still be sold after every received order has been fulfilled. Available To Allocate is what remains free to assign to fulfillment orders. Total Incoming covers everything on the way in, including inventory on a purchase order that has shipped, inventory on a purchase order that has not shipped yet, and any other incoming stock.

Shared definitions like these make it easier for operations, sales, and support to look at the same screen and reach the same conclusion.

Improvement
Inventory

View Incoming Inventory by Building

For businesses running multiple active buildings — the physical warehouses or fulfillment locations set up in Endless Commerce — incoming inventory can now be viewed on a per-building basis. Open any product’s inventory detail page and head to the location tab to see exactly what is on its way to each site.

This makes it a lot easier to plan receiving, spot gaps before they become stockouts, and coordinate across locations without piecing the picture together by hand.

Feature
Platform

Guest Users

Guest users are now a built-in part of Endless Commerce. Add them to a team to give anyone read-only access to the data in your account — a useful option for advisors, partners, or anyone who needs to look but not touch. Guest users can view everything except the list of other team members, keeping internal team details private.

Improvement
Inventory

More Detailed Inventory Visibility

More detailed inventory tools are now available across Endless, giving a fuller picture of stock wherever decisions get made. The inventory page has also been updated with clearer, simpler inventory definitions right alongside the numbers, so everyone on the team can look at the same screen and mean the same thing when they say “available to allocate” or “incoming.”

Better visibility plus shared language makes inventory easier to reason about, especially as operations grow more complex.

Feature
Products

Add Multiple Products Directly in the UI

Adding a handful of new products no longer requires a bulk spreadsheet import. Multiple products can now be created at the same time directly in Endless, starting with just the essentials like product name and SKU.

This fits the broader Endless approach to catalog building: start simple, then enrich each product incrementally rather than trying to get everything perfect in one giant import. For small batches, it is a much faster way to get items into the system and keep moving.

Fix
Inventory

Smarter Inventory Counts for New Locations

When a new building or storage location is added to Endless, there may be no existing inventory record for certain SKUs at that location. Previously, this absence of data could create ambiguity in stock calculations. Now, Endless treats any missing record as zero units.

This makes it easier to set up new fulfillment locations without worrying about gaps in inventory data causing unexpected behavior elsewhere in the system.

Improvement
Inventory

Bulk Inventory Updates via CSV

A CSV import for bulk inventory updates now only needs three columns: SKU, building ID, and stock level. Endless will automatically apply those counts to the default available location for each item if no location ID is provided.

This is particularly useful when a direct API connection to a warehouse or building isn’t available, or when the building only uses default storage locations rather than a more granular location structure. Updated documentation covering this workflow is now live in our help docs.

Improvement
Supply

Attach Documents to Suppliers

Certifications, contracts, bank details, and other supplier-related files can now be uploaded directly to a supplier’s record in Endless Commerce. Each document lives alongside the supplier it belongs to, making it easier to stay organized as your vendor relationships grow.

Improvement
Products

Character Limits for Identifiers

All identifiers across the system such as SKUs and order numbers are now capped at 40 characters. This keeps the visual experience stable and consistent throughout the app, avoiding display issues that can occur with unexpectedly long values.

Feature
Supply

Add Documents to Purchase Orders

Purchase orders now support file attachments. Any documents relevant to a PO — contracts, supplier confirmations, packing specs, or anything else — can be stored directly alongside the order, keeping all related information in one place.

Feature
Supply

Associate a Shipment Line Item to a Purchase Order

When a shipment contains line items that weren’t originally linked to a purchase order, it’s now possible to make that association directly — no need to remove and re-add the line item to get things connected.

Keeping shipment line items properly tied to purchase orders is important for accurate incoming inventory tracking. This change makes it easier to clean up or correct associations when shipments are created without the full context upfront.

Feature
Integrations

Extensiv Integration Now Available to All Merchants

The Extensiv integration is now available to all Endless Commerce merchants. Extensiv is a warehouse and fulfillment management platform used by many third-party logistics providers (3PLs), and this integration allows inventory and fulfillment data to flow between the two systems.

New configuration options have been added, including control over where ASNs (Advance Shipping Notices) are created when exporting to Extensiv. If your fulfillment operation runs through Extensiv, this integration is ready to connect.

Feature
Supply

Import Purchase Orders Via CSV

Purchase orders can now be created from CSV files. Each row can include a purchase order number, SKU, lead time, unit cost, and quantity, making it much faster to load line items for larger purchase orders.

After import, teams can open the purchase order in Endless to add supplier notes, milestones, and shipment associations.

Improvement
Platform

Guest User Role

You can now assign a guest role to users to give them read only access to your data. This is a good fit for stakeholders, auditors, or external collaborators who need to view data without making changes.

Improvement
Sales

Export a Filtered Subset of Orders

The order export tool now respects whatever filters are currently active on the orders list. Apply filters by date, product, status, or any other criteria, and the resulting export will contain only the matching orders — no more exporting everything and trimming it down afterward.

Feature
Platform

Copy ID And Raw JSON From Object Headers

Object headers now include a consolidated copy menu with actions for copying the Endless ID or raw JSON for the current record. The actions work across objects like orders, products, shipments, and purchase orders.

Copying IDs makes it easier to reference records in support, API, and internal workflows. Copying raw JSON gives developers, AI tools, and integration builders the full underlying data for debugging or mapping work.

Improvement
Sales

Filter Orders by Multiple Products at Once

The product filter on the orders list page now accepts multiple products at once. Previously limited to a single product, the filter now lets you select several SKUs or products in one go — handy for pulling up a broader slice of orders without multiple separate searches.

Feature
Supply

Shipments Now Link to Purchase Orders at the Line Item Level

Shipments and purchase orders are now connected at the line item level rather than at the shipment level as a whole. This change unlocks more flexibility in how shipments are managed: line items from different purchase orders can now be added to the same shipment, and each purchase order now shows a clear breakdown of shipment progress per line item.

This is a meaningful structural improvement for teams managing complex supply chains — particularly those splitting orders across multiple shipments or sourcing from several suppliers in one delivery.

Improvement
Sales

Filter Orders by Product

The orders page now includes a product filter. This makes it possible to search for all orders that contain a specific product.

Fix
Supply

Improved Shipment Receiving

Shipment receiving has been redesigned with a simple inline interface. Items can be received at any point during a shipment’s lifecycle — the shipment no longer needs to be marked as “In Receiving” first. Partial receiving, undoing received items, and quick full-shipment receiving are all supported. A confirmation dialog shows exactly what will change in the system before any receiving actions are committed.

Improvement
Products

Improved Product Image Management

A new unified product image management tool is now available. It supports drag-and-drop, bulk uploads, and reordering. The tool is accessible from the files tab on the product details page, from the product sheet view, and by clicking the featured image on the product details page.

Improvement
Platform

Dashboard Improvements

Dashboard cards are now interactive. Revenue and Total Orders link to the orders page with the appropriate date filters applied. Oversold SKUs and Low Stock Alerts link to the inventory table with relevant filters. The dashboard also includes subtle design refinements.

Improvement
Platform

Shared Features For Multi Brand Companies

Several features are no longer tied to individual brands and instead operate at the company level. This includes Buildings, Automations, Product Attributes, and Exports. As a result, a single building can now store inventory for products from multiple brands. Products, Orders, Integrations, Purchase Orders, and Shipments will follow the same pattern over the coming weeks.

Improvement
Supply

At Destination Status Removed

The At Destination shipment status has been removed from the shipment state flow. This status was too similar to Delivered, and removing it simplifies the process of moving a shipment through its lifecycle.

Improvement
Sales

Shopify Order Tags Sync

The reload order tool — used to refresh data for orders created by the Shopify integration — now supports pulling in updated order tags from Shopify.

Improvement
Inventory

Buildings Can Now Be Archived

Buildings — the locations used to manage inventory and fulfillment — can now be archived. This is helpful for staying organized, especially when cleaning up buildings that were accidentally imported from other systems. If a building can’t be archived, a clear list of reasons will explain what’s preventing it.

Feature
Sales

Bulk Actions for Order Processing

Order processing now supports bulk actions for up to 50 orders at a time. Select the orders you need to move forward and apply actions in one go — a significant time saver for teams handling high order volumes.

Feature
Inventory

Manual Inventory Refresh

A refresh button is now available on the inventory list page to manually trigger an inventory count update. Running a refresh pulls counts from any connected systems, recalculates allocated and ordered quantities, and initializes inventory for all locations and products. It’s a quick way to make sure everything is in sync.

Improvement
Inventory

Multi-Brand Companies Can Share a Building

Companies that operate multiple brands can now define a single building in the system and use it to manage inventory and fulfillment across all of their brands. This eliminates the need to duplicate building records and keeps everything centralized for multi-brand operations.

Feature
Platform

New Order Automation Actions

Automations just got more powerful for order management. It’s now possible to configure automations that update specific order fields — including expected ship date and financial status — based on predefined automation definitions. This makes it easier to keep orders moving without manual updates at every step.

Feature
Supply

Track Purchase Order Issue, Confirmed & Closed Dates

Purchase orders now have three new date fields: issue date, confirmed date, and closed date. These can be recorded directly on the purchase order to track its lifecycle from issuance through supplier confirmation to closure. This is especially useful for teams that don’t use the optional milestones feature but still want a clear view of where a PO stands.

Improvement
Platform

Updated Table Toolbar Design

Tables throughout the app now have a unified toolbar at the top. The toolbar includes a variety of actions depending on the type of data being viewed, making it faster to find the right tools without leaving the page.

Improvement
Inventory

Improved Building Inventory Settings

How inventory is managed for each building is now controlled by a single, explicit field: Inventory Source. This field drives all inventory-related behavior in the system, making it clearer how each building’s inventory is sourced and managed.

Feature
Supply

Shipments and ASNs Consolidated

All inbound shipments — whether intermediate (factory to port) or final (factory to warehouse) — are now simply called Shipments. A shipment can have any origin and destination. When the destination is a building in Endless Commerce, incoming inventory numbers update automatically throughout the app. For buildings managed within the platform, receiving tools are available to check items directly into inventory. For buildings managed by another system, shipments can be sent as an ASN.

Feature
Supply

Shipments And ASNs

Shipments and Advanced Shipping Notices are now available for tracking inventory as it moves from supplier to warehouse. Shipments can represent complex inbound movement, including containers that split across multiple locations.

Together with purchase orders and suppliers, this gives teams a clearer view of how inventory enters the business.

Feature
Supply

Supplier Directory

Suppliers now have dedicated records in Endless. Teams can keep supplier contact details and related supply-chain context in one place, then connect that information back to purchase orders and inbound work.

This gives procurement and operations teams a shared source of truth for the companies they buy from.

Feature
Supply

Purchase Orders

Purchase Orders are now available in Endless, giving teams a structured place to track production and inbound commitments instead of managing large orders in spreadsheets.

Each purchase order can track what was ordered, what has shipped, and where coverage is missing, with milestones and status updates to follow progress from supplier commitment through receipt.

Feature
Sales Platform

Automations

Order automations are now available in Endless. Teams can create rules that run when an order is created or updated, then use conditions like customer tags, payment state, marketplace, or other order data to decide what should happen next.

Actions can route orders, apply tags, send email or Slack notifications, call webhooks, or assign safe defaults before an order reaches fulfillment. Automations are available from the admin menu in the sidebar.

Feature
Products

Product Sheet View

Products now have a Sheet View for reviewing and editing catalog data in a spreadsheet-style workspace. Teams can update product attributes inline, move quickly across many rows and columns, and use presets for common views like key product info, dimensions, packaging hierarchy, costs, customs data, and inventory levels.

Sheet View also supports unit conversion, resizable columns, density controls, undo for edits, and collaboration notifications when teammates make changes.

Improvement
Platform

User Settings Module

Account and company settings now live in a dedicated settings module in the sidebar. Preferences, notifications, and account details are organized in one place instead of being spread across separate parts of the app.

Improvement
Integrations

Integration Tools Redesign

Integration tools have been redesigned to make connector settings easier to manage. The data mapper has also been improved, making it clearer how external data maps into Endless and easier to keep information flowing correctly between systems.

Improvement
Platform

Team Member Management

Team members can now be added directly from a company page. New users receive an invitation email, while existing Endless users can be added to the company immediately.

Users can also belong to multiple companies, making it easier to support teams that work across more than one Endless account.

Feature
Integrations Sales

EDI Beta

Endless EDI is now available in beta for retailers and trading partners that require Electronic Data Interchange. The beta supports core retail documents such as purchase orders, advance ship notices, shipping labels, and compliance tracking by retailer.

Teams that need EDI for channels like Target, Nordstrom, and other enterprise retailers can work with Endless to get set up.

Feature
Platform

Keyboard Shortcuts

Keyboard shortcuts are now available for common workflows in Endless, including moving between modules and records, copying a link to the current page, toggling the sidebar, and using quick search or filters.

The shortcut list is available from the account menu, and more shortcuts will be added as additional workflows are supported.

Feature
Products

Product Catalog Tools

Product records can now store more of the operational data teams need to manage a catalog: cost analysis, packout details, customer-specific pricing, documents, external links, and product relationships.

Relationships support product compositions, bundles and kits, and variants, giving teams a clearer way to represent how products connect to each other.

Feature
Sales

Bulk Order Cancellation

Orders can now be cancelled in bulk from the order list. Select multiple orders, use the bulk action buttons, and cancel the selected batch at once instead of opening each order individually.

This is useful when large groups of orders need to be stopped or cleaned up together.

Improvement
Integrations Inventory

Shopify Fulfillment Location Refresh

When Shopify changes the assigned fulfillment location for an order, Endless now automatically refreshes allocation. The refresh keeps inventory assigned to the right warehouse as the fulfillment location changes upstream.

This helps keep Shopify-driven orders in sync with Endless inventory before fulfillment starts.

Improvement
Sales Integrations

Order Routing Alerts

Orders from external integrations now show clearer alerts when fulfillment routing needs attention. Endless distinguishes orders that are fully assigned to external warehouses from orders where an integration requested external fulfillment but local routing is enabled.

The alerts help teams avoid duplicate shipments, missed handoffs, and confusion about which system is responsible for fulfillment.

Improvement
Sales

Edit Allocated Orders

Allocated orders can now keep changing while inventory stays reserved. Teams can update shipping service, financial information, routing instructions, fulfillment instructions, and third-party shipping billing after allocation.

This lets teams reserve inventory early while continuing to finish the operational details needed before fulfillment.

Feature
Sales

Order Task Management

Teams can now create and manage tasks on individual orders. Tasks live alongside order enrichment details, special instructions, and documents, making it easier to track follow-up work for complex fulfillment.

This is especially useful for B2B orders where several operational steps need to happen before an order can ship.

Feature
Sales

Order Approval Workflows

Sales channels can now require manual approval before orders move into fulfillment. With manual approval enabled, orders remain pending until a team member approves them, even after issues are resolved.

This gives B2B teams a draft-order workflow for preparing orders, reviewing details, and releasing them only when they are ready to process.

Improvement
Sales

Order Item Status Visibility

Order items now show more detailed statuses as they move through allocation and fulfillment. The added visibility makes it easier to understand what is ready, what is waiting, and where an order needs attention.

Improvement
Sales

Fulfillment Without Payment Controls

Orders can now be configured to allow or block fulfillment before payment is received. This supports B2B workflows where payment may come later, while still letting DTC channels require payment before fulfillment.

The control can be set by sales channel or adjusted on an individual order.

Improvement
Inventory Sales

External Warehouse Controls

Sales channels can now control whether order items may be assigned to external warehouses. Teams can allow external assignment for channels that already route through outside warehouse systems, or require managed warehouses when Endless should actively handle fulfillment.

The setting can be configured by sales channel and overridden on individual orders when needed.

Improvement
Sales Integrations

Shipping Method Mapping On Orders

Shipping methods from integrations can now be mapped directly while working on an order. A customer-facing method like “Free fast shipping” can be mapped to a fulfillment service such as UPS Ground without leaving the order page.

This keeps shipping cleanup close to the workflow where teams discover the mismatch.

Feature
Products Sales

Automatic Product Import During Order Creation

When an order arrives from an external system with products that do not exist in Endless yet, Endless can now queue an import for the missing products instead of blocking the order.

Import failures create order alerts, giving teams a clear follow-up path while preserving the order creation flow.

Improvement
Integrations Inventory

Shopify Warehouse Imports

Warehouses imported from Shopify are now created as external warehouses with consistent source tracking. Imported Shopify warehouses are marked as unmanaged, so Endless can represent them correctly without treating them like buildings managed directly in the platform.

Improvement
Platform

Improved QuickView Tools

QuickView has been rebuilt for deeper operational workflows. You can now open stacked views, follow breadcrumbs back through your path, and keep each view’s scroll, tab, and form state intact while moving between related records.

The panel also has updated layout, spacing, and transitions, making it easier to inspect orders, customers, companies, and other records without losing context.

Feature
Integrations Sales

Shopify Order Reconciliation

Shopify order reconciliation now catches orders that may have been missed when webhooks fail or arrive late. Endless periodically scans Shopify for recently created orders, compares them against the orders already in Endless, and imports anything missing.

Webhooks still handle real-time order creation, while reconciliation acts as a safety net so Shopify orders do not slip through the cracks.

Feature
Platform

Endless Changelog

The Endless changelog is now live. It gives customers and the team a single place to follow product updates, workflow improvements, infrastructure changes, and customer-visible fixes.

The release-note process is now consistent: changes are written down clearly, dated, and grouped by the part of the business they affect.