Batch historical ticks for up to 5 symbols
curl --request POST \
--url https://api.aries.com/v1/predictions/historical-data/batch \
--header 'Content-Type: application/json' \
--data '
{
"queries": [
{
"symbol": "HORC_1126_Republican",
"from": "2026-04-01T00:00:00Z",
"to": "2026-04-20T00:00:00Z",
"limit": 500
}
]
}
'import requests
url = "https://api.aries.com/v1/predictions/historical-data/batch"
payload = { "queries": [
{
"symbol": "HORC_1126_Republican",
"from": "2026-04-01T00:00:00Z",
"to": "2026-04-20T00:00:00Z",
"limit": 500
}
] }
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
queries: [
{
symbol: 'HORC_1126_Republican',
from: '2026-04-01T00:00:00Z',
to: '2026-04-20T00:00:00Z',
limit: 500
}
]
})
};
fetch('https://api.aries.com/v1/predictions/historical-data/batch', 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://api.aries.com/v1/predictions/historical-data/batch",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'queries' => [
[
'symbol' => 'HORC_1126_Republican',
'from' => '2026-04-01T00:00:00Z',
'to' => '2026-04-20T00:00:00Z',
'limit' => 500
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.aries.com/v1/predictions/historical-data/batch"
payload := strings.NewReader("{\n \"queries\": [\n {\n \"symbol\": \"HORC_1126_Republican\",\n \"from\": \"2026-04-01T00:00:00Z\",\n \"to\": \"2026-04-20T00:00:00Z\",\n \"limit\": 500\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.aries.com/v1/predictions/historical-data/batch")
.header("Content-Type", "application/json")
.body("{\n \"queries\": [\n {\n \"symbol\": \"HORC_1126_Republican\",\n \"from\": \"2026-04-01T00:00:00Z\",\n \"to\": \"2026-04-20T00:00:00Z\",\n \"limit\": 500\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aries.com/v1/predictions/historical-data/batch")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"queries\": [\n {\n \"symbol\": \"HORC_1126_Republican\",\n \"from\": \"2026-04-01T00:00:00Z\",\n \"to\": \"2026-04-20T00:00:00Z\",\n \"limit\": 500\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"results": [
{
"symbol": "<string>",
"count": 1,
"ticks": [
{
"timestamp": "2026-04-18T13:45:01.234Z",
"yesPrice": "0.54",
"noPrice": "0.46",
"quantity": 10
}
],
"from": "2023-11-07T05:31:56Z",
"to": "2023-11-07T05:31:56Z"
}
]
}
}{
"success": false,
"error": {
"type": "VALIDATION",
"code": "SYMBOL_REQUIRED",
"message": "string"
}
}{
"success": false,
"error": {
"type": "EXTERNAL_SERVICE",
"code": "UPSTREAM_UNAVAILABLE",
"message": "string"
}
}Historical Data
Batch Historical Ticks
Returns historical ticks for up to 5 prediction-market contracts in one request, each query carrying its own optional time window and limit.
Use Case: Load every leg of a multi-contract event in a single round trip instead of one request per symbol.
POST
/
v1
/
predictions
/
historical-data
/
batch
Batch historical ticks for up to 5 symbols
curl --request POST \
--url https://api.aries.com/v1/predictions/historical-data/batch \
--header 'Content-Type: application/json' \
--data '
{
"queries": [
{
"symbol": "HORC_1126_Republican",
"from": "2026-04-01T00:00:00Z",
"to": "2026-04-20T00:00:00Z",
"limit": 500
}
]
}
'import requests
url = "https://api.aries.com/v1/predictions/historical-data/batch"
payload = { "queries": [
{
"symbol": "HORC_1126_Republican",
"from": "2026-04-01T00:00:00Z",
"to": "2026-04-20T00:00:00Z",
"limit": 500
}
] }
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
queries: [
{
symbol: 'HORC_1126_Republican',
from: '2026-04-01T00:00:00Z',
to: '2026-04-20T00:00:00Z',
limit: 500
}
]
})
};
fetch('https://api.aries.com/v1/predictions/historical-data/batch', 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://api.aries.com/v1/predictions/historical-data/batch",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'queries' => [
[
'symbol' => 'HORC_1126_Republican',
'from' => '2026-04-01T00:00:00Z',
'to' => '2026-04-20T00:00:00Z',
'limit' => 500
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.aries.com/v1/predictions/historical-data/batch"
payload := strings.NewReader("{\n \"queries\": [\n {\n \"symbol\": \"HORC_1126_Republican\",\n \"from\": \"2026-04-01T00:00:00Z\",\n \"to\": \"2026-04-20T00:00:00Z\",\n \"limit\": 500\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.aries.com/v1/predictions/historical-data/batch")
.header("Content-Type", "application/json")
.body("{\n \"queries\": [\n {\n \"symbol\": \"HORC_1126_Republican\",\n \"from\": \"2026-04-01T00:00:00Z\",\n \"to\": \"2026-04-20T00:00:00Z\",\n \"limit\": 500\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aries.com/v1/predictions/historical-data/batch")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"queries\": [\n {\n \"symbol\": \"HORC_1126_Republican\",\n \"from\": \"2026-04-01T00:00:00Z\",\n \"to\": \"2026-04-20T00:00:00Z\",\n \"limit\": 500\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"results": [
{
"symbol": "<string>",
"count": 1,
"ticks": [
{
"timestamp": "2026-04-18T13:45:01.234Z",
"yesPrice": "0.54",
"noPrice": "0.46",
"quantity": 10
}
],
"from": "2023-11-07T05:31:56Z",
"to": "2023-11-07T05:31:56Z"
}
]
}
}{
"success": false,
"error": {
"type": "VALIDATION",
"code": "SYMBOL_REQUIRED",
"message": "string"
}
}{
"success": false,
"error": {
"type": "EXTERNAL_SERVICE",
"code": "UPSTREAM_UNAVAILABLE",
"message": "string"
}
}Overview
The batch endpoint takes the same query shape as Get Historical Ticks, repeated. Each entry inqueries carries its own symbol and its own optional from, to, and limit, so the windows do not have to match.
Request
queries must contain between 1 and 5 entries. A request with zero queries, or with more than five, is rejected with 400.
{
"queries": [
{
"symbol": "HORC_1126_Republican",
"from": "2026-04-01T00:00:00Z",
"to": "2026-04-20T00:00:00Z",
"limit": 500
},
{
"symbol": "HORC_1126_Democrat",
"limit": 500
}
]
}
limit follows the same rule as the single-symbol endpoint: 0 or omitted means 10,000, and larger values are clamped to 10,000.
Response
data.results holds one HistoryResponse per query, in the order the queries were sent. A symbol with no ticks in its window comes back with count: 0 and an empty ticks array — it is not dropped from the array and does not fail the request.
{
"success": true,
"data": {
"results": [
{
"symbol": "HORC_1126_Republican",
"count": 1,
"ticks": [
{
"timestamp": "2026-04-18T13:45:01.234Z",
"yesPrice": "0.54",
"noPrice": "0.46",
"quantity": 10
}
]
},
{
"symbol": "HORC_1126_Democrat",
"count": 0,
"ticks": []
}
]
}
}
yesPrice and noPrice are exact decimals serialized as strings — parse them with a decimal type, not a float.
Example
curl -X POST "https://api.aries.com/v1/predictions/historical-data/batch" \
-H "Content-Type: application/json" \
-d '{"queries":[{"symbol":"HORC_1126_Republican","limit":500},{"symbol":"HORC_1126_Democrat","limit":500}]}'
Errors
400— malformed JSON, emptyqueries, more than 5 queries, or a query missingsymbol502— the upstream data store was unavailable
Was this page helpful?