> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sleuthintel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Rothera Data Research — Sleuth

> Original Sleuth document.

<div style={{ margin: "-24px -32px", width: "calc(100% + 64px)" }}>
  <iframe title="Rothera Data Research — Sleuth" srcDoc={"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Rothera Data Research \u2014 Sleuth</title>\n<style>\n  @import url('https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=DM+Sans:wght@400;500;600;700;800&display=swap');\n\n  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n  :root {\n    --bg: #f5f4ff;\n    --white: #ffffff;\n    --border: #e4e2ff;\n    --purple: #5b50f0;\n    --purple_light: #ede9ff;\n    --purple_mid: #c4beff;\n    --indigo: #3730a3;\n    --amber: #d97706;\n    --amber_light: #fef3c7;\n    --green: #047857;\n    --green_light: #d1fae5;\n    --red: #b91c1c;\n    --red_light: #fee2e2;\n    --text: #1e1b4b;\n    --muted: #a5b4fc;\n    --gray: #6b7280;\n  }\n\n  body {\n    font-family: 'DM Sans', sans-serif;\n    background: var(--bg);\n    color: var(--text);\n    min-height: 100vh;\n    padding: 48px 24px 80px;\n  }\n\n  .wrap { max-width: 880px; margin: 0 auto; }\n\n  .page_header { margin-bottom: 36px; padding-bottom: 28px; border-bottom: 2px solid var(--border); }\n  .wordmark { font-family: 'DM Mono', monospace; font-size: 11px; font-weight: 500; color: var(--purple); letter-spacing: 5px; text-transform: uppercase; margin-bottom: 10px; }\n  .page_title { font-size: 34px; font-weight: 800; color: var(--indigo); line-height: 1.15; margin-bottom: 8px; }\n  .page_title span { color: var(--purple); }\n  .page_sub { font-family: 'DM Mono', monospace; font-size: 11px; color: var(--muted); margin-bottom: 18px; }\n  .page_intro { font-size: 14px; color: var(--text); line-height: 1.6; max-width: 680px; }\n  .page_intro b { color: var(--purple); font-weight: 700; }\n\n  .stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-bottom: 36px; }\n  .stat { background: var(--white); border: 1px solid var(--border); border-radius: 10px; padding: 14px 16px; }\n  .stat_label { font-family: 'DM Mono', monospace; font-size: 9px; letter-spacing: 1.4px; text-transform: uppercase; color: var(--muted); margin-bottom: 6px; }\n  .stat_value { font-size: 19px; font-weight: 800; color: var(--indigo); line-height: 1.15; }\n\n  .section { margin-bottom: 34px; }\n  .section_label { font-family: 'DM Mono', monospace; font-size: 10px; letter-spacing: 2px; text-transform: uppercase; color: var(--purple); margin-bottom: 12px; }\n  .section_title { font-size: 20px; font-weight: 800; color: var(--indigo); margin-bottom: 14px; }\n\n  .panel { background: var(--white); border: 1px solid var(--border); border-radius: 12px; padding: 22px 24px; margin-bottom: 14px; }\n  .panel p { font-size: 14px; line-height: 1.65; margin-bottom: 10px; }\n  .panel p:last-child { margin-bottom: 0; }\n  .panel b { color: var(--indigo); font-weight: 700; }\n  .panel code { font-family: 'DM Mono', monospace; font-size: 12.5px; background: var(--purple_light); color: var(--indigo); padding: 2px 6px; border-radius: 4px; }\n\n  .finding { background: var(--white); border: 1px solid var(--border); border-left: 4px solid var(--purple); border-radius: 10px; padding: 18px 20px; margin-bottom: 10px; }\n  .finding.good { border-left-color: var(--green); }\n  .finding.bad { border-left-color: var(--red); }\n  .finding.warn { border-left-color: var(--amber); }\n  .finding_tag { font-family: 'DM Mono', monospace; font-size: 9px; letter-spacing: 1.4px; text-transform: uppercase; padding: 3px 8px; border-radius: 20px; display: inline-block; margin-bottom: 8px; }\n  .finding.good .finding_tag { background: var(--green_light); color: var(--green); }\n  .finding.bad .finding_tag { background: var(--red_light); color: var(--red); }\n  .finding.warn .finding_tag { background: var(--amber_light); color: var(--amber); }\n  .finding_title { font-size: 14.5px; font-weight: 800; color: var(--indigo); margin-bottom: 6px; }\n  .finding p { font-size: 13.5px; line-height: 1.6; color: var(--text); }\n  .finding code { font-family: 'DM Mono', monospace; font-size: 12px; background: var(--purple_light); color: var(--indigo); padding: 2px 6px; border-radius: 4px; word-break: break-all; }\n\n  .codeblock { background: var(--indigo); color: #dcdaff; font-family: 'DM Mono', monospace; font-size: 12.5px; line-height: 1.7; padding: 16px 18px; border-radius: 10px; margin-bottom: 14px; overflow-x: auto; white-space: pre; }\n  .codeblock .c1 { color: var(--muted); }\n\n  table { width: 100%; border-collapse: collapse; background: var(--white); border: 1px solid var(--border); border-radius: 10px; overflow: hidden; margin-bottom: 14px; }\n  th { font-family: 'DM Mono', monospace; font-size: 9px; letter-spacing: 1.2px; text-transform: uppercase; color: var(--purple); text-align: left; padding: 10px 12px; background: var(--purple_light); border-bottom: 1px solid var(--border); }\n  td { font-size: 13px; padding: 10px 12px; border-bottom: 1px solid var(--border); color: var(--text); vertical-align: top; }\n  tr:last-child td { border-bottom: none; }\n  td b { color: var(--indigo); }\n\n  .steps { display: grid; gap: 10px; }\n  .step { display: grid; grid-template-columns: 28px 1fr; gap: 12px; background: var(--white); border: 1px solid var(--border); border-radius: 10px; padding: 14px 16px; }\n  .step_num { font-family: 'DM Mono', monospace; font-size: 13px; font-weight: 700; color: var(--purple); }\n  .step_title { font-size: 13.5px; font-weight: 800; color: var(--indigo); margin-bottom: 3px; }\n  .step_desc { font-size: 13px; line-height: 1.55; color: var(--gray); }\n\n  .verdict { background: var(--purple_light); border: 1px solid var(--purple_mid); border-radius: 12px; padding: 22px 24px; }\n  .verdict_label { font-family: 'DM Mono', monospace; font-size: 10px; letter-spacing: 2px; text-transform: uppercase; color: var(--purple); margin-bottom: 10px; }\n  .verdict p { font-size: 14.5px; line-height: 1.65; color: var(--indigo); font-weight: 500; margin-bottom: 8px; }\n  .verdict p:last-child { margin-bottom: 0; }\n\n  .footer { margin-top: 40px; padding-top: 20px; border-top: 1px solid var(--border); display: flex; justify-content: space-between; font-family: 'DM Mono', monospace; font-size: 10px; color: var(--muted); letter-spacing: 0.5px; }\n</style>\n</head>\n<body>\n<div class=\"wrap\">\n\n  <div class=\"page_header\">\n    <div class=\"wordmark\">Sleuth \u2014 Research Note</div>\n    <div class=\"page_title\">Rothera <span>Data Sourcing</span></div>\n    <div class=\"page_sub\">How Artemis tracks it \u00b7 API status \u00b7 connector path \u00b7 July 2026</div>\n    <div class=\"page_intro\">Rothera is Robinhood and Susquehanna's CFTC-regulated prediction market exchange, built on the acquired MIAXdx (formerly LedgerX) infrastructure. This note covers how Artemis sources its Rothera coverage, what's actually left of the old public API, and a live data feed we found that gets us most of the way to a Sleuth connector.</div>\n  </div>\n\n  <div class=\"stats\">\n    <div class=\"stat\"><div class=\"stat_label\">Launched</div><div class=\"stat_value\">May 2026</div></div>\n    <div class=\"stat\"><div class=\"stat_label\">July daily volume</div><div class=\"stat_value\">~$118M</div></div>\n    <div class=\"stat\"><div class=\"stat_label\">US PM volume share</div><div class=\"stat_value\">~7%</div></div>\n    <div class=\"stat\"><div class=\"stat_label\">Legacy retail API</div><div class=\"stat_value\" style=\"color:var(--red);\">Dead</div></div>\n  </div>\n\n  <div class=\"section\">\n    <div class=\"section_label\">// 01 \u2014 Background</div>\n    <div class=\"section_title\">What Rothera is</div>\n    <div class=\"panel\">\n      <p>Rothera is the exchange and clearinghouse arm of Robinhood's prediction market push, built jointly with Susquehanna International Group. It runs on infrastructure acquired from <b>MIAXdx</b>, which itself was a rename of <b>LedgerX LLC</b> after a corporate transaction on Jan 20, 2026. So Rothera is old regulated derivatives plumbing wearing a new brand, not a from-scratch build.</p>\n      <p>It's a Designated Contract Market (DCM) plus Derivatives Clearing Organization (DCO), fully off-chain, dollar-settled, cleared and CFTC-regulated. Robinhood is the customer-facing FCM; Rothera itself doesn't touch retail directly and doesn't run its own market maker \u2014 SIG provides liquidity.</p>\n      <p>Traction: <b>$3B+</b> in wagers since the May launch, average daily volume up <b>86%</b> to $118M in July, and roughly <b>7%</b> of US prediction market volume per Bank of America, largely driven by World Cup contracts.</p>\n    </div>\n  </div>\n\n  <div class=\"section\">\n    <div class=\"section_label\">// 02 \u2014 Artemis</div>\n    <div class=\"section_title\">How Artemis tracks it</div>\n    <div class=\"panel\">\n      <p>Artemis added Rothera as a tracked venue in its Prediction Markets sector alongside Kalshi and Polymarket. Unlike Polymarket, Rothera is fully off-chain \u2014 there's no blockchain to index \u2014 so this isn't onchain indexing, it's exchange-reported market data, the same category as their Kalshi coverage.</p>\n      <p>Their public figures (contracts traded per day, dollar volumes, category splits like \"97% World Cup\") reconcile almost exactly with what we found in Rothera's own published daily files \u2014 see Section 04. No confirmed Artemis methodology doc for Rothera specifically, but the numbers line up closely enough that this is very likely their source, directly or through an intermediary.</p>\n    </div>\n  </div>\n\n  <div class=\"section\">\n    <div class=\"section_label\">// 03 \u2014 API status</div>\n    <div class=\"section_title\">What's actually live</div>\n\n    <div class=\"finding bad\">\n      <div class=\"finding_tag\">Confirmed dead</div>\n      <div class=\"finding_title\">Legacy retail REST / WebSocket API</div>\n      <p><code>api.ledgerx.com</code> and <code>api.miaxdx.com</code> both return Cloudflare origin errors (HTTP 530, error 1016) \u2014 the backends are gone. The old public data app at <code>data.ledgerx.com</code> still loads visually but its JS bundle calls nothing live. <code>docs.miaxdx.com</code> is bot-walled and its reference material points at the same dead hosts. The FAQ still describes JWT-based retail and institutional API access, but that description is stale.</p>\n    </div>\n\n    <div class=\"finding warn\">\n      <div class=\"finding_tag\">Exists, gated</div>\n      <div class=\"finding_title\">Institutional FIX access</div>\n      <p>Rothera's site and the DCM Rulebook confirm FIX order entry, market data, and drop copy for FCMs and market makers, with reference data available via API. This is real-time and full-depth, but requires a participant agreement \u2014 not a self-serve path for us right now.</p>\n    </div>\n\n    <div class=\"finding good\">\n      <div class=\"finding_tag\">Confirmed live, public, no auth</div>\n      <div class=\"finding_title\">Daily EOD market data feed</div>\n      <p>Rule 1.16(B) of the DCM Rulebook obligates Rothera to publish daily settlement prices, volume, open interest, and open/close ranges. They do this through a public, unauthenticated file feed \u2014 this is the finding that matters for us. Full details below.</p>\n    </div>\n  </div>\n\n  <div class=\"section\">\n    <div class=\"section_label\">// 04 \u2014 The feed</div>\n    <div class=\"section_title\">Daily EOD data, confirmed working</div>\n    <div class=\"panel\">\n      <p>Found via the <code>/volume-open-interest</code> page on rothera.io, which builds a date-driven CSV download link client-side. Pulled the URL pattern straight out of the page's inline script.</p>\n    </div>\n\n    <div class=\"codeblock\">https://publicfiles.rotheramarkets.com/clearing/outbound/mkt_eod_YYYYMMDD.csv\n<span class=\"c1\">// one file per trading day \u00b7 directory-listed at bucket root \u00b7 no auth \u00b7 no key\n// earliest available: 2026-05-21 (launch week) \u00b7 confirmed through today</span></div>\n\n    <table>\n      <tr><th>Field</th><th>What it is</th></tr>\n      <tr><td><b>date, product, symbol</b></td><td>Trading day, contract family (e.g. MWCADVNCE), full contract symbol</td></tr>\n      <tr><td><b>expiration_date</b></td><td>Contract expiry</td></tr>\n      <tr><td><b>trade_count, volume, oi</b></td><td>Trades, contracts traded, open interest \u2014 per contract, per day</td></tr>\n      <tr><td><b>settlement_price, open, high, low, close</b></td><td>Daily OHLC and settlement, in dollars (0\u20131 = implied probability)</td></tr>\n      <tr><td><b>block_volume, contracts_delivered</b></td><td>Block trade volume; contracts settled/delivered that day</td></tr>\n    </table>\n\n    <div class=\"panel\">\n      <p><b>Sanity check, July 10 file:</b> 460 contracts, 74.5M contracts traded, 178K trades, 93.5M open interest, ~$39.9M in close-price-weighted traded value. Artemis's own posts for the same window cite \"&gt;100M contracts traded\" on peak days and \"~$35M\" in dollar volume, with 97% of volume in World Cup contracts. Both line up closely \u2014 our product-prefix breakdown shows MWC-family contracts (MWCADVNCE, MWCGAME, MWCTOTAL, MWC, MWCHTL, MWCSPREAD) dominating volume, exactly matching that split.</p>\n    </div>\n  </div>\n\n  <div class=\"section\">\n    <div class=\"section_label\">// 05 \u2014 What this gets us, and what it doesn't</div>\n    <div class=\"section_title\">Connector scope</div>\n\n    <div class=\"finding good\">\n      <div class=\"finding_title\">In scope now</div>\n      <p>Daily settlement, OHLC, volume, and OI per contract, full history since launch, clean per-family product taxonomy for category rollups. Enough to stand up a Rothera surface inside PM Markets at rough parity with what Artemis shows publicly.</p>\n    </div>\n\n    <div class=\"finding warn\">\n      <div class=\"finding_title\">Not in scope without FIX access</div>\n      <p>Intraday odds movement, live order book, individual trade tape. Daily granularity only until we have an institutional connection.</p>\n    </div>\n\n    <div class=\"finding bad\">\n      <div class=\"finding_title\">Never in scope</div>\n      <p>Trader-level data. Rothera is a cleared, anonymous exchange \u2014 there are no wallets to profile. Rothera adds venue and market intelligence only. Polymarket stays our only trader-level surface; PM Traders and Wallet Analysis don't extend here.</p>\n    </div>\n  </div>\n\n  <div class=\"section\">\n    <div class=\"section_label\">// 06 \u2014 Landscape</div>\n    <div class=\"section_title\">Who else is already touching this data</div>\n\n    <div class=\"finding warn\">\n      <div class=\"finding_tag\">Reference</div>\n      <div class=\"finding_title\">The Block's data dashboard</div>\n      <p>Tracks prediction market volume, OI, and trades across Polymarket, Kalshi, and other leading platforms. A separate piece on June's $50B+ volume figure confirms Artemis's higher number (vs The Block's $44.8B) comes specifically from Artemis including Rothera alongside Kalshi and Polymarket \u2014 independent confirmation that Artemis treats Rothera as a first-class tracked venue, not a footnote.</p>\n    </div>\n\n    <div class=\"finding warn\">\n      <div class=\"finding_tag\">Reference</div>\n      <div class=\"finding_title\">Community Dune dashboard</div>\n      <p>A public dashboard titled <code>Rothera (Robinhood x SIG) Prediction Markets</code> exists on Dune. Rothera is fully off-chain, so this isn't onchain indexing \u2014 whoever built it is pulling from the same public daily files, scraping rothera.io directly, or entering data by hand. Contents weren't inspectable (client-rendered), but its existence confirms independent parties are already working off the same limited public surface we found.</p>\n    </div>\n\n    <div class=\"finding bad\">\n      <div class=\"finding_tag\">Competitor \u2014 worth watching</div>\n      <div class=\"finding_title\">Rekko AI</div>\n      <p>The one name in this space that actually matters. Live product, REST API and MCP server, explicitly covers Kalshi, Polymarket, Robinhood, and Coinbase \u2014 probability estimates, causal price-driver breakdowns, cross-platform arbitrage detection, trading signals. Tiered per-call pricing from $0.01 (raw listings) to $5 (cross-platform arbitrage/correlation). This is the closest thing to a competitor already shipping in the exact lane Sleuth is going for \u2014 agent-first API access to prediction market intelligence, Rothera/Robinhood included. Worth a proper teardown separate from this note: what their Robinhood coverage actually contains, how fresh it is, and where their pricing tiers leave room for us.</p>\n    </div>\n\n    <div class=\"finding good\">\n      <div class=\"finding_tag\">Earlier signal than the EOD feed</div>\n      <div class=\"finding_title\">CFTC self-certification filings</div>\n      <p>New Rothera contracts get self-certified with the CFTC before they show up in a daily EOD file. That makes filings a genuinely earlier trigger than our connector for \"what's Rothera about to list\" \u2014 useful if we ever want a lead-time edge on new market coverage rather than just backfilling what already traded.</p>\n    </div>\n\n    <div class=\"panel\">\n      <p><b>Not included here:</b> a handful of other aggregator names came up in an X/Grok-style search (PolyRouter, PredictionData.io, Tess Radar, PredScope) claiming broad or extensible prediction-market coverage. None were verified to actually cover Rothera specifically, and this flavor of search result is exactly where tool lists get padded. Left out until independently confirmed. Also unconfirmed: a claim that ~60% of Robinhood's prediction market volume still routes to Kalshi versus ~40% internalized on Rothera \u2014 plausible given the launch timeline, sourced only to a third-party (InGame) estimate, not a primary disclosure.</p>\n    </div>\n  </div>\n\n  <div class=\"section\">\n    <div class=\"section_label\">// 07 \u2014 Build path</div>\n    <div class=\"section_title\">If we greenlight this</div>\n    <div class=\"steps\">\n      <div class=\"step\">\n        <div class=\"step_num\">1</div>\n        <div>\n          <div class=\"step_title\">Backfill + nightly pull</div>\n          <div class=\"step_desc\">Fetch all EOD files since 2026-05-21, then a daily cron for new ones. No key management, no rate limits observed.</div>\n        </div>\n      </div>\n      <div class=\"step\">\n        <div class=\"step_num\">2</div>\n        <div>\n          <div class=\"step_title\">Normalize into PM Markets schema</div>\n          <div class=\"step_desc\">Map settlement price directly to implied probability, group by product family for the market treemap, same shape as existing Polymarket ingestion.</div>\n        </div>\n      </div>\n      <div class=\"step\">\n        <div class=\"step_num\">3</div>\n        <div>\n          <div class=\"step_title\">Legal check</div>\n          <div class=\"step_desc\">This is regulator-mandated public disclosure published by the exchange itself \u2014 about as clean as sourcing gets \u2014 but worth a quick read of Rothera's site terms before we redistribute at scale.</div>\n        </div>\n      </div>\n      <div class=\"step\">\n        <div class=\"step_num\">4</div>\n        <div>\n          <div class=\"step_title\">Flag as daily-granularity, venue-only</div>\n          <div class=\"step_desc\">Label it clearly in product so it's not confused with our live Polymarket odds or trader data.</div>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"verdict\">\n    <div class=\"verdict_label\">Bottom line</div>\n    <p>Rothera has no usable public API left, but it does have a public, unauthenticated daily data feed that reconciles with Artemis's own numbers and gets us most of the way to third-platform PM coverage \u2014 the exact gap flagged as our weakest score in the last intel report. Small build, real fix.</p>\n  </div>\n\n  <div class=\"footer\">\n    <span>Sleuth \u2014 Internal Research</span>\n    <span>Rothera Data Sourcing \u00b7 July 2026</span>\n  </div>\n\n</div>\n</body>\n</html>\n" } style={{ width: "100%", minHeight: "100vh", border: "none", display: "block", background: "#060606" }} />
</div>
