Tracking & visibility

Track inbound vessels

On Water is the screen that answers one question: when does my freight land? It pairs a satellite map of every inbound vessel carrying your open containers with a rail of rows, one per vessel, each reduced to a single arrival verdict and the signals that back it up.

7 minute read · Updated July 27, 2026

On Water lives at /protected/operations/on-water. The same data feeds the Vessel Tracking panel on your operations home page, and that panel's heading links straight here. Carrier workspaces always have access; forwarder, importer, and warehouse workspaces need the on-water capability enabled, or the page redirects to the access-denied screen.

The map and vessel rail

The header is one line: On Water, then a vessel count and a container count, then the Last AIS legend (<24h green, 24–48h yellow, 48h+ red), then Updated just now or Updated 12m ago. That “Updated” stamp is when Conterminal built the snapshot, not when a vessel last broadcast. Hover it to see the exact time.

The map is a full-bleed satellite view. Zoom controls are the only map chrome; there is no map-type switcher, Street View, or fullscreen button. On first load it frames every vessel position plus their destination terminals rather than defaulting to New York harbor — unless you arrived on a deep link, in which case the selected vessel owns the viewport.

Reading the markers

Arrow
The vessel has a live-enough AIS fix and a confirmed destination terminal. The arrow points along the bearing from its current position to that terminal — it is not the vessel's own heading.
Circle
Drawn instead of an arrow whenever AIS freshness is offline or there is no confirmed destination to point at. A circle is a signal in itself: the position on screen is old.
Color
Green, yellow, and red match the header legend exactly — under 24 hours, 24 to 48 hours, and older than 48 hours since the last AIS fix.
No marker at all
Only canonical vessel records with a known position get a marker. A vessel with a rail row but no pin has no usable AIS fix yet.

The rail

On a desktop the rail sits to the right of the map and can be collapsed with the small chevron on its left edge — Hide vessel list and Show vessel list. Collapsed, it becomes a vertical N vessels strip you can click to reopen, and the choice is remembered in this browser. On a phone the rail is stacked above the map instead.

Each row leads with the vessel name and its container counts — 12 on water, plus · 3 at terminal once boxes start discharging. Underneath sits the arrival verdict:

At berth · unloading
At least one container on this vessel has already moved past the on-water stage. The ETA is retired at that point; discharge has started.
Arrives in 17h · today 8:00 PM · Terminal
A timed ETA. Times render in Eastern Time. Once the ETA passes, the lead flips to “Was due 4h ago”.
Arrives today / tomorrow / in 3d
A date-only ETA. Carriers publish these as midnight UTC, so Conterminal deliberately speaks in calendar days and never invents a time of day. Past dates read “Was due yesterday” or “Was due 2d ago”.
No ETA
Nothing in the trust ladder produced an arrival time. The terminal name still shows if one is confirmed.

The quiet line beneath it is a sentence, not a pile of badges: AIS age, then the steamship line code, then where the headline number came from — ETA per Maersk, ETA per terminal, ETA per berth schedule, or ETA per AIS — then any source that disagrees. Sources that agree stay silent; a source that is off by a day or more gets an amber badge such as AIS says Jul 9 (+2d) or docs say Jul 6 (−1d). A document ETA that matches simply reads docs agree.

The trust ladder is deliberate and operator-ranked: a carrier SSL ETA beats a terminal ETA, which beats the berthing schedule, which beats AIS. A document ETA is a flagged last resort — when it is all that exists and AIS has gone quiet, the headline carries a per docs only badge. AIS ETAs are routinely mis-keyed at the source, which is why they only win when nothing above them exists.

Opening a vessel

  1. Click a marker for a glance. A compact info card opens on the map: vessel name, steamship line, the same arrival verdict, and the container chips On Water and At Terminal. Its footer button is Details →.
  2. Click a rail row for the full sheet. Rows skip the info card and open the detail sheet directly, so you are never looking at two surfaces showing the same facts. Rows are keyboard-reachable; Enter opens the sheet.
  3. Work with the sheet open. The sheet is not modal — the map behind it stays live, and you can keep panning and clicking. Close it with the × button. Clicking empty water closes the info card.

What the sheet holds

Identity first: vessel name, the IMO and MMSI as IMO / MMSI, and the steamship line. Name, line, and terminal names are links out to their directory pages wherever Conterminal has one.

