Developers

One API for
the entire ocean.

Every layer of the SeaSignals dataset uses the same conventions: GeoJSON in and out, ISO 8601 time, shared entity IDs, and a single join parameter to combine layers.

# Sea state + nearby vessels for a point
curl https://www.seasignals.com/v1/ocean/point \
  -H "Authorization: Bearer $SS_KEY" \
  -G -d lat=51.95 -d lon=3.9 \
  -d layers=waves,wind,vessels,storms \
  -d radius_nm=25
200 OK · application/geo+json
{
  "type": "FeatureCollection",
  "time": "2026-10-26T14:00:00Z",
  "cell": "h3:861969d97ffffff",
  "waves":  { "hs_m": 2.4, "tp_s": 9.1, "dir_deg": 305 },
  "wind":   { "speed_kn": 18, "dir_deg": 40 },
  "storms": [],
  "features": [
    { "id": "vessel:mmsi:244123456",
      "geometry": { "type": "Point", "coordinates": [3.82, 51.97] },
      "properties": { "sog_kn": 11.2, "type": "container",
        "next_port": "port:NLRTM" } }
  ],
  "provenance": { "waves": { "source": "model+buoy", "confidence": 0.92 } }
}
Consistent responses

Same structure, every layer

Responses are standard GeoJSON with the extras you'll want: grid cell, timestamp, typed IDs that link layers together, and provenance on every block.

  • Typed IDs: vessel:, port:, storm:, buoy:, taxon:
  • Time travel: add as_of= to any request to get historical state
  • Units in the name: _m, _kn, _deg, so there's no guessing
Endpoints · v1

The API at a glance

Live in the free trial. Endpoints marked Soon are on the roadmap. Errors come back as {"error": {"code", "message"}}, and every response carries X-RateLimit-* headers.

GET/v1/ocean/pointEverything known about one location, across all layers
GET/v1/ocean/areaLayers aggregated over a polygon or grid cells Soon
GET/v1/vesselsVessels by bbox or point + radius_nm, filtered by type, status or name q
GET/v1/vessels/{id}/trackTrack between from and to, with join=waves for sea state along the way
GET/v1/storms/activeActive systems with forecast cones and wind radii
GET/v1/waves/forecastHourly wave and wind forecast for a point or a route of up to 20 waypoints
GET/v1/ports/{locode}/congestionQueue, dwell and anchorage metrics over time
GET/v1/portsPorts with UN/LOCODE ids and whether they're in live AIS coverage
GET/v1/coverageCovered regions, sources, licences and feed freshness (no key needed)
GET/v1/wildlife/sightingsCetacean, shark and turtle records by area, group and since date
POST/v1/alertsCreate geofence, threshold and proximity alerts Soon
WS/v1/streamLive feed of positions, advisories and events Soon
Building blocks · roadmap

Everything you need to build on the sea

Coming after the REST API, in roughly this order. Tell us which one you need first: info@seasignals.com.

Live streams

Subscribe by area, entity or event type over WebSocket or SSE. Positions arrive within seconds.

Alerts & webhooks

"Vessel enters zone", "storm within 200 nm of port", "Hs above 3 m on my route". Delivered to your endpoint.

Bulk & warehouse

Partitioned Parquet history, delivered to S3/GCS or shared directly into your data warehouse.

SDKs

Typed clients for Python and TypeScript, with pandas/GeoPandas helpers and map-ready output.

Embeddable widgets

Drop-in port status, buoy conditions and storm tracker widgets for your own site.

MCP server for AI agents

Give AI assistants direct, structured access to ocean conditions, vessels and events.

Start building on the ocean

Free trial keys include all five layers, 1,000 requests a day and 14 days of history.