Skip to main content

January 28 ,2026 - Release Notes 26.01

An overview of new features and bug fixes released on January 28 ,2026 for Shipwell version 26.01

S
Written by Shipwell TMS Support
Updated over a week ago

API Changes

Overview

This release introduces enhancements to weight unit handling, ETA timezone support, shipment tracking, credit limit management, custom field capabilities, shipper relationship financial tracking, and query filtering. The update also includes streamlined schemas.

Summary:

  • New Feature: TON weight unit support across all shipment, product, and purchase order endpoints

  • New Feature: ETA timezone tracking for carrier-specified and predictive model ETAs

  • New Feature: Next stop metadata tracking for enhanced shipment visibility

  • New Feature: Enhanced shipper relationship financial tracking with credit currency and outstanding balance

  • New Feature: Credit limit override support for shipment relationships and carrier assignments

  • Improvement: Advanced query filtering with array support for location-based searches

  • Cleanup: Removed deprecated schemas

New Features

TON Weight Unit Support

Added support for TON weight unit across all endpoints that handle products, line items, and shipments, enabling better support for heavy freight and bulk shipments.

What's New:

  • TON - New weight unit enum value for measuring weight in tons

Enhanced Endpoints (103 changes):

Products:

  • GET /products/ (response)

  • POST /products/ (request & response)

  • GET /products/{productId}/ (response)

  • PUT /products/{productId}/ (request & response)

Purchase Orders:

  • GET /purchase-orders/ (response)

  • POST /purchase-orders/ (request & response)

  • GET /purchase-orders/{purchaseOrderId}/ (response)

  • PUT /purchase-orders/{purchaseOrderId}/ (request & response)

  • GET /purchase-orders/{purchaseOrderId}/line-items/ (response)

  • POST /purchase-orders/{purchaseOrderId}/line-items/ (request & response)

  • GET /purchase-orders/{purchaseOrderId}/line-items/{purchaseOrderLineItemId}/ (response)

  • PUT /purchase-orders/{purchaseOrderId}/line-items/{purchaseOrderLineItemId}/ (request & response)

  • POST /purchase-orders/build-shipment/ (response)

  • PUT /purchase-orders/update-built-shipment/ (response)

Shipments:

  • GET /shipments/ (response)

  • POST /shipments/ (request & response)

  • GET /shipments/external/ (response)

  • GET /shipments/external/{shipmentId}/ (response)

  • POST /shipments/linear-feet/ (request & response)

  • GET /shipments/pickups/ (response)

  • POST /shipments/pickups/ (response)

  • GET /shipments/pickups/{shipmentPickupId}/ (response)

  • PUT /shipments/pickups/{shipmentPickupId}/ (request & response)

  • POST /shipments/pickups/{shipmentPickupId}/cancel/ (response)

  • GET /shipments/templates/ (response)

  • POST /shipments/templates/ (request & response)

  • GET /shipments/templates/{shipmentTemplateId}/ (response)

  • PUT /shipments/templates/{shipmentTemplateId}/ (request & response)

  • GET /shipments/{shipmentId}/ (response)

  • PUT /shipments/{shipmentId}/ (request & response)

  • PUT /shipments/{shipmentId}/add-orders/ (response)

  • POST /shipments/{shipmentId}/auto-book/ (response)

  • POST /shipments/{shipmentId}/award-quote/ (response)

  • POST /shipments/{shipmentId}/cancel/ (response)

  • POST /shipments/{shipmentId}/initiate-check-call/ (response)

  • PUT /shipments/{shipmentId}/remove-orders/{orderId}/ (response)

Quoting:

  • GET /quoting/loadboard/ (response)

  • GET /quoting/loadboard/{loadBoardShipmentId}/ (response)

  • GET /quoting/spotnegotiations/spot-negotiations/ (response)

  • GET /quoting/spotnegotiations/spot-negotiations/{spotNegotiationId}/ (response)

  • PUT /quoting/spotnegotiations/spot-negotiations/{spotNegotiationId}/ (request & response)

Carriers:

  • GET /carriers/{carrierId}/power-units/{powerUnitId}/shipments/ (response)

Contracts:

  • POST /contracts/applicable-contracts/ (request)

  • POST /contracts/{contractId}/calculate-charge-items/ (request)