Then the telemetry facts: Confirmed DO Terminal, AIS Berth Window with Arrive and Depart times in port-local time, and up to four ETA cells — SSL ETA, Terminal ETA, AIS ETA, and DO ETA. The SSL and terminal labels are replaced by the actual source name when Conterminal knows it. If the berth schedule points at a different terminal than AIS suggests, the berth window carries an AIS mismatch flag.

Below that, Containers (N) lists every box you have on the vessel. Each container number opens its shipment page in a new tab, with the voyage as V. 214, the warehouse underneath, and chips for workflow status, Hold, and Appt. Made. Last free day shows as LFD Jul 9, amber inside two days and red on or past the day. Appointments show as Appt Jul 9, 8:00 AM ET. When the voyage has more stops, an Upcoming Calls (N) section follows; with no further calls that section is absent entirely rather than empty.

The container list is not always loaded with the page. In forwarder, importer, and warehouse workspaces it is fetched when you open the sheet, so you will briefly see Loading containers…, and the header count can exceed the visible rows for a moment. If the fetch fails the section reads Container detail is unavailable. — reopen the sheet rather than assuming the containers are gone.

Refreshing availability and AIS (carriers only)

The Actions button at the bottom of the sheet is carrier-only. Forwarder, importer, and warehouse workspaces get the same sheet without it, and it is also suppressed for synthetic vessel records that have no real identity to refresh. Two of its four items queue work for LongShorty, the worker that signs into terminal, rail, and steamship-line systems on your behalf.

Refresh Container Availability
LongShorty re-checks the containers you have on this vessel against their tracking sources. Use it when a box should have discharged but the sheet still says on water.
Refresh AIS
LongShorty re-fetches vessel telemetry — position and ETA — from its providers. Use it when the freshness chip has gone stale or offline and you need a current fix.

The other two items are read-only: View on VesselFinder opens the public tracking page for the vessel's IMO or MMSI in a new tab, and Open vessel page jumps to the Conterminal vessel profile.

What you see while it runs

The status line to the left of the Actions button takes over, with a colored dot beside it. Both menu items are disabled while either refresh is in flight, and the running one relabels itself Refreshing Container Availability… or Refreshing AIS…. Conterminal polls every two seconds and reports one of these:

Availability refresh queued
Accepted, waiting for LongShorty to pick it up. The AIS wording is “Vessel refresh queued”.
Refreshing container availability
LongShorty is working the request. The AIS wording is “Refreshing vessel telemetry”.
Container availability updated
New data landed and the screen has already reloaded it. The AIS wording is “Vessel telemetry updated”.
Checked, no newer container availability
LongShorty ran successfully and the source had nothing newer. This is a success, not a failure — the AIS wording is “Checked, no newer vessel telemetry”.
Container availability refresh failed
The request did not complete. The reason, when the source gave one, prints underneath. The AIS wording is “Vessel telemetry refresh failed”.

A finished result stays on screen for about eight seconds, then the line reverts to its resting state: Last AIS 3 hours ago and Last synced 20 minutes ago.

You need a carrier workspace role of tenant admin, manager, or user to queue either refresh, and the vessel has to be in your current on-water scope. Requesting one for a vessel you can no longer see fails with This vessel is not available in the current on-water scope. LongShorty also has to be running: if the worker is down, the request sits at queued indefinitely rather than erroring.

Cooldowns and repeat requests

What actually limits repeat requests on this screen is de-duplication, not a timer. Each workspace can have exactly one in-flight request per vessel per queue. Ask for the same refresh again while one is pending or processing and Conterminal attaches you to the existing request instead of creating a second one — which is why the menu items disable themselves while work is running. Once a request finishes, you can queue another immediately.

A cooldown message here usually is not a timer you need to wait out.

These two actions can also show Refresh AIS on cooldown, Refresh Container Availability on cooldown, or Manual vessel refreshes are limited to once every 2 minutes. In practice the far more common reason a refresh is unavailable is an in-flight request rather than a rate limit, so check whether a refresh is already running before you wait. If the cooldown wording stays put with nothing running, wait the two minutes and try again, and tell support if it repeats.

Reading freshness labels

Freshness is a single derived value — the age of the vessel's last AIS fix — and every dot, chip, and marker color on the screen reads from it.

LIVE
Last AIS fix within 24 hours. The dot pulses. Green.
STALE
Last AIS fix between 24 and 48 hours old. Yellow. Positions on the map are already a day behind.
OFFLINE
Older than 48 hours, or no AIS timestamp at all. Red, and the marker degrades to a circle. Treat the plotted position as historical.

