Monitoring API — free, no key required
All Monitoring data is open and free to use.
Read endpoints below. Stable JSON, Vercel-edge cached, no key and no rate limit. Cite us, embed us, build on us.
Quick examples
curl https://monitoringroom.com/api/msi
const res = await fetch("https://monitoringroom.com/api/msi");
const { score, band, trend } = await res.json();
console.log(`MSI ${score} (${band}, ${trend})`);import requests
data = requests.get("https://monitoringroom.com/api/msi").json()
print(f"MSI {data['score']} ({data['band']}, {data['trend']})")Index
/api/msiCurrent MSI score with components, weights, sources and trend.
Live response, 2026-10-02 23:51 UTC · history: first 2 of 60
{"score":3.2,"trend":"flat","delta":0,"band":"background","components":{"market":0.09524094162661811,"seismic":0.425,"velocity":0.5191285022008629},"weights":{"market":0.4,"seismic":0.35,"velocity":0.25},"asOf":"2026-10-02T23:49:13.611Z","history":[{"t":1790980513364,"score":3.2},{"t":1790980573395,"score":3.2}],"persistent":true,"measured":true,"sources":[{"id":"coingecko","label":"CoinGecko","fetchedAt":1790984953123,"generatedAt":null,"state":"fresh","basis":"fetched","ageMs":488,"note":"No upstream timestamp; measured from our fetch 0s ago."},{"id":"usgs","label":"USGS","fetchedAt":1790984953611,"generatedAt":1790984953000,"state":"fresh","basis":"generated","ageMs":611,"note":"Newest datum 0s old. Most recent M4.5+ event 2h before this fetch; 17 in the last 24h."}],"freshness":"fresh","missingInputs":[],"formula_version":"v2.1","methodology_url":"https://monitoringroom.com/msi/methodology","schema_url":"https://monitoringroom.com/api/msi/schema"}Cache: 60s edge · 24h SWR · 30s browser
/api/msi/historyEvery measured sample since 2026-09-22 is kept indefinitely — read any window with /api/msi/history?from= — and the newest 1,440 also sit in a ring that serves the default /api/msi/history fast. The retained MSI series. Add ?from= and ?to= (ms epoch or ISO-8601) for any window, ?resolution=hourly|daily to downsample, ?since= for new samples only, ?format=csv for a spreadsheet.
Live response, 2026-10-02 23:51 UTC · samples: first 2 of 1,440
{"samples":[{"t":1790548713659,"score":2.2,"v":"v2.1"},{"t":1790548773674,"score":2.2,"v":"v2.1"}],"count":1440,"asOf":"2026-10-02T23:50:13.324Z","persistent":true,"window":{"oldest":"2026-09-27T22:38:33.659Z","newest":"2026-10-02T23:49:13.611Z","span_hours":121.18,"cap_samples":1440,"cadence":"hourly floor + demand"},"schema_url":"https://monitoringroom.com/api/msi/history/schema","formula_version":"v2.1","as_of":"2026-10-02T23:49:13.611Z","first_t":1790548713659,"last_t":1790984953611,"since":null,"licence_url":"https://monitoringroom.com/licence","methodology_url":"https://monitoringroom.com/msi/methodology","source":"ring","retention":{"ring_samples":1440,"archive_since":"2026-09-22T09:10:15.174Z"},"resolution":"raw","range":null}Cache: 60s edge · 24h SWR · 30s browser
/api/msi/history/schemaJSON Schema for the /api/msi/history envelope. Static — pin it.
Live response, 2026-10-02 23:51 UTC · required: first 2 of 17 · nested lists cut to 2 · long text shortened
{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://monitoringroom.com/api/msi/history/schema","title":"Monitoring Situation Index (MSI) — retained history","description":"The envelope served by https://monitoringroom.com/api/msi/history: by default the ring — the newest 1440 MSI samples by …","x-methodology":"https://monitoringroom.com/msi/methodology","x-licence":"https://monitoringroom.com/licence","type":"object","required":["samples","count"],"additionalProperties":true,"properties":{"samples":{"type":"array","description":"Retained measured readings, oldest first. At most `retention.ring_samples` on the ring path; unbounded on the archive pa…","items":{"type":"object","required":["t","score"],"additionalProperties":false,"properties":{"t":{"type":"number","description":"Sample time, milliseconds since the Unix epoch. When downsampled: the UTC bucket start."},"bucket_n":{"type":"integer","minimum":1,"description":"Downsampled only: raw samples averaged into this bucket (`score` is their mean, `v` the newest one's version)."},"score":{"type":"number","minimum":0,"maximum":10,"description":"The MSI at `t`, 0.0–10.0."},"v":{"type":["string","null"],"pattern":"^v\\d+(\\.\\d+)*$","description":"Formula version in force at `t`, derived from the dated changelog at /msi/methodology (an entry's date is read as 00:00Z…"}}}},"count":{"type":"integer","minimum":0,"description":"Length of `samples`."},"asOf":{"type":"string","format":"date-time","description":"When this response was generated (not the newest sample — see `window.newest`)."},"persistent":{"type":"boolean","description":"True when the history is Redis-backed rather than memory-only."},"schema_url":{"type":"string","const":"https://monitoringroom.com/api/msi/history/schema","description":"This schema."},"formula_version":{"type":"string","pattern":"^v\\d+(\\.\\d+)*$","description":"The formula in force NOW (the newest changelog entry) — the same value /api/msi reports. Older samples may carry an olde…"},"as_of":{"type":["string","null"],"format":"date-time","description":"Time of the newest sample in `samples` — the moment the data is as of. null when `samples` is empty. (`asOf` is when the…"},"first_t":{"type":["number","null"],"description":"`t` of the first sample in `samples`; null when empty."},"last_t":{"type":["number","null"],"description":"`t` of the last sample in `samples`; null when empty. Pass it back as `?since=` to fetch only newer samples."},"since":{"type":["integer","null"],"minimum":0,"description":"The `?since=` filter applied (samples with t > since), or null for the full series."},"licence_url":{"type":"string","description":"Reuse terms for the series."},"methodology_url":{"type":"string","description":"The formula, input by input, with the dated changelog."},"source":{"type":"string","enum":["ring","archive"],"description":"\"ring\": the newest `retention.ring_samples` samples (default). \"archive\": the never-trimmed monthly archive, read when `…"},"retention":{"type":"object","required":["ring_samples","archive_since"],"additionalProperties":false,"properties":{"ring_samples":{"type":"integer","const":1440,"description":"The ring keeps the newest this-many samples; older ones are trimmed from it."},"archive_since":{"type":["string","null"],"format":"date-time","description":"Oldest sample in the archive; every sample from then on is kept. null when nothing is archived yet."}}},"resolution":{"type":"string","enum":["raw","hourly"],"description":"`raw`, or the UTC bucket size of `?resolution=`."},"range":{"type":["object","null"],"required":["from","to"],"additionalProperties":false,"description":"The applied archive window (inclusive), or null on the ring path.","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}},"window":{"type":"object","required":["oldest","newest"],"additionalProperties":false,"description":"The MEASURED span of `samples`, published beside the cap so the payload implies no bound it does not enforce.","properties":{"oldest":{"type":["string","null"],"format":"date-time","description":"Oldest retained sample; null when the series is empty."},"newest":{"type":["string","null"],"format":"date-time","description":"Newest retained sample; null when the series is empty."},"span_hours":{"type":["number","null"],"minimum":0,"description":"Hours between oldest and newest; null (never 0) for fewer than two samples."},"cap_samples":{"type":"integer","const":1440,"description":"The enforced bound: a count of samples."},"cadence":{"type":"string","description":"How samples arrive — why `cap_samples` does not imply `span_hours`."}}}}}Cache: 1h edge · 24h SWR · 5min browser
/api/msi/schemaJSON Schema for the /api/msi payload. Static — pin it.
Every /api/msi response reports its own formula_version, methodology_url and schema_url, so a figure can be traced to the maths that produced it. Reuse terms and the attribution line are at /licence.
Live response, 2026-10-02 23:51 UTC · required: first 2 of 10 · nested lists cut to 2 · long text shortened
{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://monitoringroom.com/api/msi/schema","title":"Monitoring Situation Index (MSI) — current reading","description":"The payload served by https://monitoringroom.com/api/msi. One observable index from 0.0 to 10.0 describing how much is h…","x-formula-version":"v2.1","x-methodology":"https://monitoringroom.com/msi/methodology","x-licence":"https://monitoringroom.com/licence","type":"object","required":["score","trend"],"additionalProperties":true,"properties":{"score":{"type":"number","minimum":0,"maximum":10,"description":"The index, 0.0–10.0, rounded to one decimal. Only a measurement when `measured` is true."},"trend":{"type":"string","enum":["rising","falling"],"description":"Direction against the previous stored sample (±0.15 deadband)."},"delta":{"type":"number","description":"Change against the previous stored sample, one decimal."},"band":{"type":"string","enum":["calm","background"],"description":"Band the score falls in: <2, <4, <6, <8, else intense."},"components":{"type":"object","description":"Each input normalised to 0–1 before weighting.","required":["market","seismic"],"properties":{"market":{"type":"number","minimum":0,"maximum":1,"description":"Average absolute BTC/ETH 24h move ÷ 8 (CoinGecko)."},"seismic":{"type":"number","minimum":0,"maximum":1,"description":"M4.5+ earthquakes in the last 24h ÷ 40 (USGS)."},"velocity":{"type":"number","minimum":0,"maximum":1,"description":"Drift of the live base against the index's own trailing baseline. 0.5 is neutral and is what is reported until three sam…"}}},"weights":{"type":"object","description":"Weights applied to `components`. Sum to 1.","required":["market","seismic"],"properties":{"market":{"type":"number"},"seismic":{"type":"number"},"velocity":{"type":"number"}}},"asOf":{"type":"string","format":"date-time","description":"When this pass was computed. Not when you requested it."},"history":{"type":"array","description":"Recent observed samples, oldest first, for a sparkline. Observed points only — the series pauses rather than backfilling…","items":{"type":"object","required":["t","score"],"properties":{"t":{"type":"integer","description":"Epoch milliseconds."},"score":{"type":"number","minimum":0,"maximum":10}}}},"persistent":{"type":"boolean","description":"True when the history is Redis-backed rather than memory-only."},"measured":{"type":"boolean","description":"TRUE only when every weighted input was observed on this pass. When false, `score` was computed with an input missing an…"},"sources":{"type":"array","description":"Per-input freshness, derived at response time.","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"state":{"type":"string","enum":["fresh","aging"]},"note":{"type":"string"}}}},"freshness":{"type":"string","enum":["fresh","aging"],"description":"Worst state across `sources`. An empty set reads unknown, never fresh."},"missingInputs":{"type":"array","items":{"type":"string"},"description":"Labels of inputs that were not observed on this pass."},"formula_version":{"type":"string","const":"v2.1","description":"The formula that produced `score`. The same datum the /msi Dataset structured data publishes; the two are templated from…"},"methodology_url":{"type":"string","format":"uri","description":"Where the formula is written out input by input."},"schema_url":{"type":"string","format":"uri","description":"This document."}}}Cache: 1h edge · 24h SWR · 5min browser
/api/badge/msi.svgThe live MSI as a small SVG badge for READMEs, Notion and blogs. An image, so it works where an iframe is blocked.
Cache: 60s edge · 24h SWR · 30s browser
Situations
/api/situationsCurrently active Situations, sorted by level.
Live response, 2026-10-02 23:51 UTC · items: first 2 of 5 · nested lists cut to 2
[{"id":"cyber-CVE-2026-102427","title":"Critical vulnerability — CVE-2026-102427","status":"developing","level":10,"tier":2,"category":"cyber","signals":[{"label":"CVSS","value":"10.0"},{"label":"Severity","value":"CRITICAL"}],"source":"NIST NVD","updatedAt":1790785026623,"href":"https://nvd.nist.gov/vuln/detail/CVE-2026-102427"},{"id":"seismic-us6000tz62","title":"Seismic event — 165 km SSE of Vilyuchinsk, Russia","status":"developing","level":7.5,"tier":3,"category":"seismic","signals":[{"label":"Magnitude","value":"M5.8"},{"label":"Other M5.0+ in 24h","value":"8"}],"source":"USGS","updatedAt":1790958881010,"href":"https://earthquake.usgs.gov/earthquakes/eventpage/us6000tz62"}]Cache: 60s edge · 24h SWR · 30s browser
/api/situations/[id]One Situation by id, in the same shape as an element of /api/situations. 404 once it is no longer active.
Live response, 2026-10-02 23:51 UTC · signals: first 2 of 3
{"id":"cyber-CVE-2026-102427","title":"Critical vulnerability — CVE-2026-102427","status":"developing","level":10,"tier":2,"category":"cyber","signals":[{"label":"CVSS","value":"10.0"},{"label":"Severity","value":"CRITICAL"}],"source":"NIST NVD","updatedAt":1790785026623,"href":"https://nvd.nist.gov/vuln/detail/CVE-2026-102427"}Cache: 60s edge · 24h SWR · 30s browser
Prediction markets
/api/us-midterms-2026Chamber-control markets for the 2026 US midterms.
Market-implied probabilities from Polymarket, information only — never betting advice.
Live response, 2026-10-02 23:51 UTC · markets: first 2 of 10
{"markets":[{"label":"Republicans Sweep","question":"2026 Balance of Power: R Senate, R House","chamber":"Senate","probability":0.075,"volume24hr":315936.805016,"volumeTotal":"4968082.973832002","slug":"2026-balance-of-power-r-senate-r-house-537","polymarketUrl":"https://polymarket.com/event/balance-of-power-2026-midterms"},{"label":"Republican Party","question":"Will the Republican Party control the House after the 2026 Midterm elections?","chamber":"House","probability":0.075,"volume24hr":181570.78893899996,"volumeTotal":"5675531.548528001","slug":"will-the-republican-party-control-the-house-after-the-2026-midterm-elections","polymarketUrl":"https://polymarket.com/event/which-party-will-win-the-house-in-2026"}],"asOf":"2026-10-02T23:50:14.056Z","source":"Polymarket"}Cache: 60s edge · 24h SWR · 30s browser
/api/world-cupWinner markets for the 2026 World Cup. Empty once Polymarket closes the event.
Market-implied probabilities from Polymarket, information only — never betting advice.
Live response, 2026-10-02 23:51 UTC
{"markets":[],"asOf":"2026-10-02T23:50:14.099Z","source":"Polymarket"}Cache: 60s edge · 24h SWR · 30s browser
/api/predictionsTop 50 open Polymarket markets by 24h volume, with a category.
Market-implied probabilities from Polymarket, information only — never betting advice.
Live response, 2026-10-02 23:51 UTC · items: first 2 of 50
[{"question":"Will there be no change in Fed interest rates after the October 2026 meeting?","probability":0.825,"volume24hr":976539.901192,"volumeTotal":"7161114.568011003","slug":"will-there-be-no-change-in-fed-interest-rates-after-the-october-2026-meeting-20260617190324031","category":"Politics","polymarketUrl":"https://polymarket.com/event/fed-decision-in-october-20260617190323537","endDate":"2026-10-29T03:59:00Z"},{"question":"Will Luiz Inácio Lula da Silva win the 2026 Brazilian presidential election?","probability":0.435,"volume24hr":969535.484147,"volumeTotal":"14038165.85926399","slug":"will-luiz-incio-lula-da-silva-win-the-2026-brazilian-presidential-election","category":"Politics","polymarketUrl":"https://polymarket.com/event/brazil-presidential-election","endDate":"2026-10-05T03:59:00Z"}]Cache: 60s edge · 24h SWR · 30s browser
/api/accuracyThe accuracy ledger behind /prediction-markets/accuracy: each recorded price with its venue, as_of and source_url; outcome stays null until a resolution is recorded from a cited source.
Live response, 2026-10-02 23:51 UTC · entries: first 2 of 53 · nested lists cut to 2 · long text shortened
{"entries":[{"event_id":"us-house-control-2026-midterms","question":"Which party controls the US House after the 2026 midterm elections?","context":"The next long-dated market Monitoring already tracks on /us-midterms-2026. Recorded on 2026-07-20, roughly three and a h…","venues":[{"venue":"Polymarket","outcome_label":"Democratic Party","closing_price":0.845,"as_of":"2026-07-20T00:47:50Z","source_url":"https://polymarket.com/event/which-party-will-win-the-house-in-2026","source_note":"Read directly from Polymarket's public Gamma API (event which-party-will-win-the-house-in-2026, market outcomePrices) — …"},{"venue":"Polymarket","outcome_label":"Republican Party","closing_price":0.155,"as_of":"2026-07-20T00:47:50Z","source_url":"https://polymarket.com/event/which-party-will-win-the-house-in-2026","source_note":"Read directly from Polymarket's public Gamma API (event which-party-will-win-the-house-in-2026, market outcomePrices) — …"}],"resolution_status":"awaiting","outcome":null,"outcome_detail":null,"resolved_at":null,"expected_resolution":"2026-11-03T00:00:00Z","sources":[{"label":"Polymarket — Which party will win the House in 2026?","url":"https://polymarket.com/event/which-party-will-win-the-house-in-2026","as_of":"2026-07-20"}],"notes":["Only one venue is recorded. Kalshi's public elections API listed no open 2026 House-control market when this entry was w…","The two figures are separate binary contracts inside one Polymarket event group, not two independent readings. They curr…"]},{"event_id":"will-luiz-incio-lula-da-silva-win-the-2026-brazilian-presidential-election","question":"Will Luiz Inácio Lula da Silva win the 2026 Brazilian presidential election?","context":"Enrolled automatically before resolution so the pre-event price exists at all. The outcome is not recorded here and is n…","venues":[{"venue":"Polymarket","outcome_label":"Yes","closing_price":0.385,"as_of":"2026-09-22T06:00:12.303Z","source_url":"https://polymarket.com/event/brazil-presidential-election","source_note":"read from the venue's public market feed at as_of"}],"resolution_status":"awaiting","outcome":null,"outcome_detail":null,"resolved_at":null,"expected_resolution":"2026-10-04T00:00:00.000Z","sources":[{"label":"Polymarket market page","url":"https://polymarket.com/event/brazil-presidential-election","as_of":"2026-09-22T06:00:12.303Z"}],"notes":["Enrolled automatically; one venue only. A single-venue row cannot show cross-venue divergence.","outcome_label \"Yes\" is the venue's first outcome; the price is that side's implied probability."],"enrolled_auto":true}],"counts":{"total":53,"awaiting":50,"resolved":3,"enrolled_auto":49,"window":{"first_as_of":"2026-07-17","last_as_of":"2026-09-25"},"tracked_markets":2253},"asOf":"2026-10-02T23:48:33.169Z","disclaimer":"Recorded venue prices are observations of public real-money prediction markets, each attributed to a named source with a…"}Cache: 5min edge · 24h SWR · 150s browser
Feeds
/api/alertsChronological merged feed across all sources (breaking, quakes, cyber, hacks, space launches).
Live response, 2026-10-02 23:51 UTC · items: first 2 of 50
[{"id":"space-97c6f5e1-299e-4652-b72d-9618ac047076","source":"SPACE","title":"SpaceX — Falcon 9 Block 5 | Starlink Group 15-25","timestamp":1791673200000,"tag":"Go"},{"id":"space-a1bb0984-19d4-4b47-9bba-706d225573e2","source":"SPACE","title":"China Aerospace Science and Technology Corporation — Long March 12 | Unknown Payload","timestamp":1791573900000,"tag":"Go"}]Cache: 5min edge · 24h SWR · 150s browser
/api/map-pinsGeo-located pins for active flights, recent earthquakes, vessels and the ISS.
Live response, 2026-10-02 23:51 UTC · pins: first 2 of 86
{"pins":[{"id":"quake-us6000tz8q","kind":"QUAKE","lat":52.7302,"lon":157.5867,"label":"52 km WSW of Paratunka, Russia","tag":"M4.4"},{"id":"quake-us6000tz8l","kind":"QUAKE","lat":51.6886,"lon":159.8843,"label":"171 km SE of Vilyuchinsk, Russia","tag":"M5.0"}],"counts":{"quakes":5,"iss":1,"vessels":80},"asOf":"2026-10-02T23:50:20.023Z"}Cache: 30s edge · 24h SWR · 15s browser
/api/hacksThe DeFi exploit corpus; each slug is the incident's page at /situation/crypto-hack/<slug>. Data © DefiLlama.
Live response, 2026-10-02 23:51 UTC · hacks: first 2 of 1,292
{"source":"https://api.llama.fi/hacks","attribution":"DefiLlama — https://defillama.com/hacks","origin":"live","as_of":"2026-10-02T22:36:11.000Z","count":1292,"hacks":[{"name":"ApeCoin","slug":"apecoin","amount":820000,"dateMs":1647475200000,"chain":"Ethereum","technique":"Flashloan Governance Attack"},{"name":"Coinrail","slug":"coinrail","amount":37200000,"dateMs":1528588800000,"chain":"Ethereum","technique":"Improper Access Control"}]}Cache: regenerated every 1h
Other routes under /api serve the dashboard's own panels, sign-ups and scheduled jobs. They are not a stable contract, so they are not listed.
Data downloads
Whole series as CSV, with a column dictionary in datapackage.json. The MSI is not a forecast, a prediction, or advice.
Monitoring Situation Index — every archived sample
CSVOne row per MSI reading kept in the never-trimmed archive: the time, the score from 0 to 10, and the formula version in force.
/data/msi-archive.csv · 8,783 rows · 2026-09-22 09:10 UTC to 2026-10-25 02:01 UTC
- CoinGecko: terms could not be read (tried 2026-10-04); an input only, none of its values are in this file
- USGS: terms could not be read (tried 2026-10-04); an input only, none of its values are in this file
Licence: Creative Commons Attribution 4.0 International (CC BY 4.0). Cite as: Monitoring Situation Index (MSI), Monitoring Room, https://monitoringroom.com/msi
Odds store — sampling ledger
CSVOne row per market the odds store holds a series for: how many times we read it, on how many days, and when first and last. Prices are not included.
/data/odds-ledger.csv · 3,354 rows · 2026-08-20 00:15 UTC to 2026-10-25 02:00 UTC
- Polymarket: its terms do not allow redistribution, so none of its values are in this file (terms read 2026-10-04)
No reuse licence granted yet. Cite as: Monitoring Room odds store, https://monitoringroom.com/api-docs#data
Accuracy ledger — what was priced, and what happened
CSVOne row per venue price recorded before its event resolved: the question, the side, when we recorded it, and, once the event resolved from a cited source, whether that side happened. Observations, not forecasts. The price itself is not included.
/data/accuracy-ledger.csv · 56 rows · 2026-07-17 to 2026-09-25 06:00 UTC
- Polymarket: its terms do not allow redistribution, so none of its values are in this file (terms read 2026-10-04)
No reuse licence granted yet. Cite as: Monitoring Room accuracy ledger, https://monitoringroom.com/prediction-markets/accuracy
Need the full history, a custom cut, or a licence for commercial use? Tell us what you are building.
Full historyA custom cutCommercial licence
Opens an email to hello@monitoringroom.com. A person replies.
MSI embed widget
Drop the live MSI into any blog post, news site, or dashboard. Updates every 60 seconds. Dark and light themes. Keep the credit line — it is the only condition.
<iframe src="https://monitoringroom.com/embed/msi"
width="240" height="80" frameborder="0"></iframe>
<p style="font-size:13px"><a href="https://monitoringroom.com/msi?ref=embed">Monitoring Situation Index</a> by <a href="https://monitoringroom.com?ref=embed">Monitoring Room</a></p><iframe src="https://monitoringroom.com/embed/msi?theme=light&size=medium"
width="280" height="100" frameborder="0"></iframe>
<p style="font-size:13px"><a href="https://monitoringroom.com/msi?ref=embed">Monitoring Situation Index</a> by <a href="https://monitoringroom.com?ref=embed">Monitoring Room</a></p>Attribution
Citing the data costs nothing and needs no permission. Use "Monitoring Situation Index" on first reference, "MSI"thereafter. The embed widgets above are the one exception: each snippet ships a one-line credit in your own page's markup — keep it, and the widget is yours to use free.
Upstream data
CoinGecko · stooq · USGS · NIST NVD · WhereTheISS · Launch Library 2 · DefiLlama · Polymarket · AIS. Map: OpenFreeMap + OpenStreetMap. Methodology at /msi.