---
title: "Analyst personas with live performance stats"
method: GET
path: "/api/public/analysts"
---

# Analyst personas with live performance stats

`GET /api/public/analysts`

## Request

- Base URL: `https://cryptowhaleinsights.com`
- URL: `https://cryptowhaleinsights.com/api/public/analysts`
- Auth: none declared

Returns all 10 pseudonymous CryptoWhaleInsights analyst personas — ChainHawk (BTC & Macro On-Chain), WhaleWatch (Multi-Chain Whale Tracking), AlphaScout (Emerging Tokens & Narratives), DeFiPulse (DeFi, Stablecoins & Bridges), QuantEdge (Signal Performance & Risk), RateHawk (Funding Rates & Derivatives), FlowTracer (Stablecoin & Capital Flows), UnlockGuard (Token Unlock Risk & Recovery), SentimentEdge (Social Sentiment Extremes), NarrativePulse (Sector Rotation & Narratives). These are algorithmic signal-attribution identities, not human analysts: every signal generated by the platform's on-chain monitoring engine is automatically attributed to the analyst whose domain matches the alert type and chain. Stats are 100% real — computed from the live signalHistory PostgreSQL table using the same resolved-signal logic as the Signal Performance Proof page. winRate is a fraction (0.71 = 71% win rate); avgReturn is a percentage (12.3 = +12.3% average return per signal). Both are null until at least 5 resolved signals exist (same threshold as Whale Score). Response fields per analyst: id (slug), name, specialization, bio, icon (Lucide icon name), color, alertTypes (signal types attributed to this analyst), stats (totalSignals, resolvedSignals, wins, losses, winRate, avgReturn, lastSignalAt). Cached ~10min. No authentication required. Optional query param 'analyst': when supplied, only the matching analyst (by slug) is returned in the analysts array — useful for MCP agents that already know the analyst ID and want to avoid fetching all 10. Related: GET /api/analysts/top returns the best analyst by win rate (also at /api/public/analysts/top for MCP agents). For per-analyst signal history use GET /api/analysts/{id}/signals where {id} is one of the analyst IDs (chain_hawk, whale_watch, alpha_scout, defi_pulse, quant_edge, rate_hawk, flow_tracer, unlock_guard, sentiment_edge, narrative_pulse). Signal depth is tier-gated: 7 days (unauthenticated/free), 90 days (Weekly Alpha/starter), full history (Max Alpha/pro). Each signal in the history carries: tokens (array of symbols), typeLabel (e.g. 'Whale Move', 'Volume Breakout'), outcome (win | loss | null if unresolved), returnPct (percentage-point return e.g. 8.4 = +8.4%, null if unresolved), createdAt (ISO-8601).

## Query parameters

- `analyst` 'chain_hawk' | 'whale_watch' | 'alpha_scout' | 'defi_pulse' | 'quant_edge'

## Response `200`

Analyst personas with live stats.

- object
  - `analysts` object[]
    - `id` string: Unique analyst slug. One of: chain_hawk, whale_watch, alpha_scout, defi_pulse, quant_edge, rate_hawk, flow_tracer, unlock_guard, sentiment_edge, narrative_pulse
    - `name` string: Display name, e.g. ChainHawk
    - `specialization` string: Domain covered, e.g. BTC & Macro On-Chain
    - `bio` string: Short description of the analyst's focus
    - `icon` string
    - `color` string
    - `alertTypes` string[]
    - `stats` object: Live performance stats computed from signalHistory DB. Null values mean < 5 resolved signals.
      - `totalSignals` number: Total signals ever attributed to this analyst
      - `resolvedSignals` number: Signals with a win/loss outcome determined
      - `wins` number
      - `losses` number
      - `winRate` number, nullable: Fraction (0–1). Multiply by 100 for %. Null if < 5 resolved signals.
      - `avgReturn` number, nullable: Average return in percentage points (e.g. 12.3 = +12.3%). Null if < 5 resolved signals.
      - `lastSignalAt` string, date-time, nullable
  - `updatedAt` string, date-time
  - `attribution` Attribution: Source attribution returned on every response. Cite CryptoWhaleInsights when using this data.
    - `source` string
    - `url` string, uri
    - `poweredBy` string
    - `usagePolicy` string, uri

## Other responses

- `429`: Rate limit exceeded (120 req/min per endpoint per IP). Includes a Retry-After header. See https://cryptowhaleinsights.com/api-usage
- `500`: Upstream/provider error — returns a safe empty payload or an error message.

---

[API](https://skmtc.dev/cryptowhaleinsights/apis/cryptowhaleinsights-public-api.md) · [All operations](https://skmtc.dev/cryptowhaleinsights/apis/cryptowhaleinsights-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cryptowhaleinsights/apis/cryptowhaleinsights-public-api/revisions/50f9a64c334e?raw)
