Tow Tracker API

Concise reference for calling Tow Tracker endpoints. Authenticate with your API key using thex-api-key header. Each organization is limited to45,000 requests/month across all products.

GET /tow-tracker/list-positions

Returns the current positional data for the specified vessels.

Query parameters

  • mmsi (required): comma-separated list of up to 100 MMSIs.

Request

GET/tow-tracker/list-positions
curl -X GET "https://api.actionintelgo.com/tow-tracker/list-positions?mmsi=367584670,367618670,367186700"   -H "x-api-key: YOUR_API_KEY"   -H "Content-Type: application/json"

Response

Sample response

[
  {
    "mmsi": "367584670",
    "vesselname": "CYNTHIA II",
    "owner": "ABC",
    "horsepower": 5000,
    "date_time_ct": "2025-08-18T05:27:51-05:00",
    "river": "MISSISSIPPI-LO",
    "mile_marker": 945,
    "reported_speed_knots": 4.0,
    "reported_nav_status": "Power Driven Vessel Pushing Ahead Towing Alongside",
    "direction": "Downbound"
  }
]

GET /tow-tracker/get-eta (legacy)

The original ETA endpoint remains available for existing integrations, but new integrations should use get-eta-v2 below — it adds predicted non-lock stop time, owner-specific reconstructed speeds, and richer routing detail.

GET /tow-tracker/get-eta-v2

Predicts ETA for a vessel to a destination river mile using reconstructed (stop-removed) speeds plus a predicted non-lock stop-time component. Supersedes get-eta.

Query parameters

  • destination_river (required): Destination river name. Use "Mississippi Upper" or "Mississippi Lower" for the Mississippi.
  • destination_mile_marker (required): Destination mile marker.
  • mmsi or owner (at least one required):mmsi auto-fills the vessel's current position, owner, and HP; owner is a fleet-level fallback.
  • hp (optional): Horsepower; improves stop prediction when no MMSI is given.
  • start_river + start_mm (optional): Override the origin. Required together when mmsi is not provided.
  • start_date (optional): ISO-8601 departure time; ETA = start_date + predicted duration. Defaults to the vessel's position timestamp.
  • route_selection (optional): default (single best route) orall (return all valid routes).
  • route_strategy (optional): shortest_distance (default),fewest_hops, or direct.
  • include_stop_breakdown (optional): adds per-location stop detail; only valid with route_selection=default.

Request

GET/tow-tracker/get-eta-v2
curl -X GET "https://api.actionintelgo.com/tow-tracker/get-eta-v2?mmsi=367638260&destination_river=OHIO&destination_mile_marker=980"   -H "x-api-key: YOUR_API_KEY"

Response

Sample response

{
  "mmsi": "367638260",
  "owner": "MARQUETTE",
  "vesselname": "TITLETOWN USA",
  "origin_river": "MISSISSIPPI-UP",
  "origin_mile_marker": 174.0,
  "destination_river": "OHIO",
  "destination_mile_marker": 980.0,
  "route_selection": "default",
  "stop_prediction": {
    "predicted_nonlock_hours": 0.37,
    "predicted_p25_hours": 0.1,
    "predicted_p75_hours": 0.44,
    "prediction_source": "owner_hp",
    "vessel_known": true,
    "route_complete": true,
    "n_locations_in_route": 9,
    "n_locations_with_data": 9
  },
  "routes": [
    {
      "route_id": "route_1",
      "route_label": "MISSISSIPPI-UP → OHIO",
      "eta": "2026-06-17T10:24:37-05:00",
      "start_time": "2026-06-16T10:15:37-05:00",
      "total_distance_mi": 175.0,
      "estimated_duration_hr": 24.15,
      "transit_time_hours": 23.78,
      "lock_time_hours": 0.0,
      "predicted_stop_hours": 0.37
    }
  ]
}

predicted_stop_hours is already included in estimated_duration_hr(not additive). Each route also includes route_segments and per-waypoint detail.

Response schema

The sample above is abbreviated. The full response is a JSON object describing the vessel, the resolved origin/destination, the routing parameters used, an aggregate stop-time prediction, and one or more candidate routes. The field set is stable; the option flags below add fields as noted.

