GET

/api/public/forecast-targets

Resolve a Kalshi or Polymarket event or market into exact forecast targets (free)

Accepts a public kalshi.com daily-event URL, a Kalshi event ticker, an exact binary child-market ticker, a kalshi: marketKey, or a Polymarket reference: a polymarket.com/event/{slug}, /event/{slug}/{market-slug}, or /market/{slug} browser URL, or a polymarket:{numeric-id-or-slug} marketKey. Bare non-URL refs resolve as Kalshi tickers. Event input returns the event's open binary child markets — a Kalshi strike ladder with fixed-point YES bid/ask fields, or Polymarket children resolved Gamma-first with question, outcome label, YES bid/ask, and numeric market id — and requires the caller to choose one child. Exact child input returns the same ladder plus one ready-to-submit $1.00 forecast request whose market_id is the Kalshi ticker or the numeric Polymarket Gamma id. The response is a venue-discriminated union on venue. The allContracts section is an explicit fan-out plan: each child remains one separately priced forecast; generation requires a separate request for each selected child.

Auth none (free)

Parameters

NameInTypeDescription
refquery, requiredstringKalshi or Polymarket URL, Kalshi event/child-market ticker, or kalshi:/polymarket: marketKey.

Minimum length: 1; Maximum length: 2048

Responses

200: Canonical event, its binary child markets, selection state, and request bodies
FieldTypeDescription
Alternative 1KalshiForecastTargetResolution

Exactly one alternative

Alternative 1 fields
FieldTypeDescription
input
required
string
venue
required
"kalshi"
targetType
required
"market" | "event"
selectionRequired
required
boolean
event
required
object
event fields
FieldTypeDescription
ticker
required
string
title
required
string
subtitle
required
string | null
category
required
string | null
mutuallyExclusive
required
boolean | null
sourceUrl
required
string

Format: uri

selectedMarket
required
ForecastTargetMarket | null
selectedMarket fields
FieldTypeDescription
ticker
required
string
eventTicker
required
string
title
required
string
subtitle
required
string | null
strikeType
required
string | null
floorStrike
required
number | null
capStrike
required
number | null
yesBid
required
number | null

Minimum: 0; Maximum: 1

yesAsk
required
number | null

Minimum: 0; Maximum: 1

lastPrice
required
number | null

Minimum: 0; Maximum: 1

volume24h
required
number | null

Minimum: 0

openInterest
required
number | null

Minimum: 0

status
required
string | null
closeTime
required
string | null

Format: date-time

generation
required
object
generation fields
FieldTypeDescription
costUsd
required
"1.00"
body
required
VenueMarketForecastRequest
body fields
FieldTypeDescription
kind
required
"venue_market"
venue
required
"polymarket" | "polymarket_us" | "kalshi" | "limitless"Prediction-market venue key: polymarket (Polymarket International), polymarket_us (Polymarket US), kalshi, or limitless.
market_id
required
string

Minimum length: 1; Maximum length: 512

markets
required
ForecastTargetMarket[]

Minimum items: 1

markets fields
FieldTypeDescription
ticker
required
string
eventTicker
required
string
title
required
string
subtitle
required
string | null
strikeType
required
string | null
floorStrike
required
number | null
capStrike
required
number | null
yesBid
required
number | null

Minimum: 0; Maximum: 1

yesAsk
required
number | null

Minimum: 0; Maximum: 1

lastPrice
required
number | null

Minimum: 0; Maximum: 1

volume24h
required
number | null

Minimum: 0

openInterest
required
number | null

Minimum: 0

status
required
string | null
closeTime
required
string | null

Format: date-time

generation
required
object
generation fields
FieldTypeDescription
costUsd
required
"1.00"
body
required
VenueMarketForecastRequest
body fields
FieldTypeDescription
kind
required
"venue_market"
venue
required
"polymarket" | "polymarket_us" | "kalshi" | "limitless"Prediction-market venue key: polymarket (Polymarket International), polymarket_us (Polymarket US), kalshi, or limitless.
market_id
required
string

Minimum length: 1; Maximum length: 512

generation
required
VenueMarketForecastRequest | null
generation fields
FieldTypeDescription
kind
required
"venue_market"
venue
required
"polymarket" | "polymarket_us" | "kalshi" | "limitless"Prediction-market venue key: polymarket (Polymarket International), polymarket_us (Polymarket US), kalshi, or limitless.
market_id
required
string

