SHIP & PORT INTELLIGENCE
Maritime Data API
One maritime intelligence API for vessel tracking, ship positions, port events, emissions, marine casualty records, and navigation infrastructure. 700,000+ vessel records and 120,000+ port references across 230+ flag states and territories, accessed through a single REST endpoint and key.
700K+
Vessel records
120K+
Port references
230+
Flag states
5
Data Categories
3
Official SDKs
All Maritime Data in One API
VesselAPI gives you a single REST API covering the full maritime data landscape — vessels, ports, emissions, casualties, and navigation.
Vessel Tracking & Ship Positions
AIS ship positions, speed, heading, and crew-reported ETAs. Query by MMSI, IMO, bounding box, or radius, with sub-minute latency.
Port Events
Vessel arrivals and departures for commercially active ports worldwide. 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 (EU reuse notice, Commission Decision 2011/833/EU).
Ports & Navigation
120,000+ port references (UN/LOCODE, coordinates, facilities, depths) 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"
# 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 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="Seaport"):
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 developer tools.
How many vessels and ports are covered?
The API covers 700,000+ vessel records across 230+ flag states and 120,000+ port references worldwide. Over 50,000 vessels report positions per hour, and 90,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.
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.