The wording on the rail follows the same value: AIS 3h ago while the signal is live or stale, AIS silent 5d once it is offline, and No AIS signal when the vessel has never reported.

Two hints on the AIS ETA cell in the sheet are worth recognizing. Last known means the position behind the ETA is a last-known fix rather than a current one. Last AIS ETA means the vessel is no longer broadcasting an ETA at all and you are looking at the last one it sent for your terminal — a frozen number, not a live one.

The sync line under the sheet's status area answers a different question — when LongShorty last worked this vessel. When it has never run, that line says Tracking active, Tracking ended (in amber), or Waiting for LongShorty instead of a timestamp.

Timezones are not uniform by accident. Wall-clock times and appointments render in Eastern Time and say ET. Berth windows render in the port's local time, because a berth window in Rotterdam is only meaningful there. Date-only ETAs keep their intended calendar date and are never given a time of day, so a vessel due “Jul 9” is not flagged overdue at 8:00 PM the night before.

Troubleshooting

“Vessel tracking unavailable”

This appears on the operations home page's Vessel Tracking panel, not on On Water itself, and it means the panel could not load tracking for the current account at all: “This workspace cannot load On Water vessel tracking for the current account.” Carrier workspaces always qualify; forwarder, importer, and warehouse workspaces need the on-water capability turned on by an administrator. If you also get bounced to the access-denied screen when you open On Water directly, that confirms it is a permission problem rather than a data problem.

“No active vessel tracking data”

Same panel, opposite meaning: “On Water is connected, but there are no inbound vessels with active containers in the current view.” Nothing is broken. You have no open containers currently on the water — check whether the boxes you expected have already discharged, or whether their delivery orders were closed.

“Vessel tracking failed to load” with a Retry button

This is On Water's own error state, shown when the snapshot request fails and there is no cached copy to fall back on. The underlying message prints beneath it. Select Retry; if it keeps failing, your session may have expired — reload the page and sign in again.

The map area is blank or says “Map unavailable”

The Google Maps client could not start. The panel names the cause outright: the server needs GOOGLE_ADDRESS_VALIDATION_API_KEY set, with the Maps JavaScript API enabled for that key. This is a deployment problem, not something you can fix from your account. The vessel rail keeps working, so you can still read arrival verdicts and open sheets while it is down.

“Loading map…” never goes away

The map is code-split and loads after the rest of the page. A permanently stuck loader usually means the map bundle or the Google Maps script was blocked — check for a corporate proxy or an extension blocking maps.googleapis.com, then reload.

A vessel is in the rail but has no pin on the map

Only canonical vessel records with a known position are plotted. A vessel with no AIS fix, or a synthetic placeholder record created from paperwork alone, gets a row and a verdict but no marker. That is also why its Actions menu may be missing: synthetic records cannot be refreshed.

Times drift on a long-open tab

Relative labels re-render on a 60-second tick, so “Arrives in 4h” stays honest while you sit on the page. The underlying data does not: the snapshot is fetched when you open or revisit the page and does not poll on its own. If the header still reads Updated 2h ago, reload the page. During hydration relative labels are intentionally blank for a moment — that is deliberate, not a bug.

“No vessels match” with “Clear filters”

Ignore the filter advice. On Water no longer has a filter bar, so there is nothing to clear — the second half of that sentence is the honest one: there are no vessels with open containers to show, or AIS snapshots have not arrived yet. Please report this wording if it wastes your time.

“This vessel is not available in the current on-water scope.”

You asked for a refresh on a vessel that is no longer in your workspace's on-water working set — usually because the last container discharged, or the sheet was left open while the data moved on. Close the sheet, reload, and reopen the vessel.

A refresh sits at “queued” and never moves

The request was accepted but LongShorty has not picked it up. Nothing you do in the browser will advance it, and re-requesting only reattaches you to the same request. If it has been queued for more than a few minutes, LongShorty is likely down — contact support with the vessel name rather than retrying.

“Open vessel page” is missing from the Actions menu

That item only appears when the vessel resolves to a real Conterminal vessel page. Conterminal deliberately renders nothing rather than a dead link. Use View on VesselFinder for the public position instead.

The container count is higher than the rows shown

In forwarder, importer, and warehouse workspaces the container list loads when the sheet opens, so the header count leads the rows for a moment. If the rows never arrive and the section reads “Container detail is unavailable.”, close and reopen the sheet.