curl -X GET "https://api.cryptoquant.com/v1/btc/flow-indicator/stablecoins-ratio?exchange=binance&window=day&from=20191001&limit=2" \
-H "Authorization: Bearer <YOUR_API_KEY>"fetch("https://api.cryptoquant.com/v1/btc/flow-indicator/stablecoins-ratio?exchange=binance&window=day&from=20191001&limit=2", { headers: { "Authorization": "Bearer <YOUR_API_KEY>"} })
.then(response => response.json())
.then(data => console.log(data))require('axios')
.get("https://api.cryptoquant.com/v1/btc/flow-indicator/stablecoins-ratio?exchange=binance&window=day&from=20191001&limit=2", { headers: { Authorization: 'Bearer <YOUR_API_KEY>' } })
.then(response => console.log(response))require 'net/http'
uri = URI("https://api.cryptoquant.com/v1/btc/flow-indicator/stablecoins-ratio?exchange=binance&window=day&from=20191001&limit=2")
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/v1/btc/flow-indicator/stablecoins-ratio?exchange=binance&window=day&from=20191001&limit=2"
print(requests.get(url, headers=headers).json())<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cryptoquant.com/v1/btc/flow-indicator/stablecoins-ratio",
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/v1/btc/flow-indicator/stablecoins-ratio"
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/v1/btc/flow-indicator/stablecoins-ratio")
.header("Authorization", "Bearer <token>")
.asString();{
"status": {
"code": 200,
"message": "success"
},
"result": {
"window": "day",
"data": [
{
"date": "2026-06-14",
"stablecoins_ratio": 0.0000079,
"stablecoins_ratio_usd": 0.51929221
},
{
"date": "2026-06-13",
"stablecoins_ratio": 0.00000792,
"stablecoins_ratio_usd": 0.50960413
}
]
}
}Stablecoins Ratio
BTC reserve divided by all stablecoins reserve held by an exchange. This usually indicates potential sell pressure. Supported exchanges are determined by the concurrent validity of both BTC and Stablecoins (for at least 1 token).
Note: This endpoint supports a maximum of 1,000 entries per request.
π Data Guide: Stablecoins Ratio β definition, interpretation, and chart examples.
curl -X GET "https://api.cryptoquant.com/v1/btc/flow-indicator/stablecoins-ratio?exchange=binance&window=day&from=20191001&limit=2" \
-H "Authorization: Bearer <YOUR_API_KEY>"fetch("https://api.cryptoquant.com/v1/btc/flow-indicator/stablecoins-ratio?exchange=binance&window=day&from=20191001&limit=2", { headers: { "Authorization": "Bearer <YOUR_API_KEY>"} })
.then(response => response.json())
.then(data => console.log(data))require('axios')
.get("https://api.cryptoquant.com/v1/btc/flow-indicator/stablecoins-ratio?exchange=binance&window=day&from=20191001&limit=2", { headers: { Authorization: 'Bearer <YOUR_API_KEY>' } })
.then(response => console.log(response))require 'net/http'
uri = URI("https://api.cryptoquant.com/v1/btc/flow-indicator/stablecoins-ratio?exchange=binance&window=day&from=20191001&limit=2")
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/v1/btc/flow-indicator/stablecoins-ratio?exchange=binance&window=day&from=20191001&limit=2"
print(requests.get(url, headers=headers).json())<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cryptoquant.com/v1/btc/flow-indicator/stablecoins-ratio",
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/v1/btc/flow-indicator/stablecoins-ratio"
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/v1/btc/flow-indicator/stablecoins-ratio")
.header("Authorization", "Bearer <token>")
.asString();{
"status": {
"code": 200,
"message": "success"
},
"result": {
"window": "day",
"data": [
{
"date": "2026-06-14",
"stablecoins_ratio": 0.0000079,
"stablecoins_ratio_usd": 0.51929221
},
{
"date": "2026-06-13",
"stablecoins_ratio": 0.00000792,
"stablecoins_ratio_usd": 0.50960413
}
]
}
}Authorizations
For each API request, include this HTTP header:
Authorization with the Bearer <YOUR_API_KEY>. Bearer access token is the type of HTTP Authorization. You have to include access token to the HTTP header and note that leading bearer is required.
You must include your access token in HTTP header in every request you make. The token is unique, issued for each client, and regularly changed(once a year). To obtain an access token, please upgrade your plan to Professional or Premium plan. You'll be able to see your access token on the API tab of your profile page after the subscription.
Query Parameters
An exchange that supports both BTC and Stablecoins. See here for BTC and for Stablecoins.
Currently, we support day and hour.
This defines the starting time for which data will be gathered, formatted as YYYYMMDDTHHMMSS (indicating YYYY-MM-DDTHH:MM:SS, UTC time). If window=day is used, it can also be formatted as YYYYMMDD (date). If window=block is used, you can also specify the exact block height (e.g. 510000). If this field is not specified, response will include data from the earliest time.
This defines the ending time for which data will be gathered, formatted as YYYYMMDDTHHMMSS (indicating YYYY-MM-DDTHH:MM:SS, UTC time). If window=day is used, it can also be formatted as YYYYMMDD (date). If window=block is used, you can also specify the exact block height (e.g. 510000). If this field is not specified, response will include data from the latest time.
The maximum number of entries to return before the latest data point (or before to if specified). This field ranges from 1 to 1000.
1 <= x <= 1000A format type about return message type. Supported formats are json, csv.
Response
Total BTC reserve divided by all stablecoins reserve held by an exchange.