- A spread scanner across pre-matched venue pairs
- A profitability filter (net of fees and round-trip cost)
- Two-leg execution, one venue-specific order per leg
How matching works
Predexon maintains LLM-curated equivalence between markets across venues — same question, normalized outcome labels, similarity score. You don’t have to re-discover this from scratch.Step 1 — Pull matched pairs
min_similarity=98 filters to near-exact matches. Drop to 90 for more pairs at the cost of more false positives.
Step 2 — Quote each side
For each pair, get current YES-side prices on each venue. Polymarket gives prices 0–1, Kalshi gives cents 0–100 — normalize.Step 3 — Compute spread net of fees
The naive spread is|poly_yes - kalshi_yes|. The real number includes round-trip fees on both sides.
- Buy NO on the venue trading higher (you profit if it resolves NO at $1)
- Buy YES on the venue trading lower (you profit if it resolves YES at $1)
- Total cost:
(higher_no_price + lower_yes_price)per pair - Total payout: $1 regardless of outcome
- Profit per pair:
$1 - (higher_no_price + lower_yes_price)
arb_profit_per_pair > $0.02 is worth a closer look.
Step 4 — Surface (and optionally execute)
predexon_id to each venue’s native listing (token_id / market_ticker) for the order’s market bag.
For mixed Polymarket-Kalshi arbs, place the Polymarket leg via Predexon’s venue-specific Place Order, then call Kalshi’s native API for the Kalshi leg — Predexon doesn’t proxy Kalshi trading.
Operational realities
| Risk | Reality | Mitigation |
|---|---|---|
| Spread collapses between legs | The first leg fills, the second leg moves — you’re left holding one side | Place both legs in parallel; use market orders; accept some leg-risk |
| Venue restrictions | Kalshi requires KYC + US person status | Run KYC’d accounts only for Kalshi-touching strategies |
| Resolution timing differs | Polymarket and Kalshi resolve the same question on different schedules | Capital is locked until both sides resolve — model as carry cost |
| Both legs partial-fill | You end up with mismatched sizes | After both leg responses come back, place a corrective leg for the difference |
| Match is wrong | Similarity score is high but the questions actually differ | At min_similarity=98 this is rare but possible — verify high-conviction trades by hand |
min_similarity=99 and add a manual review step for any new pair before letting the system trade it.
Reference
- Matched Pairs — pre-computed pairs with similarity scores
- Find Matching Markets — programmatic pair discovery for a specific market
- Polymarket Price and Kalshi Markets — for live quotes
- Place Order — venue-specific order placement
- Canonical Markets — to see all venues holding a canonical outcome
