Developer Portal
Insights
PurpleTRACMTIPodium
Other
Other
  • Weather
Insights
PurpleTRACMTIPodium
Other
Other
  • Weather
  1. Vessel Notifications
  • 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
        GET
      • Create Vessel Notification Subscription
        POST
      • Get Vessel Notification Subscription
        GET
      • Edit Vessel Notification Subscription
        PUT
      • Get Vessel Notifications by Subscription ID
        GET
      • Get All Vessel Notifications
        GET
      • Delete Vessel Notification Subscription
        DELETE
  • 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. Vessel Notifications

Worked Examples

You can have every event Voyage Insights returns on request pushed to you as it happens instead. A subscription names the vessels, switches on the event types you care about, and says where to deliver.
Four worked subscriptions follow, from a single-vessel watch to a whole-fleet one, then the lifecycle calls for managing them.

The shape of a subscription#

One POST /notifications/v1/vessels creates a subscription. The envelope is small; the work is in settings.filters.
{
  "name": "Panama Canal transit watch",
  "description": "Zone entry and exit alerts for vessels transiting the Panama Canal",
  "custom_reference": "FLEET-OPS-2141",
  "active": true,
  "settings": {
    "imo": "9074729",
    "notification_callback_url": "https://webhooks.example.com/event-notifications",
    "filters": {
      "zones": {
        "active": true,
        "event_types": ["ZONE_ENTRY", "ZONE_EXIT"],
        "zone_types": ["Jurisdictional"],
        "zone_sub_types": ["Internal Waters"]
      }
    }
  }
}
name and settings are the only required fields at the top level, and filters is required inside settings. custom_reference is yours. We carry it through untouched, so it is the cheapest way to tie a subscription back to a record in your own system.
Only switch on the filters you want
Each key inside filters is one event type, and each carries its own active flag. A filter key you leave out is off. You do not need to list every event type with "active": false to disable it, and omitting them keeps the payload readable and makes a later diff meaningful.

Watching one vessel for port calls in sanctioned countries#

Monitor a single hull, and only for arrivals in a named set of countries.
{
  "name": "Vessel 9285184: sanctioned country arrivals",
  "custom_reference": "Sanctions monitoring - 9285184",
  "active": true,
  "settings": {
    "imo": "9285184",
    "notification_callback_url": "https://webhooks.example.com/sanctions-alerts",
    "filters": {
      "ports": {
        "active": true,
        "country_codes": ["VEN", "SYR", "IRN", "RUS"],
        "event_types": ["PORT_AREA_ARRIVAL", "PORT_ARRIVAL"]
      }
    }
  }
}
Both arrival events are included deliberately. PORT_AREA_ARRIVAL fires when the vessel enters the port area, and PORT_ARRIVAL when it stops inside it. The first is the early warning; the second confirms it called instead of passing through.

Watching a whole fleet#

Swap imo for fleet_id and the same subscription covers every vessel in that fleet.
{
  "name": "Mediterranean fleet: high risk zone entries",
  "active": true,
  "settings": {
    "fleet_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
    "notification_callback_url": "https://webhooks.example.com/high-risk-alerts",
    "email_settings": {
      "email_enabled": true,
      "scheduler": { "schedule_type": 24, "at_time": "09:00" },
      "additional_recipients": ["fleet.manager@example.com"]
    },
    "filters": {
      "zones": {
        "active": true,
        "event_types": ["ZONE_ENTRY"],
        "zone_types": ["IBF"],
        "zone_sub_types": ["HRA", "War Risk Area", "Piracy"]
      }
    }
  }
}
We resolve fleet membership when each event is evaluated, not when the subscription is created. Add a vessel to the fleet and it starts generating notifications; remove it and it stops. Neither requires touching the subscription. Fleets are managed from Domain & Fleet.
Reach for a fleet when the monitoring is identical
A fleet subscription applies one set of filters to every member, so it suits groups of vessels that need the same oversight: a trading fleet, a region, a compliance programme. Vessels that need their own thresholds want their own subscription, and the two approaches coexist on the same account.

Watching a fleet for AIS gaps#

{
  "name": "Atlantic fleet: AIS gap alerts",
  "active": true,
  "settings": {
    "fleet_id": "b2c3d4e5-6789-0123-4567-890123456789",
    "notification_callback_url": "https://webhooks.example.com/ais-gaps",
    "filters": {
      "ais_reporting_gaps": {
        "active": true,
        "gap_threshold_gte": 4
      }
    }
  }
}
gap_threshold_gte is in hours, and the same caution applies as on the polled endpoint: short thresholds return noise, because satellite coverage is imperfect and equipment fails.

What you can subscribe to#

Ten event types, each its own key inside filters:
Filter keyFires when
portsA port area, port or berth arrival or departure
zonesA zone entry or exit
ais_reporting_gapsThe vessel stops transmitting for longer than your threshold
sts_pairingsA ship-to-ship pairing is detected
positional_discrepanciesPositions stop behaving like a real track
draught_changeThe reported draught changes
ais_destination_changeA new destination is entered in the AIS message
ais_eta_changeA new ETA is entered in the AIS message
mmsi_changeThe MMSI number changes
navigational_status_changeThe navigational status changes
The last five need only "active": true, since there is nothing to threshold.

How zone filters combine#

Most event types accept zone filters, and the logic is the part people get wrong.
An event must match at least one zone_id if you supplied any, and at least one zone_type if you supplied any, and at least one zone_sub_type if you supplied any. Omit a dimension entirely and it stops narrowing.
The subtlety is that an event can be associated with several zones at once, because zones overlap. We evaluate the match across all of an event's zones together, not zone by zone, so an event qualifies if one of its zones satisfies the ID test and a different one satisfies the type test. It does not need a single zone that satisfies every criterion.
Zone IDs come from the search endpoints described on Choosing Zone Endpoints, and the type vocabulary is on Zone & Port Types.

Delivery#

Two channels, and they are not exclusive:
Webhook. Set notification_callback_url and we POST each notification to it as it is generated.
Email. Set email_settings.email_enabled to true and choose a scheduler.schedule_type from the table below. additional_recipients adds addresses beyond the subscription owner.
schedule_type decides whether email arrives one at a time or batched. 0 sends each notification as it is generated. Every other value batches notifications into a digest, and the number is how many digests you get a day:
schedule_typeDelivery
0Immediate, one email per notification
1One digest a day
2Two digests a day
3Three digests a day
4Four digests a day
24One digest an hour
These are the only values. at_time is the UTC time, as HH:mm, at which the first digest goes out, and the remaining digests are spaced evenly across the day according to how many schedule_type specifies.
Notifications & Webhooks covers endpoint requirements, retries and what a delivery looks like on the wire.

Managing a subscription#

Listing what you have
GET /notifications/v1/vessels returns your subscriptions, with limit and offset for paging and an active parameter to show only live or only paused ones.
GET /notifications/v1/vessels/{id} returns a single subscription.
Reading the notifications produced
Changing one
Pausing instead of deleting

Related#

Notifications & Webhooks
Webhook endpoint requirements, delivery behaviour and email setup.
Voyage Insights
The same events, polled over a time window instead of pushed.
Zone & Port Types
The type and sub-type vocabulary the zone filters expect.
Modified at 2026-10-16 05:45:58
Previous
Latest Vessel Positions
Next
Get Vessel Notification Subscriptions
Built with