Docs

HyperCore Info Endpoint

Access comprehensive Hyperliquid exchange data through Dwellir's HyperCore Info Endpoint. Query market metadata, account states, vault information, and more with higher rate limits than public endpoints.

Dwellir's HyperCore Info Endpoint provides comprehensive access to Hyperliquid exchange data through a simple HTTP JSON API. Query market metadata, user account information, vault data, and exchange status with a single POST request.

Why Hyperliquid? Build on the trading-focused EVM and HyperCore ecosystem built for onchain perpetuals and market data with HyperCore market structure, sub-second finality, and direct access to trading-focused data services.

Authenticate HyperCore Info requests by sending your Dwellir API key in the x-api-key header to https://api-hyperliquid-mainnet-info.n.dwellir.com/info.

Key Benefits

Higher Rate Limits

Unlike public Hyperliquid endpoints, Dwellir's HyperCore Info Endpoint provides significantly higher rate limits based on your subscription plan. This enables you to build production-grade applications without worrying about hitting rate limit restrictions.

Rate limits scale with your plan:

  • Free tier: Standard public limits
  • Growth tier: 10x higher limits
  • Enterprise tier: Custom rate limits tailored to your needs

Single Endpoint Architecture

All info endpoints are accessible through a single URL with different request types. This simplifies integration and reduces connection overhead.

Base URL: https://api-hyperliquid-mainnet-info.n.dwellir.com/info

Custom REST API Development

We're actively developing additional REST API endpoints for Hyperliquid. If you need custom endpoints or specialized data access patterns not covered by the standard Info Endpoint, contact our team to discuss your requirements.

Available Endpoint Categories

Market Metadata

Access trading pair information, leverage limits, and exchange status.

EndpointPurpose
metaGet trading pair metadata including leverage limits
spotMetaGet spot trading asset metadata
exchangeStatusMonitor exchange health and status
perpDexsGet all deployed perpetual DEXs with assets and configuration

User Accounts

Query account states, positions, orders, and fee information.

EndpointPurpose
clearinghouseStateGet perpetual trading account state
batchClearinghouseStatesBatch query account states for multiple users
openOrdersRetrieve all open orders for a user
spotClearinghouseStateGet spot trading account balances
userFeesGet user fee rates and volume data
userAbstractionGet account abstraction mode (unified, portfolio margin, etc.)
activeAssetDataGet leverage, max trade sizes, and available capital for a user and coin

Vaults

Access vault performance data and user positions.

EndpointPurpose
leadingVaultsGet top performing vaults
vaultSummariesGet summary data for all vaults
userVaultEquitiesGet user's vault positions

Validators

Query validator and delegation information.

EndpointPurpose
validatorL1VotesGet validator voting data
delegatorSummaryGet delegation summary for a user

Advanced Endpoints

Specialized endpoints for advanced use cases.

EndpointPurpose
userRateLimitGet rate limit information
delegationsGet staking delegation data
subAccountsGet sub-account information
frontendOpenOrdersGet orders formatted for UI display
liquidatableCheck liquidation status
webData2Get comprehensive web interface data
extraAgentsGet extra agent information
userRoleGet user role information
maxBuilderFeeGet maximum builder fee
maxMarketOrderNtlsGet maximum market order notionals

Quick Start

Authentication

All requests use the shared info endpoint and include your Dwellir API key in the URL path:

Bash
curl -X POST 'https://api-hyperliquid-mainnet-info.n.dwellir.com/info' \
  -H 'Content-Type: application/json' \
  -d '{"type":"meta"}'

Request Format

All endpoints follow the same pattern:

JSON
{
  "type": "ENDPOINT_TYPE",
  "param1": "value1",
  "param2": "value2"
}

Example: Get Exchange Metadata

Bash
curl -X POST 'https://api-hyperliquid-mainnet-info.n.dwellir.com/info' \
  -H 'Content-Type: application/json' \
  -d '{"type":"meta"}'

Example: Get User Account State

Bash
curl -X POST 'https://api-hyperliquid-mainnet-info.n.dwellir.com/info' \
  -H 'Content-Type: application/json' \
  -d '{
    "type": "clearinghouseState",
    "user": "0x63E8c7C149556D5f34F833419A287bb9Ef81487f"
  }'

