Venue Backlog & Integration Playbook
VENUES.mdVenue Backlog & Integration Playbook
The platform is multi-venue: every market row carries a venue, tickers are namespaced per venue, prices are normalized to cents, and non-Kalshi venues enter through adapters implementing KalshiTrader.Venues.Venue. Execution stays Kalshi-only until a venue's trading path (fees, settlement, legality) is explicitly built and reviewed — data flows first, money later.
Fee model & verification (issue #183)
Venues.Fees models the actual cost per execution leg for each venue:
| Venue | Taker formula | Maker formula | Source |
|---|---|---|---|
| Kalshi | ceil(0.07 × C × P × (1−P)) | 0 | Kalshi fee schedule |
| Gemini | ceil(0.07 × C × P × (1−P)) (same as Kalshi) | ceil(0.0175 × C × P × (1−P)) | gemini.com/fees/predictions, confirmed 2026-08-30 |
| Polymarket | ceil(100 bps × C × P / 10_000) (assumed execution cost, configurable) | — (falls back to taker) | No published maker schedule |
| others | ceil(200 bps × C × P / 10_000) (conservative default, configurable) | — (falls back to taker) | Assumption |
All cents are integer ceiling division — no floats hit the fee path.
Verifying against real order payloads
Venues.FeeVerification extracts actual fee cents from orders.raw JSON and the fee_cents column, then compares them side-by-side against the model.
Payload fields extracted per venue:
| Venue | Field(s) tried | Units |
|---|---|---|
| Kalshi | taker_fees, then fee | dollar string e.g. "0.02" |
| Gemini | fee, fee_amount, feeAmount (USD only) | dollar string e.g. "0.0175" |
Evidence shape (per fill):
%{
venue: "kalshi",
source: :raw_payload | :fee_cents_field | :missing,
price_cents: 50,
count: 10,
style: :taker,
modeled_cents: 18,
actual_cents: 18,
match?: true
}
Running verification:
# Scan last 7 days of live orders, print markdown table
mix kalshi.fees.verify
# Kalshi only, last 14 days, write to a file
mix kalshi.fees.verify --venue kalshi --days 14 --out fee_evidence.md
# One-shot explicit payload (no DB required)
mix kalshi.fees.verify --payload kalshi --price 50 --count 10 --taker-fees 0.18
LiveRecon integration: the nightly Workers.LiveRecon job calls FeeVerification.scan_live_orders/1 automatically. Mismatches trigger a 🧾 ⚠️ alert and appear in the daily reconciliation report.
Model status (2026-09-07): fixtures based on the published fee schedules confirm the model for Kalshi and Gemini (see test/kalshi_trader/venues/fee_verification_test.exs model_check tag). No correction to Venues.Fees was needed.
Integration playbook (per venue)
- Data adapter — implement
Venues.Venue(venue_id,ticker_prefix,sync), register inWorkers.VenueSync. Markets land in the shared table; Tracker, watch strategies, and research see them immediately. - Quotes depth — if the venue has an order-book API, add bid/ask (the first pass may store mid/last on both sides).
- Equivalence mapping — map venue markets to Kalshi markets covering the same real-world event (cross-venue spread dataset → arb research).
- Paper trading — venue-specific fee model + settlement resolution before any strategy may trade it.
- Live trading — wallet/broker plumbing, legal review vs analysis_l.md.
Status board
| Venue | Status | US legal? | Notes |
|---|---|---|---|
| Kalshi | LIVE (data + paper trading) | Yes — CFTC DCM | Home venue. |
| Polymarket | DATA LIVE (top-100 by 24h volume, 5-min sync) | Yes since Nov 2025 — QCX LLC is a CFTC-designated contract market; banned in AZ, IL, MA, MD, MI, MT, NV, OH | Gamma API public, no key/geo-block for data. Trading = CLOB, USDC on Polygon (phase 4-5). |
| MetaMask Predictions | COVERED BY POLYMARKET | (same) | MetaMask's in-wallet prediction markets ARE Polymarket, with a 4% wrapper fee — integrate direct, skip the wrapper. |
| Robinhood Events | COVERED BY KALSHI — decaying: flow migrating to Rothera since 2026-06 | Yes | Robinhood's Kalshi routing is being replaced by its own exchange (see Rothera row). Kalshi tape captures a shrinking share of RH flow. |
| Rothera (Robinhood × Susquehanna) | SCOUTED 2026-09-05 — WATCH (own book, no public API yet) | Yes — CFTC DCM+DCO (ex-MIAXdx, acquired 2026-01-20) | TRUE independent book, first trade 2026-06-04; SIG is day-one liquidity provider; fees capped at $0.01/contract; $3.5B contracts in first ~2 months. Access only through the Robinhood app — no public API, docs, or data feed found (rothera.com unreachable). Same watch posture as DKeX: own book = future arb leg if an API surfaces. |
| Jupiter (jup.ag) | BLOCKED | No — API refuses US + KR IPs | Solana, JupUSD settlement. Wallet plumbing already built (Settings). Re-check periodically; API is beta. |
| Gemini Predictions | DATA LIVE (all active events, 5-min sync) | Yes — own CFTC DCM (Gemini Titan, Dec 2025) | NOT a wrapper: separate order book + in-house clearing. Venues.Gemini pulls GET api.gemini.com/v1/prediction-markets/events (public, no key): events with nested contracts, dollar-string prices, real bestBid/bestAsk. Tickers GM:GEMI-.... Heavy Kalshi overlap observed (5-min crypto up/down ladders, Senate races, weather) → prime equivalence/arb feed. WebSocket streams + trading API exist for later phases. |
| ForecastEx (IBKR) | DATA LIVE (EOD) — daily closing prices via Venues.Forecastex; realtime needs IBKR account | Yes — CFTC DCM + DCO (ForecastEx LLC, an IBG subsidiary) | Venues.Forecastex pulls the free no-login EOD CSV (forecastex.com/api/download?type=prices&date=YYYYMMDD, falls back to the newest weekday file) once/day via VenueSync's per-adapter min-interval guard (20h). Normalizes ~12 econ/climate series (IJC, UNR, CPIY, CPIC, FF, RGDP, HS, NHS, PCEY, PPIY, JOLT, GT) as FX:<PRODUCT>_<EXP>_<STRIKE> tickers, YES-side cents, close from contract expiry. Deterministic equivalence links to Kalshi econ ladders (FF↔KXFED with +12.5bp midpoint→upper-bound offset, CPIY↔KXCPIYOY, UNR↔KXU3, IJC↔KXJOBLESSCLAIMS). No realtime API: live quotes/book only via IBKR TWS API or Client Portal Web API (authenticated gateway session, funded IBKR account); contracts modeled as secType=OPT, exchange=FORECASTX, buy-only (exit = buy opposing side, netted). $0 commission, 3.83% APY incentive coupon on collateral. |
| Railbird / DKeX (DraftKings) | RE-SCOUTED 2026-09-05 — still dead end (web app exists but login-walled; no API; NV-blocked) | Yes — CFTC DCM (Railbird Exchange LLC d/b/a DKeX, June 2025); DK Predictions in ~38–47 states + DC — Nevada excluded | Web frontend predictions.draftkings.com confirmed (existed since the 2025-12-19 launch as "app and web product") but requires a DraftKings account login to browse markets; edge-blocks bots (403). railbirdexchange.com re-checked: nav is only Fees & Hours / Regulatory / Rulebook PDF — still zero API or developer docs. Taker fee now published as a price-dependent table ($0.0050 at $0.01/$0.99, $0.0085 at $0.02, $0.0100 at $0.03–0.98); maker $0.0025; 23/7 hours (5–6am ET maintenance). Watch for an API — own book makes it a future arb leg. |
| Cboe Predicts (XSPBW binaries) | DATA LIVE (delayed, ~10-min sync) — Venues.Cboe, adapter shipped 2026-09-08 (#201/#220/#202) | Yes — listed binary options on Cboe (Mini-SPX), tradable today via IBKR (roots XSPBW/XSPBX) | Cboe's launched prediction-market product: daily yes/no binaries on the Mini-S&P 500, $100/$0 settlement. Venues.Cboe (venue cboe, prefix CB:) pulls https://cdn.cboe.com/api/global/delayed_quotes/options/_XSPBX.json (the full chain, root XSPBW, daily expiries, $1-wide strikes, bid/ask/last/volume, prices 0–1) with no auth — same zero-auth class as the ForecastEx EOD CSVs, but intraday (~15-min delayed). Deterministic equivalence to Kalshi S&P ladders (XSP = SPX/10, same-day expiry) feeds venue_spreads/the /venues radar; links stay below the auto-arb confidence floor pending settlement-basis verification (#202). Schwab distribution still pending; IBKR already lists them for execution. See the build notes below. |
| FanDuel Predicts / CME | SCOUTED 2026-09-05 — WATCH (data via paid CME feeds only) | Yes — CME Group DCM/DCO; live in all 50 states incl. NV for finance/econ/commodities/crypto (sports only in 18 non-sportsbook states, not NV) | Confirmed CME book (not a wrapper of anything we have). Contracts: S&P 500, Nasdaq-100, oil/gas, gold, crypto, GDP/CPI econ prints — heavy overlap with Kalshi econ/index ladders and ForecastEx. No free public data surface found; CME event-contract quotes flow through Globex MDP 3.0 (paid: Databento GLBX.MDP3 or CME delayed-data license). IBKR's Prediction Markets hub fronts CME event contracts too, so the planned IBKR integration covers execution + data here. |
| Novig (Ludlow Exchange) | SCOUTED 2026-09-05 — DEAD END for us (sports-only, no API, NV-blocked) | Yes — CFTC DCM (Ludlow Exchange LLC, approved 2026-06-17); real-money launch 2026-08-04 in 47 states — not AZ, MI, NV | Peer-to-peer sports prediction exchange (ex-sweepstakes product). Own book, but sports-only (our Kalshi sports leg is NV-restricted anyway), no public API or docs found, and Nevada is excluded. Recheck only if it adds non-sports categories or an API. |
| Crypto.com Events (CDNA) | BACKLOG — front-end fleet growing, still no API | Yes — CFTC DCM (CDNA) | CDNA book now aggregates three fronts: Crypto.com app, OG.com (standalone brand, launched 2026-02-03 — web pages server-render live prices to an unauthenticated NV visitor, verified 2026-09-05), and Fanatics Markets (rides CDNA via Paragon Global Markets). Still no public/documented API. AI-topic contracts (20+, with PYMNTS) rolling out from Sept 2026. Fanatics is acquiring BGC's Water Street Labs + CX Clearinghouse to run its own book later — that would fragment CDNA flow; watch. |
| Limitless | BACKLOG | Unclear | Base-chain prediction markets; check geo terms before data pull. |
| Drift BET | BACKLOG | Likely blocked (offshore perp DEX) | Solana; verify terms first. |
| PredictIt | LOW PRIORITY | Yes (no-action letter, capped) | $850 position caps, 10% fee — thin API, weak edge surface. |
| Manifold | RESEARCH ONLY | n/a (play money) | Free API; good for signal research, no real PnL. |
Scouting notes (2026-09-05)
DraftKings Predictions web re-scout — verdict: still DEAD END. The web frontend is not a new opening: it is login-walled, there is still no API, and NV is still excluded.
predictions.draftkings.comis not new — DK's launch press release (2025-12-19) already described "a standalone mobile app and web product" (https://draftkings.gcs-web.com/news-releases/news-release-details/draftkings-debuts-predictions-app-entering-prediction-markets, accessed 2026-09-05). What changed since our 2026-08-31 note is only our awareness of it.- No public data surface: the site 403s non-browser fetchers at the edge (robots.txt included), and third-party reviews confirm you must "login or sign up using their existing DraftKings account" to browse markets (https://www.bettingusa.com/prediction-markets/reviews/draftkings-predictions/, accessed 2026-09-05). No server-rendered public prices, no market sitemap. Any JSON the logged-in app calls is an authenticated private endpoint — integrating it would be reverse-engineering, out of scope per our official-surfaces-only rule. Nothing discovered here falls on the public side of that line.
- No API/docs anywhere, re-verified by browsing: railbirdexchange.com (DKeX) nav on 2026-09-05 = Home / Trading→Fees & Hours / Regulatory / Contact / Rulebook PDF.
developer.draftkings.comdoes not resolve (NXDOMAIN). No docs subdomain. The fees page did yield an updated taker table (price-dependent: $0.0050 at $0.01 and $0.99, $0.0085 at $0.02, $0.0100 at $0.03–0.98; maker $0.0025 flat; no settlement/membership fees; 23/7 with 5–6am ET maintenance; contact DKeXtradingsupport@draftkings.com — https://railbirdexchange.com/fees-and-hours, accessed 2026-09-05). - NV re-check: still excluded. Current state lists put DK Predictions in ~38–47 states with Nevada in the excluded set (AZ, AR, IL, IA, ME, MT, NV, NH, OH, PA, TN, WA per https://predictionmarketspicks.com/draftkings/states, accessed 2026-09-05). DK withdrew its NV license application; no reversal found.
- Breadth has widened beyond sports: finance/econ (Fed), crypto (BTC/ETH dailies), politics (congressional/presidential), entertainment (Oscars) — so Kalshi overlap now exists outside sports. Irrelevant until an API or NV access exists. Keep the quarterly recheck cadence.
New-venue sweep (Sept 2026) — the venue landscape re-sorted around five real books: Kalshi, Polymarket, Gemini, CME, CDNA — plus three newer independents (DKeX, Rothera, Ludlow) and one listed-options entrant (Cboe).
- Cboe Predicts (XSPBW) — the one immediately data-integrable find. Cboe launched prediction-markets-style binary options on the Mini-SPX (announced March, live Q2 2026; $100/$0 settlement; already tradable at IBKR under roots XSPBW/XSPBX — https://coincentral.com/cboe-launches-prediction-markets-with-yes-or-no-sp-500-contracts/, https://www.coindesk.com/markets/2026/06/19/schwab-to-join-prediction-markets-race-with-s-and-p-500-event-based-options-wsj, accessed 2026-09-05). Verified 2026-09-05: Cboe's free delayed-quotes JSON serves the full chain with no auth —
GET https://cdn.cboe.com/api/global/delayed_quotes/options/_XSPBX.json→ 318 contracts (root XSPBW), daily expiries, $1-wide strikes in XSP points, real bid/ask/last/volume, prices quoted 0–1, snapshot timestamp, underlying^XSPBX= XSP level. ~15-min delayed. This endpoint backs Cboe's own public delayed-quotes pages (unauthenticated, long-stable, widely used) — closest classification is "public surface", but it is not a formally documented developer API; have the operator confirm Cboe's delayed-data terms before productionizing, same caveat class as the ForecastEx CSVs. Equivalence target: Kalshi S&P range/above-below ladders (XSP = SPX/10). Delayed data suits equivalence/spread research, not fast arb. Schwab retail distribution still "coming months" as of late June 2026. - Rothera (Robinhood × Susquehanna, ex-MIAXdx) — the biggest structural change since our last pass. JV announced 2025-11-25 (https://www.robinhood.com/us/en/newsroom/robinhood-prediction-markets-joint-venture/), closed the MIAXdx DCM+DCO acquisition 2026-01-20, first trade 2026-06-04; SIG is day-one liquidity provider; fees capped at $0.01/contract; $3.5B contracts in ~2 months; Robinhood's CFO says most prediction flow moves off Kalshi to Rothera (https://defirate.com/news/robinhood-launches-world-cup-prediction-markets-through-rothera/, https://nexteventhorizon.substack.com/p/robinhood-cfo-says-most-prediction-flow-moving-to-rothera, accessed 2026-09-05). Consequence for us: the "Robinhood = covered by Kalshi" assumption is decaying — RH retail flow is leaving the Kalshi tape. No public API/docs/data feed found (rothera.com unreachable; access only inside the Robinhood app). A community Dune dashboard tracks it (https://dune.com/datadashboards/rothera-robinhood-x-sig-prediction-markets) — worth checking as a volume proxy. WATCH, same posture as DKeX.
- FanDuel Predicts = CME book, confirmed (launch PR: https://www.cmegroup.com/media-room/press-releases/2025/12/22/fanduel-and-cme-group-launch-fanduel-predicts.html). Expanded from 5 states (2025-12-22) to all 50 states for finance/econ/commodities/crypto in Jan–Feb 2026 — explicitly including Nevada (sports limited to 18 non-sportsbook states, not NV; https://www.pokernews.com/casino/news/2026/01/fanduel-predicts-prediction-markets-now-live-in-50-states-50414.htm, https://www.morningjournalnews.com/news/2026/02/fanduel-predicts-expands-from-five-to-50-states-in-major-product-rollout/, accessed 2026-09-05). No free data surface: CME event-contract quotes ride Globex MDP 3.0 (paid vendors, e.g. Databento GLBX.MDP3; 10-min delayed licensing exists). The already-planned IBKR integration is the practical door: IBKR's hub fronts CME event contracts alongside ForecastEx.
- Novig / Ludlow Exchange LLC — new independent DCM, but not for us. CFTC DCM approval 2026-06-17, real-money nationwide launch 2026-08-04 in 47 states — excluded: AZ, MI, NV — sports-only peer-to-peer book, no API found (https://sportshandle.com/novig-launches-cftc-regulated-sports-prediction-market-in-47-states/, https://sbcamericas.com/2026/06/17/novig-prediction-market-cftc-approval/, accessed 2026-09-05). Sports-only + NV-blocked + no API = dead end.
- OG.com (Crypto.com/CDNA) — standalone prediction brand launched 2026-02-03, "technology services provider for CDNA" (https://crypto.com/us/company-news/cryptocom-launches-og-a-new-prediction-market-experience). Browsed 2026-09-05 from NV: og.com serves live market prices (EPL match ladders, %, volume) server-rendered to an unauthenticated visitor — sports-forward, plus financial/political/cultural. No documented API; page data beyond SSR appears to ride app-internal channels (only fingerprinting XHRs observed), so treat OG as viewable, not integrable, until CDNA documents something. CDNA also adds 20+ AI-topic contracts from Sept 2026 (PYMNTS deal) and now powers Fanatics Markets too.
- Fanatics Markets — launched on CDNA (via 2025 Paragon Global Markets acquisition), and announced 2026-07-27 it will acquire BGC's Water Street Labs + CX Clearinghouse to run its own exchange (https://www.coindesk.com/markets/2026/07/27/fanatics-buys-regulated-exchange-in-bid-to-grow-prediction-markets-business, accessed 2026-09-05). Today its flow is CDNA (covered by our CDNA watch); when the own-book migration lands it becomes another DKeX-style independent to scout.
- Truth Predict — dead. Trump Media dropped the standalone build, pivoted to a marketing deal, then the Crypto.com partnership was unwound entirely (https://casinobeats.com/2026/08/10/trump-media-drops-plans-for-crypto-com-prediction-markets-on-truth-social/, https://gamingamerica.com/news/1094894/crypto-com-breaks-things-off-with-truth-social-on-prediction-markets, accessed 2026-09-05). Remove from watch entirely.
- Confirmed unchanged (no new adapters needed): Coinbase "Predict" is still 100% Kalshi-routed (https://www.coindesk.com/markets/2026/01/27/coinbase-rolls-out-prediction-market-to-u-s-customers); Webull is still Kalshi (adds $0.01/contract broker fee; https://www.prnewswire.com/news-releases/webull-connects-to-kalshi-to-offer-investors-innovative-prediction-markets-302373541.html); X chose Polymarket as its official prediction-market partner while Kalshi partnered with xAI/Grok — distribution deals, not new books. Gate.io launched a white-label "Event Contracts Builder" (2026-09-03, https://fortune.com/2026/09/03/crypto-exchange-gate-enters-prediction-market-space-with-white-label-builder-for-businesses/) — offshore infra, skip.
Scouting notes (2026-08-31)
ForecastEx — verdict: integrate EOD now (public CSVs); realtime needs an IBKR account.
- No public realtime API. The only quote/order-book access is through Interactive Brokers' APIs: TWS API (https://www.interactivebrokers.com/campus/ibkr-api-page/event-trading/) or Client Portal Web API (https://www.interactivebrokers.com/campus/ibkr-api-page/event-contracts/). Both require a funded IBKR account plus an authenticated local gateway session (TWS/IB Gateway or CP gateway) — no key-only REST access.
- Contract conventions in the IBKR APIs: ForecastEx instruments are modeled as options —
secType=OPT,exchange=FORECASTX. Contracts are buy-only; you exit by buying the opposing Yes/No contract and IBKR nets the pair. - Free public EOD data, no login: https://forecastex.com/data serves daily CSVs via
https://forecastex.com/api/download?type={prices|pairs|summary}&date=YYYYMMDD— closing prices for all events, pairs (refreshed every 10 min), and a per-product volume summary. Enough for a zero-auth daily-close adapter and equivalence research; not enough for live spreads. - Product surface is small (~12 series): US econ indicators (Initial Jobless Claims IJC, Unemployment UNR, CPI CPIY, Fed Funds FF, Real GDP RGDP, Housing Starts HS, …) and climate (Global Temperature GT). Direct overlap with Kalshi econ/climate ladders → good equivalence targets, low breadth.
- Economics: $0 commission, prices $0.01–0.99, and a 3.83% APY "incentive coupon" paid on position collateral (ForecastEx passes through interest). IBKR's Prediction Markets hub fronts Kalshi + CME + ForecastEx in one account, so one IBKR integration later could cover CME event contracts too.
- Terms caveat: the public CSVs are unrestricted-download today, but any live data pulled via IBKR falls under IBKR's market-data agreement (personal use, no redistribution) — fine for internal strategy use.
Railbird / DKeX (DraftKings Predictions) — verdict: dead end for now — no public API, app-only access; keep on watch because it is a true independent book.
- Railbird Exchange, LLC got CFTC DCM status 2025-06-13, was acquired by DraftKings Oct 2025, and now does business as DKeX (https://railbirdexchange.com/). No API or developer documentation exists anywhere — the site has no docs section, and
docs.railbird.aiis an unrelated company (golf-video app internal docs), not the exchange. - Liquidity history matters: DraftKings Predictions launched 2025-12-19 routing through CME Group (shared book with FanDuel). On 2026-06-26 DK cut over to DKeX — its own matching engine (Connamara EP3 platform) — dropping CME. So today it IS a Gemini-style independent order book, not a wrapper; ~$11.3B annualized weekly volume at cutover.
- Fee schedule is published: maker $0.0025/contract, taker $0.005–0.01 depending on price, plus a market-maker program — signals they want professional flow eventually, but access is currently only through the DraftKings app (DK's subsidiary is a CFTC-registered Introducing Broker / NFA member). No documented market-data feed without an account; scraping the app's private endpoints would violate DK ToS.
- US-legal but patchy: available in ~47 states + DC (not ME, NH, OH); sports event contracts are withheld in the ~18 states + DC where DK runs a licensed sportsbook, full sports offering in ~17 non-sportsbook states.
- Sports-heavy surface: self-certified templates GAMEWIN, GAMESPREAD, GAMEPROPERTY, ENTITYSTAT, ENTITYOUTPERFORM, ENTITYACHIEVEMENT (moneyline, spread, props, H2H). Kalshi overlap on sports would be the arb feed if an API ever surfaces — recheck quarterly for a DKeX market-data/MM API.
Scouting notes (2026-08-30)
Gemini Predictions trading API (#129) — verdict: GO — build execution. Effort: M. Public, documented, authenticated order placement for event contracts exists on the same api.gemini.com host we already read from, with a sandbox. Eligibility for the NV-resident operator looks good (see docs/SECOND_LEG_ELIGIBILITY.md #128 — Gemini is absent from the NGCB action timeline; verify via the signup flow's state gate before building).
- Order placement is public API, yes. REST:
POST https://api.gemini.com/v1/prediction-markets/order— payloadsymbol(e.g.GEMI-FEDJAN26-DN25),orderType(limit/stop-limit),side(buy/sell),outcome(yes/no),quantity,price(dollars 0–1, so our cents need /100),timeInForce(good-til-canceldefault,immediate-or-cancel,fill-or-kill),makerOrCancelbool for post-only. Returns 201 withorderId/status/fill. Also: batch place, cancel, batch cancel, active orders, order history; a positions group (active orders / history / settlements); a combos group (multi-leg); and a rewards group (maker rebates / liquidity program). Docs: https://developer.gemini.com/rest-api/prediction-markets/order-management (spec index: https://developer.gemini.com/prediction-markets-spec). - Auth = the ordinary Gemini exchange key scheme, not a separate system: keys provisioned at https://exchange.gemini.com/settings/api, requests signed with
X-GEMINI-APIKEY+X-GEMINI-PAYLOAD(base64 JSON w/ nonce)X-GEMINI-SIGNATURE(hex HMAC-SHA384). An OAuth flow also exists (Trader role,orders:createscope) — irrelevant for us, use keys. One extra gate: a terms-acceptance endpoint group — the account must accept Predictions terms (checkable/settable via API) before orders work.
- WebSocket
order.placeis the recommended path for active trading / market making; REST ordering is positioned as payload-reference / one-off. Our 5-min-ladder use case likely fine on REST first, WS as a fast follow (we already planned WS streams for data). - Fees CONFIRMED vs our code's assumption (gemini.com/fees/predictions, accessed 2026-08-30): Taker =
0.07 × C × P × (1−P); Maker =0.0175 × C × P × (1−P)(we assumed only the 7% taker formula — add the maker rate); fees rounded up to the next cent per fill; cancels free; no settlement fee, no membership fee. Maker rebates/liquidity rewards exist (rewards endpoints) — investigate once flowing. - Sandbox exists:
https://api.sandbox.gemini.com(UI atexchange.sandbox.gemini.com, test funds) — real integration test bed before real money, unlike Kalshi's demo drift. - Rate limits: Gemini's general limits are 120 req/min public, 600 req/min private (https://developer.gemini.com/rate-limit). The prediction- markets spec references its own rate-limit topic; predictions-specific numbers not captured — an account holder should read the limits page behind login and the gated support article (https://support.gemini.com/hc/en-us/articles/44234371543579-Gemini-Predictions, Cloudflare-blocked to bots).
- Prerequisites before building: (1) operator opens/enables Predictions on a Gemini account with the real NV address — the state gate is the ground truth on eligibility; (2) accept Predictions terms; (3) provision sandbox + prod API keys; (4) confirm from an NV IP which categories are visible (crypto ladders is the target; sports may get geofenced for NV post-Ninth-Circuit — doesn't matter for us); (5) confirm predictions rate limits + any WS order entitlement requirements from the logged-in docs.
- Effort M rationale: same host + auth style as a standard Gemini integration, dollar-string prices already normalized by
Venues.Gemini, fee model is two constants; the work is order lifecycle (place/cancel/ status), terms gate, sandbox harness, and venue-true paper-execution parity — no wallet/chain plumbing (contrast Polymarket CLOB = L).
CEX distribution map (who routes where)
The centralized exchanges pumping prediction volume are mostly fronts for venues already integrated — their flow shows up in our data without new adapters:
| Front-end | Underlying venue | Implication |
|---|---|---|
| Coinbase "Predict" (all 50 states, Jan 2026) | Kalshi (confirmed 2026-09-05) | Their retail flow is already in our Kalshi tape/orderbook data. |
| Robinhood Events | Kalshi → Rothera (migrating since 2026-06) | RH flow is LEAVING our Kalshi tape; Rothera has no data surface yet — coverage gap growing. |
| MetaMask Predictions | Polymarket (+4% wrapper fee) | Covered by the Polymarket adapter. |
| Webull (intermediated, +$0.01/contract) | Kalshi (confirmed 2026-09-05) | No new adapter needed. |
| FanDuel Predicts | CME (confirmed; NV-live for econ/finance) | Would ride the IBKR integration (IBKR hub fronts CME event contracts) or paid Globex data. |
| DraftKings Predictions (app + web) | Railbird/DKeX (own DCM) | Login-walled, no API, NV-blocked — dead end, quarterly recheck. |
| Crypto.com app + OG.com + Fanatics Markets | own DCM (CDNA) | One CDNA adapter would cover all three fronts; still no API. Fanatics plans its own book (BGC/CX acquisition). |
| Schwab (pending) / IBKR (live) | Cboe (XSPBW binaries, SEC-listed options) | Free delayed JSON verified — data-integrable now. |
| X (Polymarket partner), xAI/Grok (Kalshi partner) | existing books | Distribution deals only; no new adapters. |
| Binance/Bybit/Gate event products | offshore | US-blocked; skip. |
Net effect: front-end proliferation concentrates liquidity in a few clearing venues. Kalshi + Polymarket + Gemini (all three now live for data) capture most of the US-accessible flow.
Why wrappers can't be arbed but still pay us: intermediated front-ends (Coinbase/Robinhood/MetaMask) execute in the SAME book as direct access — there is no second price to arb, only a slower, fee-taxed path into the book we already trade directly. Their users' extra latency and fees make wrapper flow less price-sensitive and later to news, which is edge for the direct participant: flow/tape strategies and maker fills monetize it today. True cross-book arb requires venues with their OWN books: Polymarket (live radar), Gemini (data live), CME/FanDuel, Railbird/DraftKings. The venue_spreads series doubles as the lead-lag instrument: it will show which venue is price discovery per category, and the follower book is where stale quotes get picked off once execution lands.
Cross-venue arb roadmap
- DONE — equivalence links:
Venues.Equivalenceauto-matches same-event markets across venues (same category, overlapping titles, agreeing numbers, close dates within 3 days) intomarket_links. - DONE — spread series: every VenueSync run appends per-link spreads to
venue_spreads(60d retention); ops alert at 10c+; /venues shows the radar. - NEXT — spread study: once a week or two of spreads accumulate, measure persistence and depth: which pairs stay wide long enough to cross both legs, net of Kalshi taker fees + Polymarket spread/gas?
- THEN — paper cross-venue arb: a strategy that "executes" both legs against recorded quotes with venue-true fee models.
- LAST — live execution: Polymarket CLOB trading (USDC on Polygon, wallet plumbing exists in Settings) + simultaneous Kalshi leg, with partial-fill/leg-risk handling. Gated on the phase-4 evidence.
Data rules that keep merging seamless
markets.venue(DB defaultkalshi) + namespaced tickers (PM:slug).- Prices always cents 0-100; first outcome = YES side (non-Yes/No outcome labels get appended to the title for readability).
- Kalshi-only paths guard on
venue == "kalshi": trading strategies that scan the markets table, SettlementSync candidates, box_arb's tape pass. - Watch-only strategies (sports_watch, politics_watch) are venue-agnostic on purpose — they accumulate cross-venue observations for free.
Cboe Predicts adapter — build notes (#201/#220/#202, 2026-09-08)
Status: DATA LIVE (delayed). Venues.Cboe (venue_id "cboe", prefix CB:) pulls the zero-auth delayed-quote chain GET https://cdn.cboe.com/api/global/delayed_quotes/options/_XSPBX.json every ~10 min via VenueSync (600s min-interval; the feed is ~15-min delayed, so a faster cadence buys nothing). The HTTP client is config-injected (:cboe_http, default Req) exactly like the :gemini_http/:email_http seams, so tests run off a fixture and never touch the network.
- JSON shape:
{"timestamp", "symbol":"_XSPBX", "data":{"current_price", "options":[{"option":"XSPBW260908C00650000","bid":0.62,"ask":0.66, "last_trade_price":0.64,"volume":1200,"open_interest":3400}, …]}}. Eachoptionis OCC-style<root><yymmdd><C|P><strike*1000>; prices are quoted 0–1. - Normalization: one YES row per (expiry, strike) anchored on the CALL (
YES = "S&P 500 closes above strike"), prices 0–1 → cents, NO side = YES complement, matching PUT quote stashed inraw["put"]. Same-day expiries;close_timeset to 20:00 UTC (≈16:00 ET equity close — exact settlement time is a #202 verification item). Every row carriesraw["delayed"]=trueandraw["delay_minutes"]=15.raw["floor_strike"]is the native XSP value (e.g. 650);raw["spx_strike"]is the ×10 SPX level (6500). Sample parsed row:CB:XSPBW260908C00650000→ yes_bid 62 / yes_ask 66 / last 64, categoryFinancials, close 2026-09-08 20:00Z.
Equivalence (#220): Equivalence.cboe_match/0 (runs inside Equivalence.run/0) is deterministic — XSP = SPX/10, so a Cboe XSP strike × 10 must equal the Kalshi S&P strike (parsed off the -T<strike> suffix of KXINX% daily ladders), and the expiry dates must be the same calendar day (daily ladders repeat every strike each day, so date alignment is the disambiguator). Links insert as method "deterministic", other_venue "cboe"; spreads then flow into venue_spreads and the /venues radar like every other pair. This is a THIRD independent book on the S&P family (alongside Kalshi and CME/FanDuel). Wiring note: the Kalshi S&P series prefix is @kx_sp_prefixes ~w(KXINX) in equivalence.ex — if Kalshi's live S&P daily series ticker differs, extend that list.
Settlement-terms verification (#202 → #274) — VERDICT: XSPBW CONFIDENT, XSPBX BLOCKED. The #202 pass held the whole family at REVIEW because the Cboe settlement basis was unverified. #274 verified it from Cboe's official contract materials and split the family by OCC root:
- Cboe XSPBW = p.m.-settled. Exercise-settlement value is one-tenth (1/10th) the official CLOSING price of the SPX index; trading ordinarily ceases 3:00 p.m. CT (= 4:00 p.m. ET) on the expiration day; European-style; daily expiries. The "yes" pays $100 if the index settles at or above the strike (inclusive
>=), else $0. Sources: Cboe Mini S&P 500 Index Binary Options Contract Specifications (https://cdn.cboe.com/resources/membership/Mini_SP_500_Index_Binary_Options_Contract_Specifications.pdf); Cboe Investor-Relations launch release (https://ir.cboe.com/news/news-details/2026/Cboe-Introduces-Cboe-Predicts-Launching-First-Products-in-New-Prediction-Markets-Suite/default.aspx) — "paying $100 if the index settles at or above a specified level, or $0 otherwise". - Cboe XSPBX = a.m.-settled. Same chain, but exercise-settlement value is the Special Opening Quotation (SOQ) — the a.m. opening print — a materially different basis from a p.m. close.
- Kalshi INX (
KXINX*) settles to the S&P 500 index closing value on the expiration date (p.m., ~4:00 p.m. ET), per the Kalshi rules text in each market'sraw, inclusive at the strike ("at or above"). - Verdict. XSPBW basis, time-of-day, and inclusivity all match Kalshi INX; XSPBX (a.m. SOQ) diverges. The only remaining difference for XSPBW is the representation scale (XSP = SPX/10), which is a known scale, not a settlement difference — the CF-Benchmarks-vs-Kaiko trap does not apply here.
- How it's graded now (
Research.EquivalenceTerms): the Cboe row stores both the native XSP strike (650,raw["floor_strike"]) and the SPX-scaled level (6500,raw["spx_strike"]); grading now compares onspx_strike, so the scale no longer forces a false mismatch. The settlement basis is derived from the OCC root (XSPBW → :sp_pm_close,XSPBX → :sp_am_soq; Kalshi INX →:sp_pm_close) and fed into the source axis. XSPBW↔INX now grades ≥ the 0.6 arb floor (Equivalence.confident?/1→ true) and becomes execution-eligible; XSPBX↔INX is capped below the floor with the notesettlement basis differs — a.m. SOQ open vs p.m. index closeand stays review-only. Wiring note: no schema/config change — the basis logic keys off tickers/rawalready present; the live feed root (_XSPBX.jsoncurrently returns XSPBW-rooted PM contracts) determines which links unlock.