REAL-TIME MARITIME EVENT ALERTS
Vessel Notifications API
Subscribe to vessel events and receive push notifications via webhooks or WebSocket. Port arrivals, departures, ETA changes, destination updates, speed changes, and geofence alerts for 700,000+ vessels, including polygon geofencing with attribute filters on the Pro plan.
11
Event Types
700K+
Vessels Available
2
Delivery Channels
5,000
Points per Geofence Polygon
What the Notifications API Provides
Subscribe to vessel events and receive alerts through webhooks or WebSocket. No polling required: events are pushed to you as soon as they are detected.
Port Event Alerts
Get notified when vessels arrive at or depart from ports worldwide. Includes port name, UNLOCODE, and timestamp for each event.
ETA & Destination Changes
Track changes to vessel ETA, destination, and draught. Receive alerts when crew updates the voyage plan via AIS.
Speed & Status Monitoring
Alerts when vessels start or stop moving (configurable speed threshold) or update their navigational status (anchored, moored, underway, etc.).
Polygon Geofencing
Get alerts when vessels enter or exit your zones: a simple bounding box on every paid plan, or polygons with up to 5,000 points and attribute filters (vessel type, subtype, length, ENI) matching any vessel in the area on Pro.
Webhook Delivery
HTTP POST to your endpoint with HMAC-SHA256 signature verification. Automatic retries with exponential backoff on failure.
WebSocket Streaming
Real-time streaming connection for low-latency event delivery. Persistent connection with automatic reconnection support.
Who Uses Vessel Notification APIs
Supply Chain
Track vessel arrivals at destination ports for cargo planning. Get notified when ships enter port areas so logistics teams can prepare for unloading and last-mile delivery.
Fleet Management
Monitor fleet-wide status changes and route deviations in real time. Detect unexpected stops, speed changes, or off-route vessels without manual monitoring.
Port Operations
Automate workflows triggered by vessel arrivals and departures. Schedule berth allocation, pilot dispatch, and resource planning based on real-time port events.
Compliance
Alert on geofence breaches for sanctions zones, environmental protection areas, or restricted waters. Maintain audit trails of vessel movements through regulated regions.
Create a Notification in Seconds
Subscribe to vessel events with a single API call. Choose webhook or WebSocket delivery.
cURL
# Create a webhook notification for port arrival events
curl -X POST "https://api.vesselapi.com/v1/notifications" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Port Arrival Alert",
"eventTypes": ["port.arrival", "port.departure"],
"imos": [9321483],
"webhookUrl": "https://your-app.com/webhooks/vessel-events",
"webhookSecret": "your_signing_secret"
}'
JavaScript
// Create a notification for ETA changes on specific vessels
const res = await fetch("https://api.vesselapi.com/v1/notifications", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
name: "ETA Change Monitor",
eventTypes: ["eta.eta_changed", "eta.destination_changed"],
mmsis: [211331640, 235009757],
webhookUrl: "https://your-app.com/webhooks/vessel-events",
webhookSecret: "your_signing_secret",
}),
});
const { notification } = await res.json();
console.log(`Notification created: ${notification.id}`);
Python (advanced polygon geofence, Pro plan)
import requests, time
BASE = "https://api.vesselapi.com/v1"
HEADERS = {"Authorization": "Bearer YOUR_PRO_API_KEY"}
# Create a polygon geofence around the Suez Canal matching any vessel
resp = requests.post(f"{BASE}/notifications/advanced", headers=HEADERS, json={
"name": "suez_canal_monitor",
"mode": "any_vessel",
"polygon": {"coordinates": [
[32.25, 29.85], [32.65, 29.85], [32.65, 31.35], [32.25, 31.35], [32.25, 29.85],
]},
"eventTypes": ["position.geofence_enter", "position.geofence_exit"],
"webhookUrl": "https://your-app.com/webhooks/geofence",
"webhookSecret": "your_signing_secret",
})
resp.raise_for_status()
# Wait for prefill to complete, then the notification is live
while True:
n = requests.get(f"{BASE}/notifications/advanced/suez_canal_monitor",
headers=HEADERS).json()["notification"]
if n["prefillStatus"] == "ready":
break
time.sleep(2)
# Send a test event to verify delivery
requests.post(f"{BASE}/notifications/advanced/suez_canal_monitor/test", headers=HEADERS)
Webhook Payload Example
{
"object": "event",
"event": {
"id": "94ff8b0d-08d8-466c-b37a-c024117b8880",
"type": "port.arrival",
"timestamp": "2026-03-27T08:14:32Z",
"detectedAt": "2026-03-27T08:14:45Z",
"notificationId": "550e8400-e29b-41d4-a716-446655440001",
"vessel": {
"imo": 9321483,
"mmsi": 477045900,
"vesselName": "EVER GIVEN"
},
"data": {
"portEvent": {
"event": "Arrival",
"timestamp": "2026-03-27T08:14:32Z",
"vessel": { "imo": 9321483, "mmsi": 477045900, "name": "EVER GIVEN" },
"port": { "name": "Rotterdam", "unlo_code": "NLRTM", "country": "Netherlands" }
}
}
}
}
Webhook security: All webhook deliveries include an X-Signature-256 header (sha256=<hex>) with an HMAC-SHA256 signature of the request body, plus X-Event-Type and X-Delivery-ID headers for routing and deduplication. Verify the signature using your webhook secret to authenticate requests. See the notification docs for verification examples.
Supported Event Types
Subscribe to any combination of event types. Each notification can listen for one or more of the following events.
| Event Type | Description | Category |
|---|---|---|
port.arrival |
Vessel arrives at a port | Port Events |
port.departure |
Vessel departs from a port | Port Events |
eta.eta_changed |
Crew-reported ETA has shifted beyond the configured threshold | ETA / Voyage |
eta.destination_changed |
Vessel destination has changed | ETA / Voyage |
eta.draught_changed |
Vessel draught has been updated (loading/unloading indicator) | ETA / Voyage |
position.update |
Broad: fires when a new AIS report changed any tracked field (coordinates, speed, course, heading, or nav status). Ideal for continuous tracking. | Position |
position.position_changed |
Specific: fires only when the vessel's actual geographic coordinates change. Filters out stationary reports. | Position |
position.speed_changed |
Speed crossed the stopped/moving boundary (configurable threshold): the vessel started or stopped moving | Position |
position.nav_status_changed |
Navigational status updated (anchored, moored, underway, etc.) | Position |
position.geofence_enter |
Vessel entered a defined geofence zone | Geofence |
position.geofence_exit |
Vessel exited a defined geofence zone | Geofence |
Standard notifications support all 11 event types. Advanced polygon notifications emit the geofence events, plus the eta.* family when watching an explicit vessel list. See the compatibility matrix.
Available Endpoints
/v1/notifications
Create a new notification subscription. Specify event types, vessel filters, delivery method, and optional geofence.
/v1/notifications
List all notification subscriptions for your account.
/v1/notifications/{id}
Get the full configuration of a single notification subscription.
/v1/notifications/{id}
Update an existing notification. Change event types, vessel filters, delivery URL, or pause/resume delivery.
/v1/notifications/{id}
Delete a notification subscription. Stops all event delivery immediately.
/v1/notifications/{id}/test
Send a test event to verify your webhook endpoint is configured correctly. Returns per-channel delivery status and response code.
/v1/ws?notification_id={id}
WebSocket stream of events for a standard notification, authenticated with the same Bearer key.
/v1/notifications/advanced
PRO
Create an advanced notification: polygon geofence, attribute filters, any-vessel matching or a list of up to 10,000 vessels. Managed by name via GET/PUT/DELETE /v1/notifications/advanced/{name} plus a /test endpoint.
/v1/ws/advanced?name={name}
PRO
WebSocket stream of events for an advanced notification.
Frequently Asked Questions
What is the difference between webhook and WebSocket delivery?
Webhooks deliver events as HTTP POST requests to your endpoint, one event per request. They work well for server-to-server integrations and require no persistent connection. WebSocket provides a persistent streaming connection with lower latency, ideal for real-time dashboards and applications that need immediate updates.
How quickly are events delivered after they occur?
Events are produced by continuously evaluating incoming AIS data: advanced (polygon) notifications are evaluated roughly every 60-90 seconds, standard notifications roughly every 5 minutes. Once an event is generated, webhook and WebSocket delivery are immediate. Every event carries both the original AIS report time and the detection time, so you can measure the lag yourself.
What happens if my webhook endpoint is down?
Failed webhook deliveries are retried up to 3 times with exponential backoff (1, 2, and 4 seconds), with a 10 second timeout per attempt. After all retries are exhausted the event is dropped, so build your receiver to be highly available, and deduplicate on the X-Delivery-ID header, which stays the same across retries.
How do I verify webhook signatures?
Each webhook delivery includes an X-Signature-256 header containing sha256=<hex>, an HMAC-SHA256 hash of the request body signed with the secret you provided when creating the notification. Compute the same hash on your end and compare to authenticate the request.
Can I subscribe to events for all vessels or just specific ones?
Both. Standard notifications watch an explicit list of up to 100 vessels by IMO or MMSI. For area-wide monitoring without naming vessels, advanced notifications (Pro plan) match any vessel inside a polygon, optionally narrowed by attribute filters such as vessel type or ENI presence.
Which plans include the notifications API?
Standard notifications are included in every paid plan: Basic (3 active notifications), Starter (5), Growth (10), and Pro (unlimited). Advanced polygon notifications are a Pro feature. The free tier does not include notifications. See pricing.
Start Receiving Vessel Events Today
Get your free API key and create your first notification subscription in minutes.