Navisight Underwriting API
Weather-dimension risk scoring for marine insurers — a single call returns the CVRS Voyage Severity Index, per-dimension physics breakdown, and (on request) 31-member ensemble tail risk and a 20-year ERA5 availability backtest. Complementary to compliance/sanctions (Windward) and trade-flow (Kpler) data — this API is the weather signal underneath a hull or cargo policy.
0.25°
Weather grid resolution
47yr
ERA5 historical reanalysis
~210ms
Median response latency
Endpoints
Voyage risk
Score a completed voyage against collocated ERA5 weather — routes the vessel with the CVRS engine and returns the Voyage Severity Index, seven risk sub-scores, and physical conditions.
Route risk
Score a client-supplied track against live forecast weather without routing — for scoring a planned voyage you already have waypoints for.
Historical availability
ERA5 reanalysis backtest for a route and vessel — the share of historical departures in a given month that would have completed inside the vessel's stated limits.
Health
Per-model weather-cycle freshness and API status — gate a request on this before spending it on a stale forecast cycle.
Authentication
Every request authenticates with an API key in the X-API-Key header. A missing or invalid key returns 401; a deployment with no key configured returns 503 rather than a misleading 401, so a caller doesn't go hunting for a bad credential when the API simply isn't enabled yet.
600 req / min per key. Contact sales for a higher-volume enterprise limit.
Example — POST /voyage-risk
import os, requests resp = requests.post( "https://navisight.io/api/v1/underwriting/voyage-risk", headers={ "X-API-Key": os.environ["NAVISIGHT_UNDERWRITING_KEY"], "Content-Type": "application/json", }, json={ "vessel": { "imo": "9375147", "name": "Example Hull", "type": "cargo_small", "loa_m": 99, "beam_m": 16, "draft_m": 6.2, "cruising_speed_kts": 12.5, "max_wave_m": 4.5, "max_wind_kts": 40 }, "voyage": { "origin": { "lat": 25.7617, "lon": -80.1918, "name": "Miami, FL" }, "destination": { "lat": 32.3078, "lon": -64.7505, "name": "St. George's, Bermuda" }, "departure_utc": "2026-09-15T08:00:00Z" }, "options": { "ensemble_routing": true, "include_historical_baseline": true, "include_compliance_check": true } }, timeout=30, ) resp.raise_for_status() result = resp.json() vsi = result["voyage_severity_index"] print(f"VSI {vsi['score']} / 100 -- {vsi['band']}")
Example response (abridged)+
{ "voyage_id": "vy_9f2c1e", "computed_at_utc": "2026-08-29T14:22:01Z", "api_version": "1.0.0", "voyage_severity_index": { "score": 41.3, "band": "Caution", "confidence_interval": [ 33.8, 52.1 ], "percentile_rank": 62, "description": "Caution (41.3/100). Elevated sea-state exposure crossing the Gulf Stream; within vessel limits." }, "risk_dimensions": { "sea_state": { "score": 48.2, "weight": 0.3, "description": "..." }, "wind": { "score": 35, "weight": 0.25, "description": "..." }, "drift": { "score": 44.6, "weight": 0.1, "description": "..." } }, "physical_conditions": { "peak_hs_m": 3.1, "avg_hs_m": 1.6, "peak_wind_kts": 28.4, "avg_wind_kts": 14.2 }, "ensemble_analysis": { "members": 31, "p_violation": { "wave": 0.09, "wind": 0.02, "swell": 0.01, "any": 0.1 } }, "route_summary": { "distance_nm": 1042.6, "estimated_transit_h": 83.4, "eta_p50_utc": "2026-09-18T19:30:00Z" }, "metadata": { "weather_source": "tile_server", "disclaimer": "..." } }
Pricing
Per-query
$0.40/voyage scored
Pay per MMSI per query. No minimum commitment — for brokers and syndicates evaluating individual risks.
Enterprise
from $48,000/yr
Unlimited queries, dedicated rate limit, portfolio-level reporting. For P&I clubs and Lloyd's syndicates scoring a full book.
Response schema — voyage-risk
| Field | Type | Description |
|---|---|---|
| voyage_id | string | Unique identifier for this scoring run. |
| +voyage_severity_index | object | 0-100 CVRS composite (physics + geometry only, excludes the empirically-calibrated casualty layer — see Methodology below). |
| risk_dimensions | object | Seven CVRS sub-scores: sea_state, wind, drift, traffic, grounding, seasonal, regulatory — each { score, weight, description }. |
| physical_conditions | object | Raw peak/avg Hs, wind, swell, current — checkable against buoy or onboard observation. |
| +ensemble_analysis | object | null | 31-member GEFS (+ ECMWF ENS when available) fan-out: P(Violation), CVaR-95, VSI distribution. Null when ensemble_routing was off. |
| historical_baseline | object | null | 20-year ERA5 availability backtest; present only when include_historical_baseline was requested. |
| compliance | object | null | ECA/SECA transits, speed restrictions, ATBAs, protected areas, TSS, Polar Code applicability. |
| route_summary | object | Origin/destination, distance, transit hours, ETA P50/P90, segment and leg counts. |
| metadata | object | request_id, weather_data_age_h, weather_source, methodology, disclaimer. |
The Voyage Severity Index reported here is the CVRS weighted sum of seven physics- and geometry-derived sub-scores, computed over the 'safest' routing objective. It deliberately excludes the empirically-calibrated casualty layer and Notices-to-Mariners proximity bump the consumer product's headline score includes, so every component traces to a forecast field or a chart feature.
