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: Terrestrial AIS data is received continuously and included with every plan. 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. Optional satellite AIS fallback is available as a one-time credit pack add-on for vessels outside terrestrial range.
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.
Automatic ID Resolution
When looking up a vessel by ID, the API automatically resolves the identifier if you use the wrong type. For example, if you pass an IMO number but set filter.idType=mmsi, the API will first attempt an MMSI lookup, and if no match is found, it will automatically try looking up the value as an IMO number (and vice versa).
This applies to all ID-based endpoints: /vessel/{id}, /vessel/{id}/position, /vessel/{id}/eta, and /vessels/positions.
Response Metadata
When a fallback resolution occurs, the response includes a _meta field indicating which ID type was actually used. This field is omitted when the primary lookup succeeds.
{
"vessel": { ... },
"_meta": {
"requestedIdType": "mmsi",
"resolvedIdType": "imo",
"resolvedId": 9321483
}
}
| Field | Description |
|---|---|
| requestedIdType | The ID type specified in your request (mmsi or imo) |
| resolvedIdType | The ID type that actually matched (mmsi or imo) |
| resolvedId | The numeric ID that was resolved |
Tip: If _meta is present in the response, consider updating your stored identifier to use the correct type for future requests.
Satellite Position Fallback
Terrestrial AIS receivers cover coastal waters and port areas well, but lose signal on vessels in open ocean or other regions outside receiver range. For those cases, you can opt in to satellite AIS fallback by passing filter.sat=true on the position endpoint. Satellite lookups are billed separately from your subscription via one-time credit packs.
Where it's available
Satellite fallback is only supported on the last-known-position endpoint:
GET /v1/vessel/{id}/position?filter.idType=mmsi&filter.sat=true
Other endpoints (ETA, port events, historical positions, fleet queries) are terrestrial-only and ignore the filter.sat parameter.
Update frequency
Satellite AIS is refreshed far less frequently than terrestrial. Where a vessel near a terrestrial receiver can broadcast a new position every few seconds, satellite positions typically update on the order of minutes to a few hours depending on satellite pass coverage and vessel location. If a recent terrestrial position is available for the vessel, the API will return that instead at no additional charge — satellite data is only used when terrestrial is not recent enough.
What you get charged for
One satellite credit is deducted per successful satellite position response. If the request is served from terrestrial data, or if no recent satellite position exists for the vessel, no credit is charged. You can inspect what was actually served using the response headers:
| Header | Description |
|---|---|
| X-Data-Source | satellite or terrestrial — indicates the origin of the returned position. Only set when filter.sat=true. |
| X-Satellite-Credit-Charged | true if a satellite credit was deducted for this request, false otherwise. |
Coverage limits
Satellite AIS is not a guarantee of global coverage. Vessels in low-traffic regions, with AIS transponders switched off, or with obstructed sky view may have no recent satellite position at all. When that happens, the API returns 404 Not Found and no credit is charged. Satellite is a fallback mechanism, not a universal vessel locator.
Example request
curl -H "X-API-Key: YOUR_API_KEY" \
"https://api.vesselapi.com/v1/vessel/9321483/position?filter.idType=imo&filter.sat=true"
Buying credits
Satellite credits are sold in one-time packs of 50, 200, or 500 lookups. They are not part of your monthly subscription quota — they are a separate balance that does not renew and does not expire. Credits are available to any tier, including the Free tier. See the pricing page for pack details. Purchased satellite credits are non-refundable and not covered by the 14-day money-back guarantee on subscriptions.
Available Endpoints
/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:mmsiorimo(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
/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:mmsiorimo(required)filter.sat- Opt in to satellite AIS fallback when terrestrial data is not available (optional, requires credit pack)
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.
/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:mmsiorimo(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.
/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:mmsiorimo(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
/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 callsignfilter.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 numberfilter.imo- IMO numberfilter.yearBuiltMin- Minimum year builtfilter.yearBuiltMax- Maximum year builtfilter.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.
/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 boundsfilter.lonLeft,filter.lonRight- Longitude boundstime.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
/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 latitudefilter.longitude- Center point longitudefilter.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.