info (subAccounts2)
curl --request POST \
--url https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/info \
--header 'Content-Type: application/json' \
--data '
{
"type": "subAccounts2",
"user": "0x1442ad477ded1b0028b57621aa7b6f7eadb8f568"
}
'import requests
url = "https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/info"
payload = {
"type": "subAccounts2",
"user": "0x1442ad477ded1b0028b57621aa7b6f7eadb8f568"
}
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: 'subAccounts2', user: '0x1442ad477ded1b0028b57621aa7b6f7eadb8f568'})
};
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' => 'subAccounts2',
'user' => '0x1442ad477ded1b0028b57621aa7b6f7eadb8f568'
]),
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\": \"subAccounts2\",\n \"user\": \"0x1442ad477ded1b0028b57621aa7b6f7eadb8f568\"\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\": \"subAccounts2\",\n \"user\": \"0x1442ad477ded1b0028b57621aa7b6f7eadb8f568\"\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\": \"subAccounts2\",\n \"user\": \"0x1442ad477ded1b0028b57621aa7b6f7eadb8f568\"\n}"
response = http.request(request)
puts response.read_body[
{}
]Hyperliquid node API
subAccounts2 | Hyperliquid info
The info endpoint with type: “subAccounts2” returns a user’s sub-accounts (V2), including each sub-account’s per-DEX clearinghouse state and spot state.
POST
/
4f8d8f4040bdacd1577bff8058438274
/
info
info (subAccounts2)
curl --request POST \
--url https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/info \
--header 'Content-Type: application/json' \
--data '
{
"type": "subAccounts2",
"user": "0x1442ad477ded1b0028b57621aa7b6f7eadb8f568"
}
'import requests
url = "https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/info"
payload = {
"type": "subAccounts2",
"user": "0x1442ad477ded1b0028b57621aa7b6f7eadb8f568"
}
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: 'subAccounts2', user: '0x1442ad477ded1b0028b57621aa7b6f7eadb8f568'})
};
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' => 'subAccounts2',
'user' => '0x1442ad477ded1b0028b57621aa7b6f7eadb8f568'
]),
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\": \"subAccounts2\",\n \"user\": \"0x1442ad477ded1b0028b57621aa7b6f7eadb8f568\"\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\": \"subAccounts2\",\n \"user\": \"0x1442ad477ded1b0028b57621aa7b6f7eadb8f568\"\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\": \"subAccounts2\",\n \"user\": \"0x1442ad477ded1b0028b57621aa7b6f7eadb8f568\"\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.
info endpoint with type: "subAccounts2" returns the sub-accounts owned by a user (the V2 response), including each sub-account’s per-DEX clearinghouse state and spot state. Use it to enumerate and inspect the sub-accounts under a master account.
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"subAccounts2".user(string, required) — Master account address in 42-character hexadecimal format.
Response
Returns an array of the user’s sub-accounts, ornull if the user has none. Each sub-account contains:
name(string) — The sub-account name.subAccountUser(string) — The sub-account address.master(string) — The master account address.dexToClearinghouseState(array) —[dex, state]tuples mapping each DEX (empty string for the main DEX) to its clearinghouse state.spotState(object) — The sub-account’s spot clearinghouse state.
Example request
curl -X POST \
-H "Content-Type: application/json" \
-d '{"type": "subAccounts2", "user": "0x1442ad477ded1b0028b57621aa7b6f7eadb8f568"}' \
https://hyperliquid-mainnet.core.chainstack.com/4f8d8f4040bdacd1577bff8058438274/info
from hyperliquid.info import Info
# skip_ws=True avoids opening a WebSocket connection for this REST call
info = Info("YOUR_CHAINSTACK_ENDPOINT", skip_ws=True)
# The SDK has no dedicated subAccounts2 helper, so post the request directly.
sub_accounts = info.post("/info", {
"type": "subAccounts2",
"user": "0x1442ad477ded1b0028b57621aa7b6f7eadb8f568",
})
print(sub_accounts)
import { HttpTransport, InfoClient } from "@nktkas/hyperliquid";
// apiUrl points the transport at a custom server (your Chainstack endpoint)
const transport = new HttpTransport({ apiUrl: "YOUR_CHAINSTACK_ENDPOINT" });
const info = new InfoClient({ transport });
const subAccounts = await info.subAccounts2({
user: "0x1442ad477ded1b0028b57621aa7b6f7eadb8f568",
});
console.log(subAccounts);
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
null
null because the queried address has no sub-accounts. An account with sub-accounts returns an array of sub-account objects as described above.
Use cases
Theinfo endpoint with type: "subAccounts2" is useful for:
- Enumerating the sub-accounts under a master account
- Building dashboards that aggregate positions across sub-accounts
- Portfolio tooling that needs each sub-account’s clearinghouse and spot state
Body
application/json
Response
200 - application/json
object[] | null
Array of the user's sub-accounts, or null if the user has none.
Last modified on June 24, 2026
Was this page helpful?