---
title: "Account Portfolio"
method: GET
path: "/gateway/v1/hyperliquid/account"
tags: ["Hyperliquid"]
---

# Account Portfolio

`GET /gateway/v1/hyperliquid/account`

Returns a wallet's full portfolio across perps, spot, vaults, and staking in one call, with a perp+vault equity roll-up (`total_value_usd` is the total-equity figure a dashboard header should show, vs the perp-only equity on `/performance` and `/positions`). This is the source for spot balances.

This is a point-in-time snapshot, not a time series; its perp block duplicates the margin summary from `/hyperliquid/positions` (this endpoint adds spot/vault/staking so it stands alone as a full-portfolio call). Sections are fetched independently: if one fails, that section is omitted (not null) and the failure is named in `errors[]`. The call returns 200 when at least one section succeeds, and 502 only if all four fail. Spot balances are token-denominated and staking is in HYPE.

## Query parameters

- `address` string, required — Wallet address: a 0x EVM address or an ENS name (e.g. vitalik.eth). Solana addresses are not supported.

## Response `200`

OK

- DataObjectResponseHyperliquidAccount
  - `$schema` string, uri — A URL to the JSON Schema for this object.
  - `data` HyperliquidAccount, required
    - `address` string, required — Wallet address
    - `as_of` integer, required — When the account sections were fetched upstream (Unix seconds) — for a cached response this predates the response time by up to the cache TTL
    - `errors` HyperliquidSectionError[], nullable — Sections whose fetch failed; omitted when everything succeeded
      - `reason` string, required — Short reason for the failure
      - `section` string, required — Section that failed: perp, spot, vaults, staking, or pricing (the HYPE-mark lookup that values total_value_usd)
    - `perp` HyperliquidPerpSummary
      - `account_value` number, double, required — Perps equity, USD
      - `open_position_count` integer, required — Number of open positions
      - `total_margin_used` number, double, required — Margin in use, USD
      - `withdrawable` number, double, required — Withdrawable from perps, USD
    - `spot` HyperliquidSpot
      - `balances` HyperliquidSpotBalance[], nullable, required — Spot token balances, sorted by symbol
        - `available` number, double, required — Free balance not locked in open orders = total - hold (token units). Not the cross-margin withdrawable.
        - `entry_notional` number, double, required — Cost basis, USD
        - `hold` number, double, required — Amount locked in open orders (token units)
        - `symbol` string, required — Token (USDC, HYPE)
        - `token_id` integer, required — Token index
        - `total` number, double, required — Token balance (token units)
        - `withdrawable` number, double — Maintenance-adjusted amount actually withdrawable for this token; differs from available for collateral tokens like USDC (token units). Omitted when not available for this token.
    - `staking` HyperliquidStaking
      - `delegated_hype` number, double, required — HYPE staked
      - `pending_withdrawal_count` integer, required — Pending withdrawals
      - `total_pending_withdrawal_hype` number, double, required — HYPE currently unstaking
      - `undelegated_hype` number, double, required — HYPE not delegated
    - `total_value_usd` number, double — Best-effort total account value, USD: perp equity + vault equity + staked HYPE + spot holdings that have a market price (USDC, stablecoins, and HYPE). Excludes spot tokens with no market price (counted in unpriced_token_count) — so when unpriced_token_count is 0 this is the complete account value, otherwise a lower bound. Omitted when any account section (perp, spot, vaults, staking) failed to load, or when HYPE is held but its price could not be fetched (see errors[]) — so a present value always covers every section.
    - `unpriced_token_count` integer, required — Number of held spot tokens that have no market price and are therefore excluded from total_value_usd. 0 means total_value_usd is complete; greater than 0 means it is a lower bound (the excluded tokens are typically small, illiquid spot tokens).
    - `vaults` HyperliquidVaults
      - `positions` HyperliquidVaultPosition[], nullable, required — Per-vault positions, sorted by vault address
        - `equity` number, double, required — Equity in this vault, USD
        - `locked_until` integer — Lock expiry, Unix seconds. Compare against the current time — a past value means the lock has expired. Omitted when this vault has no lock.
        - `vault_address` string, required — Vault address
      - `total_equity` number, double, required — Total held in vaults, USD
  - `meta` ObjectResponseMeta, required
    - `cached` boolean, required — Whether this response was served from cache
    - `credits_used` integer, required — Credits deducted for this request
    - `empty_reason` string — Hint explaining why the data array is empty, when applicable

## Other responses

- `default` — Error

---

[API](https://skmtc.dev/asksurf/apis/asksurf-public-rest-api.md) · [All operations](https://skmtc.dev/asksurf/apis/asksurf-public-rest-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/asksurf/asksurf-public-rest-api/revisions/498f461e81c4/schema)
