milestonesdescribe a real-world occurrence tied to one or more eventsstructured_targetsdescribe a real-world entity that a milestone or market can reference
Milestones
A milestone links Kalshi events to a real-world occurrence. Useful fields on a milestone include:id,type,title,start_date,end_dateprimary_event_tickersfor the milestone’s core marketsrelated_event_tickersfor the broader set of events tied to the same occurrencedetailsfor type-specific metadatasource_idandsource_idswhen external identifiers are available
details is flexible JSON and varies by milestone type. For sports milestones, it commonly contains structured target IDs such as home_team_id or away_team_id.
In practice, related_event_tickers is often a superset of primary_event_tickers.
For example, a recent Wyoming General Elections one_off_milestone in Redshift had:
primary_event_tickers:SENATEWY-26related_event_tickers:SENATEWY-26,GOVPARTYWY-26, andKXHOUSERACE-WYAL-26
Fetch milestones
Use the Get Milestone and Get Milestones endpoint docs for the supported parameters and response shape. If you want milestones returned alongside events, use Get Events withwith_milestones=true. The events response includes a top-level milestones array alongside events.
Use milestones to group events
A milestone is often the easiest way to find other events tied to the same occurrence. Query byrelated_event_ticker, then read related_event_tickers or primary_event_tickers from the returned milestone.
Once you have the right milestone, use Get Live Data when that milestone type supports live updates.
Structured Targets
A structured target identifies a real-world entity that can be referenced elsewhere in the API. Useful fields on a structured target include:id,name,typedetailsfor type-specific metadatasource_idandsource_idswhen external identifiers are available
details, structured target details is flexible JSON and depends on the target type.
Fetch structured targets
Use the Get Structured Target and Get Structured Targets endpoint docs for the supported parameters and response shape.type values are not a short fixed list. Integrations should filter by the values they need rather than hardcoding a small allowlist.
How They Connect To Markets
Markets can reference structured targets throughcustom_strike.
strike_type: "structured", the value inside custom_strike is a structured target ID. You can resolve it with the Get Structured Target endpoint.
For numeric strike types, use floor_strike and cap_strike instead of custom_strike.