---
title: "Get HIP-4 instrument"
method: GET
path: "/v1/hyperliquid/hip4/instruments/{symbol}"
tags: ["HIP-4 Outcomes - Instruments"]
---

# Get HIP-4 instrument

`GET /v1/hyperliquid/hip4/instruments/{symbol}`

## Request

- Base URL: `https://api.0xarchive.io`
- URL: `https://api.0xarchive.io/v1/hyperliquid/hip4/instruments/{symbol}`
- Auth: API key in header `X-API-Key`

Get a single HIP-4 per-side instrument by coin id (e.g., `0`, `1`). The `#`-prefixed form (`#0`, `#1`) is also accepted.

## Path parameters

- `symbol` string, required

## Response `200`

HIP-4 instrument detail

- ApiResponseHip4Outcome: API response wrapping a single HIP-4 per-side instrument
  - `success` boolean
  - `data` Hip4Outcome: HIP-4 per-side instrument metadata. One row per `#N` coin. Each outcome has two sides: side 0 (Yes) and side 1 (No). Public asset_id formula: `100_000_000 + 10*outcome_id + side`. Coin format: `#<10*outcome_id + side>`.
    - `outcome_id` integer, required: Numeric outcome identifier
    - `side` 0 | 1, required: Side index: 0 = Yes, 1 = No
    - `asset_id` integer, required: Public asset ID. Formula: `100_000_000 + 10*outcome_id + side`.
    - `coin` string, required: Coin identifier. Returned in `#`-prefixed form. REST paths accept either the bare numeric id (e.g. `0`) or the `#`-prefixed form (e.g. `#0`). Format: `10*outcome_id + side`.
    - `symbol` string, required: Same value as `coin`. Provided for consistency with other venues.
    - `name` string, nullable: Human-readable per-side market name
    - `description` string, nullable: Pipe-delimited recurring-market metadata
    - `side_name` string, nullable: Human label for this side (typically `Yes` or `No`)
    - `recurring_class` string, nullable: Recurring market class (e.g., `priceBinary`)
    - `recurring_underlying` string, nullable: Underlying asset for recurring price-binary outcomes
    - `recurring_expiry` string, date-time, nullable: Settlement timestamp (UTC)
    - `recurring_target_px` number, nullable: Target price for the binary outcome
    - `recurring_period` string, nullable: Cadence of the recurring market (e.g., `1d`, `1h`)
    - `builder_address` string, nullable: Builder wallet address that deployed the outcome
    - `is_settled` boolean: Whether the outcome has settled. Once settled, live tracking ends for the market, but historical data remains queryable.
    - `settlement_value` number, nullable: Settlement value once the outcome settles (0.0 or 1.0 for binary outcomes). Omitted while unsettled.
    - `settlement_at` string, date-time, nullable: Settlement timestamp (UTC). Omitted while unsettled.
    - `first_seen_at` string, date-time, nullable: When this outcome side was first observed by 0xArchive (UTC)
    - `last_updated_at` string, date-time, nullable: Timestamp when the side metadata was last updated
    - `display_title` string, nullable: Per-side human-readable title, deterministic from parsed metadata.
    - `slug` string, nullable: Per-side URL slug mirroring Hyperliquid's pattern.
  - `meta` ResponseMeta: 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.
- `404`: Not found. `not_found`: the resource id is unknown. `unsupported_for_venue`: the venue does not offer this datatype (`available_on` names where it is served). `route_not_found`: no route matches the path.
- `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)