Benefits:

  • Support for heavy freight and bulk shipments

  • Standardized weight measurement for large loads

  • Better alignment with industry practices for tonnage

  • Improved pricing and rating calculations for heavy loads


ETA Timezone Support

Added timezone information to both carrier-specified and predictive model ETAs across all shipment stops, enabling accurate time zone-aware ETA tracking and display.

What's New:

  • eta_timezone - Timezone identifier for ETA values, available in both carrier_specified_eta and predictive_model_eta objects

Enhanced Endpoints (110 changes):

Shipments:

  • GET /shipments/ (response)

  • POST /shipments/ (request & response)

  • GET /shipments/external/ (response)

  • GET /shipments/external/{shipmentId}/ (response)

  • GET /shipments/pickups/ (response)

  • POST /shipments/pickups/ (response)

  • GET /shipments/pickups/{shipmentPickupId}/ (response)

  • PUT /shipments/pickups/{shipmentPickupId}/ (request & response)

  • POST /shipments/pickups/{shipmentPickupId}/cancel/ (response)

  • GET /shipments/{shipmentId}/ (response)

  • PUT /shipments/{shipmentId}/ (request & response)

  • PUT /shipments/{shipmentId}/add-orders/ (response)

  • POST /shipments/{shipmentId}/auto-book/ (response)

  • POST /shipments/{shipmentId}/award-quote/ (response)

  • POST /shipments/{shipmentId}/cancel/ (response)

  • POST /shipments/{shipmentId}/initiate-check-call/ (response)

  • PUT /shipments/{shipmentId}/remove-orders/{orderId}/ (response)

Stops:

  • GET /shipments/{shipmentId}/stops/ (response)

  • POST /shipments/{shipmentId}/stops/ (request & response)

  • GET /shipments/{shipmentId}/stops/{stopId}/ (response)

  • PUT /shipments/{shipmentId}/stops/{stopId}/ (request & response)

Quoting:

  • GET /quoting/loadboard/ (response)

  • GET /quoting/loadboard/{loadBoardShipmentId}/ (response)

  • GET /quoting/spotnegotiations/spot-negotiations/ (response)

  • GET /quoting/spotnegotiations/spot-negotiations/{spotNegotiationId}/ (response)

  • PUT /quoting/spotnegotiations/spot-negotiations/{spotNegotiationId}/ (request & response)

Carriers:

  • GET /carriers/{carrierId}/power-units/{powerUnitId}/shipments/ (response)

Purchase Orders:

  • POST /purchase-orders/build-shipment/ (response)

  • PUT /purchase-orders/update-built-shipment/ (response)

Benefits:

  • Accurate time zone-aware ETA display

  • Proper handling of cross-timezone shipments

  • Reduced confusion around ETA timing

  • Better customer communication with local time ETAs

  • Improved tracking accuracy across regions


Next Stop Metadata Tracking

Added comprehensive next_stop metadata to shipment responses, providing enhanced visibility into upcoming stops and their details.

What's New:

  • next_stop - Complete information about the next stop in the shipment route, including location, timing, and appointment details

Enhanced Endpoints (27 changes):

Shipments:

  • GET /shipments/ (response)

  • POST /shipments/ (request & response)

  • GET /shipments/external/ (response)

  • GET /shipments/external/{shipmentId}/ (response)

  • GET /shipments/{shipmentId}/ (response)

  • PUT /shipments/{shipmentId}/ (request & response)

  • PUT /shipments/{shipmentId}/add-orders/ (response)

  • POST /shipments/{shipmentId}/auto-book/ (response)

  • POST /shipments/{shipmentId}/award-quote/ (response)

  • POST /shipments/{shipmentId}/cancel/ (response)

  • POST /shipments/{shipmentId}/initiate-check-call/ (response)

  • PUT /shipments/{shipmentId}/remove-orders/{orderId}/ (response)

Shipment Pickups:

  • GET /shipments/pickups/ (response)

  • POST /shipments/pickups/ (response)

  • GET /shipments/pickups/{shipmentPickupId}/ (response)

  • PUT /shipments/pickups/{shipmentPickupId}/ (request & response)

  • POST /shipments/pickups/{shipmentPickupId}/cancel/ (response)

