Vessel Tracking API

Access real-time Automatic Identification System (AIS) data for maritime vessels worldwide. The vessel tracking API returns live positions, crew-reported ETAs, vessel characteristics, and short-term historical position data.

What is AIS Vessel Tracking?

The Automatic Identification System (AIS) is a tracking system used on ships and by vessel traffic services for identifying and locating vessels. AIS transceivers automatically broadcast information such as position, speed, and navigational status at regular intervals. The API collects this data from AIS transmissions and third-party maritime data providers, exposing it through REST endpoints.

With VesselAPI's vessel tracking endpoints, you can monitor fleet movements, track shipments, analyze maritime traffic patterns, and integrate live ship data into your applications. The API supports integration into logistics platforms, maritime analytics dashboards, and port management systems.

Coverage: AIS data is received from terrestrial AIS receivers and ingested continuously. Satellite AIS is not currently included. Individual vessel transmission intervals range from 2–30 seconds while underway to up to 3 minutes while at anchor, depending on speed and navigation status. Coverage is strongest in coastal waters and port areas.

Use Cases

Fleet Management

Monitor your fleet in real-time. Track vessel locations, speeds, and crew-reported ETAs for operational planning.

Supply Chain Visibility

Use crew-reported ETAs and live position data to estimate delivery timing. Track cargo shipments from origin to destination.

Port Operations

Plan berth allocations and resource scheduling based on approaching vessel positions and ETAs. Reduce port congestion and waiting times.

Maritime Analytics

Use AIS data for market research and risk assessment. Analyze shipping patterns, trade routes, and vessel behavior.

Vessel Identifiers

The API accepts two types of vessel identifiers. Understanding when to use each will help you build more robust integrations.

MMSI (Maritime Mobile Service Identity)

A unique 9-digit number assigned to a vessel's radio equipment. MMSI numbers are transmitted with every AIS message and are the primary identifier for real-time tracking.

Format: 9 digits (e.g., 123456789)
Note: MMSI can change if a vessel is re-flagged or its radio equipment is replaced.

IMO Number

A permanent 7-digit number assigned by the International Maritime Organization that follows a vessel throughout its lifetime, regardless of flag changes or ownership transfers.

Format: 7 digits (e.g., 9074729)
Best for: Long-term vessel tracking and historical analysis.

Available Endpoints

GET /vessel/{id}

Get Vessel Information

Retrieve static vessel data including name, type, dimensions, flag state, builder, and ownership information. The {id} parameter accepts either MMSI or IMO number.

Parameters:

  • filter.idType - Identifier type: mmsi or imo (required)

Response includes:

  • Vessel name, callsign, and former names
  • Vessel type and operating status
  • Dimensions (length, breadth, draft) with units
  • Flag state (country and country code)
  • IMO and MMSI numbers
  • Year built, gross tonnage, deadweight tonnage
  • Engine type, model name, and kilowatt power
  • Home port
  • Builder, owner, manager, and class society
GET /vessel/{id}/position

Get Current Position

Retrieve the most recent AIS position report for a vessel, including real-time coordinates, vessel identifiers, and timestamps.

Parameters:

  • filter.idType - Identifier type: mmsi or imo (required)

Response includes:

  • Latitude and longitude coordinates
  • GeoJSON location object
  • Vessel name, MMSI, and IMO
  • Course over ground (COG) and speed over ground (SOG)
  • True heading and navigational status
  • Suspected glitch indicator
  • Timestamp of last position update and processed timestamp

Accuracy note: While latitude, longitude, COG, and SOG are derived from onboard GPS and sensors, values such as navigational status and heading may be crew-configured or dependent on equipment calibration. These fields can occasionally be outdated or inaccurate. The suspected_glitch flag indicates positions that may be unreliable.

GET /vessel/{id}/eta

Get Estimated Time of Arrival

Retrieve the vessel's reported destination and estimated time of arrival (ETA) as broadcast via AIS. This information is entered by the ship's crew and updated during the voyage.

Parameters:

  • filter.idType - Identifier type: mmsi or imo (required)

Response includes:

  • Vessel MMSI, IMO, and name
  • Reported destination port
  • Estimated arrival date and time
  • Current draught in meters
  • Timestamp of when ETA information was received

Note: ETA data is crew-reported and may not always be accurate or up-to-date. For critical applications, consider cross-referencing with position data and route calculations.

GET /vessels/positions

Get Multiple Vessel Positions

Retrieve position data for multiple vessels in a single request. Ideal for fleet monitoring dashboards where you need to track many vessels simultaneously.

Parameters:

  • filter.ids - Comma-separated list of MMSI or IMO numbers (required)
  • filter.idType - Identifier type: mmsi or imo (required)
  • time.from / time.to - Time range filter in RFC3339 format (optional, defaults to past 2 hours)
  • pagination.limit - Results per page (max 50, default 20)
  • pagination.nextToken - Cursor for next page of results
GET /search/vessels

Search Vessels

Search for vessels by name or callsign. Useful when you don't have the MMSI or IMO but know the vessel's name.

