Navtrac API v1

Programmatic access to Navtrac's maritime intelligence: vessel registry and live positions, satellite position estimates, historical tracks and port calls, port traffic and congestion, marine weather and tides, sea routes, security incidents, and compliance screening — sanctions, safety records, flag risk, and emissions. All endpoints are versioned under https://navtrac.io/api/v1 and return JSON.

Last updated: October 25, 2026

Getting started

  1. Create a developer account and wait for approval.
  2. Generate an API key in the Developer Portal with the scopes you need.
  3. Call GET /api/v1/status (free) to verify your key works.
curl "https://navtrac.io/api/v1/status" \
  -H "X-API-Key: YOUR_API_KEY"

Or import the Postman collection — it includes every endpoint below with the{{baseUrl}} and{{apiKey}} variables preconfigured:

Download Postman collection (v2.1)

Authentication

Every request must include your API key in the X-API-Key header. Keys carry scopes (vessels, ports, weather, compliance) that gate endpoint groups; reference and status endpoints work with any valid key. Keep keys secret — never embed them in client-side code.

Rate limits & credits

  • Each key has an hourly request limit (default 1,000/hour). Current usage is reported on every response via X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset; a 429 includes Retry-After.
  • Billable endpoints also consume credits from your account balance — each endpoint's cost is listed in its reference entry. Reference and status endpoints are free.
  • Check your remaining credits any time with GET /api/v1/status.

Errors

Errors return { "error": "message", "code": "ERROR_CODE" } with an appropriate HTTP status. Codes every endpoint can return:

HTTPCodeMeaning
401MISSING_API_KEYNo X-API-Key header was provided.
401INVALID_API_KEYThe API key is unknown, revoked, or expired.
403ACCOUNT_INACTIVEThe API account is suspended or deactivated.
403INSUFFICIENT_SCOPEThe key does not include the scope required by this endpoint.
429RATE_LIMITEDThe key's hourly rate limit was exceeded. Check the Retry-After header.
402INSUFFICIENT_CREDITSThe account has no credits left for this billable call.
500INTERNAL_ERRORUnexpected server error. Safe to retry with backoff.

Endpoint-specific validation and not-found codes (e.g. INVALID_MMSI, PORT_NOT_FOUND) are listed per endpoint below.

Endpoint reference

Vesselsscope: vessels

Search the vessel registry, fetch static details, live positions, voyages, historical tracks, and AI risk assessments.

GET/api/v1/vessels/in-area

Vessels in an area

Live vessels inside a geographic area. Provide either a bounding box (north, south, east, west) or a circle (lat, lon, radius_nm — radius clamped to 1–300 nm).

Scope: vesselsCredits: 2Errors: INVALID_AREA
ParameterInTypeRequiredDescription
northquerynumbernoBounding box north latitude.
southquerynumbernoBounding box south latitude.
eastquerynumbernoBounding box east longitude.
westquerynumbernoBounding box west longitude.
latquerynumbernoCircle centre latitude (use with lon and radius_nm).
lonquerynumbernoCircle centre longitude.
radius_nmquerynumbernoCircle radius in nautical miles (1–300).
limitqueryintegernoMax vessels returned, 1–500 (default 200).

Example request

curl "https://navtrac.io/api/v1/vessels/in-area?north=52.2&south=51.6&east=4.8&west=3.6&radius_nm=25" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": [
    {
      "mmsi": "244660123",
      "name": "MAERSK DETROIT",
      "imo": "9356803",
      "vesselTypeName": "Cargo",
      "flag": "NL",
      "latitude": 51.951,
      "longitude": 4.083,
      "sog": 12.4,
      "cog": 271.5,
      "heading": 272,
      "destination": "NLRTM",
      "navStatus": 0
    }
  ],
  "meta": {
    "count": 1,
    "limit": 200
  }
}
POST/api/v1/vessels/positions

Bulk positions

Latest known positions for up to 100 vessels in one call. Credits scale with batch size: ceil(count / 10), minimum 1.

Scope: vesselsCredits: ceil(n/10), min 1Errors: INVALID_BODYTOO_MANY_MMSIS
ParameterInTypeRequiredDescription
mmsisbodystring[]yesArray of 9-digit MMSIs (max 100).

Example request

curl "https://navtrac.io/api/v1/vessels/positions" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -X POST -d '{"mmsis":["366999712","244660123"]}'

Example response

{
  "data": [
    {
      "mmsi": "366999712",
      "position": {
        "mmsi": "366999712",
        "latitude": 37.802,
        "longitude": -122.405,
        "sog": 0.1,
        "cog": 233,
        "heading": 234,
        "navStatus": 5,
        "timestamp": "2026-08-03T09:14:02.000Z",
        "source": "live"
      },
      "found": true
    },
    {
      "mmsi": "244660123",
      "position": null,
      "found": false
    }
  ],
  "meta": {
    "requested": 2,
    "found": 1
  }
}
GET/api/v1/vessels/:mmsi

Vessel details

Static registry details for a single vessel. Look up by 9-digit MMSI in the path, or pass a 7-digit IMO via the ?imo= query parameter (path value is ignored when the IMO matches).

Scope: vesselsCredits: 1Errors: INVALID_IDENTIFIERVESSEL_NOT_FOUND
ParameterInTypeRequiredDescription
mmsipathstringyes9-digit MMSI of the vessel.
imoquerystringno7-digit IMO number as an alternative identifier.

Example request

curl "https://navtrac.io/api/v1/vessels/366999712" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": {
    "mmsi": "366999712",
    "imo": "7625354",
    "name": "GOLDEN GATE",
    "callSign": "WYX2158",
    "vesselType": 60,
    "vesselTypeName": "Passenger",
    "flag": "US",
    "flagName": "United States",
    "length": 27,
    "width": 9,
    "draught": 3.2,
    "deadweight": null,
    "grossTonnage": 96,
    "yearBuilt": 1978,
    "lastSeen": "2026-08-03T09:12:44.000Z"
  }
}
GET/api/v1/vessels/:mmsi/position

Latest position

Latest known position for a vessel, preferring the live AIS feed over stored data. The 'source' field indicates which was used.

Scope: vesselsCredits: 1Errors: INVALID_MMSIPOSITION_NOT_FOUND
ParameterInTypeRequiredDescription
mmsipathstringyes9-digit MMSI of the vessel.

