PredictorSDK

Look up matched sports events by identifier

Finds the matched sports events that hold identifiers you already have, in one unpaginated call: a canonical event key as event_id, and any identifier a venue publishes (a market's market_id, market_slug or event_id; on Polymarket, Predict and AlphaArcade an outcome token; on Polymarket also a conditionId) as source_id={provider}:{id}.

GET
/v1/matching-markets/sports/lookup

Finds the matched sports events that hold identifiers you already have, in one unpaginated call: a canonical event key as event_id, and any identifier a venue publishes (a market's market_id, market_slug or event_id; on Polymarket, Predict and AlphaArcade an outcome token; on Polymarket also a conditionId) as source_id={provider}:{id}. Send at least one, and up to 100 unique identifiers across both parameters.

Each event found is in data once, in the shape GET /v1/matching-markets/sports lists (with its scheduled_start and scheduled_date), however many identifiers found it. lookups lists every identifier you sent under its spelling as sent, with the event_ids it found, or none: that is how a miss is told from a hit without comparing your inputs to the response. An identifier that finds nothing is a 200, not a 404.

A lookup returns each event in full: every matched submarket, so a spread ticker's answer contains the spread it names. Send include_submarkets=false for only each event's full-game moneyline. It reads the same population as the list, so a game whose date has passed, or that a venue cancelled, is not found unless include_settled=true.

Player props use strict settlement-equivalent matching by default; player_prop_match=same_prop compares roster-verified props with the same player, game, statistic, full-game period, and threshold even when settlement rules differ or remain unverified. A prop's own identifier finds its game under either policy when the game has another matched submarket, while the prop itself appears only when the policy admits it.

Every moneyline, spread, total and team total carries settlement_equivalence, as on the list route, so a lookup by a Kalshi spread ticker answers whether that spread settles like the same line on another venue. Send include_rules=true to also get the rule_comparisons rows behind it (tie, overtime and push, with each venue's value and evidence).

Matching runs continuously in the background and this endpoint reads the stored result, so every response carries snapshot.observed_at: how old the venue data behind it is. Check it before treating an identifier that found nothing as unmatched — a lookup that finds nothing in a snapshot that stopped updating looks exactly like one that finds nothing in a current one.

Authorization

BearerAuth
AuthorizationBearer <token>

In: header

Query Parameters

event_id?array<string>

Canonical event key(s) to look up (for example, nba-okc-sas-2026-10-20), matched case-insensitively. Repeat the parameter for several events (do not comma-join them), and combine it freely with source_id, up to 100 unique identifiers in all. At least one event_id or source_id is required. A venue's own ID here (a Kalshi ticker, a numeric ID, an SX Bet L… fixture, an 0x hash, a ULID or a {provider}:{id} composite) is a 400 telling you to send it as source_id, and so is an empty value. So is a value that matches no canonical event but is a venue's identifier, most often a Polymarket slug: a night game's slug carries the UTC date (nfl-sea-den-2026-10-16 for the canonical nfl-sea-den-2026-10-15), and Polymarket spells some teams differently (cal for Calgary, la for the Rams).

Itemsitems <= 100
source_id?array<string>

Venue identifier(s) to look up, as {provider}:{id}: any market_id, market_slug or event_id that a data[].submarkets[].source_markets[] entry publishes, prefixed with that entry's provider. On Polymarket, Predict, AlphaArcade and Hyperliquid an outcome token (outcomes[].outcome_id) works too, because those tokens identify one market (a Hyperliquid token starts with #, which a URL must send as %23), and on Polymarket so does a market's conditionId, the ID wallet positions carry. Elsewhere outcome IDs are side names such as yes that repeat in every market: Kalshi's, Pred's and Limitless's yes/no and SX Bet's outcomeOne/outcomeTwo are a 400 that points to market_id. For example kalshi:KXNBAGAME-26OCT20OKCSAS (an event ticker), kalshi:KXNBAGAME-26OCT20OKCSAS-OKC (a market ticker), sxbet:L19766755 (a fixture), or Pred's pred:<parent_market_id>:<child_market_id> pair, or a Limitless market's slug. Only the text before the first colon is the provider, and it must be one of kalshi, polymarket, predict, sxbet, alpha-arcade, prophetx, pred, limitless or hyperliquid; anything else is a 400 naming the value. Matching is case-insensitive. lookups reports every identifier under its spelling as sent (whitespace around the provider and ID trimmed), with the canonical events it found. Repeat the parameter for several identifiers, across providers (a comma-joined list or an empty value is a 400); combined with event_id, up to 100 unique identifiers in all. At least one event_id or source_id is required. A lookup finds the event an identifier belongs to and, by default, returns it in full, so the submarket the identifier names is in it unless include_submarkets=false. A player prop finds its game under any player_prop_match policy when the game has another matched submarket, while the prop itself appears only when the policy admits it; a game matched only on props the policy excludes is not returned.

Itemsitems <= 100
include_settled?boolean

Selects which events the lookup searches. Defaults to false: only events whose scheduled start has not certainly passed — today's games, plus a one-day grace so a late start that runs past midnight Eastern is never dropped mid-play. Set it to true to also search the settled archive: events that left the live matching run, usually because the venues settled or delisted them. That adds games whose date is further in the past, including ones a venue still lists as open, and games a venue cancelled, which can be future-dated; the default leaves a cancelled game out.

Because it selects the population, a lookup for a past-dated or cancelled game answers 200 with the identifier listed in lookups with no events, unless this is true. A game that has started is served with the fullest mapping it had, as on the list: a lookup by another venue's identifier finds nothing for games archived before 2026-10-04 21:26 UTC, which kept only the venues that still listed them and age out of the 30-day archive by 2026-11-04.

Defaultfalse
player_prop_match?string

Player-prop admission policy. It requires include_submarkets to be true, which it is by default on a lookup; with include_submarkets=false it is a 400. Matched case-insensitively. strict (the default) includes only groups of at least two distinct providers with verified player/game/stat/threshold/side identity and a completely reviewed equivalent settlement profile. same_prop retains exact prop identity but also admits different or unverified settlement rules, identified by settlement_equivalence and rule_comparisons. Unknown rules never prove equivalence. Applies with include_settled. Does not change game-line matching. Historical snapshots without verified player identity do not expose props.

Default"strict"

Value in

  • "strict"
  • "same_prop"
include_submarkets?boolean

When true, each event lists every matched submarket (spreads, totals, period lines and player props); when false, only its full-game moneyline, and an event appears only when that is matched. Defaults to true on a lookup, which returns the events it finds in full: a spread ticker shows its spread. Every submarket has the same shape, so code written against the moneyline reads the rest unchanged. This is an identity mapping only; fetch current status, quotes, and liquidity from the referenced market resources. Explicit player_prop_match requires this to be true.

Defaulttrue
include_rules?boolean

When true, every moneyline, spread and total also lists rule_comparisons: the three rows (tie, overtime and push), each with every source market's value, a description and an evidence link, that sit behind its settlement_equivalence. When false, the default, a game line carries settlement_equivalence alone: the verdict is always there and only the rows are left out. The rows are about 60% of an event's bytes on a busy football slate, and a lookup returns every submarket, so ask for them when you want the evidence. A player prop always carries its own matrix, whatever this is. The flag changes what each event lists and never which events are found.

Defaultfalse

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/matching-markets/sports/lookup"

{  "data": [    {      "event_id": "nba-okc-sas-2026-10-20",      "sport": "basketball",      "league": "nba",      "title": "Oklahoma City Thunder vs. San Antonio Spurs",      "scheduled_start": "2026-10-20T23:30:00.000Z",      "scheduled_date": "2026-10-20",      "participants": [        {          "key": "okc",          "name": "Oklahoma City Thunder",          "role": "away"        },        {          "key": "sas",          "name": "San Antonio Spurs",          "role": "home"        }      ],      "submarkets": [        {          "key": "moneyline|full|winner",          "market_type": "moneyline",          "segment": "full",          "display_name": "Winner",          "metric": "winner",          "outcomes": [            {              "key": "winner:okc",              "label": "Oklahoma City Thunder win",              "type": "participant",              "side": "win"            },            {              "key": "winner:sas",              "label": "San Antonio Spurs win",              "type": "participant",              "side": "win"            }          ],          "source_markets": [            {              "provider": "kalshi",              "event_id": "KXNBAGAME-26OCT20OKCSAS",              "market_id": "KXNBAGAME-26OCT20OKCSAS-OKC",              "market_name": "Oklahoma City wins",              "outcomes": [                {                  "canonical_outcome_key": "winner:okc",                  "label": "Yes",                  "outcome_id": "yes",                  "side": "yes"                },                {                  "canonical_outcome_key": "winner:sas",                  "label": "No",                  "outcome_id": "no",                  "side": "no"                }              ]            },            {              "provider": "kalshi",              "event_id": "KXNBAGAME-26OCT20OKCSAS",              "market_id": "KXNBAGAME-26OCT20OKCSAS-SAS",              "market_name": "San Antonio wins",              "outcomes": [                {                  "canonical_outcome_key": "winner:sas",                  "label": "Yes",                  "outcome_id": "yes",                  "side": "yes"                },                {                  "canonical_outcome_key": "winner:okc",                  "label": "No",                  "outcome_id": "no",                  "side": "no"                }              ]            },            {              "provider": "sxbet",              "event_id": "L19766755",              "market_id": "0xb4d047a709aae881e5ccad9d123592967644ee1df1f17078c762b388e41b81c5",              "market_name": "San Antonio Spurs vs Oklahoma City Thunder",              "outcomes": [                {                  "canonical_outcome_key": "winner:sas",                  "label": "San Antonio Spurs",                  "outcome_id": "outcomeOne"                },                {                  "canonical_outcome_key": "winner:okc",                  "label": "Oklahoma City Thunder",                  "outcome_id": "outcomeTwo"                }              ]            }          ],          "settlement_equivalence": "equivalent"        }      ]    }  ],  "lookups": {    "kalshi:KXNBAGAME-26OCT20OKCSAS": {      "event_ids": [        "nba-okc-sas-2026-10-20"      ]    },    "sxbet:L19766755": {      "event_ids": [        "nba-okc-sas-2026-10-20"      ]    }  },  "snapshot": {    "observed_at": "2026-10-03T23:11:41.515Z"  }}