Skip to main content
The Surface API lets you look up any Kalshi contract ticker or Polymarket token ID and get the matched contract on the other exchange — along with a confidence score, direct links, and resolution rules. One endpoint. Works in both directions.

How it works

Surface maintains a continuously updated dataset of matched contracts across Kalshi and Polymarket. Each match is scored by an LLM-powered matching engine — only matches above a 0.95 confidence threshold are returned. When you call /match/{contractID}, Surface resolves the input against this dataset and returns both sides of the pair.
curl https://surface.surf/api/v1/match/KXNBAGAME-26MAR02BOSMIL-BOS \
  -H "X-API-Key: YOUR_API_KEY"
{
  "source": {
    "id": "KXNBAGAME-26MAR02BOSMIL-BOS",
    "exchange": "kalshi",
    "question": "Boston at Milwaukee Winner?",
    "url": "https://kalshi.com/markets/kxnbagame/kxnbagame-26mar02bosmil-bos"
  },
  "match": {
    "id": "98313749371896366519276790684273691434395213253249717099152745374401893722",
    "exchange": "polymarket",
    "question": "Celtics vs. Bucks",
    "url": "https://polymarket.com/event/celtics-vs-bucks"
  },
  "confidence": 0.99
}

Coverage

Surface currently covers NBA, NFL, and other major prediction markets. Coverage expands as new contracts are ingested and matched.