Developer Portal
Insights
PurpleTRACMTIPodium
Other
Other
  • Weather
Insights
PurpleTRACMTIPodium
Other
Other
  • Weather
  1. Concepts & Terminology
  • Start Here
    • API Overview
    • Getting Started
    • Authentication
    • Quick Start
    • Testing & Sandbox
  • Concepts & Terminology
    • Concepts & Terminology
    • Notifications & Webhooks
    • Errors & Status Codes
    • Pagination & Filtering
    • Versioning & Deprecation
    • Changelog
  • Reference Data
    • Vessel Types
    • Vessel Classes
    • Vessel Statuses
    • Zone & Port Types
  • Build & Operate
    • AI Assistants & Agents
    • FAQ
    • SDKs & Code Generation
  • Vessel & Voyage
    • Overview
    • Vessel Insights
      • Overview
      • Vessel Search
      • Vessel Characteristics
    • Voyage Insights
      • Overview
      • Worked Examples
      • Vessel Port Calls
      • Vessel Zone & Port Events
      • Vessel AIS Reporting Gaps
      • Vessel STS Pairings
      • Positional Discrepancies
      • Port State Control
    • Vessel Positions
      • Vessel Positions
      • Historical Vessel Track
      • Latest Vessel Positions
    • Vessel Notifications
      • Worked Examples
      • Get Vessel Notification Subscriptions
      • Create Vessel Notification Subscription
      • Get Vessel Notification Subscription
      • Edit Vessel Notification Subscription
      • Get Vessel Notifications by Subscription ID
      • Get All Vessel Notifications
      • Delete Vessel Notification Subscription
  • Port & Trade
    • Overview
    • Choosing Port Endpoints
    • Port Insights
      • Port Insights
      • Berth Calls by Port
      • Inbound Vessels
    • Port Analytics
      • Port Analytics
      • Port Analytics: Worked Examples
      • Berth KPIs
      • Berth Details
      • Port Arrival & Departure Analytics
  • Domain & Fleet
    • Overview
    • Choosing Zone Endpoints
    • Zone Insights
      • Overview
    • Zone Analytics
      • Zone Analytics
      • Zone Analytics: Worked Examples
      • Zone Entry & Exit Analytics
    • Fleet Management
      • Fleet Management
      • Fleet Management: Worked Examples
      • List Fleets
      • Create Fleet
      • Get Fleet Details
      • Delete Fleet
      • Update Fleet
      • List Fleet Vessels
      • Get Fleet Composition
      • List Fleet Events
    • Custom Zones
      • Custom Zones
      • Create Custom Zone
      • Edit Custom Zone
  • Zones & Ports
    • Overview
    • Zone & Port Insights
      • Zone & Port Search
      • Get Single Zone or Port
      • Zone & Port Traffic
      • Vessels in Zone or Port
    • Zone & Port Notifications
      • Zone & Port Notifications
      • Zone & Port Notifications: Worked Examples
      • Create Zone & Port Notification Subscription
      • Get Zone & Port Notification Subscriptions
      • Edit Zone & Port Notification Subscription
      • Delete Zone & Port Notification Subscription
      • Get Zone & Port Notification Subscription
      • Search Zone & Port Notifications
      • Get Zone & Port Notifications by Subscription ID
      • Get All Zone & Port Notifications
  • Schemas
    • VesselTankerCharacteristicsResponse
    • ImoBatchSearchResponse
    • ReportedDestination
    • AisFieldDeltaNavigationalStatus
    • AisFieldDeltaErrorResponse
    • BerthDetailsDto
    • BerthListQuery
    • BerthPortInfoDto
    • BerthSummaryDto
    • DwellTimeDataPointDto
    • OccupancyDto
    • PortAnalyticsItem
    • PortAnalyticsQuery
    • PortAnalyticsResponse
    • PortAnalyticsTotals
    • TopVisitorDto
    • VesselTypeMixDto
    • ZoneAnalyticsItem
    • ZoneAnalyticsQuery
    • ZoneAnalyticsResponse
    • ZoneDetail
    • PortDetail
    • PositionReport
    • PositionalDiscrepancyEvent
    • AisSpoofingErrorResponse
    • AisSpoofingVesselInformation
    • VesselPortsFilter
    • ZoneDetails
    • PortDetails
    • CustomZoneDetails
    • CircleDetails
    • PortEventDetails
    • PortCallEventDetails
    • BerthInformationPortCall
    • PortVessel
    • PortListResponse
    • ZoneDefinitionResponse
    • CustomZoneResponse
    • ArrivalsDeparturesResponse
    • VesselsInZonePortResponse
    • BerthEventsResponse
    • VoyagePortCallsResponse
    • VoyageZonePortEventsResponse
    • CustomZoneRequest
    • CustomCircle
    • ZoneServiceErrorResponse
    • ZoneServiceVesselInformation
    • VesselIdentifier
    • LatestVesselFilter
    • CircleZone
    • PolygonZone
    • GeographicFilter
    • HistoricalPositionSearchRequest
    • LatestPositionSearchRequest
    • VesselInfo
    • MatchedDestination
    • ConsolidatedPosition
    • CpsApiErrorResponse
    • CpsApiPaginationMeta
    • CpsApiNavigationalStatus
    • AnalyticsServiceErrorResponse
    • ResponseMeta
    • FlagDetail
    • CountryOfBuild
    • Ownership
    • VesselTankerCharacteristics
    • VesselCharacteristicsResponse
    • VesselSummary
    • VesselSearchResponse
    • ImoBatchSearchMeta
    • ImoBatchSearchSummary
    • ImoVesselSummary
    • ImoErrorEntry
    • ImoBatchSearchData
    • AssetInformationServiceErrorResponse
    • AssetInformationServiceDimensions
    • AssetInformationServiceVesselCharacteristics
    • EmailSettingsDTO
    • VesselFilterRequestDTO
    • ZonePortFilterRequestResponseDTO
    • SettingsResponseDto
    • SubscriptionResponseDTO
    • NotificationResponseDTO
    • EventNotificationServiceMetaData
    • BerthEventDetails
    • PscInspection
    • CustomPolygon
    • ZoneServiceMeta
    • HistoricalPositionsResponse
    • FleetListResponse
    • FleetListMeta
    • FleetSummary
    • FleetItem
    • VesselPosition
    • FleetVesselItem
    • FleetDetailMeta
    • FleetDetail
    • AnalyticsServiceVesselInformation
    • FailedVessel
    • CreateFleetV2Request
    • CreateFleetV2Response
    • UpdateFleetV2Request
    • FleetManagementApiMeta
    • FleetManagementApiErrorResponse
    • AssetInformationServiceCountryOfBuild
    • BerthDetailMetaDto
    • FleetEventNavigationalStatus
    • LegacyStsPairingsResponse
    • VesselZonesFilter
    • EventNotificationServiceErrorResponse
    • VesselAisReportingGapsFilter
    • GapReportingErrorResponse
    • VesselStsPairingsFilter
    • VoyageVesselInformation
    • StsPairingsResponse
    • VesselPositionalDiscrepanciesFilter
    • VesselDraughtChangeFilter
    • PscInspectionServiceErrorResponse
    • ReportingStatus
    • VesselAisDestinationChangeFilter
    • DaysNotReportingRange
    • VesselAisEtaChangeFilter
    • AnalyticsServiceMeta
    • VesselMmsiChangeFilter
    • FleetInformation
    • VesselNavigationalStatusChangeFilter
    • FleetCompositionResponse
    • CompositionData
    • VesselInboundBaseResponse
    • Summary
    • TypeAndClass
    • RegistrationAndFlag
    • AnalyticsServiceCountryOfBuild
    • BuildAndOrigin
    • SizeAndDimensions
    • CategoryItem
    • ChartSection
    • RankedSection
    • BerthDetailQueryDto
    • SizeSection
    • DimensionsSection
    • AisGapStartedPosition
    • AisGapEndedPosition
    • ZoneCentroid
    • GapReportingMetaData
    • ZoneInformation
    • StsPairingServiceMeta
    • PscPortInformation
    • AisSpoofingMeta
    • FleetEventsResponse
    • PscInspectionServiceMetaData
    • FleetEventsData
    • ZoneServicePaginationMeta
    • EventVesselInformation
    • VesselInbound
    • ZoneEventDetails
    • ZoneEventResponse
    • Schedule
    • AisGapEventResponse
    • StsPairingEventResponse
    • StsPairedVessel
    • PositionalDiscrepancyEventResponse
    • Centroid
    • DiscrepancyPositionStart
    • DiscrepancyPositionEnd
    • PscEventResponse
    • BerthDetailResponseDto
    • GapEventsResponse
    • StsPairingsData
    • PscInspectionsResponse
    • Point
    • GapEventData
    • StsPairingEvent
    • PscInspectionData
    • LatestPosition
    • VesselScreening
    • GapEvent
    • Location
    • BerthKpiDto
    • FlagCodesDTO
    • PortInformation
    • BerthListMeta
    • GapPosition
    • StsPairingServiceVesselInformation
    • AnalyticsServiceNavigationalStatus
    • AisFieldDeltaVesselInformation
    • VesselStatus
    • GapReportingNavigationalStatus
    • StsPairingServiceErrorResponse
    • PscInspectionServiceVesselInformation
    • AisFieldDeltaMetaData
    • BerthListResponseDto
    • GapReportingVesselInformation
    • VesselSettingsRequestDto
    • LegacyMeta
    • PolygonDetails
    • PositionalDiscrepancyData
    • ZonePortSettingsRequestDto
    • FleetVesselListResponse
    • VesselFlag
    • LegacyStsPairingsData
    • PositionalDiscrepancyResponse
    • VesselSubscriptionRequestDTO
    • LegacyStsPairing
    • BerthTerminalGroupDto
    • ZoneServiceNavigationalStatus
    • ZonePortSubscriptionRequestDTO
    • LegacyPairedVessel
    • UpdateFleetV2Response
    • StsPairingServiceVesselCharacteristics
    • MaritimeAnalyticsBeErrorResponse
    • FleetSummaryV2
    • FleetDetailResponse
    • GapDto
    • StsPairingServiceDimensions
    • VesselIdentifiers
    • RejectedVessels
    • BerthInformation
    • VesselPositionsGroup
    • SubscriptionSingleResponseDTO
    • VesselResultsSummary
    • LatestVesselPositionItem
    • OccupancyPaginationDto
    • SubscriptionsResponseDTO
    • SubscriptionIdsRequestDTO
    • VesselEntryDetails
    • PortAnalyticsDataEntry
    • LatestPositionDetails
    • LatestPositionsResponse
    • FleetSummaryV2Update
    • PortAnalyticsMeta
    • VesselResultsDetail
    • ZonePortVessel
    • BerthEvent
    • VoyagePortCall
    • VoyagePortZoneEvent
    • PortDwellSeriesEntryDto
    • PortInfoDto
    • TopVesselDto
    • VesselVisitDto
    • ZoneAnalyticsDataEntry
    • ZoneAnalyticsMeta
    • ZoneAnalyticsTotals
    • ZoneInfoDto
  1. Concepts & Terminology

