container.status.updated

Overview

Fired when a container transitions to a new milestone status. This is the most commonly used webhook event and represents significant lifecycle transitions such as vessel departure, arrival, discharge, availability, delivery, and empty return.

When This Event Fires

A new milestone has been recorded in the container's history, causing the top-level status field to change. Milestones represent major lifecycle transitions — for example, moving from LOADED to VESSEL_DEPARTED, or from DISCHARGED to AVAILABLE.

📘

This event only fires for milestone transitions. Minor history updates (e.g. a backfilled date correction) that do not change the current status will fire container.history.updated instead.

Milestones that trigger this event

The following statuses are considered milestones. A transition to any of these will fire the event:

Full milestone list

Pre-ocean: DISCOVERING · DISCOVERED · NOT_FOUND · EMPTY_OUTGATED · FULL_INGATED_AT_ORIGIN_RAIL_FACILITY · LOADED_ON_RAIL_AT_ORIGIN · DEPARTED_ON_RAIL_FROM_ORIGIN · ARRIVED_AT_ORIGIN_PORT_RAIL_FACILITY · UNLOADED_FROM_RAIL_AT_ORIGIN_PORT · FULL_INGATED

Barge at origin: LOADED_ON_BARGE_AT_ORIGIN · BARGE_DEPARTED_FROM_ORIGIN · BARGE_BERTHED_AT_ORIGIN_PORT · DISCHARGED_FROM_BARGE_AT_ORIGIN_PORT

Ocean: LOADED · VESSEL_DEPARTED · VESSEL_ARRIVED_AT_TRANSSHIPMENT_PORT · VESSEL_BERTHED_AT_TRANSSHIPMENT_PORT · DISCHARGED_AT_TRANSSHIPMENT_PORT · LOADED_AT_TRANSSHIPMENT_PORT · VESSEL_DEPARTED_FROM_TRANSSHIPMENT_PORT · VESSEL_ARRIVED · VESSEL_BERTHED · DISCHARGED

Barge at destination: LOADED_ON_BARGE_AT_DESTINATION_PORT · BARGE_DEPARTED_FROM_DESTINATION_PORT · BARGE_BERTHED_AT_DESTINATION · DISCHARGED_FROM_BARGE_AT_DESTINATION

Port & inland: AVAILABLE · FULL_OUTGATED · FULL_INGATED_TO_RAIL_FACILITY · LOADED_ON_RAIL · DEPARTED_ON_RAIL · ARRIVED_AT_RAIL_FACILITY · UNLOADED_FROM_RAIL · AVAILABLE_AT_RAIL_FACILITY · FULL_OUTGATED_FROM_RAIL_FACILITY · FULL_INGATED_TO_OFFDOCK_FACILITY · AVAILABLE_AT_OFFDOCK_FACILITY · FULL_OUTGATED_FROM_OFFDOCK_FACILITY · FULL_DROPPED_OFF_AT_TRUCKER_YARD · FULL_PICKED_UP_FROM_TRUCKER_YARD

Delivery & return: DELIVERED · EMPTY_READY_FOR_PICKUP · EMPTY_PICKED_UP_FOR_RETURN · EMPTY_DROPPED_OFF_AT_TRUCKER_YARD · EMPTY_PICKED_UP_FROM_TRUCKER_YARD · EMPTY_RETURNED

Payload Structure

{
  "event": "container.status.updated",
  "data": { /* IContainerVoyageResponse — full container snapshot */ },
  "changes": {
    "status": {
      "previous": "DISCHARGED",
      "current": "AVAILABLE"
    }
  },
  "deliveryAttempt": 1,
  "pendingRetries": 4,
  "sentAt": "2025-07-19T17:00:00.654Z"
}

data object

The data property contains the full current state of the container, identical to the response from GET /v1/container/:containerId. Key fields include:

FieldDescription
containerIdContainer number (e.g. MSCU1234567)
scacCodeCarrier SCAC code
statusCurrent milestone status
etaAtTerminalETA at destination terminal
lastFreeDayPort last free day
vesselCurrent vessel object (name, imo, mmsi)
originPortOrigin port location
destinationPortDestination port location
historyArray of milestone events with timestamps and locations
holdsArray of active and resolved holds
accountAccount domain and region

changes object

For this event, changes always contains the status field with previous and current values.

Common Use Cases

Use CaseHow to Implement
Container becomes availableFilter for changes.status.current = AVAILABLE or AVAILABLE_AT_RAIL_FACILITY
Container is outgatedFilter for changes.status.current matching any outgate status (FULL_OUTGATED, FULL_OUTGATED_FROM_RAIL_FACILITY, etc.)
Container deliveredFilter for changes.status.current = DELIVERED
Empty returnedFilter for changes.status.current = EMPTY_RETURNED
Vessel departedFilter for changes.status.current = VESSEL_DEPARTED
Vessel arrivedFilter for changes.status.current = VESSEL_ARRIVED
DischargedFilter for changes.status.current = DISCHARGED
Update TMS/ERP systemPush the latest status and associated dates to your transportation or ERP system on every milestone change
Customer notificationSend email/SMS alerts to consignees when key milestones occur (arrival, availability, delivery)

Workflow Shortcuts

  • "When container becomes available"container.status.updated where status = AVAILABLE
  • "When container is outgated"container.status.updated where status matches outgate statuses
  • "When the status changes"container.status.updated (no additional filter)