---
updatedAt: 2026-09-14T12:59:26.000Z
agentTools:
  projectIndex: https://developers.opentrack.co/llms.txt
---

# 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

```json
{
  "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 reason                | Description                                                                                                                                                                                                                                                |
| -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `reachedLastReportableMilestone` | The 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. |
| `noUpdatesForLclShipment`        | No further updates are expected for this LCL shipment. Applies where the carrier reports LCL only through discharge.                                                                                                                                       |
| `timedOutAtAlternateMilestone`   | The 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.                                                                                                   |
| `containerStripped`              | Cargo 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.                                                                   |
| `bookingCanceled`                | The container's booking was canceled.                                                                                                                                                                                                                      |
| `newVoyageHasStarted`            | The carrier reported this container on a new voyage under a new master bill.                                                                                                                                                                               |
| `containerMovedToNewMbl`         | This container was moved to a different master bill and is tracking there instead.                                                                                                                                                                         |
| `trackingCanceled`               | Tracking was canceled by someone on your team.                                                                                                                                                                                                             |
| `noMoreReports`                  | The carrier stopped returning data for this container on this master bill.                                                                                                                                                                                 |
| `notFoundAtSsl`                  | The carrier does not return this container on this master bill.                                                                                                                                                                                            |
| `containerLost`                  | The carrier cannot locate this container and is no longer providing updates.                                                                                                                                                                               |
| `containerDamaged`               | The carrier indicated that this container has been damaged.                                                                                                                                                                                                |
| `outdatedShipment`               | This container is an old shipment and is no longer being tracked.                                                                                                                                                                                          |
| `invalidTradeTypeForAccount`     | The 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 Case                                    | How to Implement                                                                                                                                                            |
| ------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Close out shipment records**              | When tracking stops, mark the shipment as completed in your TMS or ERP system                                                                                               |
| **Final snapshot archiving**                | Capture the final `data` payload as the definitive record for the completed container                                                                                       |
| **Invoice generation**                      | Use the tracking stopped event to trigger invoice creation for completed shipments                                                                                          |
| **Clean up active monitoring**              | Remove the container from your active monitoring dashboard or alert system                                                                                                  |
| **Separate clean from exceptional endings** | Branch on `completionReason`: `reachedLastReportableMilestone` is a normal end of journey, while values such as `containerLost` or `bookingCanceled` usually need follow-up |
| **Completion analytics**                    | Record the `completionReason` and final status for transit time and lifecycle analytics                                                                                     |