Parameters:

  • filter.name - Vessel name (partial match supported)
  • filter.callsign - Radio callsign
  • filter.flag - ISO 2-letter country code of flag state (e.g., PA, SG)
  • filter.vesselType - Vessel type classification (case-insensitive, e.g., Container Ship)
  • filter.mmsi - MMSI number
  • filter.imo - IMO number
  • filter.yearBuiltMin - Minimum year built
  • filter.yearBuiltMax - Maximum year built
  • filter.classSociety - Classification society (case-insensitive)
  • filter.owner - Owner name (partial match, case-insensitive)
  • pagination.limit - Results per page (max 50, default 20)
  • pagination.nextToken - Cursor for next page of results

At least one filter parameter is required.

GET /location/vessels/bounding-box

Vessels in Bounding Box

Find all vessels within a rectangular geographic area. Perfect for map-based applications showing vessels in a specific region. Maximum span of 4 degrees (|dLat| + |dLon|).

Parameters:

  • filter.latBottom, filter.latTop - Latitude bounds
  • filter.lonLeft, filter.lonRight - Longitude bounds
  • time.from / time.to - Time range filter in RFC3339 format (optional, defaults to past 2 hours)
  • pagination.limit - Results per page (max 50, default 20)
  • pagination.nextToken - Cursor for next page of results
GET /location/vessels/radius

Vessels Within Radius

Find all vessels within a specified distance from a center point. Ideal for proximity alerts and nearby vessel detection.

Parameters:

  • filter.latitude - Center point latitude
  • filter.longitude - Center point longitude
  • filter.radius - Search radius in meters (required, max 100,000)
  • time.from / time.to - Time range filter in RFC3339 format (optional, defaults to past 2 hours)
  • pagination.limit - Results per page (max 50, default 20)
  • pagination.nextToken - Cursor for next page of results

Code Examples

Get Vessel Position (cURL)

curl -X GET "https://api.vesselapi.com/v1/vessel/253041000/position?filter.idType=mmsi" \
     -H "Authorization: Bearer YOUR_API_KEY"

Search Vessels by Name (Python)

import requests

response = requests.get(
    "https://api.vesselapi.com/v1/search/vessels",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    params={"filter.name": "EVERGREEN", "pagination.limit": 20}
)

data = response.json()
for vessel in data["vessels"]:
    # Search results return Vessel objects with 'name' (not 'vessel_name')
    print(f"{vessel['name']} - MMSI: {vessel['mmsi']}")

Get Vessels in Area (JavaScript)

const response = await fetch(
  "https://api.vesselapi.com/v1/location/vessels/bounding-box?" +
  new URLSearchParams({
    "filter.latBottom": 51.0,
    "filter.latTop": 52.0,
    "filter.lonLeft": 3.0,
    "filter.lonRight": 4.5
  }),
  {
    headers: { "Authorization": "Bearer YOUR_API_KEY" }
  }
);

const data = await response.json();
console.log(`Found ${data.vessels.length} vessels in the area`);

Response Fields

Vessel Static Data (/vessel/{id}, /search/vessels)

Field Description Example
mmsi Maritime Mobile Service Identity (9-digit) 477045900
imo IMO number 9321483
name Vessel's registered name EVER GIVEN
call_sign Radio callsign H3RC
vessel_type Type of vessel Container Ship
country Flag state country name Panama
length / breadth / draft Vessel dimensions with corresponding unit fields 400
gross_tonnage Gross tonnage of the vessel 220940
deadweight_tonnage Deadweight tonnage capacity 199629
year_built Year the vessel was built 2018
operating_status Current operating status Active
owner_name / manager_name Vessel owner and manager Evergreen Marine Corp

Additional fields such as former_names, builder, class_society, home_port, engine_type, and kilowatt_power are also available. See the API Explorer for the complete schema.

Position Data (/vessel/{id}/position, /vessels/positions, /location/vessels/*)

Field Description Example
mmsi Maritime Mobile Service Identity (9-digit) 477045900
imo IMO number (if available) 9321483
vessel_name Vessel's registered name EVER GIVEN
latitude Geographic latitude in decimal degrees 1.2644
longitude Geographic longitude in decimal degrees 103.8215
timestamp UTC time when AIS message was transmitted 2026-01-15T12:30:00Z
processed_timestamp UTC timestamp when the position was processed by the system 2026-01-15T12:30:05Z
cog Course Over Ground in degrees (0-359.9), null when unavailable 231.5
sog Speed Over Ground in knots (0-102.2), null when unavailable 14.1
heading True heading in degrees (0-359), null when unavailable 230
nav_status AIS navigational status (0=under way using engine, 1=at anchor, 5=moored, etc.), null when unavailable 0
location GeoJSON point for geospatial queries {"type":"Point","coordinates":[103.82,1.26]}
suspected_glitch Whether the position may be unreliable due to GPS glitch or corrupted AIS false

Accuracy note: Position fields like latitude, longitude, cog, and sog are derived from onboard GPS and sensors and are generally reliable. However, nav_status is manually set by the crew and is frequently outdated or incorrect. heading depends on gyrocompass calibration and may be unavailable on smaller vessels. Fields return null when the data is not available in the AIS transmission.

Ready to Start Tracking?

Try these endpoints interactively in the API Explorer, complete with live examples and response previews.

Related Documentation