VESSEL POSITIONS

Ship Tracking API

Track vessel positions with AIS data. Query ship locations, speed, heading, and crew-reported ETAs for 700,000+ vessels through a simple REST API.

700K+

Vessels in DB

50K+

Vessels reporting / hour

230+

Flag states

<1 min

Update Latency

What the Ship Tracking API Provides

Access AIS position data, vessel metadata, and crew-reported ETAs through RESTful endpoints. Built for developers who need reliable ship position data.

AIS Vessel Positions

Latitude, longitude, speed over ground, course, heading, and navigational status. Updated continuously from terrestrial AIS receivers.

Area-Based Queries

Find all vessels within a bounding box or radius. Query by geographic area with spatial indexing for fast responses.

Crew-Reported ETAs

Access destination and ETA data as reported by vessel crew via AIS. Includes draught information for port planning.

Batch Position Queries

Retrieve positions for multiple vessels in a single request. Filter by MMSI or IMO number with time range support.

Vessel Search

Find vessels by name, callsign, flag, type, or year built. Full-text search with flexible filters.

MMSI & IMO Resolution

Query by either MMSI or IMO number. The API automatically resolves vessel identifiers across all endpoints.

Who Uses Ship Tracking APIs

Fleet Management

Monitor your fleet. Track vessel locations, speeds, and ETAs for operational planning and route optimization.

Supply Chain Visibility

Track cargo shipments from origin to destination. Use live positions and ETAs to estimate delivery timing and reduce uncertainty.

Port Operations

Plan berth allocations based on approaching vessel positions and ETAs. Reduce congestion and optimize resource scheduling.

Maritime Analytics

Analyze shipping patterns, trade routes, and vessel behavior. Build dashboards and models with AIS position data.

Get a Ship Position in Seconds

One HTTP request. Vessel position data. No complex setup required.

# Get the current position of a vessel by MMSI
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.vesselapi.com/v1/vessel/211331640/position"
{
  "mmsi": 211331640,
  "imo": 9548480,
  "vesselName": "NORDIC POLLUX",
  "latitude": 53.5432,
  "longitude": 9.9846,
  "timestamp": "2026-03-22T14:32:10Z",
  "sog": 12.4,
  "cog": 245.3,
  "heading": 244,
  "navStatus": "Under way using engine"
}

SDKs available: Use our official SDKs for TypeScript, Python, and Go with auto-pagination, typed errors, and retry logic built in.

Use SDKs or Ask Your AI Assistant

Integrate ship tracking with official SDKs or query maritime data directly from Claude Code, Cursor, or any MCP-compatible AI assistant.

Claude Code (MCP Server)

With the VesselAPI MCP server installed, ask your AI assistant in natural language:

# In your Claude Code terminal:
> Where is the vessel NORDIC POLLUX right now?

# Claude calls get_vessel_position and responds:
# "NORDIC POLLUX (MMSI 211331640) is currently at 53.5432°N, 9.9846°E
#  near Hamburg, Germany. Speed: 12.4 knots, heading 244°, under way using engine."

> Show me all vessels within 50km of Rotterdam port

# Claude calls get_vessels_in_radius with Rotterdam coordinates and returns
# a list of vessels in the area with their positions and navigation status.

Setup: Install with npx -y vesselapi-mcp and add to your MCP client configuration. Works with Claude Desktop, Cursor, Claude Code, and Windsurf.

TypeScript

import { VesselClient } from "vesselapi";

const client = new VesselClient("YOUR_API_KEY");

// Get a single vessel position
const { vesselPosition } = await client.vessels.position("211331640", { filterIdType: "mmsi" });
console.log(`${vesselPosition.vessel_name}: ${vesselPosition.latitude}, ${vesselPosition.longitude}`);

// Find all vessels near a port (50km radius)
const nearby = await client.location.vesselsRadius({
  latitude: 51.9,
  longitude: 4.05,
  radius: 50000,
});
for (const v of nearby.vessels) {
  console.log(`${v.vessel_name} - nav status ${v.nav_status}`);
}

Python

from vessel_api_python import VesselClient

client = VesselClient(api_key="YOUR_API_KEY")

# Get a single vessel position
pos = client.vessels.position("211331640", filter_id_type="mmsi").vessel_position
print(f"{pos.vessel_name}: {pos.latitude}, {pos.longitude}")

# Get crew-reported ETA
eta = client.vessels.eta("211331640", filter_id_type="mmsi").vessel_eta
print(f"Destination: {eta.destination}, ETA: {eta.eta}")

Available Endpoints

GET /v1/vessel/{id}/position

Get the latest position for a single vessel by MMSI or IMO number.

GET /v1/vessels/positions

Get positions for multiple vessels in a single request. Filter by time range.

GET /v1/location/vessels/bounding-box

Find all vessels within a geographic bounding box. H3-indexed for fast spatial queries.

GET /v1/location/vessels/radius

Find all vessels within a radius (up to 100 km) of a given coordinate.

GET /v1/vessel/{id}/eta

Get the crew-reported ETA, destination, and draught for a vessel.

GET /v1/search/vessels

Search vessels by name, callsign, flag, or vessel type.

Frequently Asked Questions

How often are ship positions updated?

AIS transmission intervals range from 2-30 seconds while a vessel is underway, to up to 3 minutes while at anchor. Position data is ingested continuously from terrestrial AIS receivers with sub-minute latency.

Can I track vessels by area instead of individual MMSI?

Yes. The bounding box and radius endpoints let you query all vessels in a geographic area. The bounding box supports areas up to 4 degrees span, and the radius endpoint supports up to 100 km.

Is there a free ship tracking API tier?

Yes. VesselAPI offers a free tier that gives you access to all ship tracking endpoints. Sign up to get your API key and start querying vessel positions immediately.

What data is included in each position report?

Each position includes latitude, longitude, speed over ground (SOG), course over ground (COG), heading, navigational status, vessel name, MMSI, IMO, and timestamp.

Do you support both MMSI and IMO lookups?

Yes. All vessel endpoints accept either MMSI or IMO as the identifier. Specify the type with the filter.idType parameter. The API resolves identifiers automatically.

Does the API include satellite AIS data?

Currently, VesselAPI ingests data from terrestrial AIS receivers. Coverage is strongest in coastal waters and port areas. Open-ocean satellite AIS is not currently included.

Start Tracking Ships Today

Get your free API key and make your first ship position query in minutes.