curl --request GET \
--url https://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/{symbol}/crypto-price-historyimport requests
url = "https://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/{symbol}/crypto-price-history"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/{symbol}/crypto-price-history', 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://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/{symbol}/crypto-price-history",
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://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/{symbol}/crypto-price-history"
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://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/{symbol}/crypto-price-history")
.asString();require 'uri'
require 'net/http'
url = URI("https://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/{symbol}/crypto-price-history")
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{
"symbol": "BTC15M-20260729T1730",
"instrumentId": "BTC-USD",
"asset": "BTC",
"quoteAsset": "USD",
"range": "1min",
"bucketSeconds": 60,
"from": "2023-11-07T05:31:56Z",
"to": "2023-11-07T05:31:56Z",
"points": [
{
"t": "2023-11-07T05:31:56Z",
"price": "63695.98649614"
}
],
"spot": {
"price": "63744.09454151",
"at": "2023-11-07T05:31:56Z"
},
"priceToBeat": "63672.45929874"
}{
"status": 400,
"error": {
"code": "bad_request",
"message": "<string>",
"trace_id": "<string>",
"retryAfterSec": 123,
"retryable": true,
"details": {}
}
}{
"status": 400,
"error": {
"code": "bad_request",
"message": "<string>",
"trace_id": "<string>",
"retryAfterSec": 123,
"retryable": true,
"details": {}
}
}{
"status": 400,
"error": {
"code": "bad_request",
"message": "<string>",
"trace_id": "<string>",
"retryAfterSec": 123,
"retryable": true,
"details": {}
}
}Underlying crypto price curve
Per-bucket close prices of the UNDERLYING asset (e.g. BTC/USD), plus the current spot. Distinct from the market probability charts on :symbol/ohlc and :symbol/price-history — this is the price of the coin the market is written against. range is required and fixes the lookback and the bucket width: 1min (1-second buckets over 60 s), 10m (5 s / 10 min), 1h (1 min / 1 h), 1d (5 min / 24 h), 1w (1 h / 7 d), 1m (4 h / 30 d — the month preset), all (1 d / up to 2 years). 1min and 10m are built from recorded live ticks, with finalized one-minute candles filling any gap; the other presets use the finalized one-minute candles. Only complete, grid-aligned buckets are returned (except the last bucket of a closed Up/Down window, whose range ends at the window end), and from / to echo the window actually queried. Public — no auth required; successful responses carry Cache-Control: public, max-age=2 on 1min and max-age=30 on every other preset, errors carry no-store; 240 req/min per IP on this route on top of the shared 600 req/min markets ceiling. For a live price subscribe to the crypto_price_tick WebSocket channel instead of polling.
curl --request GET \
--url https://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/{symbol}/crypto-price-historyimport requests
url = "https://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/{symbol}/crypto-price-history"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/{symbol}/crypto-price-history', 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://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/{symbol}/crypto-price-history",
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://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/{symbol}/crypto-price-history"
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://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/{symbol}/crypto-price-history")
.asString();require 'uri'
require 'net/http'
url = URI("https://core.api.dev.predictstreet.sde.adifoundation.ai/api/markets/{symbol}/crypto-price-history")
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{
"symbol": "BTC15M-20260729T1730",
"instrumentId": "BTC-USD",
"asset": "BTC",
"quoteAsset": "USD",
"range": "1min",
"bucketSeconds": 60,
"from": "2023-11-07T05:31:56Z",
"to": "2023-11-07T05:31:56Z",
"points": [
{
"t": "2023-11-07T05:31:56Z",
"price": "63695.98649614"
}
],
"spot": {
"price": "63744.09454151",
"at": "2023-11-07T05:31:56Z"
},
"priceToBeat": "63672.45929874"
}{
"status": 400,
"error": {
"code": "bad_request",
"message": "<string>",
"trace_id": "<string>",
"retryAfterSec": 123,
"retryable": true,
"details": {}
}
}{
"status": 400,
"error": {
"code": "bad_request",
"message": "<string>",
"trace_id": "<string>",
"retryAfterSec": 123,
"retryable": true,
"details": {}
}
}{
"status": 400,
"error": {
"code": "bad_request",
"message": "<string>",
"trace_id": "<string>",
"retryAfterSec": 123,
"retryable": true,
"details": {}
}
}Path Parameters
Market symbol, e.g. UAE-CUP-FINAL-20260425. Used by sub-resource endpoints (/orderbook, /trades, /ohlc, /traders). The root market-detail endpoint /api/markets/{slug} accepts the slug instead — see MarketSlug.
Query Parameters
Time-window preset. 1m is the month preset; the one-minute view is 1min.
1min, 10m, 1h, 1d, 1w, 1m, all Response
OK
Underlying-asset price curve for a crypto market — the price of the COIN, distinct from the market probability charts on /ohlc and /price-history.
"BTC15M-20260729T1730"
"BTC-USD"
"BTC"
"USD"
Echoes the requested preset.
1min, 10m, 1h, 1d, 1w, 1m, all Resolved bucket width in seconds (1 / 5 / 60 / 300 / 3600 / 14400 / 86400).
60
Inclusive lower bound, snapped to the bucket grid.
Exclusive upper bound, snapped to the bucket grid.
Per-bucket closes in ascending time order. Only complete, grid-aligned buckets are returned; capped at 2000 points.
Show child attributes
Show child attributes
Latest finalized minute for the instrument. May sit PAST the response's to; null when no candles exist yet.
Show child attributes
Show child attributes
Reference line, already scaled to the same units and precision as points[].price. On an Up/Down window it is the frozen open. Null on long-dated markets — their reference is crypto.targetPrice — and on a window until the open is pinned.
"63672.45929874"