<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Endless Commerce Docs Blog</title>
        <link>https://docs.endlesscommerce.com/developer-changelog</link>
        <description>Endless Commerce Docs Blog</description>
        <lastBuildDate>Wed, 14 Oct 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>Endless Commerce</copyright>
        <item>
            <title><![CDATA[Replace removed attribute definition operations]]></title>
            <link>https://docs.endlesscommerce.com/developer-changelog/2026-10-14-attribute-definitions-api</link>
            <guid>https://docs.endlesscommerce.com/developer-changelog/2026-10-14-attribute-definitions-api</guid>
            <pubDate>Wed, 14 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[The nine per-entity operations are removed: productAttributeDefinitions, mediaAttributeDefinitions, customerAttributeDefinitions, addProductAttributeDefinitions, updateProductAttributeDefinitions, mediaAttributeDefinitionAdd, mediaAttributeDefinitionUpdate, addCustomerAttributeDefinition, and updateCustomerAttributeDefinition. Requests using these operations fail schema validation. Their brief deprecation period ended on October 14.]]></description>
            <content:encoded><![CDATA[<p>The nine per-entity operations are removed: <code>productAttributeDefinitions</code>, <code>mediaAttributeDefinitions</code>, <code>customerAttributeDefinitions</code>, <code>addProductAttributeDefinitions</code>, <code>updateProductAttributeDefinitions</code>, <code>mediaAttributeDefinitionAdd</code>, <code>mediaAttributeDefinitionUpdate</code>, <code>addCustomerAttributeDefinition</code>, and <code>updateCustomerAttributeDefinition</code>. Requests using these operations fail schema validation. Their brief deprecation period ended on October 14.</p>
<p>Attribute definitions for products, customers, and images now use <code>attributeDefinitions(entityType:)</code>, <code>attributesAddDefinition</code>, and <code>attributesUpdateDefinition</code>. The mutations take an <code>entityType</code>, change one definition per call, and return the definition directly. They do not return <code>result</code>, <code>status</code>, <code>message</code>, or <code>processId</code>. Existing permissions still apply.</p>
<p>Use <code>showInList</code> instead of <code>showInProductList</code>, and remove <code>brand</code> from definition selections. Omitted settings keep their current values. Definition names must be unique within a company and entity type, and <code>addProductAttributes</code> rejects duplicate definitions in one request.</p>]]></content:encoded>
            <category>Products</category>
            <category>Platform</category>
        </item>
        <item>
            <title><![CDATA[Migrate deprecated warehouse connection operations]]></title>
            <link>https://docs.endlesscommerce.com/developer-changelog/2026-10-14-building-integration-connections-api</link>
            <guid>https://docs.endlesscommerce.com/developer-changelog/2026-10-14-building-integration-connections-api</guid>
            <pubDate>Wed, 14 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[warehouseAddExternalRelation, warehouseUpdateExternalRelation, and warehouseRemoveExternalRelation are deprecated. Migrate to buildingIntegrationConnectionsCreate, buildingIntegrationConnectionsUpdate, and buildingIntegrationConnectionsRemove. The old operations still work.]]></description>
            <content:encoded><![CDATA[<p><code>warehouseAddExternalRelation</code>, <code>warehouseUpdateExternalRelation</code>, and <code>warehouseRemoveExternalRelation</code> are deprecated. Migrate to <code>buildingIntegrationConnectionsCreate</code>, <code>buildingIntegrationConnectionsUpdate</code>, and <code>buildingIntegrationConnectionsRemove</code>. The old operations still work.</p>
<p>The <code>warehouseExternal</code> query and <code>Warehouse.externalData</code> are also deprecated. Read <code>buildingIntegrationConnections</code> on <code>Warehouse</code> or <code>Integration</code> instead. Create takes <code>buildingId</code> and <code>integrationId</code>; update and remove take <code>connectionId</code>. A building can have only one active connection to an integration.</p>]]></content:encoded>
            <category>Integrations</category>
            <category>Inventory</category>
        </item>
        <item>
            <title><![CDATA[Migrate removed order coverage fields and numeric invoice coverage]]></title>
            <link>https://docs.endlesscommerce.com/developer-changelog/2026-10-14-order-item-coverage-api</link>
            <guid>https://docs.endlesscommerce.com/developer-changelog/2026-10-14-order-item-coverage-api</guid>
            <pubDate>Wed, 14 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <content:encoded><![CDATA[<p><code>v2Order.orderItemCoverage</code> and the coverage-only fulfillment item type are removed without aliases. Queries selecting them fail validation. Read <code>coverage</code> on sales and fulfillment items instead.</p>
<p><code>onInvoice</code> 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.</p>
<p>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.</p>]]></content:encoded>
            <category>Sales</category>
        </item>
        <item>
            <title><![CDATA[Product Component Settings Are Renamed, And `decompositionStrategy` Is Removed]]></title>
            <link>https://docs.endlesscommerce.com/developer-changelog/2026-10-12-decomposition-strategy-removed</link>
            <guid>https://docs.endlesscommerce.com/developer-changelog/2026-10-12-decomposition-strategy-removed</guid>
            <pubDate>Mon, 12 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <content:encoded><![CDATA[<p>Products have two component settings: <code>fulfillWithComponents</code> and <code>inventoryIncludesComponents</code>. 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.</p>
<p><code>fulfillWithComponents</code> takes <code>AUTO</code>, <code>YES</code>, or <code>NO</code>. It replaces <code>decompositionStrategy</code> on products and the short-lived <code>fulfillWith</code>. <code>AUTO</code> keeps the product line when its stock covers the entire line and otherwise uses components for the whole line. <code>YES</code> always creates component lines. <code>NO</code> keeps the product line. New aliases and bundles default to <code>AUTO</code>, and other product types default to <code>NO</code>. Manual decomposition works with every value. Existing products were reset by product type when this shipped.</p>
<p><code>inventoryIncludesComponents</code> replaces <code>includeComponentsInAvailableToSell</code>. It is a Boolean with the same meaning, and it defaults to true for aliases and bundles and false for other product types.</p>
<p>Fulfillment rules no longer have <code>decompositionStrategy</code>, 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 <code>processInEndless</code> is false.</p>]]></content:encoded>
            <category>Products</category>
            <category>Sales</category>
        </item>
        <item>
            <title><![CDATA[Shipped date filters exclude inactive shipments]]></title>
            <link>https://docs.endlesscommerce.com/developer-changelog/2026-10-12-order-shipped-date-filter-and-summary</link>
            <guid>https://docs.endlesscommerce.com/developer-changelog/2026-10-12-order-shipped-date-filter-and-summary</guid>
            <pubDate>Mon, 12 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[shipmentShippedDateFrom and shipmentShippedDateTo now match only live shipments in the shipped state. Canceled, archived, and deleted shipments no longer make an order match.]]></description>
            <content:encoded><![CDATA[<p><code>shipmentShippedDateFrom</code> and <code>shipmentShippedDateTo</code> now match only live shipments in the <code>shipped</code> state. Canceled, archived, and deleted shipments no longer make an order match.</p>
<p>Queries and exports using these filters can return fewer orders for the same date range. Recheck reports that relied on those shipments being included. <code>shipmentCreatedAt</code> filters are unchanged.</p>]]></content:encoded>
            <category>Sales</category>
        </item>
        <item>
            <title><![CDATA[Inventory receipt dates now use actual receipt]]></title>
            <link>https://docs.endlesscommerce.com/developer-changelog/2026-10-12-supply-shipment-dates-api</link>
            <guid>https://docs.endlesscommerce.com/developer-changelog/2026-10-12-supply-shipment-dates-api</guid>
            <pubDate>Mon, 12 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Inventory receivedAt and the landed cost date now use a supply shipment’s actualReceivedDate, falling back to the delivered date when receipt is unknown. Previously they used the delivered date. Reports or integrations that treated warehouse delivery as inventory receipt must account for the distinction.]]></description>
            <content:encoded><![CDATA[<p>Inventory <code>receivedAt</code> and the landed cost date now use a supply shipment’s <code>actualReceivedDate</code>, falling back to the delivered date when receipt is unknown. Previously they used the delivered date. Reports or integrations that treated warehouse delivery as inventory receipt must account for the distinction.</p>
<p>Advancing a shipment to In Transit, Delivered, or Received records the corresponding date. Pass <code>statusDate</code> when recording a historical transition so it uses the intended date.</p>]]></content:encoded>
            <category>Supply</category>
            <category>Inventory</category>
        </item>
        <item>
            <title><![CDATA[Supplier cost responses and address meaning have changed]]></title>
            <link>https://docs.endlesscommerce.com/developer-changelog/2026-10-09-supplier-api-locations-and-costs</link>
            <guid>https://docs.endlesscommerce.com/developer-changelog/2026-10-09-supplier-api-locations-and-costs</guid>
            <pubDate>Fri, 09 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[productAddCosts, productUpdateCosts, and productArchiveCosts now run as a tracked process and return its processId. For productArchiveCosts, that value previously contained the product ID. Treat it as a process identifier and inspect failedItems for rejected products.]]></description>
            <content:encoded><![CDATA[<p><code>productAddCosts</code>, <code>productUpdateCosts</code>, and <code>productArchiveCosts</code> now run as a tracked process and return its <code>processId</code>. For <code>productArchiveCosts</code>, that value previously contained the product ID. Treat it as a process identifier and inspect <code>failedItems</code> for rejected products.</p>
<p><code>SupplySupplier.address</code> now returns the ship-from address. Callers that need the remit-to address must select it explicitly. Dropship cost tiers now require a minimum order quantity of 1.</p>]]></content:encoded>
            <category>Supply</category>
            <category>Products</category>
        </item>
        <item>
            <title><![CDATA[Fulfillment location inputs now enforce validation]]></title>
            <link>https://docs.endlesscommerce.com/developer-changelog/2026-10-07-fulfillment-item-location-api</link>
            <guid>https://docs.endlesscommerce.com/developer-changelog/2026-10-07-fulfillment-item-location-api</guid>
            <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <content:encoded><![CDATA[<p><code>createDraftFulfillment</code> now rejects a location that does not exist, belongs to another building, or is not active and pickable. This applies to the new typed <code>items</code> argument and the deprecated JSON <code>fulfillmentItems</code> argument. Such locations were previously accepted and ignored.</p>
<p>The JSON argument still works and stores a location without restricting allocation. Migrating to typed <code>items</code> changes that behavior: the location becomes a binding restriction, and insufficient stock there returns an error. Do not send both arguments in one request.</p>]]></content:encoded>
            <category>Sales</category>
            <category>Inventory</category>
        </item>
        <item>
            <title><![CDATA[V2 Order Edits Keep Omitted Fields And Accept Clearing]]></title>
            <link>https://docs.endlesscommerce.com/developer-changelog/2026-10-07-order-edits-keep-omitted-fields-api</link>
            <guid>https://docs.endlesscommerce.com/developer-changelog/2026-10-07-order-edits-keep-omitted-fields-api</guid>
            <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <content:encoded><![CDATA[<p>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 <code>saveDraftOrder</code>, <code>updateOrderDetails</code>, <code>updateOrderGiftMessage</code>, <code>updateOrderShippingInstructions</code>, and <code>updateOrderCustomerInformation</code>. Before, clearing a value was often ignored, and an edit to one part of an order could change another.</p>
<p>An empty string clears text such as contact fields, address line 2, the gift message, and the requested shipping method. An explicit <code>null</code> also clears the expected and shipping dates, the gift message, and the requested shipping method. An empty <code>orderItems</code> list or <code>orderMetadata</code> object clears its contents.</p>
<p><code>shipToSameAsBillTo</code> on <code>saveDraftOrder</code> no longer defaults to <code>true</code>. Omit it to keep the current setting. Editing the shipping address no longer removes the billing address, and the reverse.</p>]]></content:encoded>
            <category>Sales</category>
        </item>
        <item>
            <title><![CDATA[`echoDeleteData` Replaces The Three ECHO Delete Mutations]]></title>
            <link>https://docs.endlesscommerce.com/developer-changelog/2026-10-06-echo-delete-data-api</link>
            <guid>https://docs.endlesscommerce.com/developer-changelog/2026-10-06-echo-delete-data-api</guid>
            <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <content:encoded><![CDATA[<p><code>echoDeleteData</code> 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.</p>
<p>Deleting by IDs finishes in the request and returns <code>deletedCount</code>. Deleting by filters runs in the background across all pages and returns a <code>processId</code>. Filtered deletion skips records changed after the request. The mutation requires the new <code>echo:delete_data</code> permission, which company operators and operations integrations do not hold. Records created automatically are never deleted.</p>]]></content:encoded>
            <category>Inventory</category>
            <category>Sales</category>
        </item>
        <item>
            <title><![CDATA[Read decomposed components from fulfillment items]]></title>
            <link>https://docs.endlesscommerce.com/developer-changelog/2026-10-06-fulfillment-item-components-api</link>
            <guid>https://docs.endlesscommerce.com/developer-changelog/2026-10-06-fulfillment-item-components-api</guid>
            <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <content:encoded><![CDATA[<p><code>fulfillmentItemComponents</code> 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; <code>unitsPerOrderItem</code> expresses their quantity per sales order unit.</p>
<p>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.</p>]]></content:encoded>
            <category>Sales</category>
        </item>
        <item>
            <title><![CDATA[Migrate deprecated requested shipping method names]]></title>
            <link>https://docs.endlesscommerce.com/developer-changelog/2026-10-05-requested-shipping-method-api</link>
            <guid>https://docs.endlesscommerce.com/developer-changelog/2026-10-05-requested-shipping-method-api</guid>
            <pubDate>Mon, 05 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <content:encoded><![CDATA[<p>The order field <code>originalCarrierService</code> and the update input’s <code>shippingMethod</code> argument are deprecated aliases of <code>requestedShippingMethod</code>. 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.</p>
<p>The value remains the customer’s original shipping choice. It is distinct from <code>requestedCarrierServiceName</code>, which identifies the carrier service selected to fulfill the order.</p>]]></content:encoded>
            <category>Sales</category>
            <category>Integrations</category>
        </item>
        <item>
            <title><![CDATA[`ordersSendShipments` Replaces `bulkForwardShipments`]]></title>
            <link>https://docs.endlesscommerce.com/developer-changelog/2026-10-04-orders-send-shipments-api</link>
            <guid>https://docs.endlesscommerce.com/developer-changelog/2026-10-04-orders-send-shipments-api</guid>
            <pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <content:encoded><![CDATA[<p><code>ordersSendShipments</code> takes <code>orderIds</code> and queues each order’s shipments for delivery to its source integration. It replaces <code>bulkForwardShipments</code>, which is removed. Update any caller to the new name. The input and the asynchronous response are unchanged.</p>
<p>The integration capability is renamed from forward shipments to <code>send_shipments</code>. Calling the mutation again no longer clears earlier delivery receipts. It retries outstanding work and skips shipments the integration already accepted.</p>]]></content:encoded>
            <category>Sales</category>
            <category>Integrations</category>
        </item>
        <item>
            <title><![CDATA[Combined inventory exports and process access have changed]]></title>
            <link>https://docs.endlesscommerce.com/developer-changelog/2026-10-02-export-api-options</link>
            <guid>https://docs.endlesscommerce.com/developer-changelog/2026-10-02-export-api-options</guid>
            <pubDate>Fri, 02 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <content:encoded><![CDATA[<p>Inventory exports using <code>COMBINED</code> 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.</p>
<p>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.</p>]]></content:encoded>
            <category>Inventory</category>
        </item>
        <item>
            <title><![CDATA[The In-App GraphiQL Pages Are Removed]]></title>
            <link>https://docs.endlesscommerce.com/developer-changelog/2026-10-01-graphiql-removed</link>
            <guid>https://docs.endlesscommerce.com/developer-changelog/2026-10-01-graphiql-removed</guid>
            <pubDate>Thu, 01 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <content:encoded><![CDATA[<p>The GraphiQL pages in the app (<code>/graphiql</code> 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.</p>]]></content:encoded>
            <category>Platform</category>
        </item>
        <item>
            <title><![CDATA[Country and state searches treat wildcard characters literally]]></title>
            <link>https://docs.endlesscommerce.com/developer-changelog/2026-09-30-country-state-search-wildcards-api</link>
            <guid>https://docs.endlesscommerce.com/developer-changelog/2026-09-30-country-state-search-wildcards-api</guid>
            <pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[The countries and states queries now treat % and ` in search keywords as literal characters. For example, AB no longer matches A1B or AXB`. Update callers that relied on these characters as wildcards.]]></description>
            <content:encoded><![CDATA[<p>The <code>countries</code> and <code>states</code> queries now treat <code>%</code> and <code>_</code> in search keywords as literal characters. For example, <code>A_B</code> no longer matches <code>A1B</code> or <code>AXB</code>. Update callers that relied on these characters as wildcards.</p>
<p>Other filtering and sorting behavior is unchanged.</p>]]></content:encoded>
            <category>Platform</category>
        </item>
        <item>
            <title><![CDATA[Manual EDI delivery no longer skips unchanged documents]]></title>
            <link>https://docs.endlesscommerce.com/developer-changelog/2026-09-27-edi-transaction-fulfillment-scope-api</link>
            <guid>https://docs.endlesscommerce.com/developer-changelog/2026-09-27-edi-transaction-fulfillment-scope-api</guid>
            <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <content:encoded><![CDATA[<p>A <code>deliverOutboundTransaction</code> call without a <code>message</code> 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.</p>
<p>Automatic delivery still skips unchanged documents. The optional <code>fulfillmentId</code> limits delivery to one fulfillment; omitting it keeps order-level scope.</p>]]></content:encoded>
            <category>Integrations</category>
        </item>
        <item>
            <title><![CDATA[Handle password policy failures and authentication error codes]]></title>
            <link>https://docs.endlesscommerce.com/developer-changelog/2026-09-25-password-policy-api</link>
            <guid>https://docs.endlesscommerce.com/developer-changelog/2026-09-25-password-policy-api</guid>
            <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <content:encoded><![CDATA[<p>Password submissions now use shared configurable rules. Read <code>passwordRules</code> instead of assuming a fixed minimum length or character policy. Invalid submissions return <code>INVALID_PASSWORD</code>; a signup below the minimum length now returns HTTP 400 rather than 500.</p>
<p>Authentication can return <code>PASSWORD_EXPIRED</code> or <code>ACCOUNT_LOCKED</code> 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.</p>]]></content:encoded>
            <category>Platform</category>
        </item>
        <item>
            <title><![CDATA[Migrate deprecated ECHO export mutations]]></title>
            <link>https://docs.endlesscommerce.com/developer-changelog/2026-09-23-echo-exports-api</link>
            <guid>https://docs.endlesscommerce.com/developer-changelog/2026-09-23-echo-exports-api</guid>
            <pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[The three dataset-specific ECHO export mutations are deprecated in favor of echoExportData. They still work, and their schema deprecation messages identify the replacement.]]></description>
            <content:encoded><![CDATA[<p>The three dataset-specific ECHO export mutations are deprecated in favor of <code>echoExportData</code>. They still work, and their schema deprecation messages identify the replacement.</p>
<p>When migrating, pass exactly one of <code>demand</code>, <code>shipments</code>, <code>inventory</code>, or <code>inventoryChanges</code> under <code>input.export</code>, with filters nested inside that selection. Missing, null, or multiple selections are rejected. An empty object for the selected dataset exports without filters.</p>]]></content:encoded>
            <category>Sales</category>
            <category>Inventory</category>
            <category>Integrations</category>
        </item>
        <item>
            <title><![CDATA[`Shipment.shippedAt` Can Be Null, And ECHO Falls Back To The Recording Date]]></title>
            <link>https://docs.endlesscommerce.com/developer-changelog/2026-09-23-shipment-date-api</link>
            <guid>https://docs.endlesscommerce.com/developer-changelog/2026-09-23-shipment-date-api</guid>
            <pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[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.”]]></description>
            <content:encoded><![CDATA[<p><code>Shipment.shippedAt</code> 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 <code>LastUpdateDate</code>. Amazon dates that precede order creation are rejected outright. A caller that assumed <code>shippedAt</code> was always present should treat null as “shipping date unknown.”</p>
<p>An update that omits the shipping date or sends null preserves the existing date. Existing shipment dates are not changed automatically.</p>
<p>ECHO shipment reporting uses <code>shippedAt</code> 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.</p>]]></content:encoded>
            <category>Sales</category>
        </item>
    </channel>
</rss>