Added

Live shipment position and a human-readable in-transit status


The shipment tracking endpoints now return a richer, more accurate live location, plus a ready-to-display status sentence.

Human-readable status sentence

The embedded location object on the tracking response now includes a statusDescription field: a single, display-ready sentence that combines the shipment's phase, approximate current location, and ETA.

IN TRANSIT DIRECT TO RECEIVER - Currently in Flagstaff, AZ - 2 Days 4 Hrs Until Destination

You no longer need to assemble this string yourself from the individual fields. It is phase-aware (pre-pickup, in transit, out for delivery) and degrades gracefully: when the location can't be confidently resolved it drops the "Currently in" clause, and when a shipment is significantly delayed it shows the delay message instead of the countdown.

statusDescription is omitted from the response when no meaningful status line can be produced, so it is purely additive: existing integrations are unaffected.

More accurate live position

The center position estimate is now route-interpolated against live signals, so the reported point and its uncertaintyRadiusKm track the shipment more closely between events. Delivery-arrival detection was also improved, so lastEventTimestamp, isSignificantlyDelayed, and delayMessage reflect real arrival timing rather than estimates alone.

How to get it

Request the location section on either tracking endpoint:

GET /v1/shipper/shipment/{orderNumber}/tracking?include=location

Example response with the location section embedded:

{
  "id": "507f1f77bcf86cd799439011",
  "orderNumber": "ZKYQ5",
  "orderStatus": "PICKED_UP",
  "actualPickupDate": "2026-02-19T10:30:00Z",
  "actualDeliveryDate": null,
  "estimatedPickupDate": "2026-02-19T09:00:00Z",
  "estimatedDeliveryDate": "2026-02-22T12:00:00Z",
  "location": {
    "center": { "latitude": 35.19, "longitude": -111.65 },
    "uncertaintyRadiusKm": 4.2,
    "lastEventTimestamp": "2026-02-20T17:33:15Z",
    "isSignificantlyDelayed": false,
    "statusDescription": "IN TRANSIT DIRECT TO RECEIVER - Currently in Flagstaff, AZ - 2 Days 4 Hrs Until Destination"
  }
}

The location object is omitted entirely unless you pass include=location; without it, the response is the same Tracking object minus that key.

No changes are required to your integration to keep working. To surface the new status, read location.statusDescription and fall back to the structured fields when it is absent.