curl --request GET \
--url https://api.blockworks.com/query/timeseries/tokenized-commodities-by-product/{granularity}/{id} \
--header 'X-Blockworks-API-Key: <api-key>'import requests
url = "https://api.blockworks.com/query/timeseries/tokenized-commodities-by-product/{granularity}/{id}"
headers = {"X-Blockworks-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Blockworks-API-Key': '<api-key>'}};
fetch('https://api.blockworks.com/query/timeseries/tokenized-commodities-by-product/{granularity}/{id}', 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.blockworks.com/query/timeseries/tokenized-commodities-by-product/{granularity}/{id}",
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-Blockworks-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.blockworks.com/query/timeseries/tokenized-commodities-by-product/{granularity}/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Blockworks-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.blockworks.com/query/timeseries/tokenized-commodities-by-product/{granularity}/{id}")
.header("X-Blockworks-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.blockworks.com/query/timeseries/tokenized-commodities-by-product/{granularity}/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Blockworks-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"key": "<string>",
"point_schema": [
{
"description": "<string>",
"field": "<string>",
"name": "<string>",
"time": true,
"type": "<string>",
"unit": "usd"
}
],
"points": [
[
123
]
],
"entity": {
"commodityID": "<string>",
"name": "<string>",
"symbol": "<string>"
}
},
"error": "<string>"
}{
"data": null,
"error": "unrecognized timeframe \"1y\": expected ytd|qtd|mtd|dtd|htd, <n>m|h|d|w, YYYY-MM-DD, YYYY-MM, YYYY, or RFC3339"
}{
"data": null,
"error": "this model requires authentication"
}{
"data": null,
"error": "this model requires the \"stablecoins_unified\" permission"
}{
"data": null,
"error": "model \"tokenized-commodities-by-product\" does not support granularity \"1h\" (supported: 1d)"
}Get Tokenized Commodity Product timeseries
Metrics for one tokenized commodity product, an issuer’s token for one underlying commodity, summed across the chains it is deployed on: chains and contracts, circulating supply, mints and burns, where the supply sits (CEX, DEX, lending, unlabeled wallets), lending deposits, borrows and APYs, holders, spot DEX volume and transfers. Each series is one product, keyed by its token id.
curl --request GET \
--url https://api.blockworks.com/query/timeseries/tokenized-commodities-by-product/{granularity}/{id} \
--header 'X-Blockworks-API-Key: <api-key>'import requests
url = "https://api.blockworks.com/query/timeseries/tokenized-commodities-by-product/{granularity}/{id}"
headers = {"X-Blockworks-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Blockworks-API-Key': '<api-key>'}};
fetch('https://api.blockworks.com/query/timeseries/tokenized-commodities-by-product/{granularity}/{id}', 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.blockworks.com/query/timeseries/tokenized-commodities-by-product/{granularity}/{id}",
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-Blockworks-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.blockworks.com/query/timeseries/tokenized-commodities-by-product/{granularity}/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Blockworks-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.blockworks.com/query/timeseries/tokenized-commodities-by-product/{granularity}/{id}")
.header("X-Blockworks-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.blockworks.com/query/timeseries/tokenized-commodities-by-product/{granularity}/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Blockworks-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"key": "<string>",
"point_schema": [
{
"description": "<string>",
"field": "<string>",
"name": "<string>",
"time": true,
"type": "<string>",
"unit": "usd"
}
],
"points": [
[
123
]
],
"entity": {
"commodityID": "<string>",
"name": "<string>",
"symbol": "<string>"
}
},
"error": "<string>"
}{
"data": null,
"error": "unrecognized timeframe \"1y\": expected ytd|qtd|mtd|dtd|htd, <n>m|h|d|w, YYYY-MM-DD, YYYY-MM, YYYY, or RFC3339"
}{
"data": null,
"error": "this model requires authentication"
}{
"data": null,
"error": "this model requires the \"stablecoins_unified\" permission"
}{
"data": null,
"error": "model \"tokenized-commodities-by-product\" does not support granularity \"1h\" (supported: 1d)"
}Authorizations
API key sent in the X-Blockworks-API-Key header; x-messari-api-key is accepted for existing integrations. The catalog endpoints and models on the public access tier need no key.
Path Parameters
Data granularity.
1d The Product ID identifying the series. A key no series has is not an error: the response carries an empty points array.
Query Parameters
Time window, one of: to-date (ytd, qtd, mtd, dtd, htd); relative, followed by m, h, d or w (30d, 12h, 4w; 1y and 1M are not accepted, use 365d, 52w, ytd or a calendar year); a calendar day (YYYY-MM-DD), month (YYYY-MM) or year (YYYY); or an RFC3339 instant, which runs from then to now. Mutually exclusive with start/end. Default: everything retained, up to now.
Window start, inclusive (RFC3339, unix seconds, or YYYY-MM-DD). Default: unbounded.
Window end, exclusive (RFC3339, unix seconds, or YYYY-MM-DD). Default: now.
If true, return only the first and last point of the resolved time window instead of every point in it.
Comma-separated metric fields to return; defaults to every metric. A point always leads with its timestamp, and the values that follow are described by point_schema in catalog order regardless of the order requested here.
chainCount, tokenAddressCount, circulatingSupplyUSD, mintAmountUSD, burnAmountUSD, mintCount, burnCount, balanceCEXUSD, balancePerpDEXUSD, balanceSpotDEXUSD, balanceLendingUSD, balanceUnknownUSD, lendingDepositsUSD, lendingBorrowedUSD, lendingNetFlowUSD, lendingGrossInflowUSD, lendingGrossOutflowUSD, lendingSupplyAPY, lendingBorrowAPY, lendingCollateralSeizedUSD, lendingLiquidationLossUSD, lendingLiquidationCount, holders, spotDEXBuyVolumeUSD, spotDEXSellVolumeUSD, spotDEXVolumeUSD, spotDEXTradeCount, spotDEXTraders, transferVolumeUSD, transferCount, transferUniqueSenders, transferUniqueReceivers Response format, overriding the Accept header: json (default), csv, or jsonl (NDJSON). csv and jsonl return the rows as a downloadable file.
json, csv, jsonl