Example request

curl "https://navtrac.io/api/v1/vessels/366999712/position" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": {
    "mmsi": "366999712",
    "latitude": 37.802,
    "longitude": -122.405,
    "sog": 0.1,
    "cog": 233,
    "heading": 234,
    "navStatus": 5,
    "timestamp": "2026-08-03T09:14:02.000Z",
    "source": "live"
  }
}
GET/api/v1/vessels/:mmsi/voyage

Current voyage

Current voyage data for a vessel: reported destination, ETA, draught, and navigation status.

Scope: vesselsCredits: 1Errors: INVALID_MMSIVESSEL_NOT_FOUND
ParameterInTypeRequiredDescription
mmsipathstringyes9-digit MMSI of the vessel.

Example request

curl "https://navtrac.io/api/v1/vessels/366999712/voyage" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": {
    "mmsi": "244660123",
    "destination": "NLRTM",
    "eta": "2026-08-04T18:00:00.000Z",
    "draught": 11.2,
    "navStatus": 0,
    "atd": "2026-07-30T04:12:00.000Z",
    "updatedAt": "2026-08-03T09:12:44.000Z"
  }
}
GET/api/v1/vessels/:mmsi/track

Historical track

Historical track points for a vessel. Defaults to the last 24 hours; the requested range may not exceed 31 days.

Scope: vesselsCredits: 3Errors: INVALID_MMSIINVALID_DATE_RANGERANGE_TOO_LARGE
ParameterInTypeRequiredDescription
mmsipathstringyes9-digit MMSI of the vessel.
fromquerystring (ISO-8601)noRange start (default: 24 hours ago).
toquerystring (ISO-8601)noRange end (default: now). Must be after 'from'; max span 31 days.

Example request

curl "https://navtrac.io/api/v1/vessels/366999712/track?from=2026-08-01T00%3A00%3A00Z&to=2026-08-03T00%3A00%3A00Z" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": [
    {
      "latitude": 51.94,
      "longitude": 3.98,
      "sog": 13.1,
      "cog": 268,
      "heading": 269,
      "timestamp": "2026-08-02T23:55:00.000Z"
    }
  ],
  "meta": {
    "mmsi": "244660123",
    "from": "2026-08-01T00:00:00.000Z",
    "to": "2026-08-03T00:00:00.000Z",
    "count": 1
  }
}
GET/api/v1/vessels/:mmsi/photo

Vessel photo

Photo for a vessel. Imagery coverage is being rolled out; vessels without imagery return PHOTO_NOT_AVAILABLE.

Scope: vesselsCredits: 1Errors: INVALID_MMSIVESSEL_NOT_FOUNDPHOTO_NOT_AVAILABLE
ParameterInTypeRequiredDescription
mmsipathstringyes9-digit MMSI of the vessel.

Example request

curl "https://navtrac.io/api/v1/vessels/366999712/photo" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "error": "No photo is available for this vessel",
  "code": "PHOTO_NOT_AVAILABLE"
}
GET/api/v1/vessels/:mmsi/risk

Risk assessment

AI-generated compliance/risk assessment for a vessel based on its registry profile. Results are cached for 6 hours.

Scope: vesselsCredits: 5Errors: INVALID_MMSIVESSEL_NOT_FOUND
ParameterInTypeRequiredDescription
mmsipathstringyes9-digit MMSI of the vessel.

Example request

curl "https://navtrac.io/api/v1/vessels/366999712/risk" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": {
    "riskLevel": "low",
    "score": 12,
    "factors": [
      "Flag state has strong port-state-control record",
      "Vessel age within normal range"
    ],
    "summary": "No elevated risk indicators identified."
  },
  "meta": {
    "mmsi": "244660123",
    "generatedAt": "2026-08-03T09:20:11.000Z"
  }
}
GET/api/v1/vessels/:mmsi/position/satellite

Satellite position estimate

Position estimate for vessels outside terrestrial AIS coverage (open ocean). When the last terrestrial fix is recent, that authoritative position is returned with source 'terrestrial'; when it is stale, an extrapolated estimate is returned with source 'satellite'. Cached for 10 minutes.

Scope: vesselsCredits: 5Errors: INVALID_MMSISATELLITE_NOT_AVAILABLE
ParameterInTypeRequiredDescription
mmsipathstringyes9-digit MMSI of the vessel.

Example request

curl "https://navtrac.io/api/v1/vessels/366999712/position/satellite" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": {
    "mmsi": "244660123",
    "imo": "9356803",
    "name": "MAERSK DETROIT",
    "latitude": 38.42,
    "longitude": -41.87,
    "sog": 16.2,
    "cog": 265,
    "heading": 266,
    "timestamp": "2026-08-08T07:55:00.000Z",
    "source": "satellite"
  }
}
GET/api/v1/vessels/:mmsi/port-calls

Port call history

Recorded port calls for a vessel — port, arrival, departure, and dwell time — derived from observed vessel movements, most recent first.

Scope: vesselsCredits: 2Errors: INVALID_MMSI
ParameterInTypeRequiredDescription
mmsipathstringyes9-digit MMSI of the vessel.
limitqueryintegernoPage size, 1–100 (default 50).
offsetqueryintegernoRows to skip for pagination (default 0).

Example request

curl "https://navtrac.io/api/v1/vessels/366999712/port-calls" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": [
    {
      "portId": "NLRTM",
      "portName": "Rotterdam",
      "arrivalTime": "2026-08-01T06:20:00.000Z",
      "departureTime": "2026-08-02T14:05:00.000Z",
      "dwellMinutes": 1905,
      "purpose": "Cargo operations",
      "berthNumber": "E4"
    }
  ],
  "meta": {
    "mmsi": "244660123",
    "limit": 50,
    "offset": 0,
    "count": 1
  }
}
GET/api/v1/vessels/:mmsi/nearby

Vessels nearby

Live vessels currently around a given vessel — useful for spotting escorts, bunkering barges, tugs, or close-quarters traffic.

Scope: vesselsCredits: 2Errors: INVALID_MMSIPOSITION_NOT_FOUNDINVALID_RADIUS
ParameterInTypeRequiredDescription
mmsipathstringyes9-digit MMSI of the vessel.
radius_nmquerynumbernoSearch radius in nautical miles, 1–50 (default 10).
limitqueryintegernoMax vessels returned, 1–100 (default 50).

