Skip to main content

What’s new at Endless

Developer changelog

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

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

Combined inventory exports and process access have changed

Inventory exports using COMBINED grouping now include every matching item instead of stopping at a row limit. Location filters are rejected for this grouping; use warehouse or location grouping when a location filter is required. Those groupings keep their existing row limit.

Export process polling and subscriptions now require the requesting identity to own the process, including API clients. Use the same identity that requested the export to retrieve its status and download metadata.

improvement

The In-App GraphiQL Pages Are Removed

The GraphiQL pages in the app (/graphiql under a company and under system admin), their sidebar entry, and the Download Schema button are removed. Use your own GraphQL client to explore the API.

improvement

Manual EDI delivery no longer skips unchanged documents

A deliverOutboundTransaction call without a message now sends the document even when it matches the last automatic delivery. Repeating a manual call can therefore send the same document again. Callers must not rely on this path to suppress unchanged documents.

Automatic delivery still skips unchanged documents. The optional fulfillmentId limits delivery to one fulfillment; omitting it keeps order-level scope.

feature

Handle password policy failures and authentication error codes

Password submissions now use shared configurable rules. Read passwordRules instead of assuming a fixed minimum length or character policy. Invalid submissions return INVALID_PASSWORD; a signup below the minimum length now returns HTTP 400 rather than 500.

Authentication can return PASSWORD_EXPIRED or ACCOUNT_LOCKED instead of a generic login failure. A password reset unlocks a locked account. Password-reset token failures now return HTTP 401. Update clients that branch on the previous error codes or status codes.

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.

improvement

`Shipment.shippedAt` Can Be Null, And ECHO Falls Back To The Recording Date

Shipment.shippedAt now returns the actual shipping date and may be null. V2 shipment creation no longer substitutes the create timestamp when a shipping date is missing, and the Amazon FBA importer no longer estimates a date from ship-by deadlines or the Orders API LastUpdateDate. Amazon dates that precede order creation are rejected outright. A caller that assumed shippedAt was always present should treat null as “shipping date unknown.”

An update that omits the shipping date or sends null preserves the existing date. Existing shipment dates are not changed automatically.

ECHO shipment reporting uses shippedAt when set, and the recording date when it is null, applied consistently to aggregation windows, daily buckets, and backfills. Clearing or adding a shipping date rebuilds both affected days without double-counting.