For the complete documentation index, see llms.txt. This page is also available as Markdown.

allFills

Stream all fills, optionally filtered to one or more coins.

Every live data message includes both routing identifiers with the same value:

{"type": "allFills", "channel": "allFills"}

Other payload fields are omitted above. Existing clients may continue routing on either field.

💧New endpoint - this endpoint is not a part of original Hyperliquid API and is added by us for builder convenience.

Per-coin allFills is included in every tier (20/100/200 coins for starter/growth/scale; higher bespoke limits are available — contact us). Streaming all coins with no coin/coins filter is an add-on and requires the ws:allFills permission.

Subscribe

{
    "type": "subscribe",
    "subscription": {
        "type": "allFills",
        "dex": "dex_name",                   // optional, filter by DEX (default: all)
        "coin": "xyz:SP500",                 // optional, single-coin filter (legacy)
        "coins": ["xyz:SP500", "xyz:NDX"],   // optional, multi-coin filter
        "outcomeMarkets": "exclude",         // optional, "exclude" or "only"
        "aggregateByTime": true              // optional
    }
}

Filters

Parameter
Type
Description

dex

string

Filter by DEX. Use "main" for Hyperliquid perps, or the dex name (e.g. "vntls") for dex-specific fills. Omit to receive fills from all DEXes.

coin

string

Single-coin filter (case-sensitive). Use the full coin string including any prefix, e.g. "BTC", "ETH", "xyz:SP500", "#90", "@107" / "PURR/USDC" (spot).

coins

string[]

Multi-coin filter (case-sensitive, up to the tier's coin cap: 20/100/200). Same coin format as coin.

outcomeMarkets

string

Filter outcome/prediction market fills (coins starting with #). Set to "exclude" to drop them, or "only" to receive only outcome market fills. Omit to include all.

aggregateByTime

boolean

When true, fills with the same timestamp are aggregated into a single fill.

coin and coins may be used together — their union is the effective coin set. Omitting both (no coin filter) makes this the all-coins firehose and requires the ws:allFills add-on permission.

Coins are additive — grow or shrink the set without gaps. A connection holds a single allFills subscription, and re-subscribing adds the new coins to it (union), like subscribing to additional bbo coins — no error, no unsubscribe/resubscribe cycle, and no gap in delivery for coins you already hold. To drop coins, send an unsubscribe naming just those coins: they are removed from the set and the rest keep streaming uninterrupted. Re-sending an identical subscription is a no-op. The merge requires matching parameters — a subscribe whose dex, aggregateByTime, or outcomeMarkets differs from the active subscription is rejected (unsubscribe first). Switching between a per-coin filter and the all-coins firehose likewise requires unsubscribing first (the two forms cannot coexist on one connection, since all allFills frames share one channel with no per-subscription identity). Separate connections each get their own allFills subscription. The coin cap (20/100/200) is counted cumulatively across the API key.

All filters are optional and can be combined. For example, to stream only main-dex fills excluding outcome markets:

Unsubscribe

Name coins to remove just those from the active set (remaining coins keep streaming, gap-free):

Omit coins to clear the connection's allFills subscription entirely:

Fill data format

Each fill contains an address and fill details. Fills are batched per block.

Reconnection Note: When reconnecting with a session, replay and live events may overlap. Deduplicate using (time, txIndex) - skip fills where this tuple is at or before your last processed fill. See Session Management for details.

Examples

Error messages:

Common errors

  1. (Only the no-filter firehose form requires the add-on; per-coin allFills is included in every tier.)

  2. (Coins merge additively across subscribes, but only when the other parameters match the active subscription. A per-coin ↔ firehose switch is similarly rejected with "unsubscribe it first".)

Last updated