Example request

curl "https://navtrac.io/api/v1/vessels/366999712/nearby?radius_nm=10" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": [
    {
      "mmsi": "215678000",
      "name": "FAIRPLAY 31",
      "imo": "9506253",
      "vesselTypeName": "Tug",
      "flag": "MT",
      "latitude": 51.952,
      "longitude": 4.081,
      "sog": 3.1,
      "cog": 92,
      "navStatus": 0,
      "destination": "NLRTM"
    }
  ],
  "meta": {
    "mmsi": "244660123",
    "radiusNm": 10,
    "count": 1
  }
}
GET/api/v1/vessels/:mmsi/encounters

Ship-to-ship encounters

Detected ship-to-ship (STS) encounters for a vessel — prolonged close-quarters meetings at sea, a key signal for transshipment monitoring. Computed continuously from observed vessel movements.

Scope: vesselsCredits: 3Errors: INVALID_MMSI
ParameterInTypeRequiredDescription
mmsipathstringyes9-digit MMSI of the vessel.
daysqueryintegernoLook-back window in days, 1–365 (default 90).
limitqueryintegernoMax encounters returned, 1–100 (default 20).

Example request

curl "https://navtrac.io/api/v1/vessels/366999712/encounters" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": [
    {
      "id": "b1f7…",
      "partnerMmsi": "215678000",
      "partnerName": "OCEAN TRADER",
      "partnerType": "Tanker",
      "startTime": "2026-07-21T02:10:00.000Z",
      "endTime": "2026-07-21T05:40:00.000Z",
      "durationMinutes": 210,
      "latitude": 35.92,
      "longitude": 14.38,
      "sampleCount": 14
    }
  ],
  "meta": {
    "mmsi": "244660123",
    "days": 90,
    "lastScanAt": "2026-08-08T06:00:00.000Z",
    "count": 1
  }
}
GET/api/v1/vessels/:mmsi/emissions

CO₂ emissions (EU MRV)

Verified annual CO₂ emissions and fuel consumption reported under the EU MRV scheme, one record per reporting year. Meta 'source' indicates whether records came from the local EU MRV dataset or a provider fallback.

Scope: vesselsCredits: 3Errors: INVALID_MMSI
ParameterInTypeRequiredDescription
mmsipathstringyes9-digit MMSI of the vessel.

Example request

curl "https://navtrac.io/api/v1/vessels/366999712/emissions" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": [
    {
      "imo": "9356803",
      "name": "MAERSK DETROIT",
      "reporting_period": "2025",
      "vessel_type": "Container ship",
      "co2_emissions_total": 48123.5,
      "co2_emissions_at_berth": 1830.2,
      "fuel_consumption_total": 15321.7,
      "total_time_at_sea": 5840,
      "verified": true
    }
  ],
  "meta": {
    "mmsi": "244660123",
    "imo": "9356803",
    "count": 1,
    "source": "eu-mrv",
    "providerUnavailable": false
  }
}
GET/api/v1/vessels/:mmsi/zones

Emission-zone status

Whether the vessel is currently inside an Emission Control Area (ECA/SECA), with the zone's sulfur limit and NOx Tier III status.

Scope: vesselsCredits: 1Errors: INVALID_MMSIPOSITION_NOT_FOUND
ParameterInTypeRequiredDescription
mmsipathstringyes9-digit MMSI of the vessel.

Example request

curl "https://navtrac.io/api/v1/vessels/366999712/zones" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": {
    "mmsi": "244660123",
    "position": {
      "latitude": 51.95,
      "longitude": 4.08,
      "timestamp": "2026-08-08T08:01:00.000Z"
    },
    "inEmissionControlArea": true,
    "zone": {
      "id": "north-sea",
      "name": "North Sea ECA",
      "shortName": "North Sea",
      "sulfurLimit": "0.10% m/m",
      "noxTierIII": true,
      "effectiveFrom": "2021-01-01"
    }
  }
}
GET/api/v1/vessels/:mmsi/safety

Safety record (PSC)

Port State Control record across four regimes — Paris MoU (bans and detentions), Tokyo MoU, Black Sea MoU, and Riyadh MoU — plus the vessel's flag performance rating. Overall status is 'banned', 'detained', or 'clear'.

Scope: vesselsCredits: 4Errors: INVALID_MMSIVESSEL_NOT_FOUNDSAFETY_NOT_AVAILABLE
ParameterInTypeRequiredDescription
mmsipathstringyes9-digit MMSI of the vessel.

Example request

curl "https://navtrac.io/api/v1/vessels/366999712/safety" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": {
    "mmsi": "244660123",
    "imo": "9356803",
    "name": "MAERSK DETROIT",
    "status": "clear",
    "parisMou": {
      "banned": [],
      "detained": [],
      "lastImportedAt": "2026-08-07T03:00:00.000Z"
    },
    "tokyoMou": {
      "detained": [],
      "lastImportedAt": "2026-08-07T03:10:00.000Z"
    },
    "blackSeaMou": {
      "detained": [],
      "lastImportedAt": "2026-08-07T03:12:00.000Z"
    },
    "riyadhMou": {
      "detained": [],
      "lastImportedAt": "2026-08-07T03:15:00.000Z"
    },
    "flagRating": {
      "code": "NL",
      "name": "Netherlands",
      "category": "white",
      "rank": 4,
      "listYear": 2025,
      "validFrom": "2025-07-01"
    }
  }
}
GET/api/v1/vessels/:mmsi/flag-risk

Flag performance rating

The vessel's flag state performance on the Paris MoU White/Grey/Black list — a quick screen for flags with poor inspection records.

Scope: vesselsCredits: 1Errors: INVALID_MMSIVESSEL_NOT_FOUNDFLAG_RATING_NOT_FOUND
ParameterInTypeRequiredDescription
mmsipathstringyes9-digit MMSI of the vessel.

Example request

curl "https://navtrac.io/api/v1/vessels/366999712/flag-risk" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": {
    "mmsi": "244660123",
    "flag": "NL",
    "flagName": "Netherlands",
    "rating": {
      "code": "NL",
      "name": "Netherlands",
      "category": "white",
      "rank": 4,
      "listYear": 2025,
      "validFrom": "2025-07-01"
    }
  }
}
GET/api/v1/vessels/:mmsi/registry

