Get last-known prices for equity/forex/commodity symbols
Returns last-known prices for a fixed allow-list of stock, ETF, forex, and commodity symbols (e.g. AAPL, SPY, EURUSD, XAUUSD), mapped internally to their upstream tickers. A request is served straight from cache only if every requested symbol is already cached. Otherwise, missing symbols are fetched and merged into the existing cache, and only the newly-fetched subset is returned with cached: false — symbols already warm in the cache are NOT re-included in that response body (the endpoint returns either the full cached hit set with cached: true, or just the freshly-fetched symbols with cached: false, never a merge of both in one response). Returns prices even when markets are closed (uses the last regular-session print) so the UI is never blank outside trading hours. Auth differs from every other endpoint in this router: this accepts a first-party session JWT (Authorization: Bearer ...) or an internal admin credential — it does not accept the X-Client-Id/X-Api-Key/ X-Api-Secret API-key headers that the rest of /markets/* accepts.
curl --request GET \
--url https://data.kairos.trade/markets/equity/snapshot \
--header 'Authorization: Bearer <token>'import requests
url = "https://data.kairos.trade/markets/equity/snapshot"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://data.kairos.trade/markets/equity/snapshot', 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/equity/snapshot",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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/equity/snapshot"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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/equity/snapshot")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data.kairos.trade/markets/equity/snapshot")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"prices": {},
"cached": true
}{
"detail": "Invalid symbol: DOGEUSD. Must be one of: [...]"
}{
"detail": "Not authenticated"
}{
"detail": "Invite required"
}{
"detail": [
{}
]
}{
"error": "Rate limit exceeded: 100 per 1 minute"
}Authorizations
First-party Kairos session JWT (web app sessions). Not issued to API consumers.
Query Parameters
Comma-separated symbols (case-insensitive, upper-cased server-side). Must be a subset of: AAPL, TSLA, MSFT, GOOGL, AMZN, META, NVDA, NFLX, PLTR, OPEN, RKLB, ABNB, COIN, HOOD, SPY, QQQ, EWY, VXX, EURUSD, GBPUSD, USDCAD, USDJPY, USDKRW, XAUUSD, XAGUSD, WTI, CC, NGD.
Response
Last-known prices for the requested symbols.
Keyed by the requested (upper-cased) symbol. Either the full cache hit set or just the freshly-fetched subset — see cached.
Show child attributes
Show child attributes
True only if every requested symbol was already cached and prices is that full cached set. False means prices contains only symbols that had to be freshly fetched for this request.
Was this page helpful?
curl --request GET \
--url https://data.kairos.trade/markets/equity/snapshot \
--header 'Authorization: Bearer <token>'import requests
url = "https://data.kairos.trade/markets/equity/snapshot"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://data.kairos.trade/markets/equity/snapshot', 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/equity/snapshot",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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/equity/snapshot"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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/equity/snapshot")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data.kairos.trade/markets/equity/snapshot")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"prices": {},
"cached": true
}{
"detail": "Invalid symbol: DOGEUSD. Must be one of: [...]"
}{
"detail": "Not authenticated"
}{
"detail": "Invite required"
}{
"detail": [
{}
]
}{
"error": "Rate limit exceeded: 100 per 1 minute"
}
