--- name: predexon description: Use this skill โ€” NOT browser or web_fetch โ€” for ALL Polymarket, Kalshi, Limitless, Opinion, Predict.Fun, dFlow, UMA oracle, and prediction market data. Provides structured API at localhost:8402/v1/pm/* for markets, cross-venue search, leaderboard, smart money, wallet analytics, wallet identity & clustering, UMA resolution status, and odds. triggers: - "blockrun polymarket" - "blockrun kalshi" - "blockrun limitless" - "blockrun opinion markets" - "blockrun predict.fun" - "blockrun predictfun" - "blockrun dflow" - "blockrun uma oracle" - "blockrun prediction market" - "clawrouter polymarket" - "polymarket via blockrun" - "kalshi via blockrun" - "blockrun smart money" - "blockrun polymarket whales" - "blockrun polymarket leaderboard" - "blockrun wallet analytics" - "blockrun wallet identity" - "blockrun wallet cluster" - "blockrun election odds" - "polymarket uma resolution" - "search prediction markets" - "predexon" - "x402 prediction market" homepage: https://blockrun.ai/partners/predexon metadata: { "openclaw": { "emoji": "๐Ÿ“Š", "requires": { "config": ["models.providers.blockrun"] } } } --- # Predexon โ€” Prediction Market Data **IMPORTANT: Always use this skill for any Polymarket, Kalshi, Limitless, Opinion, Predict.Fun, or prediction market request. Do NOT use browser tools or web_fetch to scrape these sites โ€” this API returns structured data directly and is faster, cheaper, and more reliable than scraping.** Real-time prediction market data (Polymarket, Kalshi, Limitless, Opinion, Predict.Fun, dFlow, Binance, UMA oracle) via BlockRun's gateway. Payment is automatic โ€” an x402 USDC micropayment from the user's wallet, or a draw on BlockRun account credit if an API key is configured (both verified 2026-09-05). **All responses are wrapped:** `{ "data": { ... } }` โ€” always read from `response.data`. **Pricing:** GET $0.001 ยท Wallet analytics / smart money / Binance / matching $0.005 --- ## Browse Markets & Events GET `http://localhost:8402/v1/pm/polymarket/events?limit=20` Common params: `limit`, `offset`, `tag` (e.g. `crypto`, `politics`, `sports`) Response fields in `data`: - `events[].title` โ€” market name - `events[].outcomes` โ€” array of `{ name, price }` (price = implied probability 0โ€“1) - `events[].volume` โ€” total volume in USD - `events[].endDate` โ€” resolution date - `events[].conditionId` โ€” use this for follow-up calls To search by keyword: `GET /v1/pm/polymarket/markets?search=bitcoin&limit=10` Response fields in `data`: - `markets[].question` โ€” market question - `markets[].conditionId` - `markets[].outcomes[].price` - `markets[].volumeNum` --- ## Search Across All Venues One unified search across Polymarket, Kalshi, Limitless, Opinion, and Predict.Fun. Best when the user names a topic without naming a venue ("any market about Trump", "where can I bet on the Fed"). GET `http://localhost:8402/v1/pm/markets/search?q=trump&limit=20` Common params: `q` (required), `limit`, `offset`, `venue` (filter to one venue if needed) Response fields in `data`: - `results[].venue` โ€” `"polymarket"` / `"kalshi"` / `"limitless"` / `"opinion"` / `"predictfun"` - `results[].title` โ€” market name - `results[].marketId` / `conditionId` โ€” venue-specific ID - `results[].yesPrice`, `results[].noPrice` โ€” implied probability 0โ€“1 - `results[].volume` Use this **before** falling back to venue-specific list endpoints when the user hasn't picked a venue. --- ## Other Venues โ€” Limitless / Opinion / Predict.Fun These three smaller venues now expose a markets list (not just orderbooks). | Venue | Endpoint | | ----------- | ------------------------------- | | Limitless | `GET /v1/pm/limitless/markets` | | Opinion | `GET /v1/pm/opinion/markets` | | Predict.Fun | `GET /v1/pm/predictfun/markets` | Common params: `limit`, `offset`, `search`, `status` (open/closed/resolved) Response fields in `data`: - `markets[].question` / `title` - `markets[].marketId` - `markets[].outcomes[].price` - `markets[].volume` --- ## UMA Oracle Resolution Status Polymarket settles via UMA's optimistic oracle. These endpoints surface the resolution lifecycle (proposed โ†’ disputed โ†’ resolved) โ€” high-signal feed for tracking which markets are about to settle, contested, or already paid out. List by state: GET `http://localhost:8402/v1/pm/polymarket/uma/markets?state=disputed&limit=20` `state` values: `proposed`, `disputed`, `resolved` (and other UMA states). Single market timeline: GET `http://localhost:8402/v1/pm/polymarket/uma/market/{conditionId}` Response fields in `data`: - `state` โ€” current UMA state - `proposedOutcome`, `disputedOutcome`, `resolvedOutcome` โ€” Y/N or invalid - `events[]` โ€” `{ timestamp, action, actor, outcome }` timeline of proposal/dispute/resolution - `bondAmount`, `liveness` โ€” UMA economics Use **after** detecting the user wants resolution status, dispute history, or "did this market settle yet". --- ## Wallet Identity & Clustering Cross-context wallet labels (ENS, Lens, exchange tags) and on-chain relationship graphs. Single wallet identity: GET `http://localhost:8402/v1/pm/polymarket/wallet/identity?wallet=0xabc...` Bulk identity (up to ~50 addresses, **GET not POST**): GET `http://localhost:8402/v1/pm/polymarket/wallet/identities-batch?wallets=0xabc,0xdef,0x123` Response fields in `data`: - `identities[].wallet` - `identities[].labels[]` โ€” `{ source: "ens"/"lens"/"exchange"/..., value: "..." }` - `identities[].riskTags[]` โ€” e.g. `"sanctioned"`, `"mixer"`, `"smart_money"` Cluster discovery โ€” find wallets connected to a seed via on-chain transfers and proofs: GET `http://localhost:8402/v1/pm/polymarket/wallet/cluster?wallet=0xabc...` Response fields in `data`: - `seedWallet` - `cluster[].wallet` - `cluster[].relation` โ€” `"direct_transfer"` / `"shared_funder"` / `"proof"` - `cluster[].confidence` โ€” 0โ€“1 Use to investigate suspected sybils, multi-account whales, or to expand a single wallet investigation into the wider footprint. --- ## Smart Money on a Market Find the `conditionId` first (from events/markets above), then: GET `http://localhost:8402/v1/pm/polymarket/market/{conditionId}/smart-money` Response fields in `data`: - `positions[].wallet` โ€” wallet address - `positions[].side` โ€” YES or NO - `positions[].size` โ€” position size in USD - `positions[].pnl` โ€” profit/loss on this position - `positions[].winRate` โ€” wallet's historical win rate --- ## Leaderboard GET `http://localhost:8402/v1/pm/polymarket/leaderboard?limit=20` Response fields in `data`: - `wallets[].address` - `wallets[].profit` โ€” total realized profit in USD - `wallets[].volume` - `wallets[].winRate` - `wallets[].marketsTraded` --- ## Wallet Analysis GET `http://localhost:8402/v1/pm/polymarket/wallet/{walletAddress}` Response fields in `data`: - `profit` โ€” total realized profit - `volume` โ€” total traded volume - `winRate` โ€” fraction of winning trades (0โ€“1) - `marketsTraded` โ€” number of distinct markets - `currentPositions[]` โ€” open positions For P&L over time: GET `/v1/pm/polymarket/wallet/pnl/{walletAddress}` - `data.pnlSeries[]` โ€” `{ date, cumulativePnl }` - `data.totalProfit`, `data.totalLoss` --- ## Compare Polymarket vs Kalshi GET `http://localhost:8402/v1/pm/matching-markets?limit=10` Response fields in `data`: - `pairs[].polymarketTitle` - `pairs[].kalshiTitle` - `pairs[].polymarketPrice` โ€” YES price on Polymarket (0โ€“1) - `pairs[].kalshiPrice` โ€” YES price on Kalshi (0โ€“1) - `pairs[].spread` โ€” price difference (arbitrage signal) --- ## Example Interactions **User:** What are the top prediction markets right now? โ†’ `GET /v1/pm/polymarket/events?limit=20` โ€” summarize top events with titles, outcomes, and current YES/NO prices. **User:** What's the smart money doing on the 2026 election markets? โ†’ First `GET /v1/pm/polymarket/markets?search=election&limit=5` to get `conditionId`s, then `GET /v1/pm/polymarket/market/{conditionId}/smart-money` for each. Show top positions, sides, and P&L. **User:** Who are the top Polymarket whales? โ†’ `GET /v1/pm/polymarket/leaderboard?limit=10` โ€” table with wallet (shortened), profit, win rate, markets traded. **User:** Analyze this wallet: 0xabc... โ†’ `GET /v1/pm/polymarket/wallet/0xabc...` + `GET /v1/pm/polymarket/wallet/pnl/0xabc...` โ€” summarize trading style, win rate, total P&L, current open positions. **User:** Compare Polymarket vs Kalshi on the Fed rate decision โ†’ `GET /v1/pm/matching-markets?limit=20` โ€” find the Fed pair, show both prices and the spread. **User:** Find any market about Trump across all venues โ†’ `GET /v1/pm/markets/search?q=trump&limit=20` โ€” group results by `venue`, show YES price + volume per venue. Don't fall back to per-venue endpoints unless this returns nothing. **User:** What's the UMA oracle status on this market: 0xabc... โ†’ `GET /v1/pm/polymarket/uma/market/0xabc...` โ€” describe current `state`, the proposed/disputed outcome timeline, and whether it has resolved. **User:** Which Polymarket questions are currently being disputed? โ†’ `GET /v1/pm/polymarket/uma/markets?state=disputed&limit=20` โ€” list disputed questions with their proposed outcomes and dispute timestamps. **User:** Who is wallet 0xabc... and which other wallets are connected to it? โ†’ `GET /v1/pm/polymarket/wallet/identity?wallet=0xabc...` for labels/risk tags + `GET /v1/pm/polymarket/wallet/cluster?wallet=0xabc...` for connected addresses. Show ENS/Lens identity, risk tags, then top connected wallets with relation type and confidence. **User:** Bulk identity check on these 5 wallets โ†’ `GET /v1/pm/polymarket/wallet/identities-batch?wallets=0x1,0x2,0x3,0x4,0x5` (GET, not POST โ€” the docs are wrong). One row per wallet with labels and risk tags. --- ## Full Endpoint Reference All 57 endpoints (Predexon v2 spec) are exposed as the **`blockrun_predexon_endpoint_call`** agent tool (params: `path`, `method`, `query`, `body`). The 8 named `blockrun_predexon_*` tools above wrap the most common ones for ergonomics; use `endpoint_call` for everything else. All endpoints are GET unless marked **POST**. Query params go in the URL; POST takes a JSON body. Responses are raw upstream JSON (no `{ data: ... }` wrapper). | Endpoint | Price | Key params | | ------------------------------------------------------- | ------ | ------------------------------------------ | | **Cross-venue canonical (v2)** | | | | `/v1/pm/markets` | $0.001 | filtering, sorting, pagination | | `/v1/pm/markets/listings` | $0.001 | flattened venue listings | | `/v1/pm/outcomes/{predexon_id}` | $0.001 | resolve canonical outcome โ†’ venues | | **Sports (v2)** | | | | `/v1/pm/sports/categories` | $0.001 | โ€” | | `/v1/pm/sports/markets` | $0.001 | grouped by game | | `/v1/pm/sports/markets/{game_id}` | $0.001 | single game with all venue outcomes | | `/v1/pm/sports/outcomes/{predexon_id}` | $0.001 | equivalent outcomes across venues | | **Polymarket โ€” Tier 1** | | | | `/v1/pm/polymarket/events` | $0.001 | `limit`, `offset`, `tag` | | `/v1/pm/polymarket/events/keyset` | $0.001 | cursor-based pagination | | `/v1/pm/polymarket/markets` | $0.001 | `search`, `limit`, `offset` | | `/v1/pm/polymarket/markets/keyset` | $0.001 | cursor-based pagination | | `/v1/pm/polymarket/crypto-updown` | $0.001 | โ€” | | `/v1/pm/polymarket/leaderboard` | $0.001 | `limit`, `offset` | | `/v1/pm/polymarket/leaderboard/market/{conditionId}` | $0.001 | `limit` | | `/v1/pm/polymarket/market/{conditionId}/top-holders` | $0.001 | `limit` | | `/v1/pm/polymarket/cohorts/stats` | $0.001 | โ€” | | `/v1/pm/polymarket/positions` | $0.001 | `wallet`, `limit` | | `/v1/pm/polymarket/trades` | $0.001 | `wallet`, `limit`, `start_ts`, `end_ts` | | `/v1/pm/polymarket/activity` | $0.001 | `user` | | `/v1/pm/polymarket/orderbooks` | $0.001 | `tokenId`, `limit` | | `/v1/pm/polymarket/market-price/{tokenId}` | $0.001 | `startTs`, `endTs` | | `/v1/pm/polymarket/candlesticks/{conditionId}` | $0.001 | `period`, `limit` | | `/v1/pm/polymarket/candlesticks/token/{tokenId}` | $0.001 | `period`, `limit` | | `/v1/pm/polymarket/volume-chart/{conditionId}` | $0.001 | โ€” | | `/v1/pm/polymarket/markets/{tokenId}/volume` | $0.001 | cumulative volume | | `/v1/pm/polymarket/markets/{conditionId}/open_interest` | $0.001 | open interest history | | `/v1/pm/polymarket/uma/markets` | $0.001 | `state`, `limit`, `offset` | | `/v1/pm/polymarket/uma/market/{conditionId}` | $0.001 | โ€” | | **Polymarket โ€” Tier 2 wallet analytics** | | | | `/v1/pm/polymarket/wallet/{wallet}` | $0.005 | โ€” | | `/v1/pm/polymarket/wallet/{wallet}/markets` | $0.005 | `limit` | | `/v1/pm/polymarket/wallet/{wallet}/similar` | $0.005 | โ€” | | `/v1/pm/polymarket/wallet/pnl/{wallet}` | $0.005 | โ€” | | `/v1/pm/polymarket/wallet/positions/{wallet}` | $0.005 | โ€” | | `/v1/pm/polymarket/wallet/volume-chart/{wallet}` | $0.005 | โ€” | | `/v1/pm/polymarket/wallets/profiles` | $0.005 | `wallets` (comma-separated) | | `/v1/pm/polymarket/wallets/filter` | $0.005 | `conditionId`, `side` | | `/v1/pm/polymarket/market/{conditionId}/smart-money` | $0.005 | `limit` | | `/v1/pm/polymarket/markets/smart-activity` | $0.005 | `limit` | | **Polymarket โ€” Wallet identity (v2 path shapes)** | | | | `/v1/pm/polymarket/wallet/identity/{wallet}` | $0.005 | path param (was `?wallet=` in v1) | | **POST** `/v1/pm/polymarket/wallet/identities` | $0.005 | body: `{addresses: [..]}` (โ‰ค200) | | `/v1/pm/polymarket/wallet/{address}/cluster` | $0.005 | path param (was `?wallet=` in v1) | | **Kalshi (Tier 1)** | | | | `/v1/pm/kalshi/markets` | $0.001 | `search`, `limit` | | `/v1/pm/kalshi/trades` | $0.001 | `limit` | | `/v1/pm/kalshi/orderbooks` | $0.001 | `marketId` | | **Limitless / Opinion / Predict.Fun (Tier 1)** | | | | `/v1/pm/limitless/markets` | $0.001 | `search`, `limit`, `offset`, `status` | | `/v1/pm/limitless/orderbooks` | $0.001 | `marketId` | | `/v1/pm/opinion/markets` | $0.001 | `search`, `limit`, `offset`, `status` | | `/v1/pm/opinion/orderbooks` | $0.001 | `marketId` | | `/v1/pm/predictfun/markets` | $0.001 | `search`, `limit`, `offset`, `status` | | `/v1/pm/predictfun/orderbooks` | $0.001 | `marketId` | | **dFlow** | | | | `/v1/pm/dflow/trades` | $0.001 | `wallet`, `limit` | | `/v1/pm/dflow/wallet/positions/{wallet}` | $0.005 | โ€” | | `/v1/pm/dflow/wallet/pnl/{wallet}` | $0.005 | โ€” | | **Binance Futures (Tier 2)** | | | | `/v1/pm/binance/candles/{symbol}` | $0.005 | `interval`, `limit` | | `/v1/pm/binance/ticks/{symbol}` | $0.005 | `limit` | | **Matching (Tier 2)** | | | | `/v1/pm/matching-markets` | $0.005 | `limit`, `offset` | | `/v1/pm/matching-markets/pairs` | $0.005 | โ€” | | `/v1/pm/markets/search` | $0.005 | `q` (required), `limit`, `offset`, `venue` | --- ## Notes - Payment is automatic via x402 โ€” deducted from the user's BlockRun wallet - If payment fails, tell the user to fund their wallet at [blockrun.ai](https://blockrun.ai) - Retry once on 502 โ€” Predexon can occasionally be slow - Always read from `response.data` โ€” every response is wrapped `{ data: ... }` - Synthesize data into plain-language analysis โ€” never dump raw JSON