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

builderApprovedNonFundingLedgerEvents

Stream every non-funding ledger update of users who had an active fee approval for your builder at the block.

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

{"type": "builderApprovedNonFundingLedgerEvents", "channel": "builderApprovedNonFundingLedgerEvents"}

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.

What it streams

Deposits, withdrawals, transfers, vault activity, liquidations and every other non-funding ledger update of users who held an active fee approval for your builder at the block of the update. Funding is excluded here and served by builderApprovedFundings.

Each event is delivered per participant: a transfer between two users who both approved your builder arrives twice, once with role: "sender" and once with role: "receiver", each naming that side's user. Events with a single participant carry role: "user". This is the same view userNonFundingLedgerEvents gives each of them, and the delta object is the one allUserNonFundingLedgerEvents sends for the same event, so the ledger wire shape is shared across channels.

It follows the rules of builderApprovedFills:

  • Attribution comes from approval state at the block, not from anything on the event itself, and revoking an approval does not retract past events.

  • A user may hold approvals from several builders. Each subscribed builder receives its own copy.

  • An approval is treated as revoked only when its max fee rate is set to exactly 0%.

Subscribe

{
    "type": "subscribe",
    "subscription": {
        "type": "builderApprovedNonFundingLedgerEvents",
        "builder": "0xb84168cf3be63c6b8dad05ff5d755e97432ff80b"
    }
}

builder is required and must be a 20-byte hex address. It is matched case-insensitively.

Unsubscribe

Ledger event data format

Each entry names the attributed participant and their role, the block time in milliseconds, the transaction hash, the txIndex within the block, and the delta describing the ledger change. Events are batched per block; both sides of a transfer share one txIndex and always arrive in the same message.

This channel is always chunked. Messages carry chunk, totalChunks and batchId on every connection, whether or not you passed liveFormat=chunked-v1, so a large batch never arrives as one oversized frame. Group by batchId, order by chunk, and you have the block's complete batch when you hold totalChunks of them. See Live Message Chunking.

Reconnection Note: When reconnecting with a session, replay and live events may overlap. Deduplicate using (time, txIndex, user, role) - skip entries whose tuple you have already processed. See Session Management for details.

The delta variants (deposit, withdraw, internalTransfer, spotTransfer, vaultDeposit, liquidation, ...) are documented on allUserNonFundingLedgerEvents.

Examples

Error messages:

Common errors

Last updated