Registry, ownership & due diligence

Ownership and management (beneficial owner, registered owner, operator, technical and commercial managers with country), classification society, main engine, build details, sales & demolition records, dry-dock and survey dates, inspection/detention history and marine casualties. Company names are screened against the sanctions lists. Meta 'sections' gives each section's status: 'ok', 'unavailable' (not included in the data subscription), 'error' (temporary), or for casualties 'partial' (not every casualty source could be checked — an empty list then does not mean no casualties).

Scope: vesselsCredits: 5Errors: INVALID_MMSIVESSEL_NOT_FOUNDREGISTRY_NOT_AVAILABLE
ParameterInTypeRequiredDescription
mmsipathstringyes9-digit MMSI of the vessel.

Example request

curl "https://navtrac.io/api/v1/vessels/366999712/registry" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": {
    "mmsi": "636015321",
    "imo": "9575149",
    "vesselName": "DARYA MAYA",
    "companies": [
      {
        "role": "beneficial_owner",
        "name": "Dry Bulk Services",
        "country": "Hong Kong",
        "companyImo": "1796681",
        "fleetLookup": true
      },
      {
        "role": "technical_manager",
        "name": "Anglo-Eastern Management (HK)",
        "country": "Hong Kong",
        "companyImo": "0522961",
        "fleetLookup": true
      }
    ],
    "build": {
      "yearBuilt": 2012,
      "builder": null,
      "flag": "Liberia",
      "vesselType": "Bulk",
      "homePort": null,
      "operatingStatus": null,
      "piClub": null,
      "formerNames": []
    },
    "classification": {
      "society": "BV",
      "specialSurveyDate": "2027-03-01",
      "dryDockDate": "2025-02-14",
      "grossTonnage": 36330,
      "netTonnage": 21557,
      "deadweight": 63301,
      "lengthOverall": 199.9,
      "beam": 32.24,
      "depth": 18.5,
      "draft": 13.3,
      "propulsion": "Oil engine(s), direct drive"
    },
    "engine": {
      "designation": "6S50ME-C8.2",
      "builder": "Doosan Engine",
      "designer": "MAN B&W",
      "power": 8050,
      "powerUnit": "kW",
      "rpm": 117,
      "propulsion": "Oil engine(s), direct drive"
    },
    "salesDemolitions": [],
    "dryDock": {
      "lastDryDock": "2025-02-14",
      "specialSurvey": "2027-03-01",
      "ioppIssued": null,
      "ioppExpires": null
    },
    "inspections": [
      {
        "date": "2025-09-12",
        "authority": "Tokyo MoU",
        "port": "Kaohsiung",
        "type": "Initial inspection",
        "detained": false,
        "deficiencies": 2,
        "description": null
      }
    ],
    "casualties": [],
    "sanctions": {
      "screened": true,
      "matches": []
    }
  },
  "meta": {
    "imo": "9575149",
    "sections": {
      "ownership": "ok",
      "registry": "ok",
      "classification": "ok",
      "engine": "ok",
      "salesDemolitions": "ok",
      "dryDock": "ok",
      "inspections": "ok",
      "casualties": "ok"
    },
    "available": true,
    "fetchedAt": "2026-10-25T09:00:00.000Z",
    "ageSeconds": 120
  }
}
GET/api/v1/companies/fleet

Company fleet

Vessels a company controls in a given role. Use the role, name and companyImo values from a vessel's registry 'companies' entry; companyImo gives an exact match.

Scope: vesselsCredits: 3Errors: INVALID_ROLEINVALID_QUERY
ParameterInTypeRequiredDescription
rolequerystringyesbeneficial_owner, operator, technical_manager or commercial_manager
namequerystringyesCompany name
companyImoquerystringnoCompany registration number (exact match)

Example request

curl "https://navtrac.io/api/v1/companies/fleet?role=operator&name=KC%20Maritime%20Hong%20Kong" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": [
    {
      "imo": "9575149",
      "name": "DARYA MAYA",
      "flag": "Liberia",
      "vesselType": "Bulk",
      "yearBuilt": 2012,
      "deadweight": 63301
    }
  ],
  "meta": {
    "role": "operator",
    "name": "KC Maritime Hong Kong",
    "count": 1,
    "available": true,
    "status": "ok",
    "fetchedAt": "2026-10-25T09:00:00.000Z"
  }
}

Portsscope: ports

Port registry lookups, terminals, live traffic, expected arrivals, recorded departures, statistics, and port events.

GET/api/v1/ports

List / search ports

List ports, optionally filtered by free-text query and/or country.

Scope: portsCredits: 1
ParameterInTypeRequiredDescription
qquerystringnoFree-text filter on port name, country, or UN/LOCODE.
countryquerystringnoCountry code or name filter.
limitqueryintegernoPage size, 1–200 (default 50).
offsetqueryintegernoRows to skip for pagination (default 0).

Example request

curl "https://navtrac.io/api/v1/ports?q=rotterdam" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": [
    {
      "id": "NLRTM",
      "uuid": "b8b1a1f0-0000-0000-0000-000000000000",
      "name": "Rotterdam",
      "unlocode": "NLRTM",
      "country": "Netherlands",
      "countryCode": "NL",
      "latitude": 51.95,
      "longitude": 4.14,
      "type": "Seaport",
      "size": "L"
    }
  ],
  "meta": {
    "limit": 50,
    "offset": 0,
    "total": 1,
    "count": 1
  }
}
GET/api/v1/ports/:id

Port details

Details for a single port by internal id, UN/LOCODE, or provider UUID.

Scope: portsCredits: 1Errors: PORT_NOT_FOUND
ParameterInTypeRequiredDescription
idpathstringyesPort identifier: internal id, UN/LOCODE (e.g. NLRTM), or provider UUID.

Example request

curl "https://navtrac.io/api/v1/ports/NLRTM" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": {
    "id": "NLRTM",
    "uuid": "b8b1a1f0-0000-0000-0000-000000000000",
    "name": "Rotterdam",
    "unlocode": "NLRTM",
    "country": "Netherlands",
    "countryCode": "NL",
    "latitude": 51.95,
    "longitude": 4.14,
    "type": "Seaport",
    "size": "L"
  }
}
GET/api/v1/ports/:id/terminals