Top-level fields

  • mmsi (string | null): MMSI used; null for owner-only requests.
  • owner (string): owner/fleet used for the stop-time prediction.
  • vesselname (string | null): vessel name when resolved from MMSI.
  • origin_river (string), origin_mile_marker (number): resolved origin.
  • destination_river (string), destination_mile_marker (number): echoed destination.
  • route_selection (string): default or all, echoing the request.
  • routing (object): routing parameters applied — see below.
  • stop_prediction (object): aggregate non-lock stop-time prediction — see below.
  • routes (array): one entry for default; all valid candidates for all.

routing

  • strategy (string): strategy applied — shortest_distance, fewest_hops, or direct.
  • considered_routes (number): candidate routes evaluated.
  • max_hops (number): maximum river-to-river hops allowed during search.
  • path_limit (number): maximum paths explored during search.

stop_prediction

  • predicted_nonlock_hours (number): expected total non-lock stop time across the route, in hours. Already included in each route's duration — not additive.
  • predicted_p25_hours, predicted_p75_hours (number): 25th/75th-percentile band for the stop-time estimate.
  • prediction_source (string): basis of the estimate — one ofvessel_specific, owner_hp,mixed, location_avg, orno_data.
  • vessel_known (boolean): whether the MMSI matched a vessel in the historical data.
  • route_complete (boolean): whether every stop location on the route had probability data.
  • n_locations_in_route (number): stop locations identified along the route.
  • n_locations_with_data (number): how many of those had historical probability data.
  • location_breakdown (array): present only wheninclude_stop_breakdown=true — see below.

routes[]

  • route_id (string): e.g. route_1.
  • route_label (string): human-readable river sequence, e.g. MISSISSIPPI-UP → OHIO.
  • eta (string, ISO-8601): predicted arrival (transit + lock + predicted stop).
  • start_time (string, ISO-8601): departure time used.
  • transit_time_hours (number): moving time at reconstructed (stop-removed) speeds.
  • lock_time_hours (number): expected lock delay along the route.
  • predicted_stop_hours (number): non-lock stop time for this route (already in the duration).
  • total_distance_mi (number): total route distance in miles.
  • estimated_duration_hr (number): total duration =transit_time_hours + lock_time_hours + predicted_stop_hours.
  • average_speed_knots (number): effective average speed.
  • river_sequence (array of string): ordered rivers traversed.
  • waypoints (array): one entry per river transition — see below.
  • route_segments (array): per-river distance breakdown — see below.
  • route_details (object): nested waypoints copy, retained for back-compat.

routes[].waypoints[]

  • river (string): river at this point.
  • mile_marker (number): mile marker at the transition.
  • eta (string, ISO-8601): predicted time the vessel reaches this point.

routes[].route_segments[]

  • river (string): river for this segment.
  • start_mile_marker, end_mile_marker (number): segment endpoints.
  • distance_miles (number): segment length in miles.

stop_prediction.location_breakdown[] (include_stop_breakdown=true)

Per-location detail behind the aggregate prediction. Only returned withinclude_stop_breakdown=true, which requiresroute_selection=default.

  • location_id (number): internal stop-location identifier.
  • modal_river (string): river the location sits on.
  • mm_centroid (number): location centroid mile marker.
  • lat_centroid, lon_centroid (number): centroid coordinates.
  • stop_probability (number, 0–1): probability the vessel stops here.
  • mean_duration_hours (number): mean stop duration given a stop occurs.
  • duration_p25_hours, duration_p75_hours (number): duration percentile band.
  • expected_hours (number): expected contribution =stop_probability × mean_duration_hours.
  • expected_p25_hours, expected_p75_hours (number): expected-contribution band.
  • probability_source (string): basis for this location (same value set asprediction_source).
  • legs_passing_through (number): historical legs observed through this location.
  • route_segment (number): index of the route segment this location belongs to.

route_selection=all

With route_selection=all, top-level fields are unchanged but routescontains every valid candidate (each with the full route object above), ordered by the activeroute_strategy. include_stop_breakdown is not permitted in this mode.

Full response example

Complete default response (route_selection=default):

