Get top holders for a token
curl --request GET \
--url https://api.range.org/v2/tokens/top-holders \
--header 'X-API-KEY: <api-key>'import requests
url = "https://api.range.org/v2/tokens/top-holders"
headers = {"X-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};
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 => [
"X-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.range.org/v2/tokens/top-holders"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-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.range.org/v2/tokens/top-holders")
.header("X-API-KEY", "<api-key>")
.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["X-API-KEY"] = '<api-key>'
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
}
}Network, Protocols & Tokens
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 'X-API-KEY: <api-key>'import requests
url = "https://api.range.org/v2/tokens/top-holders"
headers = {"X-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};
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 => [
"X-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.range.org/v2/tokens/top-holders"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-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.range.org/v2/tokens/top-holders")
.header("X-API-KEY", "<api-key>")
.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["X-API-KEY"] = '<api-key>'
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
Authorization method required to allow user to access the api endpoints.
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 30, 2026
Was this page helpful?
⌘I