Headquarters
175 S Main St Suite 1310,
Salt Lake City, UT 84111
This update covers integration and service changes across five operating areas: AfterShip and native Shopify returns, PO-backed pre-order data, Shopify order and product synchronization, carrier labels and email communication, and app migration services. These changes target specific failure modes: stale PO ATP after quantity edits, new Shopify orders waiting behind update jobs, duplicate MDM writes when an order has not changed, carrier label errors hidden in carrier-specific code paths, and audit screens missing actor or log context.
The release includes a new AfterShip returns integration. AfterShip and native Shopify return records can now enter OMS before final settlement and remain identified as in-progress or completed returns. The bridge stores Shopify return IDs, refund IDs, return history, processed dates, return status, return channel, customer identity, reason data, restock behavior, destination facility, and linked agreements with the return record, so service teams can see where the return originated and which step it has reached.
Return import now distinguishes the paths that used to look similar after settlement. A return can start as an open native Shopify or AfterShip return, become an OMS return request, close later with a refund, become an appeasement when no inventory is restocked, or create an exchange order with new payment activity. When Shopify only provides a ReturnAgreement, the bridge uses it to keep the originating app and return channel instead of defaulting the record to the generic admin channel. When an admin refund has no restocked items, OMS classifies it as an appeasement instead of a customer return.
Return and refund reconciliation also received targeted updates. Refund import now processes every entry in Shopify's order_adjustments array instead of dropping entries after the first processed adjustment. Cancellation refunds carry the presentment currency, Shopify-sourced exchange rates convert presentment money back to shop currency by division instead of multiplication, payment terms are created during Shopify order import and update, and payment preferences receive created dates during order, transaction, and refund processing. Those changes reduce partial refund records, incorrect multi-currency payment amounts, and missing payment timing in refund, credit memo, exchange credit, replacement order, and invoice review.
NetSuite return sync now writes history for RMA, item receipt, credit memo, customer refund, invoice, return grand total, and response details. OMS shows NetSuite return sync status on the return screen, Poorti stores return references on shipment receipts, and warranty inventory can move into floor-damage tracking with retryable inventory transfer history.
Sources: hotwax-shopify-oms-bridge#106, hotwax-shopify-oms-bridge#179, hotwax-shopify-oms-bridge#205, hotwax-shopify-oms-bridge#218, hotwax-shopify-oms-bridge#125, hotwax-shopify-oms-bridge#151, hotwax-shopify-oms-bridge#177, hotwax-shopify-oms-bridge#208, hotwax-shopify-oms-bridge#168, hotwax-shopify-oms-bridge#181, hotwax-shopify-oms-bridge#130, hotwax-shopify-oms-bridge#155, hotwax-oms#496, hotwax-oms#542, hotwax-oms#508, hotwax-oms#521, hotwax-oms#456, hotwax-poorti#231, mantle-netsuite-connector#213, mantle-netsuite-connector#238, mantle-netsuite-connector#239, mantle-netsuite-connector#242, mantle-netsuite-connector#234, mantle-netsuite-connector#237, mantle-netsuite-connector#231
Fixed a gap where editing a purchase order item quantity did not update that item's available-to-promise value. After the change, PO ATP recalculates from the edited quantity, so Preorder does not evaluate pre-sell eligibility against the old purchase order quantity.
Imported pre-order sales orders also received an indexing fix. Approved orders that passed through the pre-order import flow now create their order index after pre-order item splitting and promise-date assignment, so they appear in indexed order views without manual reindexing.
The release also added purchase order resources for Preorder management:
GET /purchaseOrders: added purchase order list access with filters for status, item status, facility, product store, keyword, and pagination.GET /purchaseOrders/{orderId}: added single purchase order access for detail views.estimatedDeliveryDate: added to purchase order item ship-group data, so Preorder can show inbound timing with the purchase order.GET /purchaseOrders/{orderId}/receipts: added receipt lookup from the new PurchaseOrderItemShipmentReceipt view, tying receipts back to purchase order items.Sources: hotwax-oms#505, hotwax-oms#511, oms#503
Shopify order creation now runs separately from order updates, so new orders do not wait behind a backlog of update jobs. The bridge added a createOrders flag for update-only queues, while the Shopify connector split MDM order configurations by create versus update. Before writing an order to MDM, the bridge now checks whether the order actually changed, including hash-backed comparisons for fields like customer, payment terms, outstanding amount, fulfillment, refunds, and risk. That reduces unnecessary mega-query and MDM work while keeping updates available when a real diff exists.
The order sync path also picked up targeted fixes:
Product sync work focused on making existing Shopify catalog updates visible and operational in OMS. Product update history is now exposed through REST for sync dashboards, and Shopify product indexing runs after the sync transaction commits so search reflects committed product changes.
The product sync path also picked up targeted fixes:
productId.Sources: hotwax-shopify-oms-bridge#186, hotwax-shopify-oms-bridge#199, hotwax-shopify-oms-bridge#153, hotwax-shopify-oms-bridge#149, hotwax-shopify-oms-bridge#181, hotwax-shopify-oms-bridge#130, hotwax-shopify-oms-bridge#155, mantle-shopify-connector#326, mantle-shopify-connector#328, mantle-shopify-connector#329, hotwax-shopify-oms-bridge#203, hotwax-shopify-oms-bridge#211, hotwax-shopify-oms-bridge#161, oms#533, oms#489, oms#494, oms#479, oms#563, mantle-shopify-connector#312, mantle-shopify-connector#303, mantle-shopify-connector#300, mantle-shopify-connector#324
Carrier setup now has a single setup service for store and facility carrier accounts. One setup call validates the product store, carrier, facility, and gateway auth ID; creates the Unigate credential record when that auth ID is new; and creates the OMS carrier configuration and billing configuration records. The same gateway auth ID can be reused across facilities, so teams do not create another credential record when multiple locations use the same carrier account. The setup also blocks duplicate carrier accounts for the same product store, carrier, and facility.
Once a carrier account is configured, the same account selection now follows every shipping action that uses it. Rate shopping, label generation, label voiding, and address validation all read from the same carrier account record across OMS, Poorti, and Unigate, instead of each flow reconstructing which carrier credentials to use.
Rate shopping now supports a multi-option response from shipping gateways. When a carrier returns multiple services, HotWax can keep each option's service, cost, delivery estimate, and carrier rate ID together, then carry the selected rate into the label request. That lets fulfillment teams compare carrier options before buying the label and keeps the final label tied to the rate that was selected.
Carrier setup, labels, and rates also picked up targeted improvements:
Sources: hotwax-unigate#72, hotwax-unigate#76, hotwax-unigate#50, hotwax-unigate#54, hotwax-unigate#55, hotwax-unigate#38, hotwax-unigate#46, hotwax-unigate#71, hotwax-unigate#35, hotwax-unigate#48, hotwax-poorti#243, hotwax-poorti#253, oms#491, oms#555, oms#559, hotwax-oms#452, hotwax-oms#556, hotwax-oms#531, hotwax-oms#565
OMS now creates email events through Unigate, prepares the gateway payload, creates communication records after the Unigate response, and sends order-event email work through explicit field mapping instead of passing the full order object around. Pickup, rejection, and BOPIS completion emails now send after the main order action is saved, so creating the communication record does not hold locks while fulfillment work is still being completed.
Sources: hotwax-unigate#67, hotwax-unigate#61, hotwax-unigate#62, hotwax-unigate#64, hotwax-unigate#69, hotwax-unigate#77, hotwax-unigate#58, hotwax-unigate#68, hotwax-unigate#57, oms#509, oms#480, hotwax-poorti#246, oms#555, hotwax-oms#522, hotwax-oms#523, hotwax-oms#564
Transfer order lists can now ask for only the fields they render, sort transfer orders, and filter by multiple statuses reducing the payload size significantly. This is expected to improve the performance of the list view in the Transfers app.
Inventory Count moved off deprecated inventory-count APIs inline with planned timelines. The session detail pages also gained device-persisted sorting by uploaded order, alphabetical order, or last updated time, so count teams can work a session in the order that matches their floor process.
Sources: transfers#225, transfers#226, transfers#227, transfers#229, transfers#233, transfers#235, transfers#201, transfers#217, oms#554, oms#476, oms#474, receiving#674, fulfillment#1607, transfers#234, transfers#232, bopis#775, inventory-count#1398, inventory-count#1399, hotwax-poorti#247
Admin and migration work was mostly API and permission coverage. The highlights for teams that need the implementation detail:
Environment and app migration:
Permissions:
Setup and integration configuration:
Operational logs and jobs:
Search and maintenance:
Sources: hotwax-maarg-util#97, hotwax-maarg-util#83, hotwax-maarg-util#60, hotwax-maarg-util#73, hotwax-maarg-util#74, hotwax-maarg-util#79, hotwax-maarg-util#84, hotwax-maarg-util#58, hotwax-maarg-util#65, hotwax-maarg-util#66, hotwax-maarg-util#87, hotwax-maarg-util#85, hotwax-maarg-util#82, job-manager#883, job-manager#888, job-manager#897, hotwax-oms#563, hotwax-oms#567, hotwax-oms#522, hotwax-oms#524, hotwax-oms#530, hotwax-ofbiz-oms-usl#22, hotwax-ofbiz-oms-usl#24, OrderRouting#115