Exports
Download export
Generates presigned URLs for downloading export files. URLs are valid for 5 minutes.
Large exports may be split into multiple files (hourly or daily partitions). The response contains an array of artifacts, each with its own presigned URL. Small exports will have a single artifact.
Only available for exports with status succeeded.
GET
/
v1
/
exports
/
{id}
/
download
Python (ticksupply library)
# pip install ticksupply
from ticksupply import Client
client = Client(api_key="<api-key>")
download = client.exports.get_download("exp_019478a23c5f7b8e9d12abcdef012345")
print(download)// cargo add ticksupply
// cargo add tokio --features full
use ticksupply::Client;
#[tokio::main]
async fn main() -> ticksupply::Result<()> {
let client = Client::with_api_key("<api-key>")?;
let download = client.exports()
.get_download("exp_019478a23c5f7b8e9d12abcdef012345")
.await?;
println!("{download:#?}");
Ok(())
}
curl --request GET \
--url https://api.ticksupply.com/v1/exports/{id}/download \
--header 'X-Api-Key: <api-key>'const options = {method: 'GET', headers: {'X-Api-Key': '<api-key>'}};
fetch('https://api.ticksupply.com/v1/exports/{id}/download', 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.ticksupply.com/v1/exports/{id}/download",
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>"
],
]);
$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://api.ticksupply.com/v1/exports/{id}/download"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Api-Key", "<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://api.ticksupply.com/v1/exports/{id}/download")
.header("X-Api-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ticksupply.com/v1/exports/{id}/download")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Api-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"artifacts": [
{
"id": "art_0194a1b2c3d4e5f6a7b8c9d0e1f2a3b4",
"url": "https://tickstore-exports.s3.amazonaws.com/exports/...",
"bytes": 524288000,
"filename": "binance_BTCUSDT_trades_part_2024010100.csv.gz"
},
{
"id": "art_0194b2c3d4e5f6a7b8c9d0e1f2a3b4c5",
"url": "https://tickstore-exports.s3.amazonaws.com/exports/...",
"bytes": 524288000,
"filename": "binance_BTCUSDT_trades_part_2024010101.csv.gz"
},
{
"id": "art_0194c3d4e5f6a7b8c9d0e1f2a3b4c5d6",
"url": "https://tickstore-exports.s3.amazonaws.com/exports/...",
"bytes": 524288000,
"filename": "binance_BTCUSDT_trades_part_2024010102.csv.gz"
}
],
"count": 3,
"total_bytes": 1572864000
}{
"error": {
"code": "invalid_argument",
"message": "Invalid datastream_id: must be a positive integer"
}
}{
"error": {
"code": "unauthenticated",
"message": "Invalid or missing API key"
}
}{
"error": {
"code": "not_found",
"message": "Subscription not found"
}
}{
"error": {
"code": "request_timeout",
"message": "Request exceeded 10s deadline"
}
}{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded. Retry after 30 seconds."
}
}{
"error": {
"code": "internal",
"message": "An internal error occurred"
}
}Authorizations
Your API key. Get one from the dashboard at https://app.ticksupply.com/api-keys
Path Parameters
Export job ID (prefixed format, e.g., exp_xxx)
Pattern:
^exp_[a-f0-9]{32}$Response
Download URLs for all export artifacts
Download response containing presigned URLs for all export artifacts. Large exports may be split into multiple files (hourly or daily partitions).
Last modified on February 6, 2026
Was this page helpful?
⌘I
Python (ticksupply library)
# pip install ticksupply
from ticksupply import Client
client = Client(api_key="<api-key>")
download = client.exports.get_download("exp_019478a23c5f7b8e9d12abcdef012345")
print(download)// cargo add ticksupply
// cargo add tokio --features full
use ticksupply::Client;
#[tokio::main]
async fn main() -> ticksupply::Result<()> {
let client = Client::with_api_key("<api-key>")?;
let download = client.exports()
.get_download("exp_019478a23c5f7b8e9d12abcdef012345")
.await?;
println!("{download:#?}");
Ok(())
}
curl --request GET \
--url https://api.ticksupply.com/v1/exports/{id}/download \
--header 'X-Api-Key: <api-key>'const options = {method: 'GET', headers: {'X-Api-Key': '<api-key>'}};
fetch('https://api.ticksupply.com/v1/exports/{id}/download', 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.ticksupply.com/v1/exports/{id}/download",
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>"
],
]);
$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://api.ticksupply.com/v1/exports/{id}/download"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Api-Key", "<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://api.ticksupply.com/v1/exports/{id}/download")
.header("X-Api-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ticksupply.com/v1/exports/{id}/download")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Api-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"artifacts": [
{
"id": "art_0194a1b2c3d4e5f6a7b8c9d0e1f2a3b4",
"url": "https://tickstore-exports.s3.amazonaws.com/exports/...",
"bytes": 524288000,
"filename": "binance_BTCUSDT_trades_part_2024010100.csv.gz"
},
{
"id": "art_0194b2c3d4e5f6a7b8c9d0e1f2a3b4c5",
"url": "https://tickstore-exports.s3.amazonaws.com/exports/...",
"bytes": 524288000,
"filename": "binance_BTCUSDT_trades_part_2024010101.csv.gz"
},
{
"id": "art_0194c3d4e5f6a7b8c9d0e1f2a3b4c5d6",
"url": "https://tickstore-exports.s3.amazonaws.com/exports/...",
"bytes": 524288000,
"filename": "binance_BTCUSDT_trades_part_2024010102.csv.gz"
}
],
"count": 3,
"total_bytes": 1572864000
}{
"error": {
"code": "invalid_argument",
"message": "Invalid datastream_id: must be a positive integer"
}
}{
"error": {
"code": "unauthenticated",
"message": "Invalid or missing API key"
}
}{
"error": {
"code": "not_found",
"message": "Subscription not found"
}
}{
"error": {
"code": "request_timeout",
"message": "Request exceeded 10s deadline"
}
}{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded. Retry after 30 seconds."
}
}{
"error": {
"code": "internal",
"message": "An internal error occurred"
}
}