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

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

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

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' => 'allPerpMetas'
]),
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\": \"allPerpMetas\"\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\": \"allPerpMetas\"\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\": \"allPerpMetas\"\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: "allPerpMetas" retrieves metadata for all perpetual DEXes on Hyperliquid. Returns an array of universe and margin table configurations for each perp DEX.
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 "allPerpMetas".

Response

The response is an array of objects, one per perp DEX, each containing:
  • universe (array) — Array of perpetual assets with name, szDecimals, maxLeverage, marginTableId, and optional onlyIsolated and isDelisted flags.
  • marginTables (array) — Array of margin table tuples with table ID and margin tier configurations.

Example request

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"type": "allPerpMetas"}' \
  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 allPerpMetas helper, so post the request directly.
all_perp_metas = info.post("/info", {"type": "allPerpMetas"})
print(all_perp_metas)
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 allPerpMetas = await info.allPerpMetas();
console.log(allPerpMetas);
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

[
  {
    "universe": [
      {
        "szDecimals": 5,
        "name": "BTC",
        "maxLeverage": 40,
        "marginTableId": 56
      },
      {
        "szDecimals": 4,
        "name": "ETH",
        "maxLeverage": 25,
        "marginTableId": 55
      }
    ],
    "marginTables": []
  }
]

Use case

The info endpoint with type: "allPerpMetas" is useful for:
  • Retrieving perpetual metadata across all DEXes in a single call
  • Building multi-DEX trading interfaces
  • Comparing available assets and leverage limits across different perp DEXes
  • Caching exchange-wide perpetual configuration data

Body

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

Request type

Available options:
allPerpMetas

Response

200 - application/json

Array of perp metadata for all DEXes

The response is of type object.

Last modified on July 7, 2026