---
title: "Get Hyperliquid wallet profile"
method: GET
path: "/v1/hyperliquid/wallets/{address}/profile"
tags: ["Hyperliquid - Wallets"]
---

# Get Hyperliquid wallet profile

`GET /v1/hyperliquid/wallets/{address}/profile`

## Request

- Base URL: `https://api.0xarchive.io`
- URL: `https://api.0xarchive.io/v1/hyperliquid/wallets/{address}/profile`
- Auth: API key in header `X-API-Key`

Behavioral metrics for one wallet on Hyperliquid perpetuals over the last `hours`: order mix (cancel, fill, IOC, post-only, TP/SL, and trigger ratios), order sizes, cancel speed, fill volume and maker share, fees, realized PnL, liquidations, and TWAP, client order ID, priority gas, and builder usage. Without `coin`, metrics come from daily aggregates: every UTC day that overlaps the window counts in full, and `unique_coins_traded` and `unique_fill_coins` are the largest single-day counts. With `coin`, the window is exact.

## Path parameters

- `address` string, required

## Query parameters

- `coin` string
- `hours` integer

## Response `200`

Wallet behavioral metrics

- ApiResponseWalletProfile
  - `success` boolean
  - `data` WalletProfile
    - `address` string: Wallet address, lowercase.
    - `metrics` WalletProfileMetrics: Behavioral metrics for one wallet. Ratios run from 0 to 1 unless noted; USD values use fill or order price times size.
      - `total_orders` integer: Orders placed.
      - `cancel_rate` number: Share of orders canceled.
      - `fill_rate` number: Share of orders filled.
      - `order_to_trade_ratio` number: Orders placed per fill (0 when there are no fills).
      - `ioc_ratio` number: Share of orders that are immediate-or-cancel.
      - `post_only_ratio` number: Share of orders that are post-only.
      - `tpsl_ratio` number: Share of orders that are position TP/SL orders.
      - `trigger_order_ratio` number: Share of orders that are trigger orders.
      - `unique_coins_traded` integer: Markets with orders.
      - `uses_tpsl` boolean: True when the wallet placed any position TP/SL order.
      - `uses_builder` boolean: True when any order went through a builder.
      - `top_builder` string: Builder address with the most orders. Omitted when no order used a builder.
      - `avg_order_size_usd` number: Average order notional in USD.
      - `max_order_size_usd` number: Largest order notional in USD.
      - `median_cancel_speed_ms` number: Median time from placement to cancel, in milliseconds.
      - `active_hours` integer: Hours with at least one order.
      - `total_fills` integer: Fills.
      - `total_volume_usd` number: Fill volume in USD.
      - `maker_ratio` number: Share of fill volume that was maker volume.
      - `long_short_ratio` number: Buy volume divided by sell volume (0 when there is no sell volume). Not bounded by 1.
      - `buy_volume_usd` number: Buy fill volume in USD.
      - `sell_volume_usd` number: Sell fill volume in USD.
      - `total_fees_usd` number: Fees paid, net of rebates.
      - `realized_pnl_usd` number: Realized PnL from closing fills.
      - `liquidation_count` integer: Fills that were liquidations.
      - `max_single_fill_usd` number: Largest single fill in USD.
      - `unique_fill_coins` integer: Markets with fills.
      - `uses_twap` boolean: True when any fill came from a TWAP.
      - `twap_fill_ratio` number: Share of fills that came from a TWAP.
      - `uses_cloid` boolean: True when any fill carried a client order ID.
      - `cloid_ratio` number: Share of fills that carried a client order ID.
      - `uses_priority_gas` boolean: True when any fill paid priority gas.
      - `total_priority_gas_paid` number: Priority gas paid.
      - `total_builder_fees_paid` number: Builder and deployer fees paid.
    - `period` string: Lookback window that was applied, for example `24h`.
  - `meta` ApiMeta: Response metadata. Every 2xx JSON response carries `meta.request_id`; list payloads add `count`; cursor-paged routes add `has_more` and, when another page follows, `next_cursor`; per-symbol routes add `symbol` and `venue`. Fields that do not apply to a route are omitted.
    - `count` integer: Number of records returned
    - `has_more` boolean: Cursor-paged routes: whether another page follows. `next_cursor` is present exactly when this is `true`. A final page can be empty when the previous page was exactly full; `has_more` is `false` on it.
    - `next_cursor` string: Opaque cursor for the next page, present exactly when `has_more` is `true`. Pass it back unchanged as `cursor` with the same filters. Do not parse or construct it.
    - `request_id` string, uuid, required: Unique request ID for support
    - `symbol` string: Per-symbol routes: the canonical public symbol the response describes (for example `BTC`, `xyz:TSLA`, `HYPE-USDC`, `#0`).
    - `venue` 'hyperliquid' | 'hip3' | 'hip4' | 'spot' | 'lighter' | 'rh-lighter': Per-symbol routes: the venue the response describes.
    - `coverage_from` string, date-time: Earliest coverage for the requested symbol and data type. Present only when the requested window ends before coverage begins.
    - `notice` string: Human-readable advisory about the response. Used when the requested window ends before coverage begins for the symbol, and on CVD responses that are one page of several; may carry other advisories in future.
    - `finalized_through` string, date-time: Two-tier datasets (Lighter trades): data at or before this instant is final; later data is preliminary.
    - `requested_end` string, date-time, nullable: The `end` the request asked for, echoed when it was clamped to `finalized_through`.
    - `clamped_to` string, date-time, nullable: The boundary the request's `end` was clamped to, when clamping occurred.
    - `preliminary_row_count` integer, nullable: Number of preliminary rows in this response, on routes that intentionally serve preliminary data (Lighter `/recent`).

## Other responses

- `400`: Invalid request: a parameter, symbol, interval, cursor or time range failed validation. See `error_code`.
- `401`: Authentication required: the API key is missing or invalid.
- `403`: The request is outside the plan's history window or per-request span, or the key is not allowed to make it.
- `404`: Without `coin`: the wallet placed no orders in the window.
- `429`: Rate limit, concurrency limit or monthly credits exceeded. See `error_code`.
- `default`: Any other error. The body is an `ErrorResponse`; branch on `error_code`. A 503 (`upstream_unavailable`) carries `Retry-After`.

---

[API](https://skmtc.dev/0xarchive/apis/0xarchive-api-2.md) · [All operations](https://skmtc.dev/0xarchive/apis/0xarchive-api-2/llms.txt) · [OpenAPI document](https://skmtc.dev/0xarchive/apis/0xarchive-api-2/revisions/27076f55595f?raw)
