Skip to main content
POST
/
4f8d8f4040bdacd1577bff8058438274
/
info
info (allBorrowLendReserveStates)
curl --request POST \
  --url https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/info \
  --header 'Content-Type: application/json' \
  --data '
{
  "type": "allBorrowLendReserveStates"
}
'
import requests

url = "https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/info"

payload = { "type": "allBorrowLendReserveStates" }
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: 'allBorrowLendReserveStates'})
};

fetch('https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/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://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/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' => 'allBorrowLendReserveStates'
]),
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://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/info"

payload := strings.NewReader("{\n \"type\": \"allBorrowLendReserveStates\"\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://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/info")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"allBorrowLendReserveStates\"\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/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\": \"allBorrowLendReserveStates\"\n}"

response = http.request(request)
puts response.read_body
{}
This method is available on Chainstack. Not all Hyperliquid methods are available on Chainstack, as the open-source node implementation does not support them yet — see Hyperliquid methods for the full availability breakdown.
The info endpoint with type: "allBorrowLendReserveStates" retrieves reserve states for all tokens in the Hyperliquid borrow/lend market. Returns an array of token index and reserve state pairs.
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 "allBorrowLendReserveStates".

Response

The response is an array of tuples, where each tuple contains:
  1. Token index (integer) — The token identifier.
  2. Reserve state (object) — Contains borrowYearlyRate, supplyYearlyRate, balance, utilization, oraclePx, ltv, totalSupplied, and totalBorrowed.

Example request

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"type": "allBorrowLendReserveStates"}' \
  https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/info
from hyperliquid.info import Info

info = Info("YOUR_CHAINSTACK_ENDPOINT", skip_ws=True)

# hyperliquid-python-sdk has no dedicated wrapper for this type yet,
# so post the request directly through the generic Info.post method.
reserve_states = info.post("/info", {"type": "allBorrowLendReserveStates"})

print(reserve_states)
import { HttpTransport, InfoClient } from "@nktkas/hyperliquid";

const transport = new HttpTransport({ apiUrl: "YOUR_CHAINSTACK_ENDPOINT" });
const client = new InfoClient({ transport });

const reserveStates = await client.allBorrowLendReserveStates();

console.log(reserveStates);
Use your own endpoint in your code. The code examples use a placeholder Chainstack endpoint (YOUR_CHAINSTACK_ENDPOINT) — replace it with your own Hyperliquid node endpoint from the Chainstack console. The curl above uses a shared public endpoint for quick checks only; do not use it in production.

Example response

[
  [
    0,
    {
      "borrowYearlyRate": "0.05",
      "supplyYearlyRate": "0.001",
      "balance": "3464255.81",
      "utilization": "0.024",
      "oraclePx": "1.0",
      "ltv": "0.0",
      "totalSupplied": "3548088.69",
      "totalBorrowed": "83832.95"
    }
  ],
  [
    150,
    {
      "borrowYearlyRate": "0.05",
      "supplyYearlyRate": "0.0",
      "balance": "14552.99",
      "utilization": "0.0",
      "oraclePx": "30.24",
      "ltv": "0.5",
      "totalSupplied": "14552.99",
      "totalBorrowed": "0.0"
    }
  ]
]

Use case

The info endpoint with type: "allBorrowLendReserveStates" is useful for:
  • Building a complete borrow/lend market overview dashboard
  • Comparing rates across all available tokens
  • Finding the best supply yields or lowest borrow rates
  • Monitoring overall lending market utilization and liquidity

Body

application/json
type
enum<string>
default:allBorrowLendReserveStates
required

Request type

Available options:
allBorrowLendReserveStates

Response

200 - application/json

Array of all token reserve states

The response is of type object.

Last modified on June 24, 2026