Developers and agents

Everything the site shows is also data. A read-only JSON API, a remote MCP server and static feeds serve the same documents the pages read, so they never disagree. Public, no key, CORS open. Please cache: responses are good for about five minutes.

Start here

curl https://ohmega.monster/api/v1/index
curl https://ohmega.monster/api/v1/daily/geopolitics/latest
curl "https://ohmega.monster/api/v1/pulses?band=severe"
curl "https://ohmega.monster/api/v1/statements?actor=IR&since=2026-10-01"
curl "https://ohmega.monster/api/v1/search?q=hormuz"

Every response is {data, meta}. meta.as_of is how fresh the data is, meta.cite_as the canonical page to cite, meta.source the document schema, meta.license the terms. Lists take limit (max 200) and cursor; meta.next is the next page's URL. Errors are {error:{code,message}} with a 4xx status.

Spec: OpenAPI 3.1. Machine guides: llms.txt and llms-full.txt. Poll /api/v1/changes (or /data/changes.json) to see what moved without re-reading everything.

Rate limits. Per client address: the REST API allows a burst of 40 and 120 requests a minute, the MCP endpoint a burst of 30 and 60 a minute. Over the limit you get 429 with Retry-After (seconds); X-RateLimit-Limit and X-RateLimit-Remaining come with every reply. The corpus tools (entity, about, timeline, related, series, search) answer from server-built views and put their provenance in meta.provenance and the kinds of number they hold in meta.basis.

Endpoints

