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

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.