Minimum length: 1; Maximum length: 512

allContracts
required
object
allContracts fields
FieldTypeDescription
marketCount
required
integer

Minimum: 1

estimatedCostUsd
required
string
requests
required
VenueMarketForecastRequest[]

Minimum items: 1

requests fields
FieldTypeDescription
kind
required
"venue_market"
venue
required
"polymarket" | "polymarket_us" | "kalshi" | "limitless"Prediction-market venue key: polymarket (Polymarket International), polymarket_us (Polymarket US), kalshi, or limitless.
market_id
required
string

Minimum length: 1; Maximum length: 512

Alternative 2PolymarketForecastTargetResolution

Exactly one alternative

Alternative 2 fields
FieldTypeDescription
input
required
string
venue
required
"polymarket"
targetType
required
"market" | "event"
selectionRequired
required
boolean
event
required
object
event fields
FieldTypeDescription
eventId
required
string
slug
required
string
title
required
string
subtitle
required
string | null
category
required
string | null
negRisk
required
boolean | nullMutual-exclusivity analog of Kalshi's mutuallyExclusive.
marketUrl
required
string

Format: uri

sourceUrl
required
string

Format: uri

selectedMarket
required
PolymarketForecastTargetMarket | null
selectedMarket fields
FieldTypeDescription
marketId
required
stringNumeric Gamma market id — the generation market_id.

Pattern: ^\d+$

slug
required
string | null
conditionId
required
string | null
eventSlug
required
string | null
title
required
stringThe market's question.
subtitle
required
string | nullOutcome label inside a grouped (negRisk) event.
outcomes
required
string[]

Minimum items: 2; Maximum items: 2

yesBid
required
number | null

Minimum: 0; Maximum: 1

yesAsk
required
number | null

Minimum: 0; Maximum: 1

lastPrice
required
number | null

Minimum: 0; Maximum: 1

volume24h
required
number | null

Minimum: 0

liquidity
required
number | null

Minimum: 0

status
required
string | null
closeTime
required
string | null

Format: date-time

generation
required
object
generation fields
FieldTypeDescription
costUsd
required
"1.00"
body
required
VenueMarketForecastRequest
body fields
FieldTypeDescription
kind
required
"venue_market"
venue
required
"polymarket" | "polymarket_us" | "kalshi" | "limitless"Prediction-market venue key: polymarket (Polymarket International), polymarket_us (Polymarket US), kalshi, or limitless.
market_id
required
string

Minimum length: 1; Maximum length: 512

markets
required
PolymarketForecastTargetMarket[]

Minimum items: 1

markets fields
FieldTypeDescription
marketId
required
stringNumeric Gamma market id — the generation market_id.

Pattern: ^\d+$

slug
required
string | null
conditionId
required
string | null
eventSlug
required
string | null
title
required
stringThe market's question.
subtitle
required
string | nullOutcome label inside a grouped (negRisk) event.
outcomes
required
string[]

Minimum items: 2; Maximum items: 2

yesBid
required
number | null

Minimum: 0; Maximum: 1

yesAsk
required
number | null

Minimum: 0; Maximum: 1

lastPrice
required
number | null

Minimum: 0; Maximum: 1

volume24h
required
number | null

Minimum: 0

liquidity
required
number | null

Minimum: 0

status
required
string | null
closeTime
required
string | null

Format: date-time

generation
required
object
generation fields
FieldTypeDescription
costUsd
required
"1.00"
body
required
VenueMarketForecastRequest
body fields
FieldTypeDescription
kind
required
"venue_market"
venue
required
"polymarket" | "polymarket_us" | "kalshi" | "limitless"Prediction-market venue key: polymarket (Polymarket International), polymarket_us (Polymarket US), kalshi, or limitless.
market_id
required
string

Minimum length: 1; Maximum length: 512

generation
required
VenueMarketForecastRequest | null
generation fields
FieldTypeDescription
kind
required
"venue_market"
venue
required
"polymarket" | "polymarket_us" | "kalshi" | "limitless"Prediction-market venue key: polymarket (Polymarket International), polymarket_us (Polymarket US), kalshi, or limitless.
market_id
required
string

