Port disruption pulse
Port-level disruption intelligence — geo-fuses the WPI ports reference with GDELT events near each port (within event_radius_km over the last days): relevant-event volume, conflict signal, a 7d-vs-baseline anomaly ratio, recent headlines, nearby flagged-energy-asset exposure, and AIS-coverage context. Scope by country, terminal type, name, or proximity; with no scope it defaults to strategic ports (LNG/oil terminals + large harbors). Requires a plan with Maritime intelligence access (can_use_maritime) — see Pricing for the plans that include it.
Each row scores a pulse_level (critical / elevated / active / quiet) and rows are risk-ranked. Envelope: { success, data, summary, applied_filters }.
Pulse rubric: critical = at least 5 conflict Events; elevated = 1–4 conflict Events; active = no conflict Events but at least one other relevant Event; quiet = no relevant Events. Relevant-event volume does not override a conflict-based level. relevant_events: Events within event_radius_km that are either conflict-family Events or carry one of the published maritime, infrastructure, trade, sanctions, energy, logistics, port, shipping, pipeline, customs, smuggling, or commodity relevance tags.
Authorizations
GDELT Cloud API key. Send as Authorization: Bearer gdelt_sk_....
Query Parameters
Country filter on port-pulse. Accepts a country name, ISO-2, or ISO-3 (e.g. Ukraine, UA, UKR) via the shared resolveCountryInput layer; an unresolvable value returns 400 INVALID_COUNTRY.
Case-insensitive match on port name, alternate name, or UN/LOCODE.
true → only ports with an LNG terminal.
true → only ports with an oil terminal.
Point 'lat,lon' for a radius search; combine with radius_km (default 200). Format: lat,lon — pass the radius separately in radius_km.
"51.5,-0.12"
GEM energy-asset gem_id — scope to ports within radius_km of that asset (cross-source join).
Radius in km for near / near_gem_id. Default 200; clamped 1–2000.
GDELT event window in days (1–30). Defaults to 14.
1 <= x <= 30How close an event must be to a port to count it (5–500 km). Defaults to 50.
5 <= x <= 500Number of ports to score (1–50). Defaults to 20.
1 <= x <= 50Response
Risk-ranked ports with their pulse. Each row: port_id, name, unlocode, country, lat, lon, harbor_size, lng_terminal / oil_terminal, relevant_events, conflict_events, events_last_7d, anomaly_ratio, energy_exposure, pulse_level, ais_coverage, and up to 3 recent_events. A summary block totals the window.

