---
title: "Analyst signal archive — paginated 1-year history (public, MCP-compatible)"
method: GET
path: "/api/public/analyst-archive"
---

# Analyst signal archive — paginated 1-year history (public, MCP-compatible)

`GET /api/public/analyst-archive`

## Request

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

Returns a paginated archive of signals attributed to a single analyst, covering up to 1 year (365 days). This is the MCP-tool-compatible variant of the analyst archive — it uses query params instead of path params so AI agents can call it directly without resolving a URL template. Analyst IDs: chain_hawk (ChainHawk, BTC & macro on-chain), whale_watch (WhaleWatch, multi-chain whale moves), alpha_scout (AlphaScout, emerging tokens), defi_pulse (DeFiPulse, DeFi/stables/bridges), quant_edge (QuantEdge, signal risk/convergence), rate_hawk (RateHawk, funding rates & derivatives), flow_tracer (FlowTracer, stablecoin & capital flows), unlock_guard (UnlockGuard, token unlock risk), sentiment_edge (SentimentEdge, social sentiment extremes), narrative_pulse (NarrativePulse, sector rotation & narratives). Filters: period (7d | 30d | 90d | 365d, default 90d), outcome (all | win | loss | neutral | pending, default all), page (1-indexed, default 1), limit (10–100, default 100). Response: { signals[], total, pages, page, tier, analystId, updatedAt }. Each signal: id (number), tokens (string[]), typeLabel, outcome ('win'|'loss'|'neutral'|null), returnPct (null if pending), createdAt (ISO-8601), analystId. No authentication required. 60 requests/min rate limit. Returns empty envelope { signals:[], total:0 } with a hint field if analystId is omitted (useful for liveness probes); 404 if analystId does not match a known slug.

## Query parameters

- `analystId` 'chain_hawk' | 'whale_watch' | 'alpha_scout' | 'defi_pulse' | 'quant_edge' | 'rate_hawk' | 'flow_tracer' | 'unlock_guard' | 'sentiment_edge' | 'narrative_pulse', required
- `page` integer
- `limit` integer
- `period` '7d' | '30d' | '90d' | '365d'
- `outcome` 'all' | 'win' | 'loss' | 'neutral' | 'pending'

## Response `200`

Paginated analyst signal archive (up to 1 year / 365-day public window).

- object
  - `signals` object[]: Signals attributed to the requested analyst in reverse-chronological order.
    - `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' | 'neutral' | null (pending)
    - `returnPct` number, nullable: Percentage-point return, e.g. 8.4 = +8.4%. Null if unresolved.
    - `createdAt` string, date-time
    - `analystId` string: Analyst slug
  - `total` number: Total number of matching signals in the window
  - `pages` number: Total number of pages
  - `page` number: Current page number (1-indexed)
  - `tier` string: Always 'starter' (up to 365-day depth) for this public endpoint
  - `analystId` string: Echoed analyst slug
  - `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)
