> ## Documentation Index
> Fetch the complete documentation index at: https://goldrush.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# userPnlSummary | Hyperliquid Info API

> Hyperliquid userPnlSummary: fetch one aggregate PnL summary for a wallet - realized PnL, win/loss rate, volume, fees, funding, active days, and traded pairs.

> [card] Credit Cost
>
> 10 per call

> [card] Processing
>
> Realtime

The Hyperliquid info endpoint with `type: "userPnlSummary"` is used to fetch one aggregate PnL summary for a wallet - realized PnL, win/loss rate, volume, fees, funding, active days, and traded pairs.

> [!TIP]
>
> Estimate your monthly cost for this API using the [Pricing Calculator](https://goldrush.dev/docs/pricing-calculator.md?endpoint=%2Fapi-reference%2Fhyperliquid-info%2Fuser-pnl-summary).

> [!NOTE]
>
> * GoldRush custom analytics product. **Not available on the public Hyperliquid node** - there is no `POST api.hyperliquid.xyz/info` equivalent. Served only from `POST hypercore.goldrushdata.com/info`.
> * Returns a **single aggregate object** for one wallet (not an array), rolled up from the wallet's fully-closed round-trip trades and trading activity.
> * `startTime` / `endTime` are optional. When supplied they window the realized metrics; `accountAgeDays` and `tradedPairs` are always lifetime.
> * `dex` scopes the trade aggregates and `tradedPairs`; `volumeTraded`, `daysActive`, and `accountAgeDays` are computed across all DEXes.
> * For the underlying per-trade rows behind these totals, use [`userCompletedTrades`](https://goldrush.dev/docs/api-reference/hyperliquid-info/user-completed-trades) or [`userCompletedTradesByTime`](https://goldrush.dev/docs/api-reference/hyperliquid-info/user-completed-trades-by-time).

Returns a single aggregate object summarizing a wallet's realized trading performance - net PnL, win and loss rates, trade count, notional volume, fees, funding, active-day count, account age, and the list of coins it has traded. Use this for leaderboard tiles, wallet profile headers, or a one-call PnL read instead of paging through completed trades.

User-keyed. GoldRush-native, so there is no upstream Hyperliquid `/info` equivalent.

## Endpoint

```
POST https://hypercore.goldrushdata.com/info
Authorization: Bearer <GOLDRUSH_API_KEY>
Content-Type: application/json
```

## Request

**type** `string` *required*

Always `"userPnlSummary"`.

**user** `string` *required*

The wallet address (lowercase 0x-prefixed hex).

**startTime** `int`

Optional. Unix timestamp in milliseconds. Inclusive lower bound on `close_time` for the realized metrics. Omit for a lifetime summary.

**endTime** `int`

Optional. Unix timestamp in milliseconds. Inclusive upper bound on `close_time` for the realized metrics. Defaults to current server time when a window is otherwise in play.

**dex** `string`

Optional perp-DEX scope for the trade aggregates and `tradedPairs`. `main_dex` for the canonical Hyperliquid perp DEX, or a HIP-3 DEX identifier. Omit to aggregate across every DEX.

### Example

```bash cURL theme={null}
curl -X POST https://hypercore.goldrushdata.com/info \
  -H "Authorization: Bearer $GOLDRUSH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "userPnlSummary",
    "user": "0x31ca8395cf837de08b24da3f660e77761dfb974b"
  }'
```

```typescript TypeScript theme={null}
const response = await fetch("https://hypercore.goldrushdata.com/info", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.GOLDRUSH_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    type: "userPnlSummary",
    user: "0x31ca8395cf837de08b24da3f660e77761dfb974b",
  }),
});

const summary = await response.json();
```

```python Python theme={null}
import os, requests

response = requests.post(
    "https://hypercore.goldrushdata.com/info",
    headers={"Authorization": f"Bearer {os.environ['GOLDRUSH_API_KEY']}"},
    json={
        "type": "userPnlSummary",
        "user": "0x31ca8395cf837de08b24da3f660e77761dfb974b",
    },
)

summary = response.json()
```

## Response

A single aggregate object for the wallet.

```json theme={null}
{
  "user": "0x31ca8395cf837de08b24da3f660e77761dfb974b",
  "totalPnl": "1245.67",
  "winRate": 0.6143,
  "lossRate": 0.3857,
  "totalTrades": 140,
  "volumeTraded": "1095452.80",
  "totalFees": "812.44",
  "totalFunding": "15.09",
  "daysActive": 42,
  "accountAgeDays": 88,
  "tradedPairs": ["BTC", "ETH", "HYPE"]
}
```

### Field descriptions

> [!NOTE]
>
> `totalPnl`, `totalFees`, and `totalFunding` are **decimal strings** (full precision); `volumeTraded` is a **fixed 2-decimal string**. `winRate` and `lossRate` are JSON **floats** (4 decimals). `totalTrades`, `daysActive`, and `accountAgeDays` are JSON numbers. Do not parse the decimal strings as floats - keep them as strings or use a fixed-precision decimal type.

**user** `string`

The wallet address the summary belongs to (lowercase 0x-prefixed hex), echoing the request.

**totalPnl** `string`

Net realized PnL in USDC across the completed trades in scope - trading PnL minus fees plus funding (the sum of per-trade `net_pnl`).

**winRate** `number`

Fraction of completed trades with positive net PnL (`net_pnl > 0`), rounded to 4 decimals. `0.0` when the wallet has no completed trades.

**lossRate** `number`

Fraction of completed trades with non-positive net PnL (`net_pnl <= 0`), rounded to 4 decimals. Equal to `1 - winRate`; break-even trades count as losses.

**totalTrades** `int`

Number of fully-closed round-trip trades in scope.

**volumeTraded** `string`

Total notional traded in USDC as a fixed 2-decimal string (e.g. `"1095452.80"`). Computed across all DEXes.

**totalFees** `string`

Total trading fees paid in USDC across the completed trades in scope.

**totalFunding** `string`

Total funding in USDC across the completed trades in scope (negative = net paid, positive = net received).

**daysActive** `int`

Number of distinct UTC calendar days on which the wallet traded, within the window. Computed across all DEXes.

**accountAgeDays** `int | null`

Whole days since the wallet's first-ever fill, counted inclusively (first day = 1). Lifetime and all-DEX - never windowed. `null` when the wallet has no recorded fills. A wallet whose first fill predates GoldRush's HyperCore coverage reads younger than its true age.

**tradedPairs** `string[]`

Coin symbols the wallet has traded, in chronological order of first fill. Scoped to `dex` when supplied, otherwise all DEXes. Lifetime (not windowed).

## Related endpoints

> [card] [userAbstraction](https://goldrush.dev/docs/api-reference/hyperliquid-info/user-abstraction.md)
>
> fetch a user's account-abstraction mode.

> [card] [userBorrowLendInterest](https://goldrush.dev/docs/api-reference/hyperliquid-info/user-borrow-lend-interest.md)
>
> fetch a user's borrow/lend interest accrual history.

> [card] [userCompletedTrades](https://goldrush.dev/docs/api-reference/hyperliquid-info/user-completed-trades.md)
>
> fetch a wallet's most recent fully-closed round-trip trades, newest-first, each with realized PnL, funding, fees, and volume-weighted entry/exit prices.

> [card] [userCompletedTradesByTime](https://goldrush.dev/docs/api-reference/hyperliquid-info/user-completed-trades-by-time.md)
>
> fetch a wallet's fully-closed round-trip trades within a close-time window, oldest-first, with a keyset cursor for forward paging.

See all Hyperliquid endpoints: [Overview hub](https://goldrush.dev/docs/goldrush-hyperliquid/overview.md) · [Info API reference](https://goldrush.dev/docs/goldrush-hyperliquid/info-api/overview.md)

*Last reviewed: 2026-08-17*


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.