API reference
Public JSON, no key needed, cached for a minute or more. Please stay under one request a second. Pro exports need your license key.
Changes
Newest first. Query: venue (pm, kalshi), kind (comma list: clarification, rules, source, dispute, dates, title, resolution, filled; all for everything; default is edits without routine ones), cat, topic=midterms, q, before (an id, for paging), limit (up to 100).
curl "https://ruleswatch.com/api/changes?venue=pm&kind=clarification,rules&limit=5"
{ "changes": [{ "id": 1234, "venue": "pm", "market_id": "562802", "ts": 1793500000, "prev_seen": 1793499700,
"kind": "clarification", "title": "…", "summary": "Rules: 41 words added",
"diff": [{ "f": "description", "label": "Rules", "ops": [[0, "unchanged…"], [1, "added…"], [-1, "removed…"]] }],
"p_before": 0.62, "p_at": 0.55, "p_after": 0.51, "url": "/change/1234", "history_url": "/market/pm/562802" }], "more": true }
Diff ops: 0 unchanged, 1 added, -1 removed. Date, source and UMA fields have before and after instead of ops.
One change with its siblings in the event and the market's change history.
Markets
Query: q, venue, cat, minvol, pmin and pmax (cents), closing (1, 7, 30 days), edited=1, status (open, closed, all), sort (vol, edits, recent, ending, price, new), page, per.
curl "https://ruleswatch.com/api/markets?cat=politics&edited=1&sort=edits"
The current rules, every change, every reconstructed version, related markets.
{ points: [[unix seconds, yes price 0..1], …], fetched }, from the venue, kept 15 minutes.
The live resolution stage from the venue.
The record and search
Every number on the record.
Export (Pro)
Every change in the last days (default 90), as CSV (one row per changed field) or format=json. scope=watchlist limits it to your markets.
curl -H "Authorization: Bearer YOUR_LICENSE_KEY" "https://ruleswatch.com/api/export?format=json&days=30"
Errors
Errors are JSON with an error sentence and a status: 400 bad input, 401 missing key, 402 needs Pro, 404 not found or not tracked, 429 too many, 502 the venue didn't answer.
Feeds
/feed.xml for every edit; each watchlist has a private one.