curl -X GET "https://api.cryptoquant.com/v2/flows/inter-entity/miner-to-exchange?asset=btc&from_miner=f2pool&to_exchange=okx&window=day" \
-H "Authorization: Bearer <YOUR_API_KEY>"fetch("https://api.cryptoquant.com/v2/flows/inter-entity/miner-to-exchange?asset=btc&from_miner=f2pool&to_exchange=okx&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/flows/inter-entity/miner-to-exchange?asset=btc&from_miner=f2pool&to_exchange=okx&window=day", { headers: { Authorization: 'Bearer <YOUR_API_KEY>' } })
.then(response => console.log(response))require 'net/http'
uri = URI("https://api.cryptoquant.com/v2/flows/inter-entity/miner-to-exchange?asset=btc&from_miner=f2pool&to_exchange=okx&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/flows/inter-entity/miner-to-exchange?asset=btc&from_miner=f2pool&to_exchange=okx&window=day"
print(requests.get(url, headers=headers).json())<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cryptoquant.com/v2/flows/inter-entity/miner-to-exchange",
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/flows/inter-entity/miner-to-exchange"
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/flows/inter-entity/miner-to-exchange")
.header("Authorization", "Bearer <token>")
.asString();{
"status": {
"code": 123,
"message": "<string>"
},
"result": {
"window": "<string>",
"data": [
{
"datetime": "<string>",
"flow_total": 123,
"flow_mean": 123,
"transactions_count_flow": 123,
"blockheight": 123
}
]
}
}Miner to Exchange
The amount of the asset moved from a mining pool to an exchange — the total, the mean per transaction, and the number of transactions.
curl -X GET "https://api.cryptoquant.com/v2/flows/inter-entity/miner-to-exchange?asset=btc&from_miner=f2pool&to_exchange=okx&window=day" \
-H "Authorization: Bearer <YOUR_API_KEY>"fetch("https://api.cryptoquant.com/v2/flows/inter-entity/miner-to-exchange?asset=btc&from_miner=f2pool&to_exchange=okx&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/flows/inter-entity/miner-to-exchange?asset=btc&from_miner=f2pool&to_exchange=okx&window=day", { headers: { Authorization: 'Bearer <YOUR_API_KEY>' } })
.then(response => console.log(response))require 'net/http'
uri = URI("https://api.cryptoquant.com/v2/flows/inter-entity/miner-to-exchange?asset=btc&from_miner=f2pool&to_exchange=okx&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/flows/inter-entity/miner-to-exchange?asset=btc&from_miner=f2pool&to_exchange=okx&window=day"
print(requests.get(url, headers=headers).json())<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cryptoquant.com/v2/flows/inter-entity/miner-to-exchange",
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/flows/inter-entity/miner-to-exchange"
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/flows/inter-entity/miner-to-exchange")
.header("Authorization", "Bearer <token>")
.asString();{
"status": {
"code": 123,
"message": "<string>"
},
"result": {
"window": "<string>",
"data": [
{
"datetime": "<string>",
"flow_total": 123,
"flow_mean": 123,
"transactions_count_flow": 123,
"blockheight": 123
}
]
}
}What it measures
The amount of the asset moved from a mining pool to an exchange — the total, the mean per transaction, and the number of transactions. Miners sending coins to exchanges is the classic sign of miner selling. 📖 Data Guide: Miner to Exchange — definition, interpretation, and chart examples.Assets and windows
| Asset class | What it covers | Assets | Windows |
|---|---|---|---|
| Bitcoin | the native asset of Bitcoin, asset=btc | btc | block · hour · day |
day.
Response fields
The time key depends on the window:datetime for day and hour and blockheight plus datetime for block.
| Field | Type | Description |
|---|---|---|
flow_total | number | The total amount moved along this flow in the window — within the entity for in-house flow, from the source entity to the destination entity for inter-entity flows. |
flow_mean | number | The mean amount per transaction along this flow. |
transactions_count_flow | integer | The number of transactions along this flow in the window. |
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). 1 asset is available on this endpoint, across the asset class btc. 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 Source mining pool, e.g. f2pool, or all_miner for the aggregate. Must differ from the destination — identical values return 400.
Destination exchange, e.g. okx, or all_exchange for the aggregate. Must differ from the source — identical values return 400.
Aggregation window. Which windows are valid depends on the asset — see the endpoint page. Defaults to day.
block, 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