SHIP & PORT INTELLIGENCE

Maritime Data API

One API for all maritime data. Vessel tracking, port events, emissions, safety records, classification data, and navigation infrastructure. 682,000+ vessels and 59,000+ ports across 230 countries.

682K+

Vessels

59K+

Ports

230

Countries

9

Data Categories

3

Official SDKs

Why Use a Unified Maritime Data API

One API Key, All Data

Stop managing multiple maritime data vendor contracts and integrations. One API key gives you access to vessel positions, port data, emissions, safety records, and more.

Consistent Data Model

All endpoints follow the same REST conventions, authentication, pagination, and error handling. Learn one pattern, use it everywhere.

Cross-Reference Everything

Link a vessel's current position to its emissions record, port history, classification status, and inspection results using the same MMSI or IMO number.

Built for Developers

RESTful JSON API with OpenAPI spec, interactive API reference, official SDKs in 3 languages, and an MCP server for AI assistant integration.

Get Started in Minutes

Sign up, get your API key, and start querying maritime data with simple HTTP requests.

# Search for a vessel by name
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.vesselapi.com/v1/search/vessels?filter.name=EVER%20GIVEN"

# Get its current position
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.vesselapi.com/v1/vessel/353136000/position"

# Check its port history
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.vesselapi.com/v1/portevents/vessel/353136000"

# Look up emissions data
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.vesselapi.com/v1/vessel/9811000/emissions?filter.idType=imo"

Prefer SDKs? Use our official TypeScript, Python, or Go SDKs for auto-pagination, typed responses, and built-in retry logic.

Use SDKs or Ask Your AI Assistant

Integrate all maritime data categories with official SDKs, or let your AI assistant explore ship and port data for you.

Claude Code (MCP Server)

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

# In your Claude Code terminal:
> Give me a full profile of the EVER GIVEN — position, port history,
> emissions, and any safety inspections

# Claude chains multiple MCP tools automatically:
# 1. search_vessels → finds MMSI 353136000 / IMO 9811000
# 2. get_vessel_position → current location and speed
# 3. get_port_events_by_vessel → recent port calls
# 4. get_vessel_emissions → CO2 and fuel data
# 5. get_vessel_inspections → PSC inspection history
#
# Then synthesizes a comprehensive vessel report.

> What ships arrived at Rotterdam (NLRTM) in the last 24 hours?

# Claude calls get_port_events with unlocode NLRTM and summarizes
# all arrivals with vessel names, types, and timestamps.

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 { VesselAPI } from "vesselapi";

const client = new VesselAPI({ apiKey: "YOUR_API_KEY" });

// Build a complete vessel profile from multiple data sources
const mmsi = 353136000;
const [position, eta, emissions] = await Promise.all([
  client.vessels.position(mmsi, "mmsi"),
  client.vessels.eta(mmsi, "mmsi"),
  client.emissions.byVessel(9811000, "imo"),
]);

console.log(`${position.vesselName} @ ${position.latitude}, ${position.longitude}`);
console.log(`ETA: ${eta.destination} at ${eta.eta}`);
console.log(`CO2: ${emissions.data[0]?.co2EmissionsTotal}t`);

// Get port events at Rotterdam
const events = await client.portEvents.byPort("NLRTM");
for (const event of events.data) {
  console.log(`${event.vesselName} ${event.event} at ${event.timestamp}`);
}

Python

from vesselapi import VesselClient

client = VesselClient(api_key="YOUR_API_KEY")

# Cross-reference vessel data across categories
vessel = client.vessels.get(353136000, "mmsi")
position = client.vessels.position(353136000, "mmsi")
port_history = client.port_events.by_vessel(353136000, "mmsi")

print(f"{vessel.name} ({vessel.vessel_type})")
print(f"Position: {position.latitude}, {position.longitude}")
print(f"Recent ports: {[e.port_name for e in port_history.data[:5]]}")

# Search ports by country
for port in client.search.ports(country="NL", type="Seaport"):
    print(f"{port.name} ({port.unlo_code})")

Frequently Asked Questions

What maritime data does the API cover?

VesselAPI provides 9 categories of maritime data: real-time vessel tracking (AIS positions), port events, vessel emissions (EU MRV), vessel enrichment (classification, ownership), safety and compliance (inspections, casualties), ports database, NAVTEX messages, and navigation infrastructure.

How many vessels and ports are covered?

The API covers 682,000+ vessels across 230 flag states and 59,000+ ports worldwide. Over 43,000 vessels report positions per hour, and 76,000+ port events are detected daily.

Is there a free tier?

Yes. VesselAPI offers a free tier that gives you access to all maritime data endpoints. Sign up to get your API key and start making requests immediately. No credit card required.

What format does the API return?

All endpoints return JSON. Authentication is via Bearer token. Pagination uses cursor-based tokens. The full OpenAPI/Swagger spec is available for code generation.

Are there SDKs available?

Yes. Official SDKs are available for TypeScript/Node.js, Python, and Go. All SDKs include auto-pagination, typed errors, and automatic retry with exponential backoff. An MCP server is also available for AI assistant integration.

Can I use this as a MarineTraffic or VesselFinder API alternative?

VesselAPI serves similar use cases — real-time vessel tracking, port events, and vessel data enrichment — with a developer-focused REST API, transparent pricing, and a free tier to get started.

Start Building with Maritime Data

Get your free API key and access vessel tracking, port events, emissions, and more in minutes.