Webhooks Notifications - Introduction

Audience

This document is designed to be used by Windward’s teams (product, R&D, customer success). It serves as an updated knowledge resource for all webhook related features, providing detailed workflows and logic explanations regarding the inner functions on the platform.
Some sections, mainly the appendixes, can be used as step-by-step guides to assist new customers with their initial implementation and exploration of the system.

Objective

Windward platform continuously monitors each vessel and analyzes its behavior. Users can enrich their own application by integrating their backend and exposing near-real-time insights in their frontend client.
Setting up Windward’s API access is a quick integration process aimed to trigger a webhook call (from Windward’s platform to external endpoint).
This webhook mechanism is triggered whenever Windward detects a relevant activity (vessel detected behavior). Our customer success team will set up the destination endpoint through which the payload will be delivered.
Additionally, an API call can be used to update the webhook’s destination endpoint.
Authentication
Token authorization is supported as “bearer” type only.
The string provided to our teams will be configured as a static value for the desired webhooks.
Our platform does not support token expiration for this type of integration, therefore, any changes will require manual adjustment to ensure service continuity.

See generic information regarding bearer implementation here.
For Token validation visit https://jwt.io/ - paste your key and review its properties including timestamp expiration and more.

Network

Production environment is set up with 2 static public ip addresses. All webhooks will be sourced through these addresses. Specific configuration details will be provided by our customer success team during setup sessions.

Responses and Retry Mechanism

All webhooks are directed at specific endpoints on customers’ systems.
When a webhook is triggered, the payload of the respective function is delivered to the destination endpoint and a response is collected and logged.
The expected response for a successful payload delivery is “200 OK” (based on the http standards available here). Any status code other than 200 will drive a retry attempt for the relevant payload.
In the event of an error in delivery (either network issues of application availability), a retry mechanism is activated for each failed payload separately. This mechanism triggers additional attempts (up to 5 total retries, in 30 seconds intervals). To ensure service continuity it is advised to check the WAF configuration so that retry attempts will not trigger a threshold and a possible block on similar requests.

Troubleshooting process:

Once logged in to the webapp, navigate to the "webhook portal" tab.

You can review the endpoint configuration to make sure the desired event type is selected, or switch to the "Logs" sub-tab to review the latest messages sent from Windward's platform to your server.

If an expected payload was not successfully delivered, you may select the relevant row from the log view table, scroll down to the "Webhook Attempts" table at the button of the page, click the action menu icon on the right side of the row and click "Resend".

For any assistance in troubleshooting reach out to customer success teams which will pull the relevant log records and provide an analysis on Windward’s side.


Webhook Structure

Common Fields

FieldsTypeDescriptionCan be null?Comment
EventTypesArrayAn array that holds the different event types. See Supported Activity TypesNoAt this stage, only one event type is returned.
Action TypeStringCreated/ Changed / DeletedNo
VesselIDStringWindward’s unique vessel IDNo
VesselNameStringThe vessels’ nameNo
IMOStringThe vessel’s IMO numberYes
MMSIStringThe vessel’s MMSI numberYes
ActivityIDStringWindward’s Activity IDNo
FlagStringThe flag, as reported by the vesselYes
ClassStringThe vessel’s ClassNo
StareDateTimeStringThe timestamp of the eventNo
durationStringThe duration of the activityYesWill only be available for continuous activities, and will be returned in the “updated” event type only
firstBlip

Array

[Float]

Long and lat coordinates of the vessel at the start of the activity
lastBlip

Array

[Float]

Long and lat coordinates of the vessel at the end of the activityWill only be available for continuous activities, and will be returned in the “updated” event type only
PortNameStringThe reported port nameNoused for "Port Call" activity
PortCountryStringThe port’s countryNoused for "Port Call" activity
LocodeStringThe port’s polygon LocodeNoused for "Port Call" activity
SecondVessel: IDStringThe ID of the second vessel involved in the meetingused for "Meeting" activity
SecondVessel: imoStringThe IMO of the second vessel involved in the meetingused for "Meeting" activity
MMSIStringThe MMSI of the second vessel involved in the meetingused for "Meeting" activity
minBeaufortLevelIntThe lowest Beaufort scale measuredYesused for "Weather" activity
maxBeaufortLevelIntThe highest Beaufort scale measuredYesused for "Weather" activity
OldDestinationStringThe name of the previous reported destinationYesused for "Destination Change" activity
NewDestinationStringThe name of the new reported destinationYesused for "Destination Change" activity
newDestinationCountryStringThe country name of the new reported destinationYesused for "Destination Change" activity
newDestinationLocodeStringThe Locode of the new destinationYesused for "Destination Change" activity
newDestinationNameStringThe name of the new reported destinationYesused for "Destination Change" activity
newEtaStringThe datetime representing the new ETAYesused for "ETA Change" activity
oldEtaStringThe datetime representing the previous ETAYesused for "ETA Change" activity
portNameStringThe name of the portYesused for "In Polygon" activity
portCountryStringThe name of the port countryYesused for "In Polygon" activity

Supported Activity Types

Activity TypeDocumentation/Explanation
BAD_WEATHERVessel sailing in bad weather event
DARK_ACTIVITYA vessel conducting dark activity
DESTINATION_CHANGEVessel reported a change in destination
DEVIATION_FROM_PATTERN_FIRST_IN_POLYGONFirst time in new area
ETA_CHANGEVessel reported an ETA change
LOW_SPEED_DRIFTINGVessel conducting a drifting activity 
LOW_SPEED_FISHINGFishing operation
LOW_SPEED_OTHERSlow speed activity
MEETINGShip-to-Ship operation event
PORT_CALLA vessel at port event
LOW_SPEED_ANCHORINGAnchored vessel 


.