Streams referenceNative schema

Dedicated BTC price

A clean, low-overhead BTC last-trade price ticker.

A single-purpose ticker for the most common ask: the current BTC price, from last trades on the BTC perp. Minimal payload, minimal bandwidth. The right surface for bots and dashboards that just need a number that moves.

Method
hyperliquid_btc_price.v1.BtcPriceStreaming/StreamBtcPrices
Endpoint
stream.hyperliquidrpc.com:443 · gRPC over TLS (HTTP/2)
Auth
API key in x-api-key metadata
Volume
Tiny: a few messages per second at most. Available on every tier including Free.

When to use it

Most integrations start with one question: what is BTC trading at, right now? This stream answers exactly that and nothing else: the last-trade price from the BTC perp, as a byte-exact decimal string, a few messages per second at most. Bots that gate on price levels, dashboards that show a number, alerting scripts: this is their feed.

The moment you need size, side, wallets, or other markets, step up to the trades stream or an L2 top-of-book subscription. Same endpoint, same key.

Method

// stream.hyperliquidrpc.com:443 — gRPC over TLS (HTTP/2)// auth: API key in x-api-key metadata · server reflection enabledpackage hyperliquid_btc_price.v1; service BtcPriceStreaming {  // One message per BTC last-trade price change.  rpc StreamBtcPrices (BtcPriceRequest) returns (stream BtcPrice);}

The request takes no parameters worth tuning; the stream is pre-filtered to BTC by design.

Subscribe

# Streams JSON-encoded messages until you disconnect.grpcurl -H 'x-api-key: YOUR_KEY' \  -d '{}' \  stream.hyperliquidrpc.com:443 \  hyperliquid_btc_price.v1.BtcPriceStreaming/StreamBtcPrices

Available on every tier, including Free. It is the recommended first subscription for verifying your key and client setup end-to-end.

Message fields

FieldTypeDescription
pxstringBTC last-trade price.Byte-exact decimal string.
block_heightuint64Block of the underlying trade.
timestringTrade timestamp (ISO-8601).

Fields typed string that carry numbers are byte-exact decimal strings, verbatim from the node. Compare and store them as strings or arbitrary-precision decimals. Never parseFloat a price you intend to reconcile.

Server-side filters

  • none (the stream is pre-filtered to BTC by design)

Filters are applied on the server, so filtered-out messages never leave our edge. You only pay for what you subscribe to. Request shapes for every stream family are on Filtering; backfill semantics on Replay & backfill.

Semantics & gotchas

Pure ticker: one message per BTC last-trade price change, no snapshot phase.

  • It is a last-trade price, not a mid or mark. The number moves when a trade prints. For a quote-derived mid, use the L2 book with n_levels: 1; for the mark price, see liquidation events.
  • Messages arrive on trades, not on a clock. Quiet markets mean quiet streams. If your consumer needs a heartbeat, treat the connection state as liveness, not message arrival.
  • px is still a decimal string. Even a ticker deserves exactness: compare as Decimal, render as received.

Sample message

{  "px": "67012.0",  "block_height": 612408133,  "time": "2026-06-09T08:14:02.418Z"}

Tiny: a few messages per second at most. Available on every tier including Free.

Recipes

Verify your setup in one command

The fastest end-to-end test of a new API key: prices should print within seconds.

grpcurl -H 'x-api-key: YOUR_KEY' -d '{}' \  stream.hyperliquidrpc.com:443 \  hyperliquid_btc_price.v1.BtcPriceStreaming/StreamBtcPrices

Price-level alert

A complete alerting script is a dozen lines. Compare as decimals so thresholds behave at every magnitude.

from decimal import Decimal THRESHOLD = Decimal("70000") for msg in stub.StreamBtcPrices(request, metadata=meta):    if Decimal(msg.px) >= THRESHOLD:        notify(f"BTC at {msg.px} (block {msg.block_height})")        break

Related