Concepts & Terminology

The objects these APIs describe, how they relate, and the maritime vocabulary you need to read a response. For request mechanics see Pagination & Filtering, and for credentials see Authentication.

The objects#

Almost every call starts from one of five things. Knowing which one you are holding tells you which category to reach for.
Vessel
A ship, identified by IMO number. The IMO stays with the hull for life, so it is the safest key to store. Everything about identity, position and behaviour hangs off it.
Voyage
A vessel's activity over time, expressed as events: port calls, zone crossings, AIS gaps, ship-to-ship pairings, positional discrepancies and port state control inspections. We derive all but the inspections from positions; inspection regimes publish those.
Zone
An area of water. Some are jurisdictional and standard, some are ours, some you draw yourself. A port is modelled as a type of zone.
Fleet
A named group of vessels you define. Group once, then subscribe to or read the whole group without listing members every time.
Subscription
A standing request to be told when something happens. Scope it to a vessel or a fleet, or to a set of zones and ports.

How they relate#

A fleet is a convenience layer. You can subscribe to a fleet exactly as you would to one vessel, and read its members, its composition and its recent events through Fleet Management. Not every endpoint takes a fleet yet: Vessel Positions rejects fleet_id, so pass the member IMOs instead.
There are two kinds of subscription, and they are configured differently. A vessel subscription follows one ship or one fleet wherever it goes. A zone and port subscription watches a set of places and reports any vessel that moves through them. Notifications & Webhooks covers both.

