---
title: "Monthly performance summary for all analysts (last 6 months)"
method: GET
path: "/api/public/analyst-monthly-performance"
---

# Monthly performance summary for all analysts (last 6 months)

`GET /api/public/analyst-monthly-performance`

## Request

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

Returns win_rate, avg_return, and total_signals per analyst per calendar month for exactly the last 6 calendar months (current month + 5 prior full months, enforced with DATE_TRUNC('month') boundaries — never more than 6 month buckets). All 10 canonical analysts (chain_hawk, whale_watch, alpha_scout, defi_pulse, quant_edge, rate_hawk, flow_tracer, unlock_guard, sentiment_edge, narrative_pulse) are always present in the response with an empty array [] when they have no signals in the window. Data is computed directly from the signal_history PostgreSQL table — no separate snapshot table required. winRate is a fraction (0–1, e.g. 0.71 = 71%) and is null when fewer than 5 resolved signals exist for that month. avgReturn is in percentage points (e.g. 12.3 = +12.3% average return) and is null when no resolved+priced signals exist for that month. Useful for AI agents answering 'How did WhaleWatch perform in May?' or 'Who was the best analyst last month?'. Response is keyed by analyst_id under `performance`. Cached 1 hour. No authentication required.

## Response `200`

Monthly performance keyed by analyst_id.

- object
  - `performance` object: Keys are analyst slugs (chain_hawk, whale_watch, …); values are arrays of monthly performance objects ordered newest-first.
  - `months` integer: Look-back window in months (always 6).
  - `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)