Quoting - Spot Negotiations:

  • GET /quoting/spotnegotiations/spot-negotiations/ (response)

  • GET /quoting/spotnegotiations/spot-negotiations/{spotNegotiationId}/ (response)

  • PUT /quoting/spotnegotiations/spot-negotiations/{spotNegotiationId}/ (request & response)

Carriers:

  • GET /carriers/{carrierId}/power-units/{powerUnitId}/shipments/ (response)

Purchase Orders:

  • POST /purchase-orders/build-shipment/ (response)

  • PUT /purchase-orders/update-built-shipment/ (response)

Benefits:

  • Complete visibility into next stop information

  • Enhanced shipment tracking and monitoring

  • Better appointment and delivery management

  • Improved customer communication and exception handling


Shipper Relationship Financial Tracking

Added support for credit currency and outstanding balance tracking in shipper relationships, enabling better financial management and credit monitoring.

What's New:

  • credit_currency - The currency used for credit terms with the shipper

  • outstanding_balance - Current outstanding balance for the shipper relationship

Enhanced Endpoints (12 changes):

  • GET /brokerages/{brokerageId}/shipper-relationships/ (response)

  • POST /brokerages/{brokerageId}/shipper-relationships/ (request & response)

  • GET /brokerages/{brokerageId}/shipper-relationships/{shipperRelationshipId}/ (response)

  • PUT /brokerages/{brokerageId}/shipper-relationships/{shipperRelationshipId}/ (request & response)

Benefits:

  • Track credit exposure across shipper relationships

  • Support multi-currency credit arrangements

  • Monitor outstanding balances in real-time

  • Improve financial reporting and credit management


Credit Limit Override Support

Added support for credit limit overrides on shipment relationships and carrier assignments, enabling per-shipment credit management that overrides default relationship limits.

What's New:

  • credit_limit_override - Override the default credit limit for specific shipments or carrier assignments

  • Available in both customer relationships (relationship_to_customer) and vendor relationships (relationship_to_vendor)

Enhanced Endpoints (77 changes):

Shipments:

  • GET /shipments/ (response)

  • POST /shipments/ (request & response)

  • GET /shipments/external/ (response)

  • GET /shipments/external/{shipmentId}/ (response)

  • GET /shipments/{shipmentId}/ (response)

  • PUT /shipments/{shipmentId}/ (request & response)

  • PUT /shipments/{shipmentId}/add-orders/ (response)

  • POST /shipments/{shipmentId}/auto-book/ (response)

  • POST /shipments/{shipmentId}/award-quote/ (request & response with new 400 status)

  • POST /shipments/{shipmentId}/cancel/ (response)

  • POST /shipments/{shipmentId}/initiate-check-call/ (response)

  • PUT /shipments/{shipmentId}/remove-orders/{orderId}/ (response)

Carrier Assignments:

  • GET /shipments/{shipmentId}/carrier-assignments/ (response)

  • POST /shipments/{shipmentId}/carrier-assignments/ (request & response with new 400 status)

  • GET /shipments/{shipmentId}/carrier-assignments/{carrierAssignmentId}/ (response)

  • PUT /shipments/{shipmentId}/carrier-assignments/{carrierAssignmentId}/ (request & response)

Shipment Pickups:

  • GET /shipments/pickups/ (response)

  • POST /shipments/pickups/ (response)

  • GET /shipments/pickups/{shipmentPickupId}/ (response)

  • PUT /shipments/pickups/{shipmentPickupId}/ (request & response)

  • POST /shipments/pickups/{shipmentPickupId}/cancel/ (response)

Quoting - Spot Negotiations:

  • GET /quoting/spotnegotiations/spot-negotiations/ (response)

  • GET /quoting/spotnegotiations/spot-negotiations/{spotNegotiationId}/ (response)

  • PUT /quoting/spotnegotiations/spot-negotiations/{spotNegotiationId}/ (request & response)

Carriers:

  • GET /carriers/{carrierId}/power-units/{powerUnitId}/shipments/ (response)

Purchase Orders:

  • POST /purchase-orders/build-shipment/ (response)

  • PUT /purchase-orders/update-built-shipment/ (response)

Benefits:

  • Override default credit limits for high-value or special circumstances shipments

  • Granular credit management at the shipment level

  • Flexible credit controls for carrier assignments

  • Better risk management and credit exposure control


Improvements

Enhanced Query Filtering

