/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.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| ref | query, required | string | Kalshi 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
| Field | Type | Description | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Alternative 1 | KalshiForecastTargetResolution | Exactly one alternative Alternative 1 fields
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Alternative 2 | PolymarketForecastTargetResolution | Exactly one alternative Alternative 2 fields
|
404: No Kalshi or Polymarket event or market matched the reference; the ticker field echoes the unresolved venue-native reference
| Field | Type | Description |
|---|---|---|
| error required | string | Error code |
| message required | string | Human-readable message |
| retry_after | integer | Seconds to wait (only on 429) |
| retryAfter | integer | Seconds to wait for owner-scoped forecast-request quota errors. |
| limit_scope | string | Quota scope that rejected the request, such as standard or x_research. |
| quotaScope | string | Stable forecast-request quota scope, such as venue_market_daily. |
| limit | integer | Configured bound for the forecast-request quota that was exceeded. |
422: The reference is malformed or is not a supported Kalshi or Polymarket reference
| Field | Type | Description |
|---|---|---|
| error required | string | Error code |
| message required | string | Human-readable message |
| retry_after | integer | Seconds to wait (only on 429) |
| retryAfter | integer | Seconds to wait for owner-scoped forecast-request quota errors. |
| limit_scope | string | Quota scope that rejected the request, such as standard or x_research. |
| quotaScope | string | Stable forecast-request quota scope, such as venue_market_daily. |
| limit | integer | Configured bound for the forecast-request quota that was exceeded. |
503: Venue target resolution is temporarily unavailable
| Field | Type | Description |
|---|---|---|
| error required | string | Error code |
| message required | string | Human-readable message |
| retry_after | integer | Seconds to wait (only on 429) |
| retryAfter | integer | Seconds to wait for owner-scoped forecast-request quota errors. |
| limit_scope | string | Quota scope that rejected the request, such as standard or x_research. |
| quotaScope | string | Stable forecast-request quota scope, such as venue_market_daily. |
| limit | integer | Configured 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 --request GET \
'https://quotient-api-gateway.onrender.com/api/public/forecast-targets?ref=example'{
"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"
}
]
}
}