info (validatorSummaries)
curl --request POST \
--url https://api.hyperliquid.xyz/info \
--header 'Content-Type: application/json' \
--data '
{
"type": "validatorSummaries"
}
'import requests
url = "https://api.hyperliquid.xyz/info"
payload = { "type": "validatorSummaries" }
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({type: 'validatorSummaries'})
};
fetch('https://api.hyperliquid.xyz/info', 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.hyperliquid.xyz/info",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'type' => 'validatorSummaries'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.hyperliquid.xyz/info"
payload := strings.NewReader("{\n \"type\": \"validatorSummaries\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.hyperliquid.xyz/info")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"validatorSummaries\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hyperliquid.xyz/info")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"validatorSummaries\"\n}"
response = http.request(request)
puts response.read_body[
{
"validator": "<string>",
"signer": "<string>",
"name": "<string>",
"description": "<string>",
"stake": 123,
"isJailed": true,
"isActive": true,
"commission": "<string>",
"stats": [
"<unknown>"
]
}
]Hyperliquid node API
validatorSummaries | Hyperliquid info
The info endpoint with type: “validatorSummaries” returns summaries for all validators — stake, status, commission, and uptime/APR stats.
POST
/
info
info (validatorSummaries)
curl --request POST \
--url https://api.hyperliquid.xyz/info \
--header 'Content-Type: application/json' \
--data '
{
"type": "validatorSummaries"
}
'import requests
url = "https://api.hyperliquid.xyz/info"
payload = { "type": "validatorSummaries" }
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({type: 'validatorSummaries'})
};
fetch('https://api.hyperliquid.xyz/info', 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.hyperliquid.xyz/info",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'type' => 'validatorSummaries'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.hyperliquid.xyz/info"
payload := strings.NewReader("{\n \"type\": \"validatorSummaries\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.hyperliquid.xyz/info")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"validatorSummaries\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hyperliquid.xyz/info")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"validatorSummaries\"\n}"
response = http.request(request)
puts response.read_body[
{
"validator": "<string>",
"signer": "<string>",
"name": "<string>",
"description": "<string>",
"stake": 123,
"isJailed": true,
"isActive": true,
"commission": "<string>",
"stats": [
"<unknown>"
]
}
]You can only use this endpoint on the official Hyperliquid public API. It is not available through Chainstack, as the open-source node implementation does not support it yet. See Hyperliquid methods for the full availability breakdown.
info endpoint with type: "validatorSummaries" returns summaries for all validators on Hyperliquid — including delegated stake, active/jailed status, commission, and uptime and predicted-APR statistics.
Get your own node endpoint todayStart for free and get your app to production levels immediately. No credit card required.You can sign up with your GitHub, X, Google, or Microsoft account.
Parameters
Request body
type(string, required) — The request type. Must be"validatorSummaries".
Response
Returns an array of validator summaries. Each summary includes fields such as:validator(string) — The validator address.signer(string) — The validator signer address.name(string) — The validator name.description(string) — The validator description.stake(integer) — Total stake delegated to the validator (in wei).isJailed(boolean) — Whether the validator is jailed.isActive(boolean) — Whether the validator is active.commission(string) — The validator commission rate.stats(array) — Per-period (day,week,month) uptime fraction and predicted APR.
Example request
curl -X POST \
-H "Content-Type: application/json" \
-d '{"type": "validatorSummaries"}' \
https://api.hyperliquid.xyz/info
from hyperliquid.info import Info
from hyperliquid.utils import constants
info = Info(constants.MAINNET_API_URL, skip_ws=True)
# The SDK has no dedicated validatorSummaries helper, so post the request directly.
validators = info.post("/info", {"type": "validatorSummaries"})
print(validators)
import { HttpTransport, InfoClient } from "@nktkas/hyperliquid";
const transport = new HttpTransport();
const info = new InfoClient({ transport });
const validators = await info.validatorSummaries();
console.log(validators);
Example response
[
{
"validator": "0x000000000056f99d36b6f2e0c51fd41496bbacb8",
"signer": "0x0000000008b0b558419582041f85740344ae8fde",
"name": "ValiDAO",
"description": "The People's Validator",
"nRecentBlocks": 1,
"stake": 658880656542139,
"isJailed": false,
"unjailableAfter": null,
"isActive": true,
"commission": "0.04",
"stats": [
["day", { "uptimeFraction": "1.0", "predictedApr": "0.0215529962", "nSamples": 1440 }]
]
}
]
Use cases
Theinfo endpoint with type: "validatorSummaries" is useful for:
- Staking dashboards that list validators and their APRs
- Helping delegators choose a validator by stake, commission, and uptime
- Monitoring validator status and network health
Body
application/json
Request type
Available options:
validatorSummaries Response
200 - application/json
Summaries for all validators (stake, status, commission, uptime, and APR stats).
Validator address.
Validator signer address.
Validator name.
Validator description.
Total stake delegated to the validator (in wei).
Whether the validator is jailed.
Whether the validator is active.
Validator commission rate.
Per-period uptime and predicted APR stats.
Last modified on June 24, 2026
Was this page helpful?