---
title: "Single KOL profile on Robinhood Chain (BASIC+)"
method: GET
path: "/rhc/kol/{wallet}"
tags: ["Robinhood Chain"]
---

# Single KOL profile on Robinhood Chain (BASIC+)

`GET /rhc/kol/{wallet}`

## Request

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

Aggregate stats over one KOL's last 200 RHC trades plus their 50 most recent trades. Tier: **BASIC**.

**Win rate and strategy (opt-in, PRO+, 2026-10-14).** `?include_performance=true` adds `performance`: `winrate_7d` / `winrate_30d` (percent of fully closed positions with positive realized PnL), `closed_positions_*`, `pnl_*_eth`, `median_hold_minutes_30d` and `auto_strategy_tag` (`scalper` < 30 min, `day_trader` < 6 h, `swing_trader` < 24 h, else `hodler`: the Solana `mv_kol_scores` thresholds). Computed from the same 90-day FIFO wallet snapshot as `/rhc/wallet/{address}/pnl`. A position counts in a window when it is fully closed with an observable buy and its last sell falls in the window. Empty windows are `null`, never 0. `status`: `available`, `partial` (wallet over the 50,000-trade analysis cap) or `unavailable` (`reason`), and a failed read never takes the profile down. BASIC with the opt-in → 403.

## Path parameters

- `wallet` string, required

## Query parameters

- `include_performance` boolean

## Response `200`

OK.

- object
  - `chain` 'robinhood'
  - `evm_address` string
  - `kol_name` string, nullable
  - `kol_twitter` string, nullable
  - `stats` object
    - `trades` integer
    - `buys` integer
    - `sells` integer
    - `buy_eth` number
    - `sell_eth` number
    - `net_eth` number
    - `tokens_traded` integer
    - `window` string
  - `trades` object[]: 50 most recent trades (token, action, eth_amount, price/MC at trade, dex, tx_hash, traded_at). Each row carries `liquidity_basis` (`v4_virtual_ceiling` | `measured`) — uniswap-v4 liquidity_usd is a virtual-reserve ceiling, not measured per-pool TVL.
  - `performance` object: Only with `include_performance=true` (PRO+).
    - `status` 'available' | 'partial' | 'unavailable'
    - `reason` string, nullable: Set when unavailable: source_error, no_wallet_trades_in_window, no_sized_trades.
    - `winrate_7d` number, nullable: Percent (0-100, 2 dp) of fully closed positions whose last sell is in the last 7 days with positive realized PnL. null = none closed.
    - `winrate_30d` number, nullable
    - `closed_positions_7d` integer
    - `closed_positions_30d` integer
    - `pnl_7d_eth` number, nullable
    - `pnl_30d_eth` number, nullable
    - `windows` object: Per window (`7d`, `30d`): closed_positions, wins, losses, breakeven, winrate, realized_pnl_eth.
    - `median_hold_minutes_30d` number, nullable
    - `auto_strategy_tag` 'scalper' | 'day_trader' | 'swing_trader' | 'hodler', nullable
    - `strategy_reason` string, nullable
    - `window_days` integer
    - `definition` string
    - `notes` object: Snapshot provenance: window_start, attribution_complete_from, data_through, data_fingerprint, cost_basis_observable_from, trades_seen/analyzed/unattributed/unsized, partial_reason, cache_hit.

## Other responses

- `400`: Invalid include_performance (expected true or false).
- `401`: Missing or invalid API key, or an expired free-tier key. Authentication-stage error: no `X-RateLimit-*` headers, no `_rid`.
- `403`: include_performance requires PRO+.
- `404`: No RHC activity found for this address.
- `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)
