container.tracking.stopped

Overview

Fired when tracking for a container has stopped, either because the container's journey reached its final reportable milestone, or because tracking ended early (carrier data stopped, the booking was canceled, or someone stopped tracking manually). changes.completionReason.current tells you why.

Payload Structure

{
  "event": "container.tracking.stopped",
  "data": { /* full container snapshot, same shape as GET /v1/containers/{containerId} */ },
  "changes": {
    "completionReason": {
      "previous": null,
      "current": "reachedLastReportableMilestone"
    }
  },
  "deliveryAttempt": 1,
  "pendingRetries": 4,
  "sentAt": "2025-07-19T17:00:00.654Z"
}

data object

The full final state of the container at the time tracking was stopped. Same structure as the container status response.

changes object

Contains the completionReason with { previous, current }:

  • previous is normally null (the container was actively tracking)
  • current is one of the values in the table below

The same value is returned as completionReason on the container status response, so you can read it later without storing the webhook.

Completion Reasons

Completion reasonDescription
reachedLastReportableMilestoneThe container reached the last milestone OpenTrack can report for this carrier and mode. Most often EMPTY_RETURNED. Also used where the carrier does not report empty return (after outgate), for tank-container outgates, and some domestic rail moves.
noUpdatesForLclShipmentNo further updates are expected for this LCL shipment. Applies where the carrier reports LCL only through discharge.
timedOutAtAlternateMilestoneThe container stayed on the same post-arrival status for 90 days (30 days for carriers that do not provide active tracking), so tracking was terminated.
containerStrippedCargo was unloaded from this container mid-voyage, at a transshipment or destination port. No further tracking updates are expected. The shipment may continue in a different container.
bookingCanceledThe container's booking was canceled.
newVoyageHasStartedThe carrier reported this container on a new voyage under a new master bill.
containerMovedToNewMblThis container was moved to a different master bill and is tracking there instead.
trackingCanceledTracking was canceled by someone on your team.
noMoreReportsThe carrier stopped returning data for this container on this master bill.
notFoundAtSslThe carrier does not return this container on this master bill.
containerLostThe carrier cannot locate this container and is no longer providing updates.
containerDamagedThe carrier indicated that this container has been damaged.
outdatedShipmentThis container is an old shipment and is no longer being tracked.
invalidTradeTypeForAccountThe container's tradeType does not match the trade type enabled on your account. For example, an export on an import-only account.

Treat this list as open-ended. Handle unrecognized values gracefully rather than failing, and expect occasional historical values on containers tracked long ago.

Common Use Cases

Use CaseHow to Implement
Close out shipment recordsWhen tracking stops, mark the shipment as completed in your TMS or ERP system
Final snapshot archivingCapture the final data payload as the definitive record for the completed container
Invoice generationUse the tracking stopped event to trigger invoice creation for completed shipments
Clean up active monitoringRemove the container from your active monitoring dashboard or alert system
Separate clean from exceptional endingsBranch on completionReason: reachedLastReportableMilestone is a normal end of journey, while values such as containerLost or bookingCanceled usually need follow-up
Completion analyticsRecord the completionReason and final status for transit time and lifecycle analytics

Did this page help you?