Port terminals

Terminals within a port: terminal code and name, operating company, coordinates, website and address. Ports without terminal coverage return an empty list.

Scope: portsCredits: 2Errors: PORT_NOT_FOUND
ParameterInTypeRequiredDescription
idpathstringyesPort identifier: internal id, UN/LOCODE (e.g. NLRTM), or provider UUID.

Example request

curl "https://navtrac.io/api/v1/ports/NLRTM/terminals" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": [
    {
      "code": "EMX",
      "name": "ECT EUROMAX TERMINAL (EMX)",
      "operator": "HUTCHISON PORTS ECT ROTTERDAM",
      "latitude": 51.974167,
      "longitude": 4.038056,
      "website": "https://www.ect.nl/",
      "address": "Maasvlakteweg 951, 3199 LZ Rotterdam (Maasvlakte), The Netherlands"
    }
  ],
  "meta": {
    "portId": "NLRTM",
    "count": 1
  }
}
GET/api/v1/ports/:id/vessels

Vessels in port

Live vessels currently in or near the port, within an adjustable radius.

Scope: portsCredits: 3Errors: PORT_NOT_FOUND
ParameterInTypeRequiredDescription
idpathstringyesPort identifier: internal id, UN/LOCODE (e.g. NLRTM), or provider UUID.
radius_nmquerynumbernoSearch radius in nautical miles, 1–50 (default 10).

Example request

curl "https://navtrac.io/api/v1/ports/NLRTM/vessels?radius_nm=10" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": [
    {
      "mmsi": "244660123",
      "name": "MAERSK DETROIT",
      "vesselTypeName": "Cargo",
      "flag": "NL",
      "latitude": 51.951,
      "longitude": 4.083,
      "sog": 0.2,
      "navStatus": 5,
      "destination": "NLRTM"
    }
  ],
  "meta": {
    "portId": "NLRTM",
    "radiusNm": 10,
    "count": 1
  }
}
GET/api/v1/ports/:id/arrivals

Expected arrivals

Vessels reporting this port as their destination with an ETA inside the requested window.

Scope: portsCredits: 2Errors: PORT_NOT_FOUND
ParameterInTypeRequiredDescription
idpathstringyesPort identifier: internal id, UN/LOCODE (e.g. NLRTM), or provider UUID.
windowquerystringnoLook-ahead window: 24h, 3d, or 7d (default 3d).

Example request

curl "https://navtrac.io/api/v1/ports/NLRTM/arrivals?window=3d" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": [
    {
      "mmsi": "244660123",
      "name": "MAERSK DETROIT",
      "imo": "9356803",
      "vesselTypeName": "Cargo",
      "flag": "NL",
      "destination": "NLRTM",
      "eta": "2026-08-04T18:00:00.000Z",
      "sog": 12.4,
      "latitude": 51.4,
      "longitude": 2.9,
      "navStatus": 0,
      "lastSeen": "2026-08-03T09:12:44.000Z"
    }
  ],
  "meta": {
    "portId": "NLRTM",
    "window": "3d",
    "count": 1
  }
}
GET/api/v1/ports/:id/departures

Recorded departures

Recorded port calls with a departure time, most recent first.

Scope: portsCredits: 2Errors: PORT_NOT_FOUND
ParameterInTypeRequiredDescription
idpathstringyesPort identifier: internal id, UN/LOCODE (e.g. NLRTM), or provider UUID.
limitqueryintegernoPage size, 1–100 (default 50).
offsetqueryintegernoRows to skip for pagination (default 0).

Example request

curl "https://navtrac.io/api/v1/ports/NLRTM/departures" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": [
    {
      "mmsi": "244660123",
      "portName": "Rotterdam",
      "arrivalTime": "2026-08-01T06:20:00.000Z",
      "departureTime": "2026-08-02T14:05:00.000Z",
      "dwellMinutes": 1905,
      "purpose": "Cargo operations",
      "berthNumber": "E4"
    }
  ],
  "meta": {
    "portId": "NLRTM",
    "limit": 50,
    "offset": 0,
    "count": 1
  }
}
GET/api/v1/ports/:id/statistics

Port statistics

Traffic statistics for a port over the requested period. Cached for 15 minutes.

Scope: portsCredits: 2Errors: PORT_NOT_FOUND
ParameterInTypeRequiredDescription
idpathstringyesPort identifier: internal id, UN/LOCODE (e.g. NLRTM), or provider UUID.
periodquerystringnoAggregation period: day, week, or month (default month).

Example request

curl "https://navtrac.io/api/v1/ports/NLRTM/statistics?period=month" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": {
    "vesselsInPort": 143,
    "vesselsUnderway": 38,
    "vesselsAtBerthOrAnchor": 105,
    "expectedArrivals72h": 61,
    "byType": {
      "Cargo": 71,
      "Tanker": 34,
      "Tug": 18
    }
  },
  "meta": {
    "portId": "NLRTM",
    "period": "month"
  }
}
GET/api/v1/ports/:id/events

Port events

Recent arrival/departure events for a port. Requires a port with a UN/LOCODE. Cached for 10 minutes.

Scope: portsCredits: 2Errors: PORT_NOT_FOUNDEVENTS_NOT_AVAILABLE
ParameterInTypeRequiredDescription
idpathstringyesPort identifier: internal id, UN/LOCODE (e.g. NLRTM), or provider UUID.
limitqueryintegernoMax events, 1–50 (default 50).

Example request

curl "https://navtrac.io/api/v1/ports/NLRTM/events" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": [
    {
      "eventType": "arrival",
      "mmsi": "244660123",
      "vesselName": "MAERSK DETROIT",
      "timestamp": "2026-08-03T05:41:00.000Z"
    }
  ],
  "meta": {
    "portId": "NLRTM",
    "count": 1
  }
}
GET/api/v1/ports/:id/facts

Port facts

Practical port characteristics from the World Port Index: harbor type and size, channel/anchorage/cargo-pier depths, pilotage and tug availability, supplies, repairs, cranes, and cargo facilities. Cached for 6 hours.

Scope: portsCredits: 2Errors: PORT_NOT_FOUNDFACTS_NOT_AVAILABLE
ParameterInTypeRequiredDescription
idpathstringyesPort identifier: internal id, UN/LOCODE (e.g. NLRTM), or provider UUID.