Zones and ports#

A port is a type of zone. The two share one taxonomy and one identifier scheme, which is why Zone & Port Types lists them together.
The read endpoints are shared as well. Zone and port questions go to the same reads under /zone-port-insights/v1/, and the identifier you pass decides which answer you get: a zone by ID and its UUID, a port by ID or UNLOCODE. Notifications are shared the same way. Zones & Ports lists the endpoints.
A custom zone is always a zone. You can draw an area of water, but you cannot define a port.

Endpoints for one kind of area#

Some endpoints answer for zones only or for ports only. They are documented in the section for that kind of area, not in Zones & Ports:
EndpointAnswers forDocumented in
GET /zone-port-insights/v1/inbound-vessels/{id_type}/{id}PortsPort Insights
GET /zone-port-insights/v1/port-berth-traffic/{id_type}/{id}PortsPort Insights
GET /maritime-analytics/v1/analytics/ports/{id_type}/{id}/arrivals-departuresPortsPort Analytics
GET /maritime-analytics/v1/analytics/ports/{id_type}/{id}/berthsPortsPort Analytics
GET /maritime-analytics/v1/analytics/ports/{id_type}/{id}/berths/{berth_id}PortsPort Analytics
GET /maritime-analytics/v1/analytics/zones/{id_type}/{id}/entries-exitsZonesZone Analytics
POST /zone-port-insights/v1/zones/custom and PUT /zone-port-insights/v1/zones/custom/{id}ZonesCustom Zones
Inbound vessels, berth traffic and custom zones carry the /zone-port-insights/ prefix all the same. The prefix tells you which service answers an endpoint. It does not tell you whether the endpoint covers both kinds of area.

