Overview
The IndexerClient provides read-only access to market data, orderbooks, and account information through the Indexer API.
Access via CompositeClient:
const markets = await client.indexerClient.markets.getPerpetualMarkets();
const account = await client.indexerClient.account.getParentSubaccount(
address,
0
);
Markets API
getPerpetualMarkets()
Get all perpetual markets and their data.
const response = await client.indexerClient.markets.getPerpetualMarkets();
for (const [marketId, market] of Object.entries(response.markets)) {
console.log(`${market.ticker}: $${market.oraclePrice}`);
}
Returns: Promise<MarketsResponse>
getPerpetualMarketOrderbook()
Get orderbook for a specific market.
const orderbook =
await client.indexerClient.markets.getPerpetualMarketOrderbook("ETH-USD");
console.log("Top bid:", orderbook.bids[0].price);
console.log("Top ask:", orderbook.asks[0].price);
Market identifier (e.g., “ETH-USD”)
Returns: Promise<{ bids: OrderbookLevel[], asks: OrderbookLevel[] }>
Account API
getParentSubaccount()
Get subaccount balances and positions.
const account = await client.indexerClient.account.getParentSubaccount(
wallet.address,
0
);
console.log("Equity:", account.subaccount.equity);
console.log("Free Collateral:", account.subaccount.freeCollateral);
Parent subaccount number (usually 0)
Returns: Promise<SubaccountResponse>
getOrder()
Get details of a specific order.
const order = await client.indexerClient.account.getOrder(orderId);
console.log(`Order ${order.id}:`);
console.log(` Status: ${order.status}`);
console.log(` Price: $${order.price}`);
console.log(` Size: ${order.size}`);
Returns: Promise<Order>
get()
Generic GET request to Indexer API.
const orders = await client.indexerClient.account.get(
"/v4/orders/parentSubaccountNumber",
{
address: wallet.address,
parentSubaccountNumber: 0,
ticker: "ETH-USD",
returnLatestOrders: true,
}
);
Returns: Promise<any>