SHIP & PORT INTELLIGENCE
Maritime Data API
One maritime intelligence API for vessel tracking, ship positions, port events, emissions, marine casualty records, and navigation infrastructure. A registry of hundreds of thousands of vessels and UN/LOCODE port references, accessed through a single REST endpoint and key.
700K+
Vessel records
EU MRV
Emissions Data
31 days
Position History
5
Data Categories
SDKs
All Maritime Data in One API
VesselAPI gives you a single REST API covering vessels, positions, ports, port events, EU emissions, casualty records, and navigation data.
Vessel Tracking & Ship Positions
AIS ship positions, speed, heading, and crew-reported ETAs. Query by MMSI, IMO, bounding box, or radius.
Port Events
Vessel arrivals and departures, kept for 31 days. Coverage varies by country. Search by port, vessel, or time range.
Regulatory Records (Emissions & Casualties)
EU MRV-verified CO2 emissions and energy-efficiency metrics, plus marine casualty and incident records by vessel. Data: EMSA. Emissions data reused under the EU reuse notice (Commission Decision 2011/833/EU); casualty data © EMSA (EMCIP), reproduction authorised provided the source is acknowledged.
Ports & Navigation
Port references with UN/LOCODE and coordinates, facility details for major ports, plus navigation infrastructure: lighthouses, radio beacons, DGPS, and MODUs.
Developer Tools
Official SDKs for TypeScript, Python, and Go. MCP server for AI assistant integration with Claude, Cursor, and more.
Why Use a Unified Maritime Data API
One API Key, All Data
One API key and one integration give you vessel positions, port data, emissions, casualty 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, and casualty records 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?filter.idType=mmsi"
# Check its port history
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.vesselapi.com/v1/portevents/vessel/353136000?filter.idType=mmsi"
# 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 recorded casualties
# 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
#
# 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 { VesselClient } from "vesselapi";
const client = new VesselClient("YOUR_API_KEY");
// Build a complete vessel profile from multiple data sources
const mmsi = "353136000";
const [pos, eta, emis] = await Promise.all([
client.vessels.position(mmsi, { filterIdType: "mmsi" }),
client.vessels.eta(mmsi, { filterIdType: "mmsi" }),
client.vessels.emissions("9811000", { filterIdType: "imo" }),
]);
console.log(`${pos.vesselPosition.vessel_name} @ ${pos.vesselPosition.latitude}, ${pos.vesselPosition.longitude}`);
console.log(`ETA: ${eta.vesselEta.destination} at ${eta.vesselEta.eta}`);
console.log(`CO2: ${emis.emissions[0]?.co2_emissions_total}t`);
// Get port events at Rotterdam
const { portEvents } = await client.portEvents.byPort("NLRTM");
for (const e of portEvents) {
console.log(`${e.vessel.name} ${e.event} at ${e.timestamp}`);
}
Python
from vessel_api_python import VesselClient
client = VesselClient(api_key="YOUR_API_KEY")
# Cross-reference vessel data across categories
vessel = client.vessels.get("353136000", filter_id_type="mmsi").vessel
position = client.vessels.position("353136000", filter_id_type="mmsi").vessel_position
events = client.port_events.by_vessel("353136000", filter_id_type="mmsi").port_events
print(f"{vessel.name} ({vessel.vessel_type})")
print(f"Position: {position.latitude}, {position.longitude}")
print(f"Recent ports: {[e.port.name for e in events[:5]]}")
# Search ports by country (auto-pagination)
for port in client.search.all_ports(filter_country="NL", filter_port_type="Port"):
print(f"{port.name} ({port.unlo_code})")
Frequently Asked Questions
What maritime data does the API cover?
VesselAPI provides 5 categories of maritime data: vessel tracking (AIS positions), port events, regulatory records (EU MRV emissions & marine casualties), ports & navigation, and notifications. Official SDKs and an MCP server cover all of them except notifications, which use plain HTTP.
How many vessels and ports are covered?
The vessel registry holds hundreds of thousands of vessels, and the ports database holds UN/LOCODE port references. Live positions are available for vessels within terrestrial AIS coverage, and positions and port events are kept for 31 days.
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.
What use cases does the Maritime Data API support?
It covers vessel tracking, port events, and vessel emissions and casualty records through a developer-focused REST API, with published 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.