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
| GET | What it returns |
|---|---|
/api/v1/index | What 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/theaters | Theaters 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/pulses | Pulses: 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/articles | Published 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/statements | Who 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/actors | Actors (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/instruments | Measured 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/events | Current 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/anomalies | Where 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/calendar | What 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/sanctions | Sanctions 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/attacks | The 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/gnss | GPS/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/maritime | Vessel 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/satellite | Satellite 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-record | Ohmega'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-benchmarks | Frontier 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/assets | Geolocated 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/search | Text 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/entity | Who 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/about | Everything 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/timeline | An 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/related | What 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/series | A 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/changes | What 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/forecasts | Every forecast we made (probability, horizon, resolution criteria, status) and the public Brier scorecard. Params: status, limit, cursor. |
How to read it
- verification:
researchedmeans our research established it;reportedmeans another outlet reported it, a lead and not a finding. - Pulses are 0-100 readings of one question (0 the calm end, 100 the extreme end). Our reading as of
last_assessed, still calibrating, not a measurement. - Statements prove something was said, not that it is true.
quoteis exact words; otherwise a paraphrase. - Live events come from public feeds and are relayed with their source URL, not verified by us.
- Article claims carry a grade: confirmed, likely, contested, unconfirmed or speculative (a lead), opinion (attributed).
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
- Claude Code:
claude mcp add --transport http ohmega https://ohmega.monster/api/mcp - Claude (web, desktop): Settings, Connectors, Add custom connector, paste
https://ohmega.monster/api/mcp. - Other clients with Streamable HTTP (Cursor, VS Code and others): add a server of type
httpwith that URL. - Stdio-only clients: bridge it with
npx mcp-remote https://ohmega.monster/api/mcp.
{ "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
| Tool | What it does |
|---|---|
get_daily | The 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_theaters | Theaters (running situations) under watch, with heat (how much in the news, not how bad) and escalation direction. Use get_theater for a dossier. |
get_theater | One theater's living dossier: current assessment, timeline (each row with sources and verification), places, actors, Pulses, forecasts, recent statements. |
list_pulses | Pulses: 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_pulse | One Pulse: its definition, current reading, history and the most recent readings with reasoning (audit readings are blind checks that never move the Pulse). |
search | Text 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. |
entity | Who 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. |
about | Documents (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. |
timeline | An entity's documents and events in date order (oldest first), each with sources; a development repeated across reports appears once. |
related | What 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. |
series | A 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_statements | Who 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_events | Current live events from public feeds: internet outages, earthquakes, military aircraft, fire hotspots. Each has a source URL; relayed, not verified by Ohmega. |
get_live_anomalies | Ohmega'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_calendar | Dated 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_sanctions | Who 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_events | Attacks, 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_interference | Where 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_behaviour | Ohmega'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_assets | Geolocated 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_impact | Ohmega'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_instrument | A 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.
