Docs

frontendOpenOrders - HyperCore Info Endpoint

Get open orders formatted for frontend display on Hyperliquid. Optimized data structure for UI rendering and user-facing applications.

Get open orders formatted specifically for frontend display, with optimized data structure for UI rendering.

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.

When to Use This Endpoint

The frontendOpenOrders endpoint is essential for:

  • UI Development — Build trading interfaces with pre-formatted order data
  • Order Display — Show orders in user-friendly format
  • Real-time Updates — Refresh order books in trading applications
  • Frontend Optimization — Use data already structured for display

Common Use Cases

1. Display Open Orders in UI

Render orders in a trading interface:

JavaScript
async function displayOpenOrders(userAddress) {
  const data = await getFrontendOpenOrders(userAddress);

  console.log('=== Open Orders ===\n');

  if (data.orders.length === 0) {
    console.log('No open orders');
  } else {
    console.log(`${data.orders.length} open order(s)`);
    // Render orders in UI
  }
}

// Usage
await displayOpenOrders('0x31ca8395cf837de08b24da3f660e77761dfb974b');

2. Real-time Order Updates

Poll for order updates:

JavaScript
class OrderUpdateManager {
  constructor(userAddress, updateIntervalMs = 5000) {
    this.userAddress = userAddress;
    this.updateIntervalMs = updateIntervalMs;
    this.onUpdate = null;
  }

  async start(callback) {
    this.onUpdate = callback;

    while (true) {
      try {
        const orders = await getFrontendOpenOrders(this.userAddress);
        if (this.onUpdate) {
          this.onUpdate(orders);
        }
      } catch (error) {
        console.error('Failed to fetch orders:', error);
      }

      await new Promise(r => setTimeout(r, this.updateIntervalMs));
    }
  }
}

// Usage
const manager = new OrderUpdateManager('0x31ca8395cf837de08b24da3f660e77761dfb974b');
manager.start((orders) => {
  console.log(`Updated: ${orders.orders.length} orders`);
  // Update UI
});

3. Build Order Management Panel

Create order management interface:

JavaScript
async function getOrderPanel(userAddress) {
  try {
    const data = await getFrontendOpenOrders(userAddress);

    return {
      status: 'success',
      orders: data.orders,
      totalOrders: data.orders.length,
      hasOrders: data.orders.length > 0,
      lastUpdated: new Date().toISOString()
    };
  } catch (error) {
    return {
      status: 'error',
      error: error.message,
      orders: []
    };
  }
}

// Usage
const panel = await getOrderPanel('0x31ca8395cf837de08b24da3f660e77761dfb974b');
console.log('Order Panel:', panel);

4. Monitor Order Count

Track changes in order count:

JavaScript
async function monitorOrderCount(userAddress) {
  let previousCount = null;

  const check = async () => {
    const data = await getFrontendOpenOrders(userAddress);
    const currentCount = data.orders.length;

    if (previousCount !== null && currentCount !== previousCount) {
      const change = currentCount - previousCount;
      console.log(`Order count changed: ${change > 0 ? '+' : ''}${change}`);
    }

    previousCount = currentCount;
    return currentCount;
  };

  return check;
}

// Usage
const checkOrders = await monitorOrderCount('0x31ca8395cf837de08b24da3f660e77761dfb974b');
setInterval(checkOrders, 10000); // Check every 10 seconds

5. Order Status Dashboard

Create comprehensive order status view:

JavaScript
async function getOrderStatusDashboard(userAddress) {
  const data = await getFrontendOpenOrders(userAddress);

  return {
    totalOrders: data.orders.length,
    status: data.orders.length > 0 ? 'active' : 'no-orders',
    timestamp: new Date().toISOString(),
    orders: data.orders
  };
}

// Usage
const dashboard = await getOrderStatusDashboard('0x31ca8395cf837de08b24da3f660e77761dfb974b');
console.log('Order Dashboard:', dashboard);

Best Practices

  1. Poll efficiently — Update every 3-10 seconds for active trading UIs
  2. Handle empty states — Display appropriate message when no orders exist
  3. Optimize rendering — Only re-render when order data changes
  4. Validate addresses — Ensure user addresses are valid before requests
  5. Implement caching — Cache briefly (1-5 seconds) to reduce redundant calls

Performance Tips

Efficient Polling Strategy

JavaScript
class SmartOrderPoller {
  constructor(userAddress, baseInterval = 5000) {
    this.userAddress = userAddress;
    this.baseInterval = baseInterval;
    this.lastData = null;
  }

  async poll() {
    const data = await getFrontendOpenOrders(this.userAddress);

    // Only notify if data changed
    const hasChanged = JSON.stringify(data) !== JSON.stringify(this.lastData);
    this.lastData = data;

    return {
      data: data,
      changed: hasChanged
    };
  }
}

Build powerful trading interfaces with Dwellir's HyperCore Info Endpoint. Get your API key →