---
title: "KOL consensus on a Robinhood Chain token (PRO+)"
method: GET
path: "/rhc/tokens/{address}/kol-consensus"
tags: ["Robinhood Chain"]
---

# KOL consensus on a Robinhood Chain token (PRO+)

`GET /rhc/tokens/{address}/kol-consensus`

## Request

- Base URL: `https://madeonsol.com/api/v1`
- URL: `https://madeonsol.com/api/v1/rhc/tokens/{address}/kol-consensus`
- Auth: HTTP bearer

How the tracked-KOL cohort is positioned on a token: distinct KOL buyers vs sellers, exit rate (bought AND sold), net ETH flow, median entry MC, and first-touch wallet/time. Full parity with the Solana `/tokens/{mint}/kol-consensus` (sourced from `rhc_kol_trades`), EVM-denominated (`net_flow_eth`). ULTRA additionally returns the `buyers` and `exited` wallet lists. Tier: **PRO+**.

## Path parameters

- `address` string, required

## Response `200`

OK. `consensus` is null when no tracked KOL has traded the token.

- object
  - `chain` 'robinhood'
  - `token_address` string
  - `current_mc_usd` number, nullable
  - `current_price_usd` number, nullable
  - `consensus` object, nullable
    - `total_kol_buyers` integer
    - `total_kol_sellers` integer
    - `kol_exit_rate` number: Fraction of KOL buyers who also sold (0–1).
    - `net_flow_eth` number
    - `total_buy_eth` number
    - `total_sell_eth` number
    - `first_kol_buy_at` string, date-time, nullable
    - `last_kol_buy_at` string, date-time, nullable
    - `first_touch_wallet` string, nullable
    - `first_touch_at` string, date-time, nullable
    - `median_entry_mc_usd` number, nullable: Median MC at KOL buy — over the buys that carried an MC-at-trade (see entry_mc_samples). Null when the RHC pricer withheld MC under its liquidity gate.
    - `entry_mc_samples` integer: Number of buys with a market_cap_usd_at_trade — the median's sample size.
    - `total_trades` integer
    - `buyers` string[]: ULTRA only — distinct KOL buyer wallets.
    - `exited` string[]: ULTRA only — KOL wallets that bought and sold.

## Other responses

- `401`: Missing or invalid API key, or an expired free-tier key. Authentication-stage error: no `X-RateLimit-*` headers, no `_rid`.
- `403`: PRO+ tier 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)
