Resolve a pasted Polymarket/Kalshi/predict.fun market or event URL
Parses url against known host patterns — polymarket.com /event/<slug>/<market-slug> (market) or /event/<slug> (event) or legacy /market/<slug>; kalshi.com ticker/event_id/market_id path segments; predict.fun equivalents. Unrecognized hosts or unmatched paths return an empty /search/simple-shaped body (200) so the frontend can fall back to a normal text search rather than erroring. On a match, resolves the market/event (for an event URL, every outcome market in that event) and returns the same {results, groups?, singles?, meta} shape as /search/simple, enriched with correlations only (ladder classification is skipped — a resolved URL is already a single market/event, not a broad set to collapse).
curl --request GET \
--url https://data.kairos.trade/search/resolve-url \
--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/search/resolve-url"
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/search/resolve-url', 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/search/resolve-url",
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/search/resolve-url"
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/search/resolve-url")
.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/search/resolve-url")
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{
"results": [
{
"market_id": "KXPRES-28-DJT",
"provider_id": 1,
"provider": "kalshi",
"relevance_score": 123,
"event_id": "<string>",
"event_name": "<string>",
"name": "<string>",
"symbol": "<string>",
"category": "<string>",
"status": "open",
"expires_at": "2023-11-07T05:31:56Z",
"volume_24h": 0,
"outcome_label": "<string>",
"series_key": "<string>",
"series_title": "<string>",
"text_score": 0,
"business_score": 0,
"penalty": 0,
"price": 123,
"volume_1h": 0,
"liquidity": 0,
"image": "<string>",
"icon": "<string>",
"token_id": "<string>",
"condition_id": "<string>",
"token_ids": [
"<string>"
],
"outcomes": [
"<string>"
],
"type": "event"
}
],
"meta": {
"query": "<string>",
"returned": 123,
"query_time_ms": 123,
"total": 123
},
"groups": [
{
"event_id": "<string>",
"market_count": 123,
"markets": [
{
"market_id": "KXPRES-28-DJT",
"provider_id": 1,
"provider": "kalshi",
"relevance_score": 123,
"event_id": "<string>",
"event_name": "<string>",
"name": "<string>",
"symbol": "<string>",
"category": "<string>",
"status": "open",
"expires_at": "2023-11-07T05:31:56Z",
"volume_24h": 0,
"outcome_label": "<string>",
"series_key": "<string>",
"series_title": "<string>",
"text_score": 0,
"business_score": 0,
"penalty": 0,
"price": 123,
"volume_1h": 0,
"liquidity": 0,
"image": "<string>",
"icon": "<string>",
"token_id": "<string>",
"condition_id": "<string>",
"token_ids": [
"<string>"
],
"outcomes": [
"<string>"
],
"type": "event"
}
],
"event_name": "<string>",
"representative": {
"market_id": "KXPRES-28-DJT",
"provider_id": 1,
"provider": "kalshi",
"relevance_score": 123,
"event_id": "<string>",
"event_name": "<string>",
"name": "<string>",
"symbol": "<string>",
"category": "<string>",
"status": "open",
"expires_at": "2023-11-07T05:31:56Z",
"volume_24h": 0,
"outcome_label": "<string>",
"series_key": "<string>",
"series_title": "<string>",
"text_score": 0,
"business_score": 0,
"penalty": 0,
"price": 123,
"volume_1h": 0,
"liquidity": 0,
"image": "<string>",
"icon": "<string>",
"token_id": "<string>",
"condition_id": "<string>",
"token_ids": [
"<string>"
],
"outcomes": [
"<string>"
],
"type": "event"
}
}
],
"singles": [
{
"market_id": "KXPRES-28-DJT",
"provider_id": 1,
"provider": "kalshi",
"relevance_score": 123,
"event_id": "<string>",
"event_name": "<string>",
"name": "<string>",
"symbol": "<string>",
"category": "<string>",
"status": "open",
"expires_at": "2023-11-07T05:31:56Z",
"volume_24h": 0,
"outcome_label": "<string>",
"series_key": "<string>",
"series_title": "<string>",
"text_score": 0,
"business_score": 0,
"penalty": 0,
"price": 123,
"volume_1h": 0,
"liquidity": 0,
"image": "<string>",
"icon": "<string>",
"token_id": "<string>",
"condition_id": "<string>",
"token_ids": [
"<string>"
],
"outcomes": [
"<string>"
],
"type": "event"
}
],
"classifiedGroups": [
{
"type": "group",
"groupKey": "<string>",
"provider": "<string>",
"outcomes": [
{
"id": "<string>",
"provider": "<string>",
"title": "<string>",
"outcomeLabel": "<string>",
"tokenId": "<string>",
"price": 123,
"op": "<string>",
"value": 123,
"hi": 123
}
],
"title": "<string>",
"kind": "<string>",
"axisLabel": "<string>",
"unit": "<string>",
"direction": "<string>",
"confidence": 123,
"marketCount": 123,
"category": "<string>",
"image": "<string>",
"icon": "<string>",
"eventId": "<string>",
"eventTitle": "<string>"
}
],
"absorbedMarketIds": [
"<string>"
],
"correlations": {}
}{
"detail": "Not authenticated"
}{
"detail": "Invite required"
}{
"detail": [
{}
]
}{
"error": "Rate limit exceeded: 100 per 1 minute"
}{
"detail": "Invalid provider"
}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
Raw pasted URL (scheme optional — https:// is prepended if missing) or arbitrary text.
1 - 1000Response
Resolved market/event in /search/simple shape, or an empty body if the URL wasn't recognized.
Shared envelope for /search/simple and /search/resolve-url. Both always include results/meta; groups/singles appear only when the underlying search was grouped (always true for /search/simple with group_results=true, and for /search/resolve-url on an event URL). classifiedGroups/absorbedMarketIds are only ever attached by /search/simple (group_results=true); /search/resolve-url never sets them. correlations is attached by both, best-effort, and absent if no counterpart markets were found.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Market/outcome ids already rendered inside classifiedGroups — the overlay should not also render them as standalone rows.
Map of result market_id -> up to 4 similar cross-venue counterpart markets, sorted by similarity descending.
Show child attributes
Show child attributes
Was this page helpful?
curl --request GET \
--url https://data.kairos.trade/search/resolve-url \
--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/search/resolve-url"
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/search/resolve-url', 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/search/resolve-url",
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/search/resolve-url"
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/search/resolve-url")
.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/search/resolve-url")
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{
"results": [
{
"market_id": "KXPRES-28-DJT",
"provider_id": 1,
"provider": "kalshi",
"relevance_score": 123,
"event_id": "<string>",
"event_name": "<string>",
"name": "<string>",
"symbol": "<string>",
"category": "<string>",
"status": "open",
"expires_at": "2023-11-07T05:31:56Z",
"volume_24h": 0,
"outcome_label": "<string>",
"series_key": "<string>",
"series_title": "<string>",
"text_score": 0,
"business_score": 0,
"penalty": 0,
"price": 123,
"volume_1h": 0,
"liquidity": 0,
"image": "<string>",
"icon": "<string>",
"token_id": "<string>",
"condition_id": "<string>",
"token_ids": [
"<string>"
],
"outcomes": [
"<string>"
],
"type": "event"
}
],
"meta": {
"query": "<string>",
"returned": 123,
"query_time_ms": 123,
"total": 123
},
"groups": [
{
"event_id": "<string>",
"market_count": 123,
"markets": [
{
"market_id": "KXPRES-28-DJT",
"provider_id": 1,
"provider": "kalshi",
"relevance_score": 123,
"event_id": "<string>",
"event_name": "<string>",
"name": "<string>",
"symbol": "<string>",
"category": "<string>",
"status": "open",
"expires_at": "2023-11-07T05:31:56Z",
"volume_24h": 0,
"outcome_label": "<string>",
"series_key": "<string>",
"series_title": "<string>",
"text_score": 0,
"business_score": 0,
"penalty": 0,
"price": 123,
"volume_1h": 0,
"liquidity": 0,
"image": "<string>",
"icon": "<string>",
"token_id": "<string>",
"condition_id": "<string>",
"token_ids": [
"<string>"
],
"outcomes": [
"<string>"
],
"type": "event"
}
],
"event_name": "<string>",
"representative": {
"market_id": "KXPRES-28-DJT",
"provider_id": 1,
"provider": "kalshi",
"relevance_score": 123,
"event_id": "<string>",
"event_name": "<string>",
"name": "<string>",
"symbol": "<string>",
"category": "<string>",
"status": "open",
"expires_at": "2023-11-07T05:31:56Z",
"volume_24h": 0,
"outcome_label": "<string>",
"series_key": "<string>",
"series_title": "<string>",
"text_score": 0,
"business_score": 0,
"penalty": 0,
"price": 123,
"volume_1h": 0,
"liquidity": 0,
"image": "<string>",
"icon": "<string>",
"token_id": "<string>",
"condition_id": "<string>",
"token_ids": [
"<string>"
],
"outcomes": [
"<string>"
],
"type": "event"
}
}
],
"singles": [
{
"market_id": "KXPRES-28-DJT",
"provider_id": 1,
"provider": "kalshi",
"relevance_score": 123,
"event_id": "<string>",
"event_name": "<string>",
"name": "<string>",
"symbol": "<string>",
"category": "<string>",
"status": "open",
"expires_at": "2023-11-07T05:31:56Z",
"volume_24h": 0,
"outcome_label": "<string>",
"series_key": "<string>",
"series_title": "<string>",
"text_score": 0,
"business_score": 0,
"penalty": 0,
"price": 123,
"volume_1h": 0,
"liquidity": 0,
"image": "<string>",
"icon": "<string>",
"token_id": "<string>",
"condition_id": "<string>",
"token_ids": [
"<string>"
],
"outcomes": [
"<string>"
],
"type": "event"
}
],
"classifiedGroups": [
{
"type": "group",
"groupKey": "<string>",
"provider": "<string>",
"outcomes": [
{
"id": "<string>",
"provider": "<string>",
"title": "<string>",
"outcomeLabel": "<string>",
"tokenId": "<string>",
"price": 123,
"op": "<string>",
"value": 123,
"hi": 123
}
],
"title": "<string>",
"kind": "<string>",
"axisLabel": "<string>",
"unit": "<string>",
"direction": "<string>",
"confidence": 123,
"marketCount": 123,
"category": "<string>",
"image": "<string>",
"icon": "<string>",
"eventId": "<string>",
"eventTitle": "<string>"
}
],
"absorbedMarketIds": [
"<string>"
],
"correlations": {}
}{
"detail": "Not authenticated"
}{
"detail": "Invite required"
}{
"detail": [
{}
]
}{
"error": "Rate limit exceeded: 100 per 1 minute"
}{
"detail": "Invalid provider"
}