Error Handling

HTTP Status Codes

CodeDescriptionSolution
200SuccessRequest completed successfully
400Bad RequestCheck request format and parameters
401UnauthorizedVerify API key is correct
422Unprocessable EntityCheck parameter values
429Rate LimitImplement backoff or upgrade plan
500Server ErrorRetry with exponential backoff

Error Response Format

JSON
{
  "error": "Error message description",
  "code": "ERROR_CODE"
}

Best Practices

1. Implement Proper Error Handling

Always include retry logic with exponential backoff:

JavaScript
async function queryEndpoint(payload, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    try {
      const response = await fetch(
        'https://api-hyperliquid-mainnet-info.n.dwellir.com/info',
        {
          method: 'POST',
          headers: {
            'Content-Type': 'application/json',
          },
          body: JSON.stringify(payload)
        }
      );

      if (!response.ok) throw new Error(`HTTP ${response.status}`);
      return await response.json();
    } catch (error) {
      if (i === maxRetries - 1) throw error;
      await new Promise(r => setTimeout(r, Math.pow(2, i) * 1000));
    }
  }
}

2. Cache Appropriately

Cache metadata endpoints to reduce API calls:

JavaScript
// Cache meta data for 1 hour
const metaCache = new Map();
const META_TTL = 3600000; // 1 hour in ms

async function getMeta() {
  const cached = metaCache.get('meta');
  if (cached && Date.now() - cached.timestamp < META_TTL) {
    return cached.data;
  }

  const data = await queryEndpoint({ type: 'meta' });
  metaCache.set('meta', { data, timestamp: Date.now() });
  return data;
}

3. Monitor Rate Limits

Check response headers to track rate limit usage:

JavaScript
const response = await fetch(url, options);
const remaining = response.headers.get('X-RateLimit-Remaining');
const reset = response.headers.get('X-RateLimit-Reset');

if (parseInt(remaining) < 10) {
  console.warn('Approaching rate limit');
}

4. Use Timeouts

Set reasonable timeouts for all requests:

JavaScript
const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), 10000); // 10s timeout

try {
  const response = await fetch(url, {
    ...options,
    signal: controller.signal
  });
  return await response.json();
} finally {
  clearTimeout(timeout);
}

Code Examples

Python

Python
import requests
from typing import Dict, Any

ENDPOINT = 'https://api-hyperliquid-mainnet-info.n.dwellir.com/info'

def query_info_endpoint(endpoint_type: str, params: Dict[str, Any] = None) -> Dict:
    """Query the HyperCore Info Endpoint"""
    payload = {"type": endpoint_type}
    if params:
        payload.update(params)

    headers = {
        'Content-Type': 'application/json',
    }

    response = requests.post(ENDPOINT, json=payload, headers=headers, timeout=10)
    response.raise_for_status()
    return response.json()

# Get metadata
meta = query_info_endpoint('meta')
print(f"Available pairs: {len(meta['universe'])}")

# Get user account state
user_state = query_info_endpoint(
    'clearinghouseState',
    {'user': '0x63E8c7C149556D5f34F833419A287bb9Ef81487f'}
)
print(f"Account value: {user_state['marginSummary']['accountValue']}")

JavaScript/TypeScript

TypeScript
const ENDPOINT = 'https://api-hyperliquid-mainnet-info.n.dwellir.com/info';

interface InfoRequest {
  type: string;
  [key: string]: any;
}

async function queryInfoEndpoint<T>(request: InfoRequest): Promise<T> {
  const response = await fetch(ENDPOINT, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(request)
  });

  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${response.statusText}`);
  }

  return await response.json();
}

// Get metadata
const meta = await queryInfoEndpoint({ type: 'meta' });
console.log(`Available pairs: ${meta.universe.length}`);

// Get user state
const userState = await queryInfoEndpoint({
  type: 'clearinghouseState',
  user: '0x63E8c7C149556D5f34F833419A287bb9Ef81487f'
});
console.log(`Account value: ${userState.marginSummary.accountValue}`);

Support

Need help with the HyperCore Info Endpoint?

For custom endpoint development or enterprise solutions, contact our team.


Access comprehensive Hyperliquid exchange data with Dwellir's enterprise-grade infrastructure. Get your API key →