Vessel identifiers#

IdentifierFormatUse it when
IMO number7 digitsAlways, where you have it. Assigned by the International Maritime Organization and unchanged by renaming or reflagging
MMSI9 digitsWorking with raw AIS. Reassignable, so it is a weaker key than IMO
CallsignAlphanumericRadio identification. Not a reliable primary key
FlagCountry codeThe state of registration, which holds legal jurisdiction. All country codes, including flag, are ISO 3166-1 alpha-3 (three letters). The only two-letter code anywhere is the country prefix inside a UN/LOCODE, which is not a country code field itself.
Store the IMO, not the name
Vessel names change, flags change, MMSIs get reassigned. The IMO does not. Key your own records on anything else and you create a reconciliation problem later.

Place identifiers#

IdentifierFormatUse it when
Zone or port IDUUIDAny zone or port, including your custom zones. The only identifier the zone endpoints accept
UN/LOCODE5 characters, such as NLRTMPorts only. The United Nations code for a trade location, and the one most shipping systems already hold
id_typeID or UNLOCODEOn port endpoints that take either, it says which of the two you are passing. A few endpoints spell it in lower case, so copy the value from the endpoint's reference
Berth IDIdentifierA single berth inside a port, returned on berth traffic and Port Analytics
Fleet IDUUIDA fleet you created with Fleet Management

Inside a port#

TermMeaning
Port areaThe port's defined boundary. The area events below fire when a vessel crosses it
AnchorageWhere vessels anchor while waiting for a berth, cargo or instructions. Modelled as its own port sub-type, the Anchorage Area
BerthA specific mooring position within a port. Berth-level data is finer grained than port-level. Berths are typed by structure, Quay or Jetty
Terminal operatorThe company running a group of berths. Port Analytics groups berths by it
Dwell timeThe hours a vessel spends at a berth, from arrival to departure

Port calls are six events, not two#