Example request

curl "https://navtrac.io/api/v1/ports/NLRTM/facts" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": {
    "wpiPortNumber": 31170,
    "portName": "ROTTERDAM",
    "countryCode": "NL",
    "countryName": "Netherlands",
    "unlocode": "NLRTM",
    "latitude": 51.9,
    "longitude": 4.48,
    "harborSize": {
      "code": "L",
      "label": "Large"
    },
    "harborType": {
      "code": "CN",
      "label": "Coastal natural"
    },
    "shelter": {
      "code": "G",
      "label": "Good"
    },
    "depths": {
      "channelM": 23.2,
      "anchorageM": 21.6,
      "cargoPierM": 18.9,
      "oilTerminalM": 22.9
    },
    "tideRangeM": 1.8,
    "maxVessel": {
      "lengthM": 366,
      "beamM": 49,
      "draftM": 21.3
    },
    "entry": {
      "goodHoldingGround": true,
      "turningArea": true,
      "firstPortOfEntry": true
    },
    "pilotage": {
      "compulsory": true,
      "available": true,
      "advisable": true
    },
    "tugs": {
      "assist": true,
      "salvage": true
    },
    "services": {
      "provisions": true,
      "freshWater": true,
      "fuelOil": true,
      "diesel": true,
      "medical": true,
      "garbage": true,
      "repairs": {
        "code": "A",
        "label": "Major"
      },
      "drydock": {
        "code": "L",
        "label": "Large"
      },
      "railway": {
        "code": "M",
        "label": "Medium"
      }
    },
    "cranes": {
      "fixed": true,
      "mobile": true,
      "floating": true
    },
    "facilities": {
      "wharves": true,
      "anchorage": true,
      "medMoor": false,
      "container": true,
      "roro": true,
      "solidBulk": true,
      "liquidBulk": true,
      "breakBulk": true,
      "oilTerminal": true,
      "dangerousCargo": true
    }
  },
  "meta": {
    "portId": "NLRTM",
    "source": "World Port Index"
  }
}
GET/api/v1/ports/:id/tides

Tide predictions

High/low tide predictions from the nearest NOAA station. Currently available for US ports with a NOAA station nearby; other ports return TIDES_NOT_AVAILABLE.

Scope: portsCredits: 2Errors: PORT_NOT_FOUNDTIDES_NOT_AVAILABLE
ParameterInTypeRequiredDescription
idpathstringyesPort identifier: internal id, UN/LOCODE (e.g. NLRTM), or provider UUID.

Example request

curl "https://navtrac.io/api/v1/ports/NLRTM/tides" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": {
    "stationId": "9414290",
    "stationName": "San Francisco",
    "stationDistanceKm": 3.2,
    "datum": "MLLW",
    "units": "m",
    "days": [
      {
        "date": "2026-08-08",
        "events": [
          {
            "time": "2026-08-08 04:12",
            "type": "H",
            "heightM": 1.71
          },
          {
            "time": "2026-08-08 10:47",
            "type": "L",
            "heightM": 0.28
          }
        ]
      }
    ]
  },
  "meta": {
    "portId": "USSFO",
    "source": "NOAA CO-OPS"
  }
}
GET/api/v1/ports/:id/weather

Port weather

Current marine weather conditions at the port's coordinates — a convenience wrapper so you don't have to look up the port position first.

Scope: portsCredits: 1Errors: PORT_NOT_FOUNDWEATHER_NOT_AVAILABLE
ParameterInTypeRequiredDescription
idpathstringyesPort identifier: internal id, UN/LOCODE (e.g. NLRTM), or provider UUID.

Example request

curl "https://navtrac.io/api/v1/ports/NLRTM/weather" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": {
    "current": {
      "waveHeight": 1.1,
      "wavePeriod": 5.4,
      "waveDirection": 245,
      "windWaveHeight": 0.6,
      "swellHeight": 0.7,
      "swellDirection": 250,
      "swellPeriod": 7.1,
      "oceanCurrentVelocity": 0.4,
      "oceanCurrentDirection": 12,
      "windSpeed": 14.2,
      "windDirection": 240,
      "temperature": 18.3,
      "weatherCode": 2,
      "visibility": 9600,
      "precipitation": 0,
      "seaState": "Slight",
      "seaStateLevel": 3,
      "beaufortScale": 4,
      "beaufortDescription": "Moderate breeze"
    },
    "hourly": [
      {
        "time": "2026-08-08T09:00",
        "waveHeight": 1.2,
        "waveDirection": 246,
        "windWaveHeight": 0.6,
        "swellHeight": 0.7,
        "windSpeed": 15.1,
        "windDirection": 242,
        "temperature": 18.6,
        "weatherCode": 2,
        "precipitation": 0
      }
    ],
    "daily": [
      {
        "date": "2026-08-08",
        "maxWaveHeight": 1.6,
        "maxWindSpeed": 19.4,
        "avgTemperature": 18.1,
        "dominantWeatherCode": 3
      }
    ],
    "attribution": "Marine weather from public forecast data",
    "tier": "free",
    "latitude": 51.95,
    "longitude": 4.14
  },
  "meta": {
    "portId": "NLRTM"
  }
}
GET/api/v1/ports/:id/congestion

Port congestion

Live congestion snapshot for a port: vessels nearby, how many are waiting at anchor or moored versus underway, the waiting ratio, and a congestion score where port-call history is available. Cached for 15 minutes.

Scope: portsCredits: 2Errors: PORT_NOT_FOUNDCONGESTION_NOT_AVAILABLE
ParameterInTypeRequiredDescription
idpathstringyesPort identifier: internal id, UN/LOCODE (e.g. NLRTM), or provider UUID.

Example request

curl "https://navtrac.io/api/v1/ports/NLRTM/congestion" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": {
    "vesselsNearby": 187,
    "waitingOrMoored": 141,
    "underway": 46,
    "waitingRatio": 0.75,
    "congestionScore": 68,
    "radiusNm": 15
  },
  "meta": {
    "portId": "NLRTM",
    "computedAt": "2026-08-08T08:05:00.000Z"
  }
}

Weatherscope: weather

Marine weather at a point and along a planned route.

GET/api/v1/weather/marine

Marine weather

Current marine weather conditions at a coordinate.

