Skip to main content

What’s new at Endless

Changelog

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

improvement

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

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

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

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

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

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

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

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

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.