Port-call throughput deviation with a weather risk overlay - IMF PortWatch
Changed onFor a set of the world's ports, how far the latest port-call count sits from each port's own recent baseline (a throughput DEVIATION, not a congestion, dwell or wait measurement - IMF PortWatch publishes none of those), reported ALONGSIDE a Weather-Disruption-Risk overlay and never blended into it. Pick the busiest ports (default), one country, or specific port ids. Directionally ambiguous and several days stale by construction; not for navigation or operational routing.
Request
- Base URLhttps://sugra.ai
- AuthAPI key in header x-api-key
- TypeScriptA function with typed inputs. Its response is checked against the schema.
Query parameters
ISO3 country code, e.g. CHN, USA, NLD.
Comma-separated PortWatch port ids, e.g. port1201,port1114.
Number of ports to return (busiest first when no country/ports filter).
Keep only ports whose absolute throughput z-score reaches this.
anomaly = by absolute throughput deviation; activity = by call count.
Response
Successful Response
Example response
{
"data": {
"query": {
"country": "CHN",
"ports": "port1201,port1114",
"top": 25,
"min_abs_z": 2,
"sort": "anomaly"
},
"port_set": {
"requested": "top",
"scorable_universe": 406,
"resolved": 25
},
"total_matched": 25,
"count": 25,
"ports": [
{
"port_id": "port1201",
"name": "Singapore",
"country": "Singapore",
"iso3": "SGP",
"lat": 1.272,
"lon": 103.707,
"throughput": {
"activity": 137,
"baseline_mean": 123.47,
"baseline_stddev": 14.52,
"baseline_days": 30,
"baseline_rows": 30,
"baseline_window_days": 30,
"z_score": 0.93,
"pct_deviation": 11,
"direction": "above",
"band": "normal",
"available": true,
"reason_code": "baseline_too_thin"
},
"risk_overlay": {
"index": 42.5,
"band": "elevated",
"dominant_driver": "wave",
"components_count": 5,
"sub_scores": {
"wave": 47,
"wind": 35
},
"unavailable_factors": [
"wave",
"precipitation"
],
"available": true
}
}
],
"data_quality": {
"as_of": "2026-07-17",
"published_at": "2026-08-28T00:23:09Z",
"staleness_days": 7
}
},
"meta": {
"endpoint": "/api/v1/fred/us/cpi",
"data_time": "2026-04-16T14:30:00Z",
"response_time": "2026-04-16T14:30:12Z",
"provider": "Sugra API v1.0.1",
"data_age_days": 8.532,
"source": "sugra_crypto",
"attribution": "Short interest and Reg SHO daily short volume data is owned by and sourced from FINRA (Financial Industry Regulatory Authority).",
"source_url": "https://fred.stlouisfed.org/series/UNRATE",
"citation": "Federal Reserve Bank of St. Louis (FRED) - Unemployment Rate (UNRATE) - https://fred.stlouisfed.org/series/UNRATE - retrieved 2026-11-02",
"fallback_chain": [
"sugra_crypto",
"sugra_finance"
],
"stale_since": "2026-09-08T12:00:00Z",
"period": "2026-Q1",
"notes": "the UKMTO report behind these counts is dated 2026-08-21 and is 11 days old"
}
}Changes
- info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status
- info
- breaking
added
subschema #1to the response bodyoneOflist for the response status - breaking
the response's body type changed from
objectto no type for status - breaking
removed the required property
from the response with the status - breaking
removed the required property
from the response with the status - warning
removed the optional property
from the response with the status - warning
removed the optional property
from the response with the status - warning
removed the optional property
from the response with the status - warning
removed the optional property
from the response with the status - warning
removed the optional property
from the response with the status - warning
removed the optional property
from the response with the status - warning
removed the optional property
from the response with the status - warning
removed the optional property
from the response with the status - warning
removed the optional property
from the response with the status
This list may be incomplete.
- breaking