This distinction catches people out, and getting it wrong changes your numbers. A full call runs through six events, in this order:
EventMeans
PORT_AREA_ARRIVALThe vessel entered the port's defined boundary
PORT_ARRIVALThe vessel stopped inside that boundary
BERTH_ARRIVALThe vessel arrived at a berth
BERTH_DEPARTUREThe vessel left the berth
PORT_DEPARTUREThe vessel started moving again inside the boundary
PORT_AREA_DEPARTUREThe vessel left the boundary
A call that berthed produces all six. A call that anchored without berthing produces the four port events and no berth pair. A vessel can also enter a port area and leave without ever "arriving". Do not assume the events arrive in pairs.
Which ones you want depends on the question:
Calls: use port arrival and departure
Traffic or congestion: use the area events
Berth occupancy and time alongside: use the berth events
Zones outside ports have two events of their own, ZONE_ENTRY and ZONE_EXIT. A vessel can be inside several overlapping zones at once, so one movement can produce more than one event.

Which endpoint returns which events#

EndpointEvents
vessel-port-callsAll six, for one vessel
vessel-zone-and-port-eventsThe four port events plus zone entry and exit, for one vessel
zone-and-port-trafficThe four port events for one port, or zone entry and exit for one zone
port-berth-trafficThe berth pair, for one port, each event carrying its berth
Each endpoint checks event types against its own set and rejects the rest, so asking zone-and-port-traffic for a berth event is an error, not an empty result. Port Insights and Voyage Insights cover the endpoints in detail.
A zone and port subscription can deliver all eight movement events. It adds two that come from what a vessel reports rather than what we observe: NEW_INBOUND, when a vessel first names a watched port as its destination, and ETA_CHANGE, when an inbound vessel changes its ETA. See Zone & Port Notifications.

Maritime zones#

Every zone has a type and a sub-type, and both work as filters.
ZoneWhat it is
EEZ (Exclusive Economic Zone)Extends up to 200 nautical miles from a coastline
Territorial seaCoastal waters up to 12 nautical miles from the baseline
Internal watersLandward of the territorial sea baseline
ECA (Emission Control Area)Designated areas with stricter emissions controls, split into SOX, NOX and domestic ECAs
JWC war zonesHigh-risk areas designated by the Joint War Committee for marine insurance
IBF zonesHigh-risk areas agreed for seafarers' conditions: HRA, ERZ and WOA, in rising order of risk
OFAC zonesAreas subject to U.S. Office of Foreign Assets Control sanctions programmes
WaterwaysStraits, channels and canals
Port zonesPorts, anchorage areas, designated STS areas, floating storage, off-shore terminals and marinas
Custom zoneAn area you define yourself as a circle or a polygon, for monitoring that matters only to you. See Custom Zones
Zone & Port Types lists every type and sub-type with the exact values the filters accept.

Snapshots, events and aggregates#

The same place can be asked about in three ways, and the endpoints are named to tell them apart.
ShapeAnswersExamples
SnapshotWhich vessels are here nowvessels-in-zone-or-port
EventsWhat moved, one row per movementzone-and-port-traffic, port-berth-traffic
AggregatesHow many, and for how long, bucketed by periodPort Analytics, Zone Analytics
Two more terms sit alongside these. Congestion has no endpoint of its own: readers must fetch the snapshot and filter for stationary vessels themselves, since vessels-in-zone-or-port has no speed filter. Inbound vessels are the ships naming a port as their destination in AIS, which we parse against our port library. That is what vessels say, not what we observed, so it will not always agree with the event feeds.

Activity and behaviour#

TermMeaning
AISAutomatic Identification System, the transponder-based tracking system vessels broadcast on
Position sourceWhere a position came from: satellite (S_AIS) or terrestrial (T_AIS) AIS, other AIS feeds, SATCOMMS or LRIT. What you receive depends on your licence
AIS gapA period with no AIS transmission, longer than a threshold you set. Sometimes coverage, sometimes deliberate
STS pairingShip-to-ship activity, two vessels alongside each other. The API calls it a pairing and types it as Cargo, Bunkering, Fishing or Unknown
Positional discrepancyPositions that do not behave like a real track, such as the same point repeated for hours. Can indicate AIS spoofing. Voyage Insights lists the patterns we detect
Dark activityInformal term for a period a vessel cannot be accounted for, usually an AIS gap in a context that matters
Gaps and discrepancies are signals, not verdicts
An AIS gap in poor-coverage water is unremarkable. The same gap off a sanctioned coast is not. These endpoints give you the observation; the risk judgement stays yours.

