Track Proof
curl --request GET \
--url https://api.example.com/v1/tracks/{track_id}/proofimport requests
url = "https://api.example.com/v1/tracks/{track_id}/proof"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/v1/tracks/{track_id}/proof', 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.example.com/v1/tracks/{track_id}/proof",
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://api.example.com/v1/tracks/{track_id}/proof"
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://api.example.com/v1/tracks/{track_id}/proof")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/tracks/{track_id}/proof")
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_bodyTracks
Track Proof
The Merkle proof material for verifying a track against its on-chain commitments.
GET
/
v1
/
tracks
/
{track_id}
/
proof
Track Proof
curl --request GET \
--url https://api.example.com/v1/tracks/{track_id}/proofimport requests
url = "https://api.example.com/v1/tracks/{track_id}/proof"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/v1/tracks/{track_id}/proof', 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.example.com/v1/tracks/{track_id}/proof",
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://api.example.com/v1/tracks/{track_id}/proof"
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://api.example.com/v1/tracks/{track_id}/proof")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/tracks/{track_id}/proof")
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_bodyReturns the proof material a client needs to verify a track against its on-chain commitments, without trusting the gateway.
This is what powers verified reads in the SDK: fetch data and proof together, check the proof against chain state, and reject anything that doesn’t verify. Every track is provable this way because its commitment lives in the tape’s on-chain Merkle tree (why tracks are provable).
Most readers never call this directly. The SDK’s verified-read mode does the fetching and checking in one step (verified reads), and like the rest of the catalog family, the raw response arrives in the SDK’s binary encoding (conventions).
From Rust,
get_track_proof fetches the proof and verify checks bytes against the commitment (reading).