Skip to main content

What’s new at Endless

Developer changelog

API changes, deprecations, and important updates for your integrations.

feature

Migrate removed order coverage fields and numeric invoice coverage

v2Order.orderItemCoverage and the coverage-only fulfillment item type are removed without aliases. Queries selecting them fail validation. Read coverage on sales and fulfillment items instead.

onInvoice now returns a number, including zero when the order has no accounting documents. It no longer uses null to mean unknown. Fulfillment item quantities use the item’s product units; sales item quantities count complete bundles after pooling components. Partial bundles are not rounded up.

Removing a sales line with shipment records now preserves the line at quantity zero. Clients must not assume that a removed line disappears from the response.

improvement

Product Component Settings Are Renamed, And `decompositionStrategy` Is Removed

Products have two component settings: fulfillWithComponents and inventoryIncludesComponents. Both are available on product queries, create and update inputs, and imports. The old API names are removed, and a query or mutation that still uses one fails validation.

fulfillWithComponents takes AUTO, YES, or NO. It replaces decompositionStrategy on products and the short-lived fulfillWith. AUTO keeps the product line when its stock covers the entire line and otherwise uses components for the whole line. YES always creates component lines. NO keeps the product line. New aliases and bundles default to AUTO, and other product types default to NO. Manual decomposition works with every value. Existing products were reset by product type when this shipped.

inventoryIncludesComponents replaces includeComponentsInAvailableToSell. It is a Boolean with the same meaning, and it defaults to true for aliases and bundles and false for other product types.

Fulfillment rules no longer have decompositionStrategy, so omit it. Endless applies the product setting when it creates a fulfillment, not as a delayed step or when a rule is assigned. It skips the setting for fulfillments whose processInEndless is false.

improvement

Shipped date filters exclude inactive shipments

shipmentShippedDateFrom and shipmentShippedDateTo now match only live shipments in the shipped state. Canceled, archived, and deleted shipments no longer make an order match.

Queries and exports using these filters can return fewer orders for the same date range. Recheck reports that relied on those shipments being included. shipmentCreatedAt filters are unchanged.

improvement

Fulfillment location inputs now enforce validation

createDraftFulfillment now rejects a location that does not exist, belongs to another building, or is not active and pickable. This applies to the new typed items argument and the deprecated JSON fulfillmentItems argument. Such locations were previously accepted and ignored.

The JSON argument still works and stores a location without restricting allocation. Migrating to typed items changes that behavior: the location becomes a binding restriction, and insufficient stock there returns an error. Do not send both arguments in one request.

improvement

V2 Order Edits Keep Omitted Fields And Accept Clearing

The V2 order edit mutations now leave a field unchanged when you omit it, and clear it when you send an empty value. This covers saveDraftOrder, updateOrderDetails, updateOrderGiftMessage, updateOrderShippingInstructions, and updateOrderCustomerInformation. Before, clearing a value was often ignored, and an edit to one part of an order could change another.

An empty string clears text such as contact fields, address line 2, the gift message, and the requested shipping method. An explicit null also clears the expected and shipping dates, the gift message, and the requested shipping method. An empty orderItems list or orderMetadata object clears its contents.

shipToSameAsBillTo on saveDraftOrder no longer defaults to true. Omit it to keep the current setting. Editing the shipping address no longer removes the billing address, and the reverse.

improvement

`echoDeleteData` Replaces The Three ECHO Delete Mutations

echoDeleteData deletes ECHO order history, shipment history, or inventory snapshot records. Each request selects one dataset and either a list of IDs or the same filters the list queries accept. The three earlier delete mutations, one per dataset, are removed. Update any caller to the new name.

Deleting by IDs finishes in the request and returns deletedCount. Deleting by filters runs in the background across all pages and returns a processId. Filtered deletion skips records changed after the request. The mutation requires the new echo:delete_data permission, which company operators and operations integrations do not hold. Records created automatically are never deleted.

improvement

Read decomposed components from fulfillment items

fulfillmentItemComponents is deprecated and now returns an empty list. Existing queries still validate, but clients relying on that list stop receiving component data. Read components from ordinary fulfillment items instead; unitsPerOrderItem expresses their quantity per sales order unit.

Fulfillments already allocated or in progress keep the earlier structure until they close, and their components do not appear in either representation. Integrations must account for that transition. Warehouse integrations now receive component SKUs with allocated unit prices that preserve the bundle’s total value.

improvement

Migrate deprecated requested shipping method names

The order field originalCarrierService and the update input’s shippingMethod argument are deprecated aliases of requestedShippingMethod. Existing names still work. Use the replacement when updating an integration, and do not send conflicting values under the old and new names: those requests are rejected.

The value remains the customer’s original shipping choice. It is distinct from requestedCarrierServiceName, which identifies the carrier service selected to fulfill the order.

improvement

`ordersSendShipments` Replaces `bulkForwardShipments`

ordersSendShipments takes orderIds and queues each order’s shipments for delivery to its source integration. It replaces bulkForwardShipments, which is removed. Update any caller to the new name. The input and the asynchronous response are unchanged.

The integration capability is renamed from forward shipments to send_shipments. Calling the mutation again no longer clears earlier delivery receipts. It retries outstanding work and skips shipments the integration already accepted.

improvement

Migrate deprecated ECHO export mutations

The three dataset-specific ECHO export mutations are deprecated in favor of echoExportData. They still work, and their schema deprecation messages identify the replacement.

When migrating, pass exactly one of demand, shipments, inventory, or inventoryChanges under input.export, with filters nested inside that selection. Missing, null, or multiple selections are rejected. An empty object for the selected dataset exports without filters.