Developer reference
Vessels API documentation
18 REST endpoints for AIS tracking, fleet ops, port intelligence, and IMO CII emissions — pick a topic from the sidebar or a category below.
Introduction
Ship tracking data, structured as JSON, delivered over REST. One key, one base URL, 18 endpoints — from vessel search to IMO CII emissions scoring. No SDKs, no OAuth, no per-endpoint auth differences.
Base URL
Response envelope
Every response follows the same envelope regardless of HTTP status:
{
"status": 200,
"success": true,
"message": "OK",
"data": { ... }
}
{
"status": 404,
"success": false,
"message": "Vessel not found",
"data": []
}
Authentication
Pass your API key in the X-API-Key request header on every call. Keys are scoped to your account and carry your rate-limit quota.
Get your API key from the dashboard.
Replace YOUR_API_KEY in the examples below.
curl -H "X-API-Key: YOUR_API_KEY" \
"https://vessels-api.com/api/V1/vessels/search?query=atlantic"
Find any vessel by name, IMO, or MMSI — with fuzzy matching. Filter by type, flag, DWT, TEU, or build year. Returns paginated results ready to power a search UI.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| query | string | optional | Vessel name (fuzzy — typos tolerated) |
| imo | string | optional | IMO number |
| mmsi | string | optional | MMSI number |
| ship_type | string | optional | e.g. Container Ship, Tanker, Bulk Carrier |
| flag | string | optional | Flag state, e.g. Panama |
| min_dwt / max_dwt | integer | optional | Deadweight tonnage range |
| min_teu / max_teu | integer | optional | TEU capacity range (container ships) |
| year_built_from / year_built_to | integer | optional | Construction year range |
| page | integer | optional | Page number (default: 1) |
| per_page | integer | optional | Results per page (default: 50, max: 100) |
curl -H "X-API-Key: YOUR_API_KEY" \
"https://vessels-api.com/api/V1/vessels/search?query=atlantic&flag=Panama&per_page=20"
{
"status": 200,
"success": true,
"message": "OK",
"data": {
"vessels": [
{
"imo": "9122556",
"mmsi": "258785000",
"name": "ATLANTIC STAR",
"flag": "Panama",
"vessel_type": "Container Ship",
"gross_tonnage": "50420",
"deadweight_tonnage": "60200",
"year_built": "2010",
"length_m": 294,
"width_m": 32
}
],
"pagination": {
"current_page": 1,
"per_page": 20,
"total": 150,
"last_page": 8
}
}
}
Live position, speed, and course — plus up to 168h of position history. Optionally include the active route, port call history, predicted ETA, and weather at current position.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| imo | string | cond. | IMO number (imo or mmsi required) |
| mmsi | string | cond. | MMSI number (imo or mmsi required) |
| hours | integer | optional | History window in hours (default: 24, max: 168) |
| include_route | boolean | optional | Include active voyage route (default: true) |
| include_predicted_eta | boolean | optional | Predicted ETA from internal model (default: false) |
| include_weather | boolean | optional | Weather at current position (default: false) |
curl -H "X-API-Key: YOUR_API_KEY" \
"https://vessels-api.com/api/V1/vessels/track?mmsi=258785000&hours=48"
{
"status": 200,
"success": true,
"message": "OK",
"data": {
"vessel": {
"imo": "9122556",
"mmsi": "258785000",
"name": "ATLANTIC STAR"
},
"current_position": {
"latitude": -34.603722,
"longitude": -58.381592,
"speed_knots": 15.5,
"course_degrees": 145,
"heading_degrees": 143,
"navigational_status": "Underway using engine",
"timestamp_utc": "2026-02-09T10:30:00Z",
"destination": "BRSSZ",
"eta": "2026-02-11T08:00:00Z"
},
"position_history": [
{
"latitude": -34.612345,
"longitude": -58.371234,
"speed_knots": 14.2,
"timestamp_utc": "2026-02-09T09:00:00Z"
}
],
"route": {
"departure_port": "Buenos Aires",
"departure_time": "2026-02-08T08:00:00Z",
"destination_port": "Santos",
"eta": "2026-02-11T08:00:00Z",
"distance_nm": 1050,
"avg_speed_knots": 14.5
},
"last_port_visits": [
{
"port_id": "ARBUE",
"port_name": "Buenos Aires",
"arrival_time": "2026-02-05T12:00:00Z",
"departure_time": "2026-02-08T08:00:00Z",
"duration_hours": 68
}
]
}
}
Returns all vessels whose most recent AIS position falls within a given radius (nautical miles) of a lat/lon point. Useful for port approach detection, collision avoidance data, or traffic density visualisation.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| latitude | float | required | Center latitude |
| longitude | float | required | Center longitude |
| radius | integer | optional | Radius in nautical miles (default: 50, max: 200) |
| ship_type | string | optional | Filter by vessel type |
| limit | integer | optional | Maximum results (default: 50) |
curl -H "X-API-Key: YOUR_API_KEY" \
"https://vessels-api.com/api/V1/vessels/nearby?latitude=-34.60&longitude=-58.38&radius=30"
{
"status": 200,
"success": true,
"message": "OK",
"data": {
"center": { "latitude": -34.60, "longitude": -58.38 },
"radius_nm": 30,
"total": 12,
"vessels": [
{
"imo": "9122556",
"mmsi": "258785000",
"name": "ATLANTIC STAR",
"ship_type": "Container Ship",
"position": {
"latitude": -34.603722,
"longitude": -58.381592,
"timestamp_utc": "2026-02-09T10:30:00Z"
},
"distance_nm": 5.2,
"speed_knots": 15.5,
"course_degrees": 145,
"navigational_status": "Underway using engine"
}
]
}
}
Aggregated voyage statistics for a single vessel, a port, or a fleet of vessels over a configurable time window. Use type to switch between analytical modes.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| type | string | required | vessel | port | fleet |
| imo | string | cond. | IMO (when type=vessel) |
| mmsi | string | cond. | MMSI (when type=vessel or fleet) |
| port_id | string | cond. | Port ID (when type=port), e.g. ARBUE |
| mmsi_list | string | cond. | Comma-separated MMSIs (when type=fleet) |
| period | string | optional | 24h | 7d | 30d | 90d (default: 7d) |
curl -H "X-API-Key: YOUR_API_KEY" \
"https://vessels-api.com/api/V1/vessels/analytics?type=vessel&mmsi=258785000&period=7d"
{
"status": 200,
"success": true,
"message": "OK",
"data": {
"type": "vessel",
"mmsi": "258785000",
"imo": "9122556",
"name": "ATLANTIC STAR",
"period": "7d",
"statistics": {
"total_distance_nm": 1250.5,
"avg_speed_knots": 14.2,
"max_speed_knots": 18.5,
"port_calls_count": 3,
"total_time_in_port_hours": 72,
"ports_visited": [
"Buenos Aires", "Montevideo", "Santos"
]
}
}
}
Batch-query positions, routes, and summary statistics for a list of vessels in a single request. Ideal for fleet-management dashboards where you need a live snapshot of all owned or tracked vessels.
Request Body (application/json)
| Parameter | Type | Required | Description |
|---|---|---|---|
| vessels | array | required | Array of objects with imo and/or mmsi |
| include_positions | boolean | optional | Include current AIS position (default: true) |
| include_routes | boolean | optional | Include active voyage route (default: true) |
curl -X POST \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"vessels": [
{"imo": "9122556"},
{"mmsi": "309374000"}
],
"include_positions": true,
"include_routes": true
}' \
"https://vessels-api.com/api/V1/vessels/fleet"
{
"status": 200,
"success": true,
"message": "OK",
"data": {
"fleet": {
"total_vessels": 2,
"vessels_at_sea": 2,
"vessels_in_port": 0
},
"vessels": [
{
"imo": "9122556",
"mmsi": "258785000",
"name": "ATLANTIC STAR",
"position": {
"latitude": -34.603722,
"longitude": -58.381592,
"speed_knots": 15.5,
"navigational_status": "Underway using engine",
"timestamp_utc": "2026-02-09T10:30:00Z"
},
"route": {
"departure_port": "Buenos Aires",
"destination_port": "Santos",
"eta": "2026-02-11T08:00:00Z"
}
},
{
"imo": "9234567",
"mmsi": "309374000",
"name": "PACIFIC REEFER",
"position": {
"latitude": -23.950834,
"longitude": -46.333056,
"speed_knots": 0,
"navigational_status": "Moored",
"timestamp_utc": "2026-02-09T10:25:00Z"
},
"route": null
}
]
}
}
IMO CII Emissions & Decarbonisation Scoring
Returns estimated CO₂ emissions and an IMO Carbon Intensity Indicator (CII) rating for any vessel over a configurable period. Built for ESG reporting, fleet sustainability dashboards, and regulatory compliance workflows.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| imo | string | cond. | IMO number (imo or mmsi required) |
| mmsi | string | cond. | MMSI number (imo or mmsi required) |
| period | string | optional | 24h | 7d | 30d | 1y (default: 30d) |
curl -H "X-API-Key: YOUR_API_KEY" \
"https://vessels-api.com/api/V1/vessels/green?mmsi=258785000&period=30d"
{
"status": 200,
"success": true,
"message": "OK",
"data": {
"imo": "9122556",
"mmsi": "258785000",
"name": "ATLANTIC STAR",
"period": "30d",
"distance_nm": 4200,
"estimated_emissions": {
"co2_tons": 1850.3,
"co2_per_nm": 0.44,
"method": "internal_model_v1"
},
"cii": {
"score": 13.2,
"rating": "C",
"year": 2026,
"regulation_reference": "IMO CII"
}
}
}
Real-time congestion snapshot and historical wait-time statistics for a port. Returns vessels in anchorage vs. at berth, average wait time over the period, and individual vessel wait times.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| port_id | string | required | Port identifier, e.g. ARBUE |
| period | string | optional | 24h | 3d | 7d (default: 7d) |
curl -H "X-API-Key: YOUR_API_KEY" \
"https://vessels-api.com/api/V1/ports/congestion?port_id=ARBUE&period=7d"
{
"status": 200,
"success": true,
"message": "OK",
"data": {
"port_id": "ARBUE",
"port_name": "Buenos Aires",
"period": "7d",
"snapshot": {
"timestamp_utc": "2026-02-09T10:30:00Z",
"vessels_in_anchorage": 14,
"vessels_at_berth": 9
},
"statistics": {
"avg_wait_time_hours_last_7d": 22.5,
"max_wait_time_hours_last_7d": 64.0,
"avg_berth_time_hours_last_7d": 18.0,
"port_calls_count": 135
}
}
}
Returns the full port catalog with identifiers, coordinates, and country. Use port_id values from this endpoint in other port queries.
Parameters
No parameters required.
curl -H "X-API-Key: YOUR_API_KEY" \
"https://vessels-api.com/api/V1/ports"
{
"status": 200,
"success": true,
"message": "OK",
"data": {
"ports": [
{
"port_id": "ARBUE",
"name": "Buenos Aires",
"country": "Argentina",
"latitude": -34.603722,
"longitude": -58.381592,
"timezone": "America/Argentina/Buenos_Aires"
},
{
"port_id": "BRSSZ",
"name": "Santos",
"country": "Brazil",
"latitude": -23.950834,
"longitude": -46.333056,
"timezone": "America/Sao_Paulo"
}
],
"total": 248
}
}
Detailed information for a single port including live vessel counts.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| port | string | required | Port identifier, e.g. ARBUE |
curl -H "X-API-Key: YOUR_API_KEY" \
"https://vessels-api.com/api/V1/ports/data?port=ARBUE"
{
"status": 200,
"success": true,
"message": "OK",
"data": {
"port_id": "ARBUE",
"name": "Buenos Aires",
"country": "Argentina",
"latitude": -34.603722,
"longitude": -58.381592,
"timezone": "America/Argentina/Buenos_Aires",
"vessels_in_port": 23,
"vessels_expected": 8
}
}
Vessels expected to arrive at the given port within the next period, with ETA and origin port.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| port | string | required | Port identifier, e.g. ARBUE |
curl -H "X-API-Key: YOUR_API_KEY" \
"https://vessels-api.com/api/V1/port/expected-arrivals?port=ARBUE"
{
"status": 200,
"success": true,
"message": "OK",
"data": {
"port_id": "ARBUE",
"port_name": "Buenos Aires",
"expected_arrivals": [
{
"mmsi": "258785000",
"imo": "9122556",
"name": "ATLANTIC STAR",
"vessel_type": "Container Ship",
"eta": "2026-02-11T08:00:00Z",
"departure_port": "Santos"
}
],
"total": 1
}
}
Recent arrivals and departures at a port, useful for building port call logs and logistics event feeds.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| port | string | required | Port identifier, e.g. ARBUE |
curl -H "X-API-Key: YOUR_API_KEY" \
"https://vessels-api.com/api/V1/port/activity?port=ARBUE"
{
"status": 200,
"success": true,
"message": "OK",
"data": {
"port_id": "ARBUE",
"port_name": "Buenos Aires",
"arrivals": [
{
"mmsi": "258785000",
"name": "ATLANTIC STAR",
"arrival_time": "2026-02-09T06:00:00Z",
"from_port": "Santos"
}
],
"departures": [
{
"mmsi": "309374000",
"name": "PACIFIC REEFER",
"departure_time": "2026-02-09T08:00:00Z",
"to_port": "Montevideo"
}
]
}
}
Legacy endpoint
These endpoints use the singular /vessel/ path prefix. They remain stable but the newer /vessels/ endpoints return richer, paginated data.
Returns static vessel particulars (name, flag, dimensions, engine type) for a single vessel identified by IMO.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| imo | string | required | IMO number |
curl -H "X-API-Key: YOUR_API_KEY" \
"https://vessels-api.com/api/V1/vessel/info?imo=9122556"
{
"status": 200,
"success": true,
"message": "OK",
"data": {
"imo": "9122556",
"mmsi": "258785000",
"name": "ATLANTIC STAR",
"flag": "Panama",
"vessel_type": "Container Ship",
"gross_tonnage": "50420",
"deadweight_tonnage": "60200",
"year_built": "2010",
"length_m": 294,
"beam_m": 32,
"draught_m": 12.5,
"call_sign": "3EXA6"
}
}
Legacy endpoint
These endpoints use the singular /vessel/ path prefix. They remain stable but the newer /vessels/ endpoints return richer, paginated data.
Current or most recent voyage route for a vessel: departure/destination port, ETA, and average speed.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| imo | string | required | IMO number |
curl -H "X-API-Key: YOUR_API_KEY" \
"https://vessels-api.com/api/V1/vessel/route?imo=9122556"
{
"status": 200,
"success": true,
"message": "OK",
"data": {
"imo": "9122556",
"mmsi": "258785000",
"name": "ATLANTIC STAR",
"departure_port": "Buenos Aires",
"departure_time": "2026-02-08T08:00:00Z",
"destination_port": "Santos",
"eta": "2026-02-11T08:00:00Z",
"distance_nm": 1050,
"avg_speed_knots": 14.5,
"status": "underway"
}
}
Legacy endpoint
These endpoints use the singular /vessel/ path prefix. They remain stable but the newer /vessels/ endpoints return richer, paginated data.
Last known AIS position for a vessel identified by IMO. For historical positions use /vessels/track.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| imo | string | required | IMO number |
curl -H "X-API-Key: YOUR_API_KEY" \
"https://vessels-api.com/api/V1/vessel/position?imo=9122556"
{
"status": 200,
"success": true,
"message": "OK",
"data": {
"imo": "9122556",
"mmsi": "258785000",
"name": "ATLANTIC STAR",
"latitude": -34.603722,
"longitude": -58.381592,
"speed_knots": 15.5,
"course_degrees": 145,
"heading_degrees": 143,
"navigational_status": "Underway using engine",
"timestamp_utc": "2026-02-09T10:30:00Z"
}
}
Legacy endpoint
These endpoints use the singular /vessel/ path prefix. They remain stable but the newer /vessels/ endpoints return richer, paginated data.
Same as /vessel/position but accepts MMSI instead of IMO.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| mmsi | string | required | MMSI number |
curl -H "X-API-Key: YOUR_API_KEY" \
"https://vessels-api.com/api/V1/vessel/mmsi-position?mmsi=258785000"
{
"status": 200,
"success": true,
"message": "OK",
"data": {
"imo": "9122556",
"mmsi": "258785000",
"name": "ATLANTIC STAR",
"latitude": -34.603722,
"longitude": -58.381592,
"speed_knots": 15.5,
"course_degrees": 145,
"navigational_status": "Underway using engine",
"timestamp_utc": "2026-02-09T10:30:00Z"
}
}
Legacy endpoint
These endpoints use the singular /vessel/ path prefix. They remain stable but the newer /vessels/ endpoints return richer, paginated data.
Lists vessels currently in or recently departed from a port, identified by port code.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| port | string | required | Port identifier, e.g. ARBUE |
curl -H "X-API-Key: YOUR_API_KEY" \
"https://vessels-api.com/api/V1/vessel/port?port=ARBUE"
{
"status": 200,
"success": true,
"message": "OK",
"data": {
"port_id": "ARBUE",
"port_name": "Buenos Aires",
"vessels": [
{
"mmsi": "258785000",
"imo": "9122556",
"name": "ATLANTIC STAR",
"vessel_type": "Container Ship",
"arrival_time": "2026-02-05T12:00:00Z",
"status": "at_berth"
}
],
"total": 1
}
}
Legacy endpoint
These endpoints use the singular /vessel/ path prefix. They remain stable but the newer /vessels/ endpoints return richer, paginated data.
Returns the current or most recent port call for a vessel identified by MMSI.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| mmsi | string | required | MMSI number |
curl -H "X-API-Key: YOUR_API_KEY" \
"https://vessels-api.com/api/V1/vessel/port/mmsi?mmsi=258785000"
{
"status": 200,
"success": true,
"message": "OK",
"data": {
"mmsi": "258785000",
"imo": "9122556",
"name": "ATLANTIC STAR",
"current_port": {
"port_id": "ARBUE",
"port_name": "Buenos Aires",
"arrival_time": "2026-02-05T12:00:00Z",
"status": "at_berth"
}
}
}
Error Codes
| HTTP | success | Typical message | Cause |
|---|---|---|---|
| 200 | true | OK | Request succeeded |
| 400 | false | Missing required parameter: imo or mmsi | Required parameter absent or invalid |
| 401 | false | Invalid or missing API key | X-API-Key header absent or key revoked |
| 404 | false | Vessel not found | No data for the given IMO/MMSI |
| 422 | false | Validation error: radius exceeds maximum | Parameter value out of allowed range |
| 429 | false | Rate limit exceeded | Quota exhausted — retry after the window resets |
| 500 | false | Internal server error | Contact [email protected] |