Get all sibling outcomes for the event containing a market
Returns every outcome in the event that market_id belongs to (for multi-outcome / grouped markets), served from a cache of pre-computed event/market lookups. Any identifier (market_id, token_id, condition_id, symbol, slug) is mapped to its event_id; if that misses, falls back to the per-market entry’s embedded event_id, then to deriving a Kalshi-style event ticker by stripping the last -SEGMENT off market_id (e.g. KXPGATOUR-THGI26-SSTR → KXPGATOUR-THGI26). If no event can be resolved at all and provider=polymarket, falls back to a live Polymarket lookup — guarding against a known upstream quirk that can silently return an unrelated default result instead of an empty list. Non-Polymarket providers get no such fallback — an unresolvable event returns the empty shape. all_ids (comma-separated, ≤200 ids, each ≤128 chars) additionally resolves event_groups — a map from every supplied id (and every sibling id discovered while resolving events) to its event_id, used by the frontend to dedupe sibling contracts across dropdowns. Price scale note: unlike most of this API, outcome prices here are returned as a 0–1 decimal probability, not the platform’s usual 0–100 cents scale.
curl --request GET \
--url https://data.kairos.trade/markets/outcomes \
--header 'X-Api-Key: <api-key>' \
--header 'X-Api-Secret: <api-key>' \
--header 'X-Client-Id: <api-key>'import requests
url = "https://data.kairos.trade/markets/outcomes"
headers = {
"X-Client-Id": "<api-key>",
"X-Api-Key": "<api-key>",
"X-Api-Secret": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'X-Client-Id': '<api-key>',
'X-Api-Key': '<api-key>',
'X-Api-Secret': '<api-key>'
}
};
fetch('https://data.kairos.trade/markets/outcomes', 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://data.kairos.trade/markets/outcomes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Api-Key: <api-key>",
"X-Api-Secret: <api-key>",
"X-Client-Id: <api-key>"
],
]);
$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://data.kairos.trade/markets/outcomes"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Client-Id", "<api-key>")
req.Header.Add("X-Api-Key", "<api-key>")
req.Header.Add("X-Api-Secret", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://data.kairos.trade/markets/outcomes")
.header("X-Client-Id", "<api-key>")
.header("X-Api-Key", "<api-key>")
.header("X-Api-Secret", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data.kairos.trade/markets/outcomes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Client-Id"] = '<api-key>'
request["X-Api-Key"] = '<api-key>'
request["X-Api-Secret"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"event_title": "<string>",
"outcomes": [
{
"market_id": "<string>",
"title": "<string>",
"outcome_label": "<string>",
"price": 0.62,
"volume_total": 123,
"volume_24h": 123,
"volume_1h": 123,
"token_id": "<string>",
"condition_id": "<string>",
"image": "<string>",
"icon": "<string>",
"expiration": "<string>"
}
],
"is_grouped": true,
"event_groups": {},
"event_titles": {},
"image": "<string>",
"icon": "<string>",
"provider": "<string>",
"category": "<string>",
"matched_market_id": "<string>"
}{
"detail": "<string>"
}{
"detail": "Not authenticated"
}{
"detail": "Invite required"
}{
"detail": [
{}
]
}{
"error": "Rate limit exceeded: 100 per 1 minute"
}Authorizations
Credential client id (kairos_ck_...). Must be sent together with X-Api-Key and X-Api-Secret.
64-char hex API key.
64-char hex API secret.
Query Parameters
Market ID / ticker / token_id / slug. Non-empty after trimming, ≤128 chars.
128Provider name; must be an active provider.
Comma-separated list of additional contract ids (≤200 items, each ≤128 chars) to resolve into event_groups for dropdown deduplication.
Response
Event outcomes for the market, or the empty shape if no event could be resolved.
Show child attributes
Show child attributes
Maps every requested id (market_id plus each all_ids entry, plus every sibling id discovered while resolving) to its event_id.
Show child attributes
Show child attributes
Maps every event_id referenced in event_groups to its title.
Show child attributes
Show child attributes
The outcome entry that corresponds to the queried market_id, if found among the returned outcomes.
Was this page helpful?
curl --request GET \
--url https://data.kairos.trade/markets/outcomes \
--header 'X-Api-Key: <api-key>' \
--header 'X-Api-Secret: <api-key>' \
--header 'X-Client-Id: <api-key>'import requests
url = "https://data.kairos.trade/markets/outcomes"
headers = {
"X-Client-Id": "<api-key>",
"X-Api-Key": "<api-key>",
"X-Api-Secret": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'X-Client-Id': '<api-key>',
'X-Api-Key': '<api-key>',
'X-Api-Secret': '<api-key>'
}
};
fetch('https://data.kairos.trade/markets/outcomes', 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://data.kairos.trade/markets/outcomes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Api-Key: <api-key>",
"X-Api-Secret: <api-key>",
"X-Client-Id: <api-key>"
],
]);
$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://data.kairos.trade/markets/outcomes"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Client-Id", "<api-key>")
req.Header.Add("X-Api-Key", "<api-key>")
req.Header.Add("X-Api-Secret", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://data.kairos.trade/markets/outcomes")
.header("X-Client-Id", "<api-key>")
.header("X-Api-Key", "<api-key>")
.header("X-Api-Secret", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data.kairos.trade/markets/outcomes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Client-Id"] = '<api-key>'
request["X-Api-Key"] = '<api-key>'
request["X-Api-Secret"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"event_title": "<string>",
"outcomes": [
{
"market_id": "<string>",
"title": "<string>",
"outcome_label": "<string>",
"price": 0.62,
"volume_total": 123,
"volume_24h": 123,
"volume_1h": 123,
"token_id": "<string>",
"condition_id": "<string>",
"image": "<string>",
"icon": "<string>",
"expiration": "<string>"
}
],
"is_grouped": true,
"event_groups": {},
"event_titles": {},
"image": "<string>",
"icon": "<string>",
"provider": "<string>",
"category": "<string>",
"matched_market_id": "<string>"
}{
"detail": "<string>"
}{
"detail": "Not authenticated"
}{
"detail": "Invite required"
}{
"detail": [
{}
]
}{
"error": "Rate limit exceeded: 100 per 1 minute"
}
