---
title: "Read history without a current price"
method: GET
path: "/v1/catalog/variants/{id}/history"
tags: ["History"]
---

# Read history without a current price

`GET /v1/catalog/variants/{id}/history`

## Request

- Base URL: `https://tcgdata-api.ottenniels1999.workers.dev`
- URL: `https://tcgdata-api.ottenniels1999.workers.dev/v1/catalog/variants/{id}/history`
- Auth: HTTP bearer

Read canonical daily observations for an approved stored tcg_ variant, even when its current price is missing, stale or a placeholder. The window ends on the requested UTC date or today, with no fabricated current-price point. Empty ranges return 200 with explicit missing dates and coverage.

1 admitted HTTP request. Unknown query/body parameters are rejected. Examples contain illustrative data and placeholder IDs; they are not live catalogue records.

## Path parameters

- `id` string, required

## Query parameters

- `days` integer
- `to` string, date: Inclusive UTC date, at most today.

## Response `200`

Success. 1 admitted HTTP request.

- StoredVariantHistoryResponse
  - `data` StoredVariantHistory, required: Canonical observations for an approved stored guide variant, independent of a current quote. The window ends on to or today UTC. coverage always describes only the requested window; valid empty ranges return 200.
    - `id` string, required
    - `currency` 'EUR', required
    - `quote_scope` 'product_guide'
    - `language_scope` 'unfiltered'
    - `edition_scope` 'unfiltered'
    - `condition_scope` 'unfiltered'
    - `range` object, required
      - `from` string, date, required
      - `to` string, date, required
      - `days` integer, required
    - `points` HistoryPoint[], required
      - `date` string, date, required
      - `avg` number, nullable, required: Source measurement in EUR. Null means missing, not zero.
      - `low` number, nullable, required: Source measurement in EUR. Null means missing, not zero.
      - `trend` number, nullable, required: Source measurement in EUR. Null means missing, not zero.
      - `avg1` number, nullable, required: Source measurement in EUR. Null means missing, not zero.
      - `avg7` number, nullable, required: Source measurement in EUR. Null means missing, not zero.
      - `avg30` number, nullable, required: Source measurement in EUR. Null means missing, not zero.
    - `missing_dates` string[], required
    - `coverage` object, required
      - `state` 'empty' | 'partial' | 'complete', required
      - `point_count` integer, required
      - `missing_count` integer, required
      - `first_point_date` string, date, nullable, required
      - `last_point_date` string, date, nullable, required

## Other responses

- `400`: Invalid request or batch_size_exceeded (more IDs than the account plan allows)
- `401`: Invalid or missing key
- `403`: Inactive account, expired free test or resource_limits_unconfigured
- `404`: Not found or unavailable
- `405`: Wrong method
- `409`: Ambiguous printing or variant
- `413`: Oversized request body or response_too_large (response exceeds 1 MiB)
- `415`: Wrong content type
- `429`: Monthly, UTC-daily or minute request limit; authenticated account limits include a paid-plan or custom-access upgrade suggestion. Defensive resource-limit errors retain the ordinary error envelope.
- `503`: Disabled, unconfigured or temporarily unavailable

---

[API](https://skmtc.dev/tcgdata/apis/tcgdata-dev-multi-game-prices-and-daily-history.md) · [All operations](https://skmtc.dev/tcgdata/apis/tcgdata-dev-multi-game-prices-and-daily-history/llms.txt) · [OpenAPI document](https://skmtc.dev/tcgdata/apis/tcgdata-dev-multi-game-prices-and-daily-history/revisions/1db91fd8a408?raw)
