curl --request GET \
--url https://external-api.kalshi.com/trade-api/v2/milestonesimport requests
url = "https://external-api.kalshi.com/trade-api/v2/milestones"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://external-api.kalshi.com/trade-api/v2/milestones', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://external-api.kalshi.com/trade-api/v2/milestones",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://external-api.kalshi.com/trade-api/v2/milestones"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://external-api.kalshi.com/trade-api/v2/milestones")
.asString();require 'uri'
require 'net/http'
url = URI("https://external-api.kalshi.com/trade-api/v2/milestones")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"milestones": [
{
"id": "<string>",
"category": "Sports",
"type": "football_game",
"start_date": "2023-11-07T05:31:56Z",
"related_event_tickers": [
"<string>"
],
"title": "<string>",
"notification_message": "<string>",
"details": {},
"primary_event_tickers": [
"<string>"
],
"last_updated_ts": "2023-11-07T05:31:56Z",
"end_date": "2023-11-07T05:31:56Z",
"source_id": "<string>",
"source_ids": {}
}
],
"cursor": "<string>"
}Get Milestones
Endpoint for listing milestones. A milestone’s details.status, when present, is maintained by a periodic background job. It lags the game’s live state and may be stale or inaccurate, for example remaining live after the game ends. For game status, prefer live data, which is updated far more often: live_data.details.status from GET /live_data/milestone/{milestone_id}, or each entry’s details.status from GET /live_data/batch. Scores are in the sport-specific fields of that live data details object.
curl --request GET \
--url https://external-api.kalshi.com/trade-api/v2/milestonesimport requests
url = "https://external-api.kalshi.com/trade-api/v2/milestones"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://external-api.kalshi.com/trade-api/v2/milestones', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://external-api.kalshi.com/trade-api/v2/milestones",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://external-api.kalshi.com/trade-api/v2/milestones"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://external-api.kalshi.com/trade-api/v2/milestones")
.asString();require 'uri'
require 'net/http'
url = URI("https://external-api.kalshi.com/trade-api/v2/milestones")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"milestones": [
{
"id": "<string>",
"category": "Sports",
"type": "football_game",
"start_date": "2023-11-07T05:31:56Z",
"related_event_tickers": [
"<string>"
],
"title": "<string>",
"notification_message": "<string>",
"details": {},
"primary_event_tickers": [
"<string>"
],
"last_updated_ts": "2023-11-07T05:31:56Z",
"end_date": "2023-11-07T05:31:56Z",
"source_id": "<string>",
"source_ids": {}
}
],
"cursor": "<string>"
}Query Parameters
Number of milestones to return per page
1 <= x <= 500Minimum start date to filter milestones. Format RFC3339 timestamp
Filter by milestone category. E.g. Sports, Elections, Esports, Crypto.
"Sports"
Filter by competition. E.g. Pro Football, Pro Basketball (M), Pro Baseball, Pro Hockey, College Football.
"Pro Football"
Filter by source id
Filter by milestone type. E.g. football_game, basketball_game, soccer_tournament_multi_leg, baseball_game, hockey_match, political_race.
"football_game"
Filter by related event ticker
Pagination cursor. Use the cursor value returned from the previous response to get the next page of results
Filter milestones with metadata updated after this Unix timestamp (in seconds). Use this to efficiently poll for changes.