The cross-exchange
prediction market API.

All exchanges. One event. Separate contracts, separate schemas, separate sides. Aggregated, normalized, and matched by Surface.

Kalshi + Polymarket
Kalshi series Unique orderbooks Settlement consistency
KXBTC15MBitcoin price up down 7,493 97.5%
KXETH15METH 15M price up down 7,493 97.7%
KXKBOGAMEKBO Game 414 100.0%
KXMLBGAMEProfessional Baseball Game 1,604 100.0%
KXMLBHRPro Baseball Home Runs 22,371 100.0%
KXMLBKSPro Baseball Strikeouts 5,237 100.0%
KXMLBTOTALPro Baseball Total Points 5,365 100.0%
Mapping mix
KXMLBHR 44.8% KXBTC15M 15.0% KXETH15M 15.0% KXMLBTOTAL 10.7% KXMLBKS 10.5% KXMLBGAME 3.2% KXKBOGAME 0.8%
Unique orderbooks49,977
Unique series7
Unique events18,169
Settlement consistency99.4%

Built for

Traders

Port strategies across exchanges and find an edge in the orderbooks.

Researchers

Unlock diverse market data and aggregate true probabilities.

Builders

Create seamless cross-exchange experiences for your users.

What it does

One call

Pass any Kalshi ticker or Polymarket slug and get the full normalized cluster.

Deterministic

Matches are determined ahead of time from explicit fields and rules.

Know your side

is_inverse tells you when YES on Kalshi equals NO on Polymarket.

More exchanges

Use one consistent API as Surface connects more prediction-market exchanges.

Match API — resolve any contract cross-exchangefull docs →
# resolve any contract cross-exchange
curl "https://surfaceapi.com/api/v1/match/KXMLBGAME-26MAR252005NYYSF-SF?include_rules=true" \
  -H "X-API-Key: sk_surface_..."

# → 200 OK
{
  "contracts": {
    "kalshi": {
      "KXMLBGAME-...-SF": { "question": "..." },
      "KXMLBGAME-...-NYY": { "question": "..." }
    },
    "polymarket": {
      "mlb-nyy-sf-2026-03-25": { "question": "..." }
    }
  },
  "matches": {
    "kalshi": {
      "KXMLBGAME-...-SF": {
        "polymarket": {
          "mlb-nyy-sf-2026-03-25": { "is_inverse": false }
        }
      }
    }
  }
}