Expanded query parameter support for location-based filters to accept both single values and arrays, enabling more flexible and powerful search capabilities.

What's Enhanced: Query parameters now accept both string and array types for:

  • delivery_stops__contains

  • delivery_stops_company_name__contains

  • pickup_stops__contains

  • pickup_stops_company_name__contains

Enhanced Endpoints (16 changes):

  • GET /quoting/loadboard/ (all 4 parameters)

  • GET /shipments/ (all 4 parameters)

Benefits:

  • Search for multiple locations in a single query

  • Reduce API calls when filtering by multiple criteria

  • More efficient batch operations and reporting

  • Improved developer experience with flexible query options

Schema Cleanup

Removed deprecated schemas that are no longer used:

  • NextStopAppointmentStatus

  • RebidSelectedCarrier

  • RebidSelectedCarriersResponse

  • RebidSelectionUpdateRequest

  • SendRebidNotificationsRequest


Usage Examples

Product Weight Unit with TON Support

Creating a product with TON weight unit:

POST /products/ { "name": "Steel Coils", "weight": 25.5, "weight_unit": "TON", "description": "Industrial steel coils" }

Response:

{ "id": "product_123", "name": "Steel Coils", "weight": 25.5, "weight_unit": "TON", "description": "Industrial steel coils", "created_at": "2025-01-28T10:00:00Z" }

ETA Timezone Information

Shipment stop with timezone-aware ETAs:

GET /shipments/{shipmentId}/ { "id": "shipment_789", "stops": [ { "id": "stop_123", "location": "Chicago, IL", "carrier_specified_eta": { "estimated_arrival": "2025-01-30T14:00:00Z", "eta_timezone": "America/Chicago" }, "predictive_model_eta": { "estimated_arrival": "2025-01-30T15:30:00Z", "eta_timezone": "America/Chicago" } } ] }

Creating a stop with ETA timezone:

POST /shipments/{shipmentId}/stops/ { "location_id": "location_456", "carrier_specified_eta": { "estimated_arrival": "2025-02-01T09:00:00Z", "eta_timezone": "America/Los_Angeles" } }

Shipper Relationship with Financial Tracking

Creating a shipper relationship with credit tracking:

POST /brokerages/{brokerageId}/shipper-relationships/ { "shipper_id": "shipper_123", "credit_currency": "USD", "outstanding_balance": 5000.00, "credit_limit": 50000.00 }

Response:

{ "id": "relationship_456", "shipper_id": "shipper_123", "credit_currency": "USD", "outstanding_balance": 5000.00, "credit_limit": 50000.00, "created_at": "2025-01-07T12:00:00Z" }

Next Stop Metadata

Shipment response with next stop information:

GET /shipments/{shipmentId}/ { "id": "shipment_789", "status": "in_transit", "metadata": { "next_stop": { "stop_id": "stop_123", "appointment_status": "confirmed", "location": "Chicago, IL", "scheduled_date": "2025-01-10" } }, "stops": [...] }

Credit Limit Override

Awarding a quote with credit limit override:

POST /shipments/{shipmentId}/award-quote/ { "quote_id": "quote_456", "credit_limit_override": 75000.00 }

Creating a carrier assignment with credit limit override:

POST /shipments/{shipmentId}/carrier-assignments/ { "carrier_id": "carrier_789", "credit_limit_override": 100000.00, "assignment_type": "primary" }

Response includes the override in relationship data:

{ "id": "assignment_123", "carrier_id": "carrier_789", "credit_limit_override": 100000.00, "shipment": { "id": "shipment_789", "relationship_to_vendor": { "credit_limit_override": 100000.00 } } }

Enhanced Array-Based Query Filtering

Single value (existing functionality):

GET /shipments/?pickup_stops__contains=Chicago

Multiple values (new functionality):

GET /shipments/?pickup_stops__contains=Chicago&pickup_stops__contains=Detroit&pickup_stops__contains=Milwaukee

Or using array notation:

GET /shipments/?pickup_stops__contains[]=Chicago&pickup_stops__contains[]=Detroit


Migration Guide

Optional Enhancements

Adopt TON Weight Unit for Heavy Freight (Optional)

  • Use TON for shipments and products involving tonnage

  • Update pricing and rating logic to handle ton-based weights

  • Integrate TON support into your product catalog for bulk items