Scope: weatherCredits: 1Errors: INVALID_COORDINATES
ParameterInTypeRequiredDescription
latquerynumberyesLatitude (-90 to 90).
lonquerynumberyesLongitude (-180 to 180).

Example request

curl "https://navtrac.io/api/v1/weather/marine?lat=51.95&lon=4.14" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": {
    "current": {
      "waveHeight": 1.1,
      "wavePeriod": 5.4,
      "waveDirection": 245,
      "windWaveHeight": 0.6,
      "swellHeight": 0.7,
      "swellDirection": 250,
      "swellPeriod": 7.1,
      "oceanCurrentVelocity": 0.4,
      "oceanCurrentDirection": 12,
      "windSpeed": 14.2,
      "windDirection": 240,
      "temperature": 18.3,
      "weatherCode": 2,
      "visibility": 9600,
      "precipitation": 0,
      "seaState": "Slight",
      "seaStateLevel": 3,
      "beaufortScale": 4,
      "beaufortDescription": "Moderate breeze"
    },
    "hourly": [
      {
        "time": "2026-08-08T09:00",
        "waveHeight": 1.2,
        "waveDirection": 246,
        "windWaveHeight": 0.6,
        "swellHeight": 0.7,
        "windSpeed": 15.1,
        "windDirection": 242,
        "temperature": 18.6,
        "weatherCode": 2,
        "precipitation": 0
      }
    ],
    "daily": [
      {
        "date": "2026-08-08",
        "maxWaveHeight": 1.6,
        "maxWindSpeed": 19.4,
        "avgTemperature": 18.1,
        "dominantWeatherCode": 3
      }
    ],
    "attribution": "Marine weather from public forecast data",
    "tier": "free",
    "latitude": 51.95,
    "longitude": 4.14
  }
}
POST/api/v1/weather/route

Route weather

Weather along a route of up to 20 waypoints. Each waypoint needs numeric lat/lon and may include an ISO-8601 estimatedTime for time-aware forecasts.

Scope: weatherCredits: 2Errors: INVALID_BODYTOO_MANY_WAYPOINTSINVALID_WAYPOINT
ParameterInTypeRequiredDescription
waypointsbodyobject[]yesArray of { lat, lon, estimatedTime? } waypoints (max 20).

Example request

curl "https://navtrac.io/api/v1/weather/route" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -X POST -d '{"waypoints":[{"lat":51.95,"lon":4.14},{"lat":50.9,"lon":1.4,"estimatedTime":"2026-08-04T06:00:00Z"}]}'

Example response

{
  "data": {
    "points": [
      {
        "latitude": 51.95,
        "longitude": 4.14,
        "weather": {
          "waveHeight": 1.1,
          "wavePeriod": 5.4,
          "waveDirection": 245,
          "windWaveHeight": 0.6,
          "swellHeight": 0.7,
          "swellDirection": 250,
          "swellPeriod": 7.1,
          "oceanCurrentVelocity": 0.4,
          "oceanCurrentDirection": 12,
          "windSpeed": 14.2,
          "windDirection": 240,
          "temperature": 18.3,
          "weatherCode": 2,
          "visibility": 9600,
          "precipitation": 0,
          "seaState": "Slight",
          "seaStateLevel": 3,
          "beaufortScale": 4,
          "beaufortDescription": "Moderate breeze"
        },
        "delayHours": 0
      },
      {
        "latitude": 50.9,
        "longitude": 1.4,
        "weather": {
          "waveHeight": 1.8,
          "wavePeriod": 6.2,
          "waveDirection": 252,
          "windWaveHeight": 1,
          "swellHeight": 1.1,
          "swellDirection": 255,
          "swellPeriod": 7.8,
          "oceanCurrentVelocity": 0.6,
          "oceanCurrentDirection": 20,
          "windSpeed": 18.7,
          "windDirection": 248,
          "temperature": 17.4,
          "weatherCode": 61,
          "visibility": 7200,
          "precipitation": 0.4,
          "seaState": "Moderate",
          "seaStateLevel": 4,
          "beaufortScale": 5,
          "beaufortDescription": "Fresh breeze"
        },
        "delayHours": 0.5
      }
    ],
    "totalDelayHours": 0.5,
    "overallSeverity": "moderate"
  }
}

Compliancescope: compliance

Sanctions screening against published vessel sanctions lists.

GET/api/v1/sanctions/check

Sanctions check

Screen a vessel against sanctions lists by name, MMSI, or IMO. Provide at least one identifier; MMSI lookups are enriched with local registry data for better matching.

Scope: complianceCredits: 5Errors: INVALID_QUERY
ParameterInTypeRequiredDescription
namequerystringnoVessel name to screen.
mmsiquerystringno9-digit MMSI.
imoquerystringno7-digit IMO number.

Example request

curl "https://navtrac.io/api/v1/sanctions/check?name=OCEAN%20EXPLORER" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": {
    "query": {
      "mmsi": null,
      "imo": null,
      "name": "OCEAN EXPLORER"
    },
    "status": "clear",
    "matches": [],
    "sources": [
      "OFAC SDN",
      "EU Consolidated",
      "UK OFSI"
    ],
    "checkedAt": "2026-08-03T09:30:00.000Z"
  }
}
POST/api/v1/sanctions/check-batch

Batch sanctions screening

Screen up to 25 vessels against sanctions lists in one call — ideal for onboarding whole fleets. Each vessel needs at least one of name, MMSI, or IMO; entries with no usable identifier come back with status 'invalid'. Credits: 3 per vessel.

Scope: complianceCredits: 3 per vesselErrors: INVALID_BODYTOO_MANY_VESSELS
ParameterInTypeRequiredDescription
vesselsbodyobject[]yesArray of { mmsi?, imo?, name? } to screen (max 25).

Example request

curl "https://navtrac.io/api/v1/sanctions/check-batch" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -X POST -d '{"vessels":[{"mmsi":"366999712"},{"imo":"9811000"},{"name":"OCEAN EXPLORER"}]}'

Example response

