Perpetuals
List perpetual venue capabilities
Returns the supported perpetual venue identifiers and their public-data capabilities. This is metadata owned by the Python Data API. It does not serve books, trades, candles, funding observations, or WebSocket data.
This preview exists only in Kairos staging. When the preview flag is
disabled, the route fails closed with 404. Live REST snapshots are served
separately by the Market Data API; anonymous WebSocket transport is served by
websocket_cpp.
GET
/
perpetuals
/
venues
List perpetual venue capabilities
curl --request GET \
--url https://staging-data.kairos.trade/perpetuals/venuesimport requests
url = "https://staging-data.kairos.trade/perpetuals/venues"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://staging-data.kairos.trade/perpetuals/venues', 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://staging-data.kairos.trade/perpetuals/venues",
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://staging-data.kairos.trade/perpetuals/venues"
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://staging-data.kairos.trade/perpetuals/venues")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging-data.kairos.trade/perpetuals/venues")
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[
{
"venue": "hyperliquid",
"environment": "<string>",
"market_data_service": "agora",
"instruments": true,
"book": true,
"trades": true,
"candles": true,
"funding": true,
"market_state": true,
"notes": [
"<string>"
]
}
]{
"detail": "Perpetual metadata is disabled"
}{
"error": "Rate limit exceeded: 100 per 1 minute"
}Response
Canonical venue capability records.
Canonical perpetual venue identifier.
Available options:
hyperliquid, polymarket_perps, kalshi_margin Venue-native environment name; do not infer it from Kairos staging.
Legacy compatibility identifier; live REST snapshots are owned by the Market Data API, not this metadata endpoint.
Allowed value:
"agora"Was this page helpful?
⌘I
List perpetual venue capabilities
curl --request GET \
--url https://staging-data.kairos.trade/perpetuals/venuesimport requests
url = "https://staging-data.kairos.trade/perpetuals/venues"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://staging-data.kairos.trade/perpetuals/venues', 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://staging-data.kairos.trade/perpetuals/venues",
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://staging-data.kairos.trade/perpetuals/venues"
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://staging-data.kairos.trade/perpetuals/venues")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging-data.kairos.trade/perpetuals/venues")
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[
{
"venue": "hyperliquid",
"environment": "<string>",
"market_data_service": "agora",
"instruments": true,
"book": true,
"trades": true,
"candles": true,
"funding": true,
"market_state": true,
"notes": [
"<string>"
]
}
]{
"detail": "Perpetual metadata is disabled"
}{
"error": "Rate limit exceeded: 100 per 1 minute"
}
