---
title: "Get a trader's PnL windows, win/loss, ROI distribution and daily PnL calendar"
method: GET
path: "/trader-stats/analysis/{wallet_address}"
tags: ["Trader Analytics"]
---

# Get a trader's PnL windows, win/loss, ROI distribution and daily PnL calendar

`GET /trader-stats/analysis/{wallet_address}`

## Request

- Base URL: `https://data.kairos.trade`
- URL: `https://data.kairos.trade/trader-stats/analysis/{wallet_address}`
- Auth: none required

Returns the trader profile's analysis panel: realized PnL and buy count over the 1D, 7D, 30D and ALL windows (whole UTC days ending today; 1D is today only), lifetime winning/losing closed positions and win rate, the distribution of closed positions by ROI (realized PnL over the cost bought for the position), and daily realized PnL for the last 90 UTC days that have activity. Only venues whose trades flow through the lot allocator (Predict.fun) are supported; for any other venue `supported` is false and no figures are returned. **Public endpoint — no authentication required** (trader data is public). Rate-limited per client IP. Cached per wallet for up to a minute.

## Path parameters

- `wallet_address` string, required

## Query parameters

- `provider` string

## Response `200`

The analysis panel, or `supported` false for a venue without allocator data.

- TraderAnalysisResponse: A trader profile's analysis panel. `supported` is false, with empty `windows` and `daily` and null `win_loss` and `roi_distribution`, for a venue whose trades do not flow through the lot allocator.
  - `wallet_address` string, required
  - `provider` string, nullable
  - `supported` boolean, required
  - `windows` TraderAnalysisWindow[], required
    - `window` '1D' | '7D' | '30D' | 'ALL', required
    - `realized_pnl` number, required: Realized PnL in USD.
    - `buy_count` integer, required
  - `daily` TraderAnalysisDay[], required: The last 90 UTC days that have activity, oldest first.
    - `day` string, date, required
    - `realized_pnl` number, required: Realized PnL in USD booked that UTC day.
  - `win_loss` TraderAnalysisWinLoss, required: Lifetime closed-position counts. `win_rate` is winning over winning plus losing, 0 when none has closed.
    - `winning_positions` integer, required
    - `losing_positions` integer, required
    - `win_rate` number, required
  - `roi_distribution` TraderRoiDistribution, required: Closed positions counted by ROI, the position's realized PnL over the total cost bought for it. Positions with no bought cost are left out.
    - `gt_500` integer, required: ROI above 500%.
    - `between_200_500` integer, required: ROI above 200% up to 500%.
    - `between_0_200` integer, required: ROI from 0% to 200%.
    - `between_neg_50_0` integer, required: ROI from -50% up to, but not including, 0%.
    - `lt_neg_50` integer, required: ROI below -50%.

## Other responses

- `400`: Malformed wallet address or unrecognized provider.
- `422`: Request failed FastAPI parameter validation.
- `429`: Rate limit exceeded for this route's sliding window, keyed on the session `sub` when authenticated and on the trusted client IP otherwise. Honor `Retry-After`. A per-API-key data ceiling (set per credential) rejects with `{"detail": "API key data rate limit exceeded"}` instead of the `error` envelope below.
- `500`: Unexpected error fetching trader analysis.

---

[API](https://skmtc.dev/kairos/apis/kairos-data-api.md) - [All operations](https://skmtc.dev/kairos/apis/kairos-data-api/llms.txt) - [OpenAPI document](https://skmtc.dev/kairos/apis/kairos-data-api/revisions/cf6b76079e38?raw)
