---
title: "Analyst signal history — single or multi-analyst (public, free-tier, MCP-compatible)"
method: GET
path: "/api/public/analysts/signals"
---

# Analyst signal history — single or multi-analyst (public, free-tier, MCP-compatible)

`GET /api/public/analysts/signals`

## Request

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

Returns the last 7 days of signals for one or more analysts in a single request. Pass a single id (e.g. ?id=chain_hawk) for one analyst or a comma-separated list (e.g. ?id=chain_hawk,whale_watch) to compare multiple analysts without extra round-trips. Analyst ids: chain_hawk (ChainHawk, BTC & macro), whale_watch (WhaleWatch, multi-chain whales), alpha_scout (AlphaScout, emerging tokens), defi_pulse (DeFiPulse, DeFi/stables/bridges), quant_edge (QuantEdge, signal risk/convergence). Always free-tier depth (last 7 days, up to 200 signals per analyst). No authentication required. Single-id response: { analystId, tier, signals[], updatedAt }. Multi-id response (comma-separated): { results: { [analystId]: signals[] }, tier, updatedAt }. To fetch all 10 analysts at once, use GET /api/public/analysts/signals/all. Each signal: id (number), tokens (array), typeLabel, outcome ('win'|'loss'|null), returnPct (null if unresolved), createdAt (ISO-8601), analystId. Returns 400 if 'id' is missing; 404 if any id does not match a known slug.

## Query parameters

- `id` string, required

## Response `200`

Signal history for the requested analyst(s) (free 7-day window).

- object
  - `analystId` string: Echoed analyst slug (single-id mode only), e.g. chain_hawk
  - `tier` string: Always 'free' for this public endpoint
  - `signals` object[]: Present in single-id mode. Array of signal objects for the requested analyst.
    - `id` number: Unique signal row ID
    - `tokens` string[]: Symbols involved, e.g. ['BTC']
    - `typeLabel` string: Human-readable signal type, e.g. 'Whale Move', 'Volume Breakout'
    - `outcome` string, nullable: 'win' | 'loss' | null if unresolved
    - `returnPct` number, nullable: Pct-point return, e.g. 8.4 = +8.4%. Null if unresolved.
    - `createdAt` string, date-time
    - `analystId` string: Analyst slug
  - `results` object: Present in multi-id mode. Keys are analyst slugs; values are arrays of signal objects.
  - `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)