Use ETA Timezone Information (Optional)

  • Read eta_timezone from ETA objects in stop responses

  • Display ETAs in local timezone for better customer communication

  • Include eta_timezone when creating or updating stops with ETAs

  • Implement timezone-aware ETA calculations and displays

Use Next Stop Metadata (Optional)

  • Read next_stop from shipment metadata responses

  • Integrate next stop information into your tracking and monitoring systems

  • Enhance customer communication with detailed next stop information

Adopt Shipper Relationship Financial Tracking (Optional)

If you manage credit terms and balances for shippers:

  • Add credit_currency when creating/updating shipper relationships

  • Include outstanding_balance to track current balances

  • Update your financial tracking to consume these fields from API responses

Use Credit Limit Override for Granular Credit Control (Optional)

If you manage credit limits for shipments and carriers:

  • Include credit_limit_override when awarding quotes or creating carrier assignments for special circumstances

  • Read credit_limit_override from relationship data in shipment responses

  • Integrate override values into your credit management and risk assessment systems

Leverage Enhanced Query Filtering (Optional)

  • Update location-based searches to use array parameters for multi-location queries

  • Optimize batch operations with combined filters

  • Reduce API call volume for multi-criteria searches


Backward Compatibility

Backward Compatible Changes:

  • New TON weight unit enum value is additive for most endpoints

  • New eta_timezone property is optional

  • New next_stop metadata property is optional

  • New credit_currency and outstanding_balance fields are optional

  • New credit_limit_override field is optional

  • New custom field types (DATE, FLOAT, INTEGER, TIME) are additive enum values

  • Enhanced query parameters maintain existing single-value functionality

  • Removed schemas were already deprecated

Potential Client Impact:

  • Weight unit enum expansion: Clients with strict enum validation for shipments/line items may need updates to accept TON

  • New 400 error responses: POST /shipments/{shipmentId}/award-quote/ and POST /shipments/{shipmentId}/carrier-assignments/ now include 400 status responses for validation errors

Testing Recommendations:

  1. Test product creation and updates with all supported weight units

  2. Test shipment creation with TON weight unit if applicable

  3. Verify ETA timezone parsing in stop responses

  4. Verify credit limit override functionality if you plan to implement it

  5. Consider adopting optional enhancements based on your business needs


Analytics Model Updates

