---
title: "Get the Pick of the Day track record"
method: GET
path: "/api/v1/pick-of-the-day/archive"
tags: ["Pick of the Day"]
---

# Get the Pick of the Day track record

`GET /api/v1/pick-of-the-day/archive`

Every published Pick of the Day with its real outcome, plus the rolling hit rate (wins / decided; void and pending excluded). Resolved picks are public; a still-pending pick's backed side is included for the authenticated Insider key.

## Headers

- `If-None-Match` string

## Response `200`

Pick of the Day track record

- object
  - `object` 'pick_of_the_day_archive', required
  - `data` PickOfTheDayArchive, required
    - `picks` PickOfTheDayArchiveEntry[], required — Every published Pick of the Day, most recent last.
      - `pick_date` string, date, required — The pick's local publication date (YYYY-MM-DD).
      - `matchup` string, required — Human-readable matchup (e.g. "Portugal vs. Uzbekistan").
      - `category` string, required — Market category (e.g. "Soccer").
      - `pick_outcome_label` string, nullable — The backed side's outcome label. Omitted for a still-pending pick when the request is not from an authenticated Insider key.
      - `top_grade` string, nullable — Best grade among the proven smart-money holders on the backed side (S, A, B, C, D, F).
      - `outcome` 'pending' | 'win' | 'loss' | 'void', required — Settlement outcome of the backed side; 'pending' until the market resolves.
      - `return_per_100` number — Gross return on a $100 stake on this resolved pick: a win returns 100 / backed_price, a loss returns 0, a void refunds 100. Omitted (not null) for a still-pending pick or a resolved pick with no frozen price; mirrors the backend skip-when-absent behavior and the route-client optional (non-nullable) schema.
    - `hit_rate` PickOfTheDayHitRate, required
      - `wins` integer, required — Number of decided picks that won.
      - `losses` integer, required — Number of decided picks that lost.
      - `decided` integer, required — Number of decided picks (wins + losses); excludes void and pending.
      - `pct` number, required — Rolling hit rate as a percentage (wins / decided * 100, to 1 decimal); 0 when none are decided.
      - `void` integer, required — Number of picks that resolved void (excluded from the hit rate).
      - `pending` integer, required — Number of picks still pending resolution (excluded from the hit rate).
      - `net_profit_usd` number, required — Cumulative profit (USD) of a $100/pick strategy over resolved, priced picks: a win pays 100/backed_price - 100, a loss pays -100, a void pays 0. A resolved pick with no frozen price is excluded.
      - `staked_usd` number, required — Total staked (USD) = 100 * count of win/loss picks with a frozen price (void excluded -- a void refunds the stake).
      - `roi_pct` number, required — Return on the staked amount as a percentage (net_profit_usd / staked_usd * 100, to 1 decimal); 0 when nothing is staked.
      - `series` object[] — Cumulative track-record series, one point per decided (win/loss) pick in ascending pick_date order (void and pending add no point). The last point's net_profit_usd and hit_rate_pct equal the headline net_profit_usd and pct by construction. Empty when nothing is decided.
        - `date` string, date, required — The decided pick's publish date (YYYY-MM-DD).
        - `net_profit_usd` number, required — Running cumulative $100/pick profit (USD) through this pick (priced win/loss only; an unpriced win/loss carries it forward).
        - `hit_rate_pct` number, required — Running rolling hit rate (wins / decided * 100, to 1 decimal) through this pick.
  - `meta` ResponseMeta, required
    - `request_id` string, required — Unique request ID (req_ prefix).
    - `cached` boolean, required
    - `cache_age_s` integer, nullable — Cache age in seconds, null if not cached.

## Other responses

- `304` — Not Modified. Returned when If-None-Match matches the current Pick of the Day archive payload.
- `401` — Missing or invalid API key
- `402` — Active Insider subscription required
- `403` — Account access denied
- `408` — Request exceeded the server's 30-second transport timeout. The timeout response has an empty body because it is generated before handler-level JSON error shaping.
- `423` — Account is locked
- `429` — Rate limit exceeded (100 req/min; batch endpoints also reserve 100 batch item units/min before execution)
- `503` — Redis-backed authenticated rate limiter unavailable; retry after the per-process outage cooldown

## Changes

- **2026-07-04** `b9a0a1fb0742` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/0xinsider/apis/0xinsider-api/changes/api/v1/pick-of-the-day/archive/get.md)

---

[API](https://skmtc.dev/0xinsider/apis/0xinsider-api.md) · [All operations](https://skmtc.dev/0xinsider/apis/0xinsider-api/llms.txt) · [OpenAPI document](https://skmtc.dev/0xinsider/apis/0xinsider-api/revisions/137fa0fd3297?raw)