{
  "data": [
    {
      "query": {
        "mmsi": "366999712",
        "imo": "7625354",
        "name": "GOLDEN GATE"
      },
      "status": "clear",
      "matches": []
    },
    {
      "query": {
        "mmsi": null,
        "imo": "9811000",
        "name": null
      },
      "status": "clear",
      "matches": []
    },
    {
      "query": {
        "mmsi": null,
        "imo": null,
        "name": "OCEAN EXPLORER"
      },
      "status": "match",
      "matches": [
        {
          "list": "OFAC SDN",
          "matchType": "name",
          "vessel": {
            "name": "OCEAN EXPLORER",
            "imo": "9038658",
            "aliases": [],
            "designatedDate": "2024-02-23"
          }
        }
      ]
    }
  ],
  "meta": {
    "requested": 3,
    "matched": 1,
    "sources": [
      "OFAC SDN",
      "EU Consolidated",
      "UK OFSI",
      "UN Consolidated"
    ],
    "checkedAt": "2026-08-08T08:10:00.000Z"
  }
}

Security & voyage planningscope: vessels

Piracy and maritime-security incident data, and port-to-port sea route calculation.

GET/api/v1/security/incidents

Security incidents

Piracy and maritime-security incidents reported by naval authorities. Call with no coordinates for the global feed, or pass lat/lon (and optional radius_nm) for incidents near a position.

Scope: vesselsCredits: 2Errors: INVALID_COORDINATESINVALID_RADIUS
ParameterInTypeRequiredDescription
latquerynumbernoCentre latitude for a proximity search (use with lon).
lonquerynumbernoCentre longitude for a proximity search.
radius_nmquerynumbernoProximity radius in nautical miles, 10–500 (default 200).
monthsqueryintegernoLook-back window in months, 3–24 (default 12).
limitqueryintegernoPage size, 1–500 (default 200).
offsetqueryintegernoRows to skip for pagination (default 0).

Example request

curl "https://navtrac.io/api/v1/security/incidents?radius_nm=200" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": [
    {
      "reference": "2026-145",
      "date": "2026-07-28",
      "latitude": 12.61,
      "longitude": 44.92,
      "category": "boarding",
      "hostility": "Pirates",
      "victim": "Bulk carrier",
      "navArea": "IX",
      "description": "Six persons in a skiff approached and boarded...",
      "source": "nga-asam"
    }
  ],
  "meta": {
    "count": 1,
    "radiusNm": 200,
    "months": 12,
    "latestIncidentAt": "2026-08-05"
  }
}
GET/api/v1/routes/sea

Sea route & distance

Shortest practical sea route between two coordinates: total distance in nautical miles plus the route line as GeoJSON-style [longitude, latitude] pairs. Routes between fixed points are cached for 6 hours.

Scope: vesselsCredits: 3Errors: INVALID_COORDINATESROUTE_NOT_FOUND
ParameterInTypeRequiredDescription
from_latquerynumberyesOrigin latitude.
from_lonquerynumberyesOrigin longitude.
to_latquerynumberyesDestination latitude.
to_lonquerynumberyesDestination longitude.

Example request

curl "https://navtrac.io/api/v1/routes/sea?from_lat=51.95&from_lon=4.05&to_lat=40.68&to_lon=-74.02" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": {
    "from": {
      "latitude": 51.95,
      "longitude": 4.05
    },
    "to": {
      "latitude": 40.68,
      "longitude": -74.02
    },
    "distanceNm": 3312.4,
    "coordinates": [
      [
        4.05,
        51.95
      ],
      [
        3.4,
        51.6
      ],
      [
        -74.02,
        40.68
      ]
    ]
  }
}

Reference & statusscope: any

Free lookups available to any valid API key — no scope required, zero credit cost.

GET/api/v1/reference/vessel-types

Vessel types

All vessel type codes and labels used across the API.

Scope: anyCredits: 0

Example request

curl "https://navtrac.io/api/v1/reference/vessel-types" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": [
    {
      "code": 70,
      "label": "Cargo"
    },
    {
      "code": 80,
      "label": "Tanker"
    }
  ]
}
GET/api/v1/reference/flags

Flag states

All flag state codes and names used across the API.

Scope: anyCredits: 0

Example request

curl "https://navtrac.io/api/v1/reference/flags" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": [
    {
      "code": "NL",
      "name": "Netherlands"
    },
    {
      "code": "PA",
      "name": "Panama"
    }
  ]
}
GET/api/v1/reference/ports

Port index

Lightweight index of known ports for id resolution.

Scope: anyCredits: 0
ParameterInTypeRequiredDescription
limitqueryintegernoPage size, 1–500 (default 200).
offsetqueryintegernoRows to skip (default 0).

Example request

curl "https://navtrac.io/api/v1/reference/ports" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": [
    {
      "id": "NLRTM",
      "name": "Rotterdam",
      "unlocode": "NLRTM",
      "country": "Netherlands"
    }
  ],
  "meta": {
    "limit": 200,
    "offset": 0,
    "total": 1,
    "count": 1
  }
}
GET/api/v1/account/usage

API usage & spend

Your key's request and credit usage over the requested period, broken down by endpoint. Free to call — use it to monitor spend programmatically.

Scope: anyCredits: 0
ParameterInTypeRequiredDescription
daysqueryintegernoLook-back window in days, 1–90 (default 30).

Example request

curl "https://navtrac.io/api/v1/account/usage" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": {
    "keyPrefix": "nvt_live_ab12",
    "periodDays": 30,
    "totalRequests": 1284,
    "totalCredits": 3711,
    "byEndpoint": [
      {
        "endpoint": "GET /vessels/{mmsi}/position",
        "requests": 840,
        "credits": 840
      },
      {
        "endpoint": "GET /sanctions/check",
        "requests": 61,
        "credits": 305
      }
    ]
  }
}
GET/api/v1/status

API status & account

API health plus your account status, remaining credits, key scopes, and rate limit. Free to call — useful as a connectivity check.

Scope: anyCredits: 0

Example request

curl "https://navtrac.io/api/v1/status" \
  -H "X-API-Key: YOUR_API_KEY"

Example response

{
  "data": {
    "status": "ok",
    "version": "v1",
    "timestamp": "2026-08-03T09:30:00.000Z",
    "account": {
      "name": "Acme Logistics",
      "status": "active",
      "creditsRemaining": 9421
    },
    "key": {
      "prefix": "nvt_live_ab12",
      "scopes": [
        "vessels",
        "ports"
      ],
      "rateLimitPerHour": 1000
    }
  }
}