GETWhat it returns
/api/v1/indexWhat exists: every endpoint, the data model and how fresh the desk is.
/api/v1/daily/{domain}/{date}One daily report (sections per theater, developments with sources and verification, on-the-record statements, sweep, outlook). date is YYYY-MM-DD or 'latest'.
/api/v1/daily/{domain}The newest daily report of a domain (alias of /daily/{domain}/latest).
/api/v1/theatersTheaters under watch (a theater is one running situation). heat = how much it is in the news, not how bad it is. Params: domain, q, limit, cursor.
/api/v1/theaters/{id}One theater's living dossier: current assessment, timeline with sources and verification, places, actors, Pulses, forecasts, statements.
/api/v1/briefs/{slug}A brief: the deep analysis of one theater (timeline, indicators, competing explanations, scored judgments).
/api/v1/pulsesPulses: persistent 0-100 readings of one question about the world, with band and confidence. History is on the item. Params: band, status, q, limit, cursor.
/api/v1/pulses/{id}One Pulse with its definition and the full reading history (every reading: date, mode, position, decision, reasoning).
/api/v1/articlesPublished articles, newest first (metadata only). Params: tag, q, limit, cursor.
/api/v1/articles/{slug}One article: markdown, graded claims with sources, corrections, how to cite.
/api/v1/statementsWho said what: the on-the-record ledger (exact quotes only when quote is set). A statement proves it was said, not that it is true. Params: actor, since, signal, limit, cursor.
/api/v1/actorsActors (state profiles). Params: q, limit, cursor.
/api/v1/actors/{iso}One state's power profile: leaders, population, economy, trade, energy, military (each figure with year, rank and source), recent statements, the theaters and Pulses it is in.
/api/v1/instrumentsMeasured series (ship transits, prices, storage...): latest value, freshness and source. Params: limit, cursor.
/api/v1/instruments/{id}One measured series: latest value, changes over horizons, 'unusual' flag and recent points, with its source URL.
/api/v1/live/eventsCurrent live events from public feeds (internet outages, earthquakes, military aircraft, fire hotspots), each with its source URL. Relayed, not verified by Ohmega. Params: kind, since, severity, limit, cursor.
/api/v1/anomaliesWhere live ships, aircraft and satellite fire detections depart from Ohmega's own learned normal for that place and hour of the week (e.g. tankers 60% below normal in the Strait of Hormuz for 18 h), with ratio, duration, confidence and a plain sentence. Original analysis (ohmega_derived); coverage gaps are screened out. Params: layer, direction, active, country, since, limit, cursor.
/api/v1/calendarWhat is coming: dated upcoming items (elections and referendums, central-bank decisions, data releases, commodity reports, summits, courts, AI and tech events, launches, our markets' resolution dates, deadlines our own reports named), soonest first and merged across sources, each with a topic, an importance, a grade and its sources. A date is a plan, not an outcome. Params: kind, topic, country, situation, grade, confidence, min_importance, routine, days, limit, cursor.
/api/v1/sanctionsSanctions designations and delistings on the US OFAC SDN, UK and EU lists, found by comparing each list with its previous copy: who, what kind (person, entity, vessel, aircraft), programme, countries, date and the list it came from. Newest first. Params: list, action, type, country, since, limit, cursor.
/api/v1/attacksThe attack log: attacks, clashes and mass-violence events (and humanitarian reports) from GDELT, ACLED, UCDP and ReliefWeb in one schema: when, where (lat/lon, country), parties, kind, fatalities where the source states them, the source and how it was coded (machine, curated, report). Ohmega's own count of what was reported since it began collecting: a minimum. Carries provenance (basis, coverage note, collecting-since) on the response and every row. Params: type, source, coding, country, days, since, limit, cursor.
/api/v1/gnssGPS/GNSS interference zones: one-degree cells where an unusual share of aircraft report poor navigation accuracy (ADS-B NACp), with severity, a new/intensifying flag against the cell's own history, and a cross-check against GPSJam's independent daily file. Ohmega's own estimate (basis our_estimate, a minimum, with the date collection began) plus GPSJam's top band (third_party). Params: source, severity, flag, country, limit, cursor.
/api/v1/maritimeVessel behaviour events Ohmega derived from the AIS it hears: ships that went silent where others kept being heard, ship-to-ship encounters in open water, identity changes (renames, IMO or flag changes), vessels matching a sanctions list, and long dwells over chokepoints and cable corridors. Each has a reason, a confidence and its evidence points. A pattern seen, never a finding of intent. Params: kind, active, flag, area, imo, mmsi, min_confidence, since, limit, cursor.
/api/v1/satelliteSatellite watch: places the desk tracks (struck or damaged assets, places in today's developments, chokepoints) with a before and after Sentinel-2 chip of the same ground, a change score and night lights against the site's own history. Ohmega's own computation: a machine signal that pixels differ, never an interpretation; a cloudy pair is inconclusive, and a site with little history is 'learning'. Every judgement carries basis, method_note, baseline_since and n_obs. Params: label, kind, country, limit, cursor.
/api/v1/track-recordOhmega's reality check: its own probability forecasts on Polymarket markets (made blind to the price, stored immutably) scored against the market's price at the same moment. Brier score and log loss for both, calibration, open paper positions, resolved markets including the misses. PAPER ONLY, not financial advice.
/api/v1/ai-benchmarksFrontier AI model scores across public benchmarks (Epoch AI hub, SWE-bench, LMArena): the best score so far, the frontier over time, open-weights against closed, per-lab series and how close each benchmark is to saturation. Measured scores only in the series; lab-claimed scores are listed apart as `claimed`. Without a filter: one summary row per benchmark. Params: benchmark, lab.
/api/v1/assetsGeolocated places (power plants, substations, refineries, fuel depots, ports, airbases, bases, dams) with the latest thing said about their state and by whom. A claimed strike is a party's claim, not a confirmation. Give at least one filter. Params: bbox, type, country, status, has_events, limit, cursor.
/api/v1/assets/{id}One place and its full status history: every dated event with the party who said it, confidence and source URLs.
/api/v1/grid/{iso}Ohmega's grid-impact rollup for a country: installed generating capacity (WRI/OSM) and the share claimed struck, reported damaged, confirmed damaged or destroyed and restored over 7 and 30 days, split by fuel, plus the affected plants. Claimed and confirmed are separate and overlap. Original analysis (ohmega_derived).
/api/v1/searchText search over titles, headlines and names of articles, theaters, Pulses, briefs, daily reports and actors, and over the corpus index: every country, organisation, person, place, vessel, lab, model and situation by name or alias (type=entity) and the titles of published documents (type=document). Names and titles only, never document bodies. Params: q, type, limit, cursor.
/api/v1/entityWho or what a name is, from the corpus: aliases, counts, the latest status, typed relations (head of state, affiliated with, stance...), what it is most connected to, its measured series (each with a basis) and the newest documents, claims and events with their sources. A country, an organisation, a person, a place, a vessel, a lab, a model or a situation. Ambiguous names return alternatives; a country wins over a same-named place. Params: name, key.
/api/v1/aboutEverything the corpus holds about an entity since a date: documents (dailies, briefs, profiles, statements, articles), claims (with grounding, confidence and their source URLs) and events, newest first, each with the product and record it came from. Params: entity, key, since, kinds, limit.
/api/v1/timelineAn entity's documents and events in date order (oldest first); a development repeated by several reports appears once. Params: entity, key, since, limit.
/api/v1/relatedWhat an entity is most connected to and why: typed edges x3, shared claims x2, shared events x1.5, shared documents x1 (the parts are shown), plus the typed relations with their evidence. Params: entity, key, kinds, limit.
/api/v1/seriesA measured series from the corpus with its unit and basis (official, our_count, our_derived, model, reported): one metric across the entities that have it (gdp, population, chk_hormuz_transits, bench.* ...), or an entity's own series (pass entity or key). A metric name that matches several returns the candidates. Params: metric, entity, key, since, limit, cursor.
/api/v1/changesWhat changed in the last 30 days, newest first: Pulse moves, new briefs and daily reports, forecasts made and resolved. Poll this to stay current. Params: since, type, limit, cursor.
/api/v1/forecastsEvery forecast we made (probability, horizon, resolution criteria, status) and the public Brier scorecard. Params: status, limit, cursor.

How to read it

MCP server

A remote Model Context Protocol server at https://ohmega.monster/api/mcp (Streamable HTTP, stateless, JSON replies, no sessions). Nine read-only tools; each result is compact JSON with as_of, cite_as and the license.

Add it to a client

{ "mcpServers": { "ohmega": { "type": "http", "url": "https://ohmega.monster/api/mcp" } } }

Try it without a client:

curl -s https://ohmega.monster/api/mcp \
  -H 'content-type: application/json' -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_daily","arguments":{}}}'

Tools

ToolWhat it does
get_dailyThe day's intelligence report: per theater, what happened (developments with sources and a researched/reported verification), who said what, outlook and what to watch, plus Pulse positions. Defaults to the newest geopolitics report.
list_theatersTheaters (running situations) under watch, with heat (how much in the news, not how bad) and escalation direction. Use get_theater for a dossier.
get_theaterOne theater's living dossier: current assessment, timeline (each row with sources and verification), places, actors, Pulses, forecasts, recent statements.
list_pulsesPulses: persistent 0-100 readings of one question about the world (0 is the calm end, 100 the extreme end; see low_end/high_end), with band, confidence and 7-day velocity. Early readings, still calibrating.
get_pulseOne Pulse: its definition, current reading, history and the most recent readings with reasoning (audit readings are blind checks that never move the Pulse).
searchText search over titles, headlines and names of articles, theaters, Pulses, briefs, daily reports and actors, and over the corpus: any country, organisation, person, place, vessel, lab, model or situation by name or alias (type entity; open one with the entity tool) and document titles (type document). Names and titles only, not document bodies. Returns ids and citable URLs; fetch details with the matching tool or the result's api_url.
entityWho or what a name is, from the corpus behind the reports: a country, organisation, person, place, vessel, lab, model or situation. Returns aliases, counts, the latest status, typed relations (head of state, affiliated with, stance...), what it is most connected to, its measured series (each with a basis: official, our_count, our_derived, model, reported) and the newest documents, claims and events with their sources. An ambiguous name returns alternatives (pass key to choose); a country wins over a same-named place. Use about, timeline, related and series for more.
aboutDocuments (dailies, briefs, profiles, statements, articles), claims (with grounding, confidence and source URLs) and events about an entity, newest first, each with the product and record it came from. The corpus holds the newest material per entity (about 15 documents, 10 claims, 15 events); the result says when a since is older than that.
timelineAn entity's documents and events in date order (oldest first), each with sources; a development repeated across reports appears once.
relatedWhat an entity is most connected to and why: typed edges x3, shared claims x2, shared events x1.5, shared documents x1 (the parts are shown, so you can see whether a link was stated or only co-occurred), plus the typed relations with their evidence.
seriesA measured series with its unit and basis (official = published by the body that measures it; our_count = a minimum from our receivers; our_derived = our computation; model = a model's reading; reported = a figure a source cited): one metric across the entities that have it (gdp, population, chk_hormuz_transits, bench.* ...), or one entity's own series (pass entity or key). A name matching several metrics returns the candidates.
get_statementsWho said what: statements by named people and bodies (exact quote only when 'quote' is set, else a paraphrase), with signal (threat, warning, offer...), stance and source URL. A statement proves it was said, not that it is true.
get_live_eventsCurrent live events from public feeds: internet outages, earthquakes, military aircraft, fire hotspots. Each has a source URL; relayed, not verified by Ohmega.
get_live_anomaliesOhmega's own analysis of where live ship, aircraft and satellite-fire counts depart from their learned normal for that place and hour of the week: each with place, how far (ratio and a plain sentence), how long, confidence and whether the baseline is still learning. Original analysis (ohmega_derived), not reported by any source; it shows a pattern departs from normal, not why. Receiver-coverage gaps are screened out.
get_calendarDated upcoming items, soonest first and merged across sources: elections and referendums, central-bank decisions, data releases (GDP, PCE, jobs), commodity reports, summits, court hearings, AI and tech events, launches, resolution dates of the prediction markets we track, and deadlines Ohmega's own reports named. Each has a topic, an importance (3 major .. 1 routine), a grade (official, announced, estimated, unconfirmed) and its source URLs. A date is a plan, not an outcome.
get_sanctionsWho was added to or removed from the US OFAC SDN list, the UK Sanctions List and the EU consolidated financial sanctions list, found by comparing each list with its previous copy: name, kind (person, entity, vessel, aircraft), programme, countries, date, and the list it came from. A listing is an act of the publishing government, not a finding of guilt.
get_attack_eventsAttacks, clashes and mass-violence events reported by GDELT (machine-coded from news), ACLED and UCDP (researcher-curated) and ReliefWeb (humanitarian reports), in one schema: date, place and coordinates, country, parties, kind, fatalities where a source states them, source and coding. Ohmega's own count of what was reported since it began collecting, so a minimum; the response carries provenance (basis, coverage note, collecting-since). Machine-coded rows can duplicate or misplace an event and never carry casualties.
get_gnss_interferenceWhere aircraft report poor navigation accuracy, a sign of GPS jamming or spoofing: one-degree cells with severity, a new/intensifying flag against the cell's own history and a cross-check against GPSJam. Ohmega's own estimate from ADS-B (basis our_estimate; a minimum, since only aircraft heard by volunteer receivers where Ohmega samples are seen; the response states since when) plus GPSJam's highest band. Not proof of who is jamming.
get_maritime_behaviourOhmega's own analysis of the ship positions it hears (AIS): vessels that went silent where other ships kept being heard (ais_gap), ship-to-ship encounters in open water (sts), identity changes (renames, IMO or flag changes), vessels matching a sanctions designation (sanctioned) and long dwells over chokepoints or cable corridors (loiter). Each event has why_flagged, a confidence and evidence points. Original analysis (ohmega_derived), not reported by any source: a pattern seen, never a finding of intent. Receiver-coverage gaps, ports and anchorage crowds are screened out.
get_assetsGeolocated infrastructure (power plants, substations, refineries, fuel depots, ports, airbases, bases, dams) with the latest dated statement about its state and WHO made it: claimed_struck is a party's claim, reported_damaged and confirmed_damaged come from others. Filter by bbox, type, country, status or has_events; pass id for one place's full history with sources.
get_grid_impactOhmega's own analysis of how much of a country's installed generating capacity has been claimed struck, reported damaged, confirmed damaged or destroyed, and restored over 7 and 30 days, by fuel, with the affected plants. Claimed and confirmed are separate tallies that overlap: never add them. Capacity is nameplate, not lost output.
get_instrumentA measured series (ship transits through chokepoints, prices, storage...): latest value, change over horizons, whether it is unusual against its own history, with source. Omit id to list the available series.

Citing

Give cite_as and the as_of date. Article claim: article URL and claim id. Pulse: id and reading date. Forecast: its fc_ id.

Terms

Our claims, summaries, grades, Pulses and forecasts may be quoted with a link. Source texts belong to their publishers: follow the source URLs, we do not republish them. No warranty. Today the API is open with no key; heavy use may be rate limited, and a keyed tier may follow.