---
title: "Liquidity REMOVALS feed — the rug signal (PRO+)"
method: GET
path: "/rhc/lp-events"
tags: ["Robinhood Chain"]
---

# Liquidity REMOVALS feed — the rug signal (PRO+)

`GET /rhc/lp-events`

## Request

- Base URL: `https://madeonsol.com/api/v1`
- URL: `https://madeonsol.com/api/v1/rhc/lp-events`
- Auth: HTTP bearer

Liquidity removals on Robinhood Chain from our own node's log subscription: Uniswap v2/v3 Burn and v4 ModifyLiquidity with a negative delta, for tracked pools. **By default removals only** — a request without `action` returns exactly what it always did, so an empty default page means 'no removals seen', never 'no liquidity activity'. Amounts are RAW on-chain integers as strings; token0/token1 say which side is which and token_amount_raw/quote_amount_raw pre-resolve the token side. v4 rows carry liquidity only (the pool manager emits no token amounts). provider_is_token_deployer is the classic rug tell. Cursor via next_before (same opaque (block_time,id) keyset as /rhc/trades). Data since 2026-08-05. **Adds, pool creations and depth fields (2026-09-23):** `action=add|pool_created|all` opts into liquidity adds (v2/v3 Mint, v4 positive ModifyLiquidity; kept 7 days) and live pool creations (kept 30 days like removals), persisted since the WS Phase 3 producer — earlier windows hold removals only. Every row also carries `tick_lower`, `tick_upper`, `liquidity_delta`, `in_range`, `active_liquidity_delta`, `active_share` (v3/v4, a share of liquidity at the current price, not of TVL), `share_of_reserves` (v2) and `material` (a removal of at least 25 % of reserves / active liquidity), null where the pool state was unknown and on older rows. `provider` is the log's sender/owner — usually the router or position manager on v3/v4, not the beneficial owner. The same events are pushed live on WS channel `rhc:lp_events` (ULTRA+). Tier: **PRO+**.

## Query parameters

- `limit` integer
- `token` string
- `pool` string
- `provider` string
- `dex` 'uniswap-v2' | 'uniswap-v3' | 'uniswap-v4'
- `action` 'remove' | 'add' | 'pool_created' | 'all'
- `before` string

## Response `200`

OK.

- object
  - `chain` 'robinhood'
  - `events` object[]
    - `event` 'remove' | 'add' | 'pool_created': The row's action. Always `remove` on a request without `action`.
    - `pool` string
    - `dex` 'uniswap-v2' | 'uniswap-v3' | 'uniswap-v4'
    - `fee_tier` integer, nullable
    - `token_address` string
    - `token_symbol` string, nullable
    - `token_name` string, nullable
    - `token_decimals` integer, nullable
    - `launchpad` string, nullable
    - `provider` string, nullable: Wallet that removed liquidity.
    - `provider_is_token_deployer` boolean: True when the provider is the token's own deployer — the classic rug shape.
    - `provider_deployer_tier` string, nullable
    - `provider_kol_name` string, nullable
    - `liquidity` string, nullable: Raw liquidity units removed (v3/v4). String — uint256.
    - `amount0` string, nullable: Raw token0 amount (v2/v3 only). String.
    - `amount1` string, nullable: Raw token1 amount (v2/v3 only). String.
    - `token0` string, nullable
    - `token1` string, nullable
    - `token_amount_raw` string, nullable: amount0 or amount1, whichever is the token side.
    - `quote_token` string, nullable
    - `quote_amount_raw` string, nullable
    - `block_number` integer
    - `block_time` string, date-time: Exact block header timestamp.
    - `tx_hash` string
    - `log_index` integer
    - `tick_lower` integer, nullable: Position range lower tick (v3/v4); null on v2 (full range) and on rows written before 2026-09-23.
    - `tick_upper` integer, nullable: Position range upper tick (v3/v4).
    - `liquidity_delta` string, nullable: Signed liquidity change (+ add, - remove), v3/v4. String — int256.
    - `in_range` boolean, nullable: tick_lower <= current tick < tick_upper just before the event; null when the pool's tick was unknown.
    - `active_liquidity_delta` string, nullable: Change to ACTIVE liquidity: liquidity_delta when in range, "0" out of range, null when unknown.
    - `active_share` number, nullable: |active delta| / active liquidity before (v3/v4). 0 for an out-of-range change; adds can exceed 1; null when unknown.
    - `share_of_reserves` number, nullable: v2 only: amount / reserve before, from the pair's Sync; null for a pair's first liquidity or when the Sync was not found.
    - `material` boolean, nullable: true = a REMOVAL of at least 25 % of reserves (v2) or active liquidity (v3/v4); false = a removal with a known smaller share; null for adds, pool creations and unknown shares.
  - `count` integer
  - `has_more` boolean
  - `next_before` string, nullable
  - `coverage` object: Honesty block: events (the actions this response covers — [remove] by default), adds_persisted (true since 2026-09-23), adds_retention_days (7), note, since.

## Other responses

- `400`: Invalid query parameters (code invalid_query).
- `401`: Missing or invalid API key, or an expired free-tier key. Authentication-stage error: no `X-RateLimit-*` headers, no `_rid`.
- `403`: PRO+ required.
- `429`: Too many requests. Every 429 carries `Retry-After`. A quota 429 (`rate_limit_exceeded`, with `X-RateLimit-*`), a heavy-query concurrency 429 (`error_kind` `concurrency`/`capacity`), or the per-IP authentication-failure block (30 failed auths/min; plain `error` + `retry_after_seconds`, no `X-RateLimit-*`).
- `500`: Unexpected server error from the route (`Internal server error`, with `_rid`). Safe to retry with backoff. A failed API-key lookup is a 503 `auth_backend_unavailable`, never a 500.
- `503`: Temporarily unavailable — a Postgres statement timeout while the dataset is under load or maintenance (`statement_timeout`, with `X-RateLimit-*` and `_rid`), or the API-key lookup itself unavailable (`auth_backend_unavailable`, authentication stage: no `X-RateLimit-*`, no `_rid`, not counted as a failed authentication). Always carries `Retry-After`; honour it.

---

[API](https://skmtc.dev/madeonsol/apis/madeonsol-api.md) · [All operations](https://skmtc.dev/madeonsol/apis/madeonsol-api/llms.txt) · [OpenAPI document](https://skmtc.dev/madeonsol/apis/madeonsol-api/revisions/96ce84657f55?raw)
