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

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

payload = {
"type": "perpDexLimits",
"dex": "xyz"
}
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: 'perpDexLimits', dex: 'xyz'})
};

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' => 'perpDexLimits',
'dex' => 'xyz'
]),
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\": \"perpDexLimits\",\n \"dex\": \"xyz\"\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\": \"perpDexLimits\",\n \"dex\": \"xyz\"\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\": \"perpDexLimits\",\n \"dex\": \"xyz\"\n}"

response = http.request(request)
puts response.read_body
{
  "totalOiCap": "<string>",
  "oiSzCapPerPerp": "<string>",
  "maxTransferNtl": "<string>",
  "coinToOiCap": [
    [
      "<string>"
    ]
  ]
}
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: "perpDexLimits" retrieves the market limits for a builder-deployed perpetual DEX on Hyperliquid — the total open interest cap, the per-perpetual open interest size cap, the maximum transfer notional, and the per-asset open interest caps.
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 "perpDexLimits".
  • dex (string, required) — The name of the builder-deployed perp DEX, for example "xyz". The empty string is not allowed. Use perpDexs to list deployed perp DEX names.

Response

Returns a perp DEX limits object, or null if the DEX has no configured limits.
  • totalOiCap (string) — Total open interest cap across the DEX.
  • oiSzCapPerPerp (string) — Open interest size cap per perpetual.
  • maxTransferNtl (string) — Maximum transfer notional amount.
  • coinToOiCap (array) — Array of [coin, oiCap] tuples giving the open interest cap per asset.

Example request

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

{
  "totalOiCap": "7000000000.0",
  "oiSzCapPerPerp": "20000000000.0",
  "maxTransferNtl": "3000000000.0",
  "coinToOiCap": [
    ["xyz:AAPL", "100000000.0"],
    ["xyz:ALUMINIUM", "25000000.0"],
    ["xyz:AMD", "100000000.0"]
  ]
}

Use case

The info endpoint with type: "perpDexLimits" is useful for:
  • Checking the open interest caps of a builder-deployed perp DEX before opening positions
  • Monitoring per-asset open interest caps on a perp DEX
  • Building risk and deployment tools that validate against current market limits

Body

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

Request type

Available options:
perpDexLimits
dex
string
default:xyz
required

Name of the builder-deployed perp DEX. The empty string is not allowed.

Minimum string length: 1

Response

200 - application/json
object | null

Perp DEX limit configuration

totalOiCap
string

Total open interest cap across the DEX.

oiSzCapPerPerp
string

Open interest size cap per perpetual.

maxTransferNtl
string

Maximum transfer notional amount.

coinToOiCap
string[][]

Array of [coin, oiCap] tuples giving the open interest cap per asset.

Required array length: 2 elements
Last modified on June 24, 2026