{
  "mmsi": "367638260",
  "owner": "MARQUETTE",
  "vesselname": "TITLETOWN USA",
  "origin_river": "MISSISSIPPI-UP",
  "origin_mile_marker": 133.0,
  "destination_river": "OHIO",
  "destination_mile_marker": 980.0,
  "route_selection": "default",
  "routing": {
    "strategy": "shortest_distance",
    "considered_routes": 2,
    "max_hops": 8,
    "path_limit": 1000
  },
  "stop_prediction": {
    "predicted_nonlock_hours": 0.3,
    "predicted_p25_hours": 0.09,
    "predicted_p75_hours": 0.38,
    "prediction_source": "owner_hp",
    "vessel_known": true,
    "route_complete": true,
    "n_locations_in_route": 6,
    "n_locations_with_data": 6
  },
  "routes": [
    {
      "route_id": "route_1",
      "route_label": "MISSISSIPPI-UP → OHIO",
      "eta": "2026-06-19T01:22:52-05:00",
      "start_time": "2026-06-18T06:49:16-05:00",
      "transit_time_hours": 18.26,
      "lock_time_hours": 0.0,
      "predicted_stop_hours": 0.3,
      "total_distance_mi": 134.0,
      "estimated_duration_hr": 18.56,
      "average_speed_knots": 6.27,
      "river_sequence": ["MISSISSIPPI-UP", "OHIO"],
      "waypoints": [
        { "river": "MISSISSIPPI-UP", "mile_marker": 133.0, "eta": "2026-06-18T06:49:16-05:00" },
        { "river": "MISSISSIPPI-UP", "mile_marker": 0,     "eta": "2026-06-19T00:54:04-05:00" },
        { "river": "OHIO",           "mile_marker": 980.0, "eta": "2026-06-19T01:04:52-05:00" }
      ],
      "route_segments": [
        { "river": "MISSISSIPPI-UP", "start_mile_marker": 133.0, "end_mile_marker": 0,     "distance_miles": 133.0 },
        { "river": "OHIO",           "start_mile_marker": 981,   "end_mile_marker": 980.0, "distance_miles": 1.0 }
      ],
      "route_details": {
        "waypoints": [
          { "river": "MISSISSIPPI-UP", "mile_marker": 133.0, "eta": "2026-06-18T06:49:16-05:00" },
          { "river": "MISSISSIPPI-UP", "mile_marker": 0,     "eta": "2026-06-19T00:54:04-05:00" },
          { "river": "OHIO",           "mile_marker": 980.0, "eta": "2026-06-19T01:04:52-05:00" }
        ]
      }
    }
  ]
}

With include_stop_breakdown=true, stop_prediction additionally contains a location_breakdown array, one entry per stop location:

"location_breakdown": [
  {
    "location_id": 1714,
    "modal_river": "MISSISSIPPI-UP",
    "mm_centroid": 76,
    "lat_centroid": 37.56898830748788,
    "lon_centroid": -89.50811565942547,
    "stop_probability": 0.0957,
    "mean_duration_hours": 6.05,
    "duration_p25_hours": 1.41,
    "duration_p75_hours": 8.6,
    "expected_hours": 0.58,
    "expected_p25_hours": 0.13,
    "expected_p75_hours": 0.82,
    "probability_source": "owner_hp",
    "legs_passing_through": 230,
    "route_segment": 0
  }
]

Errors

  • 400: client or data error — missing/invalid parameters, a conflicting combination (e.g. include_stop_breakdown=true with route_selection=all), MMSI not found in current positions, or no valid route found. The error field describes the cause.
  • 500: unhandled server error.

Field definitions and expanded examples are available in the Quickstart guide. For allowed river names, see River name reference.

River names reference

Download the full list as CSV: river_mile_limits.csv

river_namemin_milemax_milemarker_count
MISSISSIPPI-LO0953968
MISSISSIPPI-UP0878879
OHIO0981982
ILLINOIS0303303
GIWW-WEST0682683
TENNESSEE0652653
MISSOURI0750751
ARKANSAS20394381
TOMBIGBEE45217172
ALABAMA0306306
CUMBERLAND0382382
GREEN0109109
RED0346339

Next: Barge AI Overview →