Minimum length: 1; Maximum length: 512

allContracts
required
object
allContracts fields
FieldTypeDescription
marketCount
required
integer

Minimum: 1

estimatedCostUsd
required
string
requests
required
VenueMarketForecastRequest[]

Minimum items: 1

requests fields
FieldTypeDescription
kind
required
"venue_market"
venue
required
"polymarket" | "polymarket_us" | "kalshi" | "limitless"Prediction-market venue key: polymarket (Polymarket International), polymarket_us (Polymarket US), kalshi, or limitless.
market_id
required
string

Minimum length: 1; Maximum length: 512

404: No Kalshi or Polymarket event or market matched the reference; the ticker field echoes the unresolved venue-native reference
FieldTypeDescription
error
required
stringError code
message
required
stringHuman-readable message
retry_afterintegerSeconds to wait (only on 429)
retryAfterintegerSeconds to wait for owner-scoped forecast-request quota errors.
limit_scopestringQuota scope that rejected the request, such as standard or x_research.
quotaScopestringStable forecast-request quota scope, such as venue_market_daily.
limitintegerConfigured bound for the forecast-request quota that was exceeded.
422: The reference is malformed or is not a supported Kalshi or Polymarket reference
FieldTypeDescription
error
required
stringError code
message
required
stringHuman-readable message
retry_afterintegerSeconds to wait (only on 429)
retryAfterintegerSeconds to wait for owner-scoped forecast-request quota errors.
limit_scopestringQuota scope that rejected the request, such as standard or x_research.
quotaScopestringStable forecast-request quota scope, such as venue_market_daily.
limitintegerConfigured bound for the forecast-request quota that was exceeded.
503: Venue target resolution is temporarily unavailable
FieldTypeDescription
error
required
stringError code
message
required
stringHuman-readable message
retry_afterintegerSeconds to wait (only on 429)
retryAfterintegerSeconds to wait for owner-scoped forecast-request quota errors.
limit_scopestringQuota scope that rejected the request, such as standard or x_research.
quotaScopestringStable forecast-request quota scope, such as venue_market_daily.
limitintegerConfigured bound for the forecast-request quota that was exceeded.

Set QUOTIENT_API_KEY in your shell and replace example identifiers with returned IDs before running a request.

curl
curl --request GET \
  'https://quotient-api-gateway.onrender.com/api/public/forecast-targets?ref=example'
200 · application/json
{
  "input": "example",
  "venue": "kalshi",
  "targetType": "market",
  "selectionRequired": false,
  "event": {
    "ticker": "example",
    "title": "example",
    "subtitle": "example",
    "category": "example",
    "mutuallyExclusive": false,
    "sourceUrl": "example"
  },
  "selectedMarket": {
    "ticker": "example",
    "eventTicker": "example",
    "title": "example",
    "subtitle": "example",
    "strikeType": "example",
    "floorStrike": 0,
    "capStrike": 0,
    "yesBid": 0,
    "yesAsk": 0,
    "lastPrice": 0,
    "volume24h": 0,
    "openInterest": 0,
    "status": "example",
    "closeTime": "2027-01-01T00:00:00Z",
    "generation": {
      "costUsd": "1.00",
      "body": {
        "kind": "venue_market",
        "venue": "polymarket",
        "market_id": "example"
      }
    }
  },
  "markets": [
    {
      "ticker": "example",
      "eventTicker": "example",
      "title": "example",
      "subtitle": "example",
      "strikeType": "example",
      "floorStrike": 0,
      "capStrike": 0,
      "yesBid": 0,
      "yesAsk": 0,
      "lastPrice": 0,
      "volume24h": 0,
      "openInterest": 0,
      "status": "example",
      "closeTime": "2027-01-01T00:00:00Z",
      "generation": {
        "costUsd": "1.00",
        "body": {
          "kind": "venue_market",
          "venue": "polymarket",
          "market_id": "example"
        }
      }
    }
  ],
  "generation": {
    "kind": "venue_market",
    "venue": "polymarket",
    "market_id": "example"
  },
  "allContracts": {
    "marketCount": 1,
    "estimatedCostUsd": "example",
    "requests": [
      {
        "kind": "venue_market",
        "venue": "polymarket",
        "market_id": "example"
      }
    ]
  }
}