Describing a vessel#

TermMeaning
Vessel typeWhat the ship is built to do, such as a crude oil tanker. Each type rolls up into broader categories. See Vessel Types
Vessel classA size band within a type, such as Handysize or Capesize. See Vessel Classes
Vessel statusWhere the hull is in its life, from projected to scrapped. Not the same as navigational status. See Vessel Statuses
Navigational statusThe vessel's own broadcast status, such as under way, at anchor or moored. Self-reported, so treat it as a claim and not an observation
Ownership rolesRegistered owner, operator, technical manager, ship manager and group beneficial owner, which are often different companies
Gross tonnage (GT)A measure of a vessel's total internal volume, not its weight. Used as a size filter on analytics endpoints
Deadweight (DWT)How much weight a vessel can carry: cargo, fuel, stores and crew combined
DraughtHow deep the hull sits in the water. A change usually means cargo was loaded or discharged, which is why draught change is a subscribable event
Laden / ballastCarrying cargo, or sailing with tanks filled with water for stability instead
Flag stateThe country of registration, responsible for the vessel's regulatory oversight
Port state controlInspection of a foreign vessel in a national port, checking compliance with international rules. Detentions and deficiencies form part of a vessel's record

Voyage terms#

TermMeaning
ETAEstimated time of arrival, as reported by the vessel. Changes frequently, which is why it is a subscribable event
DestinationFree text typed aboard the vessel. We return it raw and, where we can, matched to a port and its UN/LOCODE
BunkeringTaking on fuel. A recognised type of ship-to-ship pairing
Self-reported versus observed
Navigational status, destination and ETA are broadcast by the vessel. Positions, gaps and zone crossings are observed. When the two disagree, that gap is usually worth investigating.

Units and conventions#

QuantityConvention
SpeedKnots, as speed over ground
RadiusMetres, on custom zones and area searches
Distance at seaNautical miles, in zone definitions
TimeUTC throughout, in ISO 8601. Pagination & Filtering covers the accepted formats
CoordinatesNamed fields take latitude and longitude. Coordinate pairs, in polygons, GeoJSON and WKT, put longitude first

Versioning#

Endpoints carry the version in the path, for example /notifications/v1/vessels. Most Insights endpoints are on v1. Fleet Management is on v2, with v1 still running for existing integrations.
We ship breaking changes as a new version, never as changes to the existing one
Deprecated means on its way out: marked in the documentation, with its replacement named, and kept running so integrations do not break unannounced
Legacy means superseded but supported, with no removal planned
Build against the latest version and plan for migration. No version runs forever. See Versioning & Deprecation.

Everything is JSON#

Insights responses are JSON throughout, in snake_case, inside a meta and data envelope. We accept HTTPS only and do not process plain HTTP requests.
Email notification digests are the one Insights exception: they attach a CSV of the events.

There is no test environment#

A call with a real key reaches production. The mock server, built from the contract, is the safe place to experiment. Testing & Sandbox shows how to switch to it.

Other product lines#

PurpleTRAC, MTI, Weather and Podium were built separately from Insights, and each still carries its own host, authentication or conventions. We are moving them to the Insights API key scheme; until then, read each one's own pages.
ProductHow it differsIts own vocabulary
PurpleTRACA username and api_key query parameter pair. Versioned once in the base path, /purpletrac/v1. Reports come back as PDFs and some errors as plain textTransaction id, screening, tracking, watchlists, bills of lading
Maritime Transparency IndexOAuth 2.0 client credentials, on its own host. Fields are camelCaseThe 0 to 5 transparency score and its five categories
WeatherA bearer token, on its own hostNumerical weather prediction, forecast parameters
PodiumIts own authentication, on its own hostTimelines, metrics, noon and voyage reports

Related#

Zone & Port Types
Every zone type and sub-type, with the exact values the filters accept.
Voyage Insights
The six event families for one vessel, from port calls to port state control.
Notifications & Webhooks
Vessel and zone subscriptions, delivery by webhook, email or pull, and digests.
Modified at 2026-10-21 14:41:29
Previous
Testing & Sandbox
Next
Notifications & Webhooks
Built with