Get top holders for a token
curl --request GET \
--url https://api.range.org/v2/tokens/top-holders \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.range.org/v2/tokens/top-holders"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.range.org/v2/tokens/top-holders', 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.range.org/v2/tokens/top-holders",
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.range.org/v2/tokens/top-holders"
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.range.org/v2/tokens/top-holders")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.range.org/v2/tokens/top-holders")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"token": "<string>",
"network": "<string>",
"items": [
{
"rank": 123,
"address": "<string>",
"balance": 123,
"pct_of_supply": 123,
"is_contract": true,
"is_multisig": true,
"name_tag": "<string>",
"category": "<string>",
"entity": "<string>",
"num_sends": 123,
"num_receives": 123,
"unique_senders": 123,
"unique_receivers": 123,
"address_role": "<string>",
"malicious": true
}
],
"meta": {
"next_cursor": "eyJpZCI6IjkxeFFlV3Z...",
"previous_cursor": "eyJpZCI6IjkxeFFlV3Z...",
"first_page_cursor": "eyJpZCI6IjkxeFFlV3Z...",
"last_page_cursor": "eyJpZCI6IjkxeFFlV3Z...",
"total_count": 100,
"page_number": 1
}
}Token Information
Get top holders for a token
Returns top holders ordered by balance from the token-holders index. Only considers the latest snapshot (nonce=1).
GET
/
v2
/
tokens
/
top-holders
Get top holders for a token
curl --request GET \
--url https://api.range.org/v2/tokens/top-holders \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.range.org/v2/tokens/top-holders"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.range.org/v2/tokens/top-holders', 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.range.org/v2/tokens/top-holders",
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.range.org/v2/tokens/top-holders"
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.range.org/v2/tokens/top-holders")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.range.org/v2/tokens/top-holders")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"token": "<string>",
"network": "<string>",
"items": [
{
"rank": 123,
"address": "<string>",
"balance": 123,
"pct_of_supply": 123,
"is_contract": true,
"is_multisig": true,
"name_tag": "<string>",
"category": "<string>",
"entity": "<string>",
"num_sends": 123,
"num_receives": 123,
"unique_senders": 123,
"unique_receivers": 123,
"address_role": "<string>",
"malicious": true
}
],
"meta": {
"next_cursor": "eyJpZCI6IjkxeFFlV3Z...",
"previous_cursor": "eyJpZCI6IjkxeFFlV3Z...",
"first_page_cursor": "eyJpZCI6IjkxeFFlV3Z...",
"last_page_cursor": "eyJpZCI6IjkxeFFlV3Z...",
"total_count": 100,
"page_number": 1
}
}Authorizations
Use Authorization: Bearer
Query Parameters
Token symbol or identifier (e.g. USDtb)
Network name (e.g. eth)
Max number of holders per page (default 100, max 1000)
Required range:
1 <= x <= 1000Opaque pagination cursor. Use "A" for the first page, "Z" for the last page, or a cursor from a previous response.
Last modified on July 8, 2026
Was this page helpful?
⌘I