Docs

perpDexs - HyperCore Info Endpoint

Get all perpetual DEXs deployed on Hyperliquid. Query deployer details, listed assets, open interest caps, funding multipliers, fee configuration, and sub-deployer permissions.

Get all third-party perpetual DEXs deployed on Hyperliquid's infrastructure, including their listed assets, open interest caps, funding parameters, and deployer configuration.

Authenticate by including your Dwellir API key in the URL path: https://api-hyperliquid-mainnet-info.n.dwellir.com/YOUR_API_KEY/info.

When to Use This Endpoint

The perpDexs endpoint is essential for:

  • DEX Discovery — Enumerate all perpetual DEXs deployed on Hyperliquid
  • Asset Listing — Find which assets are available on each DEX and their open interest caps
  • Funding Analysis — Query funding multipliers and interest rates across DEXs
  • Deployer Verification — Verify deployer addresses and fee recipients for each DEX
  • Permission Auditing — Inspect sub-deployer permissions and capabilities

Common Use Cases

1. List All DEXs and Their Assets

Enumerate all deployed DEXs with their asset counts and total OI capacity:

JavaScript
async function listDexOverview() {
  const dexs = await getPerpDexs();

  console.log('=== Perpetual DEXs on Hyperliquid ===\n');
  dexs.filter(d => d !== null).forEach(dex => {
    const totalOiCap = dex.assetToStreamingOiCap.reduce(
      (sum, [, cap]) => sum + parseFloat(cap), 0
    );

    console.log(`${dex.fullName} (${dex.name})`);
    console.log(`  Deployer: ${dex.deployer}`);
    console.log(`  Assets: ${dex.assetToStreamingOiCap.length}`);
    console.log(`  Total OI Cap: $${(totalOiCap / 1e6).toFixed(1)}M`);
    console.log(`  Fee Scale: ${dex.deployerFeeScale}`);
    console.log('');
  });
}

2. Find a Specific Asset Across DEXs

Search for which DEXs list a specific asset:

JavaScript
async function findAssetAcrossDexs(assetSymbol) {
  const dexs = await getPerpDexs();

  const results = [];
  dexs.filter(d => d !== null).forEach(dex => {
    const match = dex.assetToStreamingOiCap.find(
      ([name]) => name.split(':')[1] === assetSymbol
    );

    if (match) {
      const fundingEntry = dex.assetToFundingMultiplier.find(
        ([name]) => name === match[0]
      );

      results.push({
        dex: dex.fullName,
        dexPrefix: dex.name,
        asset: match[0],
        oiCap: match[1],
        fundingMultiplier: fundingEntry ? fundingEntry[1] : 'N/A'
      });
    }
  });

  console.log(`\n=== "${assetSymbol}" across DEXs ===\n`);
  results.forEach(r => {
    console.log(`${r.dex}: OI Cap $${(parseFloat(r.oiCap) / 1e6).toFixed(1)}M | Funding: ${r.fundingMultiplier}`);
  });

  return results;
}

// Usage
await findAssetAcrossDexs('GOLD');

3. Analyze Funding Parameters

Compare funding configurations across DEXs:

JavaScript
async function analyzeFunding() {
  const dexs = await getPerpDexs();

  console.log('=== Funding Analysis ===\n');
  dexs.filter(d => d !== null).forEach(dex => {
    if (dex.assetToFundingMultiplier.length === 0 &&
        dex.assetToFundingInterestRate.length === 0) {
      console.log(`${dex.fullName}: No custom funding config`);
      return;
    }

    console.log(`${dex.fullName}:`);

    if (dex.assetToFundingMultiplier.length > 0) {
      const multipliers = dex.assetToFundingMultiplier.map(([, m]) => parseFloat(m));
      const avg = multipliers.reduce((a, b) => a + b, 0) / multipliers.length;
      console.log(`  Funding multipliers: ${multipliers.length} assets, avg ${avg.toFixed(4)}`);
    }

    if (dex.assetToFundingInterestRate.length > 0) {
      console.log(`  Interest rates: ${dex.assetToFundingInterestRate.length} assets`);
    }

    console.log('');
  });
}

4. Audit Sub-Deployer Permissions

Review which addresses have administrative permissions:

JavaScript
async function auditPermissions(dexName) {
  const dexs = await getPerpDexs();
  const dex = dexs.find(d => d !== null && d.name === dexName);

  if (!dex) {
    console.log(`DEX "${dexName}" not found`);
    return;
  }

  console.log(`=== Permission Audit: ${dex.fullName} ===\n`);
  console.log(`Deployer: ${dex.deployer}`);
  console.log(`Oracle Updater: ${dex.oracleUpdater || 'None'}`);
  console.log(`Fee Recipient: ${dex.feeRecipient || 'None'}`);

  console.log('\nSub-Deployer Permissions:');
  dex.subDeployers.forEach(([permission, addresses]) => {
    console.log(`  ${permission}:`);
    addresses.forEach(addr => console.log(`    - ${addr}`));
  });
}

// Usage
await auditPermissions('xyz');

5. Monitor OI Cap Utilization

Build a dashboard showing available capacity:

JavaScript
async function getOiCapSummary() {
  const dexs = await getPerpDexs();

  const summary = dexs
    .filter(d => d !== null)
    .map(dex => {
      const assets = dex.assetToStreamingOiCap.map(([name, cap]) => ({
        asset: name,
        oiCap: parseFloat(cap)
      }));

      const totalCap = assets.reduce((sum, a) => sum + a.oiCap, 0);
      const topAssets = assets
        .sort((a, b) => b.oiCap - a.oiCap)
        .slice(0, 3);

      return {
        name: dex.fullName,
        assetCount: assets.length,
        totalOiCap: totalCap,
        topAssets: topAssets
      };
    })
    .sort((a, b) => b.totalOiCap - a.totalOiCap);

  console.log('=== OI Cap Summary (by total capacity) ===\n');
  summary.forEach(dex => {
    console.log(`${dex.name}: $${(dex.totalOiCap / 1e6).toFixed(0)}M total (${dex.assetCount} assets)`);
    dex.topAssets.forEach(a => {
      console.log(`  ${a.asset}: $${(a.oiCap / 1e6).toFixed(0)}M`);
    });
    console.log('');
  });

  return summary;
}

Best Practices

  1. Filter null entries — The response array may contain null values at certain indices
  2. Cache results — DEX configurations change infrequently, cache for 5-15 minutes
  3. Parse asset names — Asset names use the format dexName:SYMBOL (e.g., "xyz:GOLD")
  4. Monitor fee changes — Check lastDeployerFeeScaleChangeTime for recent fee updates
  5. Validate deployer addresses — Verify deployer and fee recipient addresses when integrating
  • meta — Get core Hyperliquid trading pair metadata
  • spotMeta — Get spot trading asset metadata
  • exchangeStatus — Monitor exchange health and status
  • clearinghouseState — Get account state for a specific DEX
  • OHLCV REST API — Use prefix:ASSET symbols as the market parameter for candle queries

Discover perpetual DEXs on Hyperliquid with Dwellir's HyperCore Info Endpoint. Get your API key →