Gangway AISGangway AISby Motto Marine International
DOCS · API v1
CoverageHomeSign inGet API key
Gangway AIS API v1

Vessels, ports and what happens between them.

One REST API for port calls, arrivals and departures, waiting times at anchor and port events wherever we hear vessels, with vessel particulars, sea routes and depth. JSON, GeoJSON and CSV.

Vessel positions, tracks and the live stream through the API come only from sources we may pass on, in certain areas, which a free account shows: today Norway, parts of the Baltic and our own stations' areas. Elsewhere a vessel is answered with her position withheld and port answers name the terminal or anchorage.

Base URL

https://gangwayais.com/v1 · HTTPS only · times in UTC, ISO 8601 · positions in WGS84 decimal degrees · areas as bbox=min_lat,min_lon,max_lat,max_lon.

The examples on these pages show the true shape of each answer. Their figures are made up and long lists are shortened.

Not for navigation. AIS data can be missing, delayed or wrong. Never use it for navigation, collision avoidance, search and rescue or any safety-of-life decision.
curl https://gangwayais.com/v1/ports/NLRTM/waiting \
  -H "Authorization: Bearer $GANGWAY_KEY"
{
  "port": {
    "code": "NLRTM",
    "name": "Rotterdam",
    "country": "NL"
  },
  "computed_at": "2026-11-01T12:00:00Z",
  "min_ships": 5,
  "reach_km": 40,
  "week": {
    "n": 24,
    "ships": 24,
    "enough": true,
    "median_h": 17.2,
    "p90_h": 41.5,
    "from": "2026-10-25T12:00:00Z",
    "to": "2026-11-01T12:00:00Z",
    "days": 7,
    "groups": {
      "tanker": {
        "n": 9,
        "ships": 9,
        "enough": true,
        "median_h": 17.2,
        "p90_h": 41.5
      },
      "cargo": {
        "n": 13,
        "ships": 13,
        "enough": true,
        "median_h": 17.2,
        "p90_h": 41.5
      },
      "other": {
        "n": 2,
        "ships": 2,
        "enough": false,
        "median_h": null,
        "p90_h": null
      }
    },
    "sailed_without_berthing": 1,
    "berthing_not_seen": 2
  },
  "before": {
    "n": 61,
    "ships": 61,
    "enough": true,
    "median_h": 17.2,
    "p90_h": 41.5,
    "from": "2026-10-04T12:00:00Z",
    "to": "2026-10-25T12:00:00Z",
    "days": 21,
    "groups": {
      "tanker": {
        "n": 22,
        "ships": 22,
        "enough": true,
        "median_h": 17.2,
        "p90_h": 41.5
      },
      "cargo": {
        "n": 33,
        "ships": 33,
        "enough": true,
        "median_h": 17.2,
        "p90_h": 41.5
      },
      "other": {
        "n": 6,
        "ships": 6,
        "enough": true,
        "median_h": 17.2,
        "p90_h": 41.5
      }
    },
    "sailed_without_berthing": 3,
    "berthing_not_seen": 5
  },
  "still_at_anchor": {
    "n": 6,
    "longest_h": 31.5
  },
  "attribution": {
    "barentswatch": "Gangway AIS (https://gangway.app). Data delivered by BarentsWatch. Contains data under the Norwegian licence for Open Government data (NLOD) distributed by the Norwegian Coastal Administration."
  },
  "notice": "Not for navigation. AIS data can be missing, delayed or wrong. Never use it for navigation, collision avoidance, search and rescue or any safety-of-life decision."
}