curl -X GET "https://api.cryptoquant.com/v2/network/supply?asset=eth&window=day" \
-H "Authorization: Bearer <YOUR_API_KEY>"fetch("https://api.cryptoquant.com/v2/network/supply?asset=eth&window=day", { headers: { "Authorization": "Bearer <YOUR_API_KEY>"} })
.then(response => response.json())
.then(data => console.log(data))require('axios')
.get("https://api.cryptoquant.com/v2/network/supply?asset=eth&window=day", { headers: { Authorization: 'Bearer <YOUR_API_KEY>' } })
.then(response => console.log(response))require 'net/http'
uri = URI("https://api.cryptoquant.com/v2/network/supply?asset=eth&window=day")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer <YOUR_API_KEY>"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
puts res.bodyimport requests
headers = {'Authorization': 'Bearer <YOUR_API_KEY>'}
url = "https://api.cryptoquant.com/v2/network/supply?asset=eth&window=day"
print(requests.get(url, headers=headers).json())<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cryptoquant.com/v2/network/supply",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.cryptoquant.com/v2/network/supply"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.cryptoquant.com/v2/network/supply")
.header("Authorization", "Bearer <token>")
.asString();{
"status": {
"code": 123,
"message": "<string>"
},
"result": {
"window": "<string>",
"data": [
{
"datetime": "<string>",
"blockheight": 123,
"supply_new": 123,
"supply_total": 123,
"supply_minted": 123,
"supply_burned": 123,
"supply_circulating": 123,
"supply_issued": 123,
"supply_redeemed": 123
}
]
}
}Supply
Metrics on the supply of the asset — how much of it exists, and how that changed in the window.
curl -X GET "https://api.cryptoquant.com/v2/network/supply?asset=eth&window=day" \
-H "Authorization: Bearer <YOUR_API_KEY>"fetch("https://api.cryptoquant.com/v2/network/supply?asset=eth&window=day", { headers: { "Authorization": "Bearer <YOUR_API_KEY>"} })
.then(response => response.json())
.then(data => console.log(data))require('axios')
.get("https://api.cryptoquant.com/v2/network/supply?asset=eth&window=day", { headers: { Authorization: 'Bearer <YOUR_API_KEY>' } })
.then(response => console.log(response))require 'net/http'
uri = URI("https://api.cryptoquant.com/v2/network/supply?asset=eth&window=day")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer <YOUR_API_KEY>"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
puts res.bodyimport requests
headers = {'Authorization': 'Bearer <YOUR_API_KEY>'}
url = "https://api.cryptoquant.com/v2/network/supply?asset=eth&window=day"
print(requests.get(url, headers=headers).json())<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cryptoquant.com/v2/network/supply",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.cryptoquant.com/v2/network/supply"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.cryptoquant.com/v2/network/supply")
.header("Authorization", "Bearer <token>")
.asString();{
"status": {
"code": 123,
"message": "<string>"
},
"result": {
"window": "<string>",
"data": [
{
"datetime": "<string>",
"blockheight": 123,
"supply_new": 123,
"supply_total": 123,
"supply_minted": 123,
"supply_burned": 123,
"supply_circulating": 123,
"supply_issued": 123,
"supply_redeemed": 123
}
]
}
}What it measures
Metrics on the supply of the asset — how much of it exists, and how that changed in the window. The exact set of fields depends on the asset class: native ETH reports issuance, ERC-20 tokens report mints and burns, and stablecoins additionally separate circulating supply from total supply.Assets and windows
This endpoint serves 4 asset classes. The available windows differ by class — a window that works for one asset can return400 for another.
| Asset class | What it covers | Assets | Windows |
|---|---|---|---|
| Bitcoin | the native asset of Bitcoin, asset=btc | btc | block · hour · day |
| Native ETH | the native asset, asset=eth | eth | block · 10min · hour · day |
| ERC-20 | ERC-20 tokens | 198 assets | block · 10min · hour · day |
| Stablecoin | stablecoins issued on Ethereum | 76 assets | block · 10min · hour · day |
day. A request for a window that the asset’s class does not support returns 400 and lists the windows that asset does support.
Response fields
The time key depends on the window:datetime for day, 10min, and hour and blockheight plus datetime for block.
| Field | Type | Asset classes | Description |
|---|---|---|---|
supply_new | number | btc, eth | The amount newly issued in the window. Native assets only (eth, btc) — issuance comes from block rewards. |
supply_total | number | all | The total amount of the asset in existence. |
supply_minted | number | erc20, stablecoin | The amount minted in the window (an increase in total supply). |
supply_burned | number | erc20, stablecoin | The amount burned in the window (a decrease in total supply). |
supply_circulating | number | stablecoin | An approximation of the amount circulating in the market — total supply less balances held by the issuer (e.g. treasury addresses). |
supply_issued | number | stablecoin | The amount issued to clients in the window (an increase in circulating supply). |
supply_redeemed | number | stablecoin | The amount redeemed in the window (a decrease in circulating supply). |
Authorizations
For each API request, include the Authorization HTTP header with Bearer {access_token}.
Query Parameters
Asset to query, by its CryptoQuant alias (no chain suffix — usdt, not usdt_eth). 276 assets are available on this endpoint, across the asset classes btc, erc20, eth, stablecoin. Enumerate them with /v2/discovery/endpoints.
Chain the asset lives on. Optional for an asset that exists on exactly one chain, required when the same alias exists on several.
bitcoin, ethereum Aggregation window. Which windows are valid depends on the asset — see the endpoint page. Defaults to day.
block, 10min, hour, day Inclusive start time, YYYYMMDDTHHMMSS (UTC). If window=day, YYYYMMDD is also accepted.
Inclusive end time, YYYYMMDDTHHMMSS (UTC). If window=day, YYYYMMDD is also accepted.
Maximum rows returned (default 100, max 10000).
x <= 10000Response format: json (default) or csv.
json, csv