Data Share:

  • dim_contract - Consolidated contract dimension supporting both legacy and lane-based contract patterns.

    • dim_contract_key: Primary key (surrogate key from contract_id, lane_id, rate_table_id, rate_band_id, and location fields)

    • contract_id: The internal contract ID

    • contract_name: The human-readable name of the contract

    • status: The current status of the contract (e.g., active, inactive, expired)

    • origin_city: The city where the shipment originates

    • origin_state_province: State or province of the origin location

    • origin_postal_code: Postal code of the origin location

    • destination_city: The city where the shipment is delivered

    • destination_state_province: State or province of the destination location

    • destination_postal_code: Postal code of the destination location

    • modes: The transportation modes covered by this contract (e.g., FTL, LTL)

    • equipment_types: The equipment types allowed under this contract

    • minimum_rate: The minimum rate for this contract

    • band_calculation_measurement: The measurement type used for rate band calculations (new contracts only)

    • start_datetime: When the contract becomes effective

    • end_datetime: When the contract expires

    • contract_rate: The rate defined directly on the contract

    • rate_table_rate: The rate from the rate table (new lane-based contracts only)

    • contract_rate_type: The rate type for the contract rate (e.g., FLAT, RATE_TABLE, PER_MILE)

    • rate_table_rate_type: The rate type for the rate table rate (new contracts only)

    • rate_application_type: How the rate is applied (from rate bands in new contracts)

    • distance_miles: The distance in miles covered by this contract

    • carrier_relationship_id: Foreign key to the freight authority vendor relationship

    • carrier_name: The name of the carrier under this contract

    • company_id: The ID of the company (freight authority) that owns this contract

    • company_name: The name of the company (freight authority) that owns this contract

    • fuel_included: Whether fuel surcharges are included in the contract rate

    • additional_stop_charge_flat_fee: Flat fee charged for additional stops

    • created_at: When the contract was created

    • updated_at: When the contract was last updated

    • lane_id: The lane ID for new lane-based contracts (null for legacy contracts)

    • rate_table_id: The rate table ID for new contracts (null for legacy contracts)

    • rate_band_id: The rate band ID for new contracts (null for legacy contracts)

    • _loaded_datetime: The timestamp when the record was loaded into the warehouse

  • fact_shipment_group - each row represents a shipment-to-group association at the shipment metadata level.

    • fact_shipment_group_key: Primary key

    • dim_shipment_detail_key: Foreign key to dim_shipment_detail

    • group_id: The internal group ID

    • group_external_id: The external identifier for the group

    • group_name: The human-readable name of the group

    • group_description: A description of the group's purpose or contents

    • parent_group_id: The ID of the parent group if this is a nested group

    • group_status: The current status of the group

    • created_at: When the shipment-group association was created

    • group_updated_at: The latest update time between shipment metadata and group

    • _loaded_datetime: Timestamp when the record was loaded into the data warehouse

  • fact_shipment_group_summary - Each row represents a shipment with its associated groups aggregated into summary fields. This is a rollup of fact_shipment_group, providing comma-separated lists of group names and IDs per shipment.

    • dim_shipment_detail_key: Primary key and foreign key to dim_shipment_detail

    • group_names: Comma-separated list of all group names associated with this shipment

    • group_external_ids: Comma-separated list of all external group IDs associated with this shipment

    • group_count: The total number of distinct groups associated with this shipment

    • group_updated_at: The most recent update time across all groups for this shipment

    • _loaded_datetime: Timestamp when the record was loaded into the data warehouse

  • fact_shipment_order_group - Each row represents a shipment-to-group association via purchase orders.

    • fact_shipment_order_group_key: Primary key

    • dim_shipment_detail_key: Foreign key to dim_shipment_detail

    • shipment_id: The shipment ID

    • product_order_id: The product order ID that links the shipment to the group

    • product_order_number: The human-readable product order number

    • group_id: The internal group ID from product_order_group

    • group_external_id: The external identifier for the group

    • group_name: The human-readable name of the group

    • group_description: A description of the group's purpose or contents

    • parent_group_id: The ID of the parent group if this is a nested group

    • tenant_id: The tenant ID that owns this group

    • group_updated_at: The latest update time among shipment, product order, and group

    • _loaded_datetime: Timestamp when the record was loaded into the data warehouse

  • dim_shipment_detail - new field added to this table

    • trailer_number: Unique identifier for the trailer used in this shipment

    • contract_id: Unique identifier for the contract used to book this shipment (if applicable)

    • contract_name: Human-readable name of the contract used to book this shipment (if applicable)

    • contract_status: Current status of the contract associated with this shipment

    • contract_applied_at: Timestamp when the contract was applied to this shipment

    • stage_id: The internal stage ID

    • multi_stage_shipment_id: UUID for the multi-stage shipment

    • multi_stage_reference_id: 6-character reference id for multi-stage shipments

Other Minor Enhancements and Bug Fixes

Description

LTL loads marked as Delivered when still in transit

Auto Quote and Tender routing guide failure

Unable to select carrier from the bid

Automatic Tender Acceptance

Missing Product Field Data in Shipments - V3 Upgrade

Unable to view pop-out quick views in orders dashboard

NetSuite to Shipwell Date Mapping Issue - Dates Off by One Day & Custom Field Not Populating

Add machine_code for equipment type serializer

Error in processing bill.line_item.updated message

Missing new references data on the order release route

Shipment Stops Missing Company Name and Location Name When Order Has No Address Book Reference

NetSuite SuiteApp can't find vendor

Filtering not working at the State level and some state are being duplicated when selected

Next Stop Appointment Status filter is not working in PROD

NetSuite testing OneWorld

NetSuite Credentials Refresh resetting settings

Create shipment from order isn't setting the groups field automatically from the group on the order

V3 Orders - Missing Product Field Data in Shipments Using Bulk Create Shipment option

Customs Information not populating

Add Tons (TON) as a weight unit

Enforce Customer Credit Limit when Assigning Carriers

WFM-when a PO with CO2 cooler is combined with another PO shipping from BAF cooler, BAF script is not running and charges are still $0.00.

[iOS][5.7.6] Text Entry Bubble blocked by Keyboard

FE - Unable see events

EDI214 - Fix shipment_state event

Did this answer your question?