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

# Alert events

> Every Webhook Alerts event type by category: what it reports, which venues it covers, how fast it arrives, and the parameters that define it.

An event type is the thing a rule listens for: a liquidation, a funding flip, a fill by a wallet you watch, a finished export. Each rule names exactly one. Find yours by category below; each entry says what it reports, how fast it arrives, the venues it covers, and the parameters it takes, whose ranges and defaults are in [Rules](/webhooks/rules#params).

Types marked **Coming soon** are declared but do not accept rules yet; creating one answers "not yet available".

## Market

* **`market.liquidation`** (seconds). A liquidation on a covered venue. Fills from one cascade collapse into one event per account, market and instant. Every liquidation is an occurrence; add a condition on `notional_usd` for the sizes you care about. Venues: `hyperliquid`, `hip3`, `lighter`, `rh-lighter`. Filters: `venue`, `symbols`. Params: `max_age_s`.
* **`market.liquidation_burst`** (minutes). Liquidation volume in a rolling window crosses your threshold, in USD or relative to the market's open interest or trailing hour of volume. Fires on the rising edge, not repeatedly while elevated, and at most once per market in each 15-minute window. Venues: `hyperliquid`, `hip3`, `lighter`, `rh-lighter`. Filters: `venue`, `symbols`. Params: `window_s`, `threshold_mode`, `threshold_usd`, `threshold_pct`.
* **`market.funding_flip`** (minutes). A funding rate changes sign. Every flip is an occurrence; condition on `magnitude` or `open_interest_usd` if a rate hovering near zero would alert too often. Venues: `hyperliquid`, `hip3`, `rh-lighter`. Filters: `venue`, `symbols`.
* **`market.oi_delta`** (minutes). Open interest on a market moved by at least your `threshold_pct` over your `window_s`. Fires once per direction per crossing. Venues: `hyperliquid`, `hip3`, `rh-lighter`. Filters: `venue`, `symbols`. Params: `window_s`, `threshold_pct`.
* **`market.breadth_cross`** (minutes). The share of markets trading above session VWAP crossed your `threshold`, with your `hysteresis_pct` band. Venue-wide, so symbols do not apply. Venues: `hyperliquid`, `hip3`. Filters: `venue`. Params: `threshold`, `hysteresis_pct`.
* **`market.listed`** (minutes). A new market is listed. Emitted once per market, the first time data appears for it. Venues: `hyperliquid`, `hip3`, `spot`, `lighter`, `rh-lighter`. Filters: `venue`.
* **`market.delisted`** (minutes, **Coming soon**). A market flipped from active to inactive. One event per delisting; a relisted market can delist again later. Venues: `hyperliquid`, `hip3`, `lighter`, `rh-lighter`. Filters: `venue`, `symbols`.
* **`market.pga_payment`** (minutes). A priority gas auction payment. Exchange-wide, so `symbols` refers to the payment token, not a market. Condition on `amount` or `notional_usd`. Venues: `hyperliquid`. Filters: `venue`, `symbols`. Params: `max_age_s`.
* **`hip4.settlement`** (minutes). A HIP-4 outcome side settled. One event per outcome and side, with aggregate contracts and value. Symbols use the per-side coin form, such as `#20481`. Venues: `hip4`. Filters: `venue`, `symbols`. Params: `max_age_s`.

### Scan floors

Market-wide scans have floors, declared as `cost_floor` in the catalog. They are the only thresholds the platform sets for you, and a rule can raise them but not lower them.

* `market.liquidation` never reads liquidations under 100 USD notional, so a rule with no conditions receives every liquidation from 100 USD up.
* `market.oi_delta` only considers markets that carried at least 5,000,000 USD of open interest going into the window.
* `hip4.settlement` scans settlements of 500 USD and up. A rule that sets no `min_notional_usd` usually receives settlements from 1,000 USD, and can receive smaller ones when another rule on the platform asks for less. Set `min_notional_usd` to pin your own floor.
* `market.pga_payment` reads payments of 1.5 HYPE and up, and stops after 50 payment events in a UTC day across the exchange, so an auction regime shift cannot use up every subscriber's daily deliveries.

## Account-scoped

These report on the addresses on your [watched list](/webhooks/watched-addresses), and only on occurrences after an address was added. Filters and conditions narrow venue, symbol and size; the watched list decides which addresses count. None of them has a scan floor.

* **`account.fill`** (seconds). A watched address executed in a market: one event per venue, market, block and account, with the fills collapsed and their notional summed. Every execution is an occurrence; conditions on `notional_usd`, `side`, `taker`, `is_liquidation` and the other declared metrics pick what you want. Venues: `hyperliquid`, `hip3`, `spot`. Params: `max_age_s`.
* **`account.liquidated`** (seconds). A watched address was liquidated. Fills from one cascade collapse into a single event per instant. Venues: `hyperliquid`, `hip3`. Params: `max_age_s`.
* **`account.transfer`** (seconds). A HyperCore spot token movement where a watched address is sender or destination. `symbols` refers to tokens (`USDC`, `HYPE`), not pairs. Condition on `usdc_value`, `kind` or `role`. Venues: `hyperliquid`. Params: `max_age_s`.
* **`account.twap_lifecycle`** (minutes). A watched address's TWAP changed state: `activated`, `finished`, `terminated`, `error`, `stopped` or `waitingForTrigger`. Condition on `status` or `terminal`. Venues: `hyperliquid`, `hip3`, `spot`. Params: `max_age_s`.
* **`account.order_rejected`** (minutes). The engine cancelled a watched address's orders without the account asking, grouped per block, and on spot also orders rejected at submission. Details below. Venues: `hyperliquid`, `hip3`, `spot`. Params: `max_age_s`.
* **`account.hip4_settled`** (minutes). A watched address's HIP-4 position settled, with its settlement value and realized PnL. Venues: `hip4`. Params: `max_age_s`.

Every account event accepts the filters `venue`, `symbols` and `addresses`.

`account.order_rejected` reports the engine's involuntary cancels: `reduceOnlyCanceled`, `selfTradeCanceled`, `siblingFilledCanceled`, `openInterestCapCanceled`, `marginCanceled`, `liquidatedCanceled`, `scheduledCancel`, `delistedCanceled` and `vaultWithdrawalCanceled`. On spot it also reports orders rejected at submission, whose status ends in `Rejected`. `data.kind` is `involuntary_cancel` or `submission_reject`, and `data.status` is the engine's own status. On perps and HIP-3, submission-time rejects never reach the archive and are not covered. You receive at most 5 of these events per watched address, venue and hour; the fifth carries `data.budget.exhausted: true`, and later ones that hour are not delivered. Margin, liquidation, open interest cap, delisting, vault withdrawal and too-many-open-orders events are exempt from that budget.

## Oracle and chain

* **`oracle.jump`** (minutes). A HIP-3 oracle price moved by at least your `threshold_pct` between consecutive updates. Only coins that publish a real oracle price are covered. Symbols are dex-namespaced (`xyz:AAPL`); a bare `AAPL` matches nothing. Venues: `hip3`. Filters: `venue`, `symbols`. Params: `threshold_pct`.
* **`chain.upgrade_detected`** (seconds). Hyperliquid shipped a new node build. Two edges share one `incident_id`: `data.state` is `started` when the new binary is swapped onto our node, and `completed` when that binary is the running node and reading fresh blocks again, with `duration_s` between them. Identity is the build commit. Builds usually land about weekly, around the weekend UTC. Condition on `state`, `commit`, `weekday_utc` or `duration_s`. Venues: `hyperliquid`. Filters: `venue`.
* **`oracle.stall`** (minutes, **Coming soon**). A HIP-3 dex oracle stopped publishing for longer than your `window_s`. `data.state` is `stalled`, `recovered` or `expired`. Venues: `hip3`. Filters: `venue`. Params: `window_s`.
* **`chain.block_stall`** (minutes, **Coming soon**). Hyperliquid mainnet stopped producing blocks for `threshold_s` or more, confirmed by independent liveness signals so our own node stalling alone never fires it. `data.state` is `stalled` or `recovered`. Venues: `hyperliquid`. Filters: `venue`. Params: `threshold_s`.
* **`chain.block_time_degraded`** (minutes, **Coming soon**). Block cadence fell `degraded_pct` or more below its trailing 24-hour baseline for `consecutive_minutes`. Precedes stalls. `data.state` is `degraded` or `recovered`. Venues: `hyperliquid`. Filters: `venue`. Params: `degraded_pct`, `consecutive_minutes`.

## Archive health

* **`archive.gap_detected`** (minutes). An ingestion stream stopped producing data beyond its expected cadence. Pairs with `archive.gap_resolved`. Venues: `hyperliquid`, `hip3`, `spot`, `lighter`, `rh-lighter`. Filters: `venue`.
* **`archive.gap_resolved`** (minutes). A stream that had stalled started producing data again. Venues and filters as `archive.gap_detected`.
* **`ingest.stall`** (minutes). One market's L2 feed went silent for `threshold_s` while its stream kept flowing. Naming `symbols` opts into one event per market; a rule without `symbols` gets one collapsed alert per incident. Venues: `hyperliquid`, `hip3`, `spot`, `lighter`, `rh-lighter`. Filters: `venue`, `symbols`. Params: `threshold_s`.
* **`ingest.recovered`** (minutes). A per-market L2 stall cleared. The closing half of `ingest.stall`, sharing its `incident_id`. Venues, filters and params as `ingest.stall`.

## Export, test and billing

* **`export.job.completed`** (minutes). A bulk export job finished and its Parquet files are ready. The payload carries `job_id` and an `api_url` pointer for download links. No filters.
* **`export.job.failed`** (minutes). A bulk export job failed. The payload carries `job_id` and `error_message`. No filters.
* **`billing.credit_low`** (minutes). Your own monthly credit pool crossed one of your `levels_pct` (percent remaining). One event per level per month. No filters. Params: `levels_pct`.
* **`webhook.test`** (seconds). A test you send from the dashboard or the API to check a receiver. It needs no rule.

## How fast events arrive

The latency in each entry is the catalog's `latency_class`, which says which path produces the event.

* **`seconds`.** Fills, transfers and liquidations (`account.fill`, `account.transfer`, `market.liquidation`, `account.liquidated`) on Hyperliquid perps and HIP-3 come from a fast path on our own Hyperliquid node, as do spot fills. They are delivered under a second after the block in normal conditions, and the tail follows Hyperliquid node lag. If that path is interrupted, perp and HIP-3 events still arrive from the archive, a few minutes late; spot fills come only from the fast path and are not caught up. `chain.upgrade_detected` is detected on the node itself, within a minute of the binary changing.
* **`minutes`.** Everything else is detected from the archive. Most of it arrives two to three minutes after the fact. Liquidations on Lighter and Lighter on Robinhood Chain are read from the archive about half a minute behind. A funding flip on a venue that records only its settled hourly rate is seen when that settlement lands, up to about an hour after the sign changed.
* **`webhook.test`** is queued as soon as you send it.

Every delivery whose event has a timestamp carries `late_ms`, and `late: true` when it is more than 10 minutes behind, so a receiver can tell an event that is arriving late from one that just happened. See [Signatures and payloads](/webhooks/signatures-and-payloads#event-envelope).

## The live catalog

This page follows the catalog that every rule is checked against. Fetch it from `GET /v1/webhooks/event-types`, or ask an agent to call `list_webhook_event_types`. Each entry carries:

* `type`, `live`, `description`: the event type string, whether it accepts rules today, and what it is.
* `scope`: `public` (market-wide), `addresses` (only for your watched addresses) or `user` (about your own account).
* `venues`, `filters`: the venues it covers, and which of `venue`, `symbols` and `addresses` it accepts.
* `params`: the numbers that define an occurrence, each with a type, unit, default, and either a `min`/`max` range or an `enum` menu.
* `metrics`: the fields a condition can test, with their types, units and enum values.
* `operators`: the operator vocabulary, grouped by metric type.
* `cost_floor`: where a market-wide scan has a floor below which occurrences are not read.
* `latency_class`: `seconds` or `minutes`.
* `filters_example`: a configuration that is valid for this event.

## Next step

<Card title="Write a rule for the event you chose" icon="sliders-horizontal" href="/webhooks/rules" horizontal>
  Narrow it by venue, symbol and address, add conditions, and set the parameters that define an occurrence.
</Card>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.