HIP-4 read paths: what the mainnet API actually returns
We probed Hyperliquid HIP-4 outcome markets on mainnet: coin encodings, asset ids, settlement fills and the builder-code path, with what the API really returns.
HIP-4 is Hyperliquid’s native outcome-market standard, and the docs will give you the concepts. What they will not give you is the exact shape of what comes back over the wire. We probed mainnet while building our terminal and wrote everything down. This post is the field notes, verified against live data in August 2026.
The catalog: outcomeMeta
The market catalog comes from the standard info endpoint:
POST /info
{ "type": "outcomeMeta" }
The interesting part is that each market’s description field is not prose, it is a structured string you can parse:
class:priceBinary|underlying:BTC|expiry:20260817-0600|targetPrice:63035|period:1d
Split on |, then on :, and you have a typed catalog: market class,
underlying, expiry timestamp, target price, period. No scraping, no
guessing from titles.
Coins, sides, and the 100 million offset
Each side of an outcome market trades as its own spot coin, named
#<outcomeId><side> where side 0 is YES and side 1 is NO. Your
balances show up in spotClearinghouseState as rows prefixed with +,
and here is the trap that costs an afternoon:
asset id = 100_000_000 + encoding
If you take the encoding from the balance row and use it directly as the asset id in an order, nothing works. Add the hundred-million offset and everything works. That single line is probably worth this whole post.
The read paths you already know still work
The good news for anyone who has built against Hyperliquid before:
allMidsincludes all the#coins, over both REST and WebSocket.l2Book,recentTrades, andcandleSnapshotaccept them like any other coin, so books, tapes, and candles come free.- The WebSocket
tradesfeed includes both wallet addresses on each trade. For outcome markets that is a gift: you can watch which wallets are building YES positions in size, in real time.
Settlement leaves fingerprints
Resolution does not arrive as a special event. It arrives in userFills,
as fills with dir: "Settlement" at a price of 1.0 for the winning side
and 0.0 for the loser. Before resolution, redeeming a matched YES/NO
pair shows up as dir: "Merge Outcome" at 0.5 and 0.5.
If your accounting treats fills as the source of truth, settlement just flows through it. If it does not, this is your reason to refactor.
The builder-code path
Orders take the usual action shape, plus an optional builder field:
{ "a": assetId, "b": isBuy, "p": price, "s": size, "r": reduceOnly, "t": type }
with builder: { "b": address, "f": fee } where the fee is expressed in
tenths of a basis point. This is the whole monetization story for a
front-end: route orders, collect the builder fee, hold no funds, touch no
keys. And a detail that matters for anyone weighing this: the 500k HYPE
stake requirement applies to market deployers, not to front-ends.
Anyone can build the interface.
Why we care
We are building Verdict on top of these read paths: every outcome market on Hyperliquid, in one terminal, a React front over a read-only data plane. No custody, no keys, paid by the builder code. If you are a chain team or a builder poking at HIP-4 and these notes saved you a day, that is the kind of day we sell back at the studio.