Monitoring
Public API · no key · no rate limit · OK to embed

API

All Monitoring data is open and free to use.

Read endpoints below. Stable JSON. Vercel-edge cached. Cite us, embed us, build on us.

Quick examples

curl
curl https://monitoringroom.com/api/msi
JavaScript
const res = await fetch("https://monitoringroom.com/api/msi");
const { score, band, trend } = await res.json();
console.log(`MSI ${score} (${band}, ${trend})`);
Python
import requests
data = requests.get("https://monitoringroom.com/api/msi").json()
print(f"MSI {data['score']} ({data['band']}, {data['trend']})")

Index

GET/api/msi

Current MSI score with components, weights, and trend.

{"score":6.4,"trend":"rising","delta":0.6,"band":"escalating","components":{"volume":0.62,"velocity":0.71,"spread":0.55,"sentiment":0.5,"crossCorr":0.4},"weights":{...},"asOf":"2026-05-23T14:32:00.000Z","history":[...60 samples]}

Cache: 60s edge + 120s SWR

GET/api/msi/history

Full 24h rolling MSI history (1440 samples max).

{"samples":[{"t":1747918320000,"score":6.4},...],"count":1440,"asOf":"2026-05-23T14:32:00.000Z","persistent":true}

Cache: no-cache · uses Upstash KV

Situations

GET/api/situations

List of currently active Situations, sorted by level.

[{"id":"seismic-us7000abcd","title":"Seismic event — ...","status":"developing","level":6.9,"tier":3,"category":"seismic","signals":[...],"source":"USGS","updatedAt":1747918320000,"href":"https://earthquake.usgs.gov/..."}]

Cache: 60s edge + 120s SWR

GET/api/situations/[id]

Single Situation by id. 404 if no longer active.

(same shape as a single array element above)

Cache: 60s edge

GET/api/situations/[id]/narration

AI-generated context paragraph + historical comparison + watch-next.

Tier 3 (sober) narration uses stricter editorial guardrails — no metaphors, no 'dramatic'/'wild'.

{"whatWeKnow":"...","historicalComparison":"...","watchNext":"...","model":"claude-sonnet-4-5","tier":3,"generatedAt":"..."}

Cache: 5min edge + 10min SWR · 1h Upstash key

GET/api/situations/[id]/markets

Polymarket questions the Situation could plausibly move (confidence ≥ 0.6).

{"matches":[{"question":"...","probability":0.41,"volume24hr":124000,"slug":"...","category":"Geopolitics","polymarketUrl":"...","confidence":0.78,"reasoning":"..."}],"model":"claude-haiku-4-5","candidateCount":25,"generatedAt":"..."}

Cache: 5min edge · 30min Upstash key for matches, 60s for odds

GET/api/situations/[id]/forecast

Editorial direction + horizon + confidence. Not financial advice.

{"horizon":"6h","direction":"escalating","confidencePct":68,"reasoning":"...","model":"claude-sonnet-4-5","tier":3,"generatedAt":"..."}

Cache: 5min edge · 30min Upstash key

GET/api/situations/[id]/bias

Source tone distribution for headline-cluster Situations only.

Returns 422 if the Situation is not a headline cluster (categories other than 'headlines' don't have a corpus to audit).

{"distribution":{"concerned":0.68,"neutral":0.22,"celebratory":0.10},"articles":[{"domain":"...","title":"...","tone":"concerned"}],"totalSampled":20,"model":"claude-sonnet-4-5","generatedAt":"..."}

Cache: 10min edge · 1h Upstash key

Feeds

GET/api/alerts

Chronological merged feed across all sources (breaking, quakes, cyber, hacks, space launches).

[{"id":"...","source":"QUAKE","title":"...","url":"...","timestamp":1747918320000,"tag":"M5.4"}]

Cache: 60s edge + 180s SWR

GET/api/map-pins

Geo-located pins for all active flights, recent earthquakes, and the ISS.

{"pins":[{"id":"...","kind":"FLIGHT","lat":40.6,"lon":-73.8,"label":"...","tag":"..."}],"counts":{"flights":80,"quakes":5,"iss":1},"asOf":"..."}

Cache: 30s edge + 60s SWR

MSI embed widget

Drop the live MSI into any blog post, news site, or dashboard. Updates every 60 seconds. Dark and light themes.

Dark theme (default, 240×80)
<iframe src="https://monitoringroom.com/embed/msi"
        width="240" height="80" frameborder="0"></iframe>
Light theme, medium size
<iframe src="https://monitoringroom.com/embed/msi?theme=light&size=medium"
        width="280" height="100" frameborder="0"></iframe>

Attribution

No attribution required, but linking back to monitoringroom.com keeps the brand asset honest. Cite as "Monitoring Situation Index" on first reference and "MSI" thereafter.

Upstream data

Built on free, commercial-OK feeds: GDELT 2.0, CoinGecko, stooq, USGS, NIST NVD, WhereTheISS, Launch Library 2, DefiLlama, Polymarket, AIS. Map basemap by OpenFreeMap + OpenStreetMap contributors. We don't paywall anyone else's data — see /msi for the full methodology.