Robinhood Chain

Deployer signal alert feed on Robinhood Chain (BASIC+)

The deployer alert feed on Robinhood Chain (from rhc_deployer_alerts) — new deploys and graduations from tracked deployers, newest first. RHC domain values differ from Solana: tier is elite | good | neutral | spammer, priority is high | medium, alert_type is new_deploy | graduated (RHC has no bonded/kol_buy alert types, and no KOL-buy enrichment).

Two behaviours changed 2026-07-25. (1) A tradability filter is now applied BY DEFAULT (liquidity_usd >= $100; unknown liquidity fails it) — the feed was serving alerts on tokens that had pumped and drained, one at $45K MC against $68 of liquidity. Pass include_untradeable=true for the raw tape; the active filter is echoed as tradability_filter. (2) tier and the message explaining it are now resolved at READ time from the live deployer rollup instead of being frozen at insert, so a demoted deployer can no longer be advertised as good-tier indefinitely. The original snapshot is preserved as tier_at_alert, with tier_is_stale flagging disagreement. Rows also carry liquidity_usd and current_mc_usd.

Paging (2026-09-21, audit F09 follow-up): the tradability and tier gates are served by a bounded SCAN over (event_at DESC, id DESC) — has_more is false only at the real end, scan.scan_truncated says the budget ran out first; page with cursor= (next_cursor). Alerts with a NULL event_at (none in production) are excluded.

Tier: BASIC (any valid key) — ULTRA gets the full requested limit, while BASIC/PRO share a 50-alert cap per request.

get/rhc/deployer-hunter/alerts

Request

  • Base URL: https://madeonsol.com/api/v1
  • URL: https://madeonsol.com/api/v1/rhc/deployer-hunter/alerts
  • Auth: HTTP bearer

Query parameters

deployer_tier'elite' | 'good' | 'neutral' | 'spammer'

Filter to one deployer reputation tier. Applied to the RESOLVED (read-time) tier, not the stored snapshot, so the filter and the reported tier always agree.

include_untradeableboolean

Set true to disable the default liquidity_usd >= $100 tradability filter and receive the raw alert tape.

priority'high' | 'medium'

Filter by alert priority.

alert_type'new_deploy' | 'graduated'
launchpadstring

Filter to one launchpad.

min_mcnumber

Minimum market cap at alert time (USD).

limitinteger

Capped at 50 for BASIC/PRO; ULTRA gets the full requested value.

sincestring date-time

Incremental polling: return only alerts with event_at strictly newer than this ISO timestamp. Pass back next_event_at from the previous response to receive just what is new.

beforestring date-time

Cursor: return only alerts with event_at strictly older than this ISO timestamp. Pass next_before from the previous response to page backwards. Takes precedence over offset.

offsetinteger

Offset pagination (RAW rows, before the gates), used when no cursor is supplied. Prefer cursor for stable paging over a live feed.

cursorstring

PREFERRED pagination (audit F09 follow-up): the next_cursor from a previous page — an opaque strict (event_at, id) keyset, so paging never repeats or skips rows that share a sort value and progresses with limit=1 through runs of identical timestamps. Malformed or tampered → 400. Cannot be combined with before= or offset= (400).

Response

next_event_at is the newest event_at on the page (poll cursor); data_age_seconds is the age of the newest alert.

chain'robinhood'
limitinteger
offsetinteger
tradability_filterstring

The active tradability gate, echoed: liquidity_usd >= $100, or off (include_untradeable=true).

liquidity_notestring

Constant statement of the uniswap-v4 ceiling semantics — a v4 row passing the tradability filter is a ceiling-pass; per-row liquidity_basis says which rows that applies to.

next_event_atstring date-time nullable

Newest event_at on this page — pass as ?since= to poll forward.

next_beforestring date-time nullable

Legacy cursor — event_at of the last row consumed (returned or gated out); pass as ?before= to page backward. Strict: skips alerts sharing that event_at. Prefer next_cursor.

next_cursorstring nullable

Opaque keyset cursor for the next (older) page — pass as cursor=. null = end of feed. PREFERRED over the strict-timestamp legacy cursor, which skips same-timestamp siblings of the boundary row.

has_moreboolean

false only when the candidate feed is exhausted (not merely when the page is short).

data_age_secondsinteger nullable

Changes

No recorded changes to this operation across all 1 revision of this API.