> ## Documentation Index
> Fetch the complete documentation index at: https://docs.baibai.cx/llms.txt
> Use this file to discover all available pages before exploring further.

# Fill reporting

> Individual order fills, trade IDs, late executions, and reconciliation.

Use Hyperliquid's `userFills` subscription or `/info` queries `userFills` and `userFillsByTime`. Reports identify individual orders with `oid` and individual trades with `tid`. A fill reduces that order's remaining size; other orders are unchanged.

| Field             | Meaning                                                                 |
| ----------------- | ----------------------------------------------------------------------- |
| `coin`            | Spot wire symbol, such as `@0`                                          |
| `oid`, `tid`      | Order and trade IDs                                                     |
| `px`, `sz`        | Maker price and filled base amount, as decimal strings                  |
| `side`            | `B` for a maker buy; `A` for a maker sell                               |
| `time`            | Execution block timestamp in Unix milliseconds                          |
| `hash`            | Full Base transaction hash                                              |
| `startPosition`   | Maker base inventory immediately before this reported leg               |
| `dir`             | `Buy` or `Sell`                                                         |
| `crossed`         | `false`: the maker supplied resting liquidity                           |
| `fee`, `feeToken` | `0.0` and the quote token; negotiated maker fees are settled separately |
| `closedPnl`       | `0.0`; this spot adapter does not compute position P\&L                 |

Amounts can have finer precision than the order-entry lot size because on-chain execution can partially consume a lot. Keep decimal amounts exact in accounting.

## Order updates

Subscribe to `orderUpdates` for `{order,status,statusTimestamp}`. The nested order includes `oid`, `coin`, `side`, `limitPx`, `sz`, `origSz`, `timestamp`, and the optional `cloid`. Status is `open`, `filled`, `canceled`, or `scheduledCancel`. A partial fill leaves an open order with reduced `sz`.

A successful modify creates a new order ID. Late executions against an older published curve keep their original ID, even if it was canceled or modified. A canceled order can therefore receive a later fill and its remaining size can decrease. Cancellation acknowledges the gateway state change, not the end of all on-chain exposure.

At equal price, allocation between makers remains proportional to posted size. Within your own allocated leg, your orders at that price consume in order-ID order. See [curves and allocation](/makers/trading-and-allocation).

## Persistence and reconciliation

Persist fills and deduplicate by `(master, tid)`. No fill acknowledgement is required. On reconnect, fetch `openOrders` and fill history, subscribe again, and merge the overlapping data idempotently. `userFills` begins with a snapshot; replayed records keep their IDs.

The API retains the latest 2000 fills per master and up to 2000 eligible closed orders, while protecting identities needed by retained publications. Archive your own records. The platform's [public attribution API](/makers/http-api) provides exact aggregate amounts and the on-chain fill decomposition for reconciliation.

Notification follows chain observation and durable attribution. Plan for seconds of delay; see [settlement and fill latency](/makers/fills-and-latency).

Taker-specific fees are separate from maker fills: the platform attributes the full curve output to makers and credits the fee to the taker’s ledger row. Do not subtract the taker fee from these maker reports. See the [public fee reconciliation API](/makers/http-api#get-v0fees).
