---
title: "[DEPRECATED — use /v1/bars] Aggregated close history for a symbol — interval ∈ {1d, 1h}."
method: GET
path: "/v1/prices/history"
tags: ["prices"]
---

# [DEPRECATED — use /v1/bars] Aggregated close history for a symbol — interval ∈ {1d, 1h}.

`GET /v1/prices/history`

Dispatch to the per-interval handler. The handler is the Module
Interface; per-interval helpers are Deep Modules hiding the
interval-specific policy + storage shape.

DEPRECATED in favour of /v1/bars (C4). This endpoint retains the
legacy close-only series[] wire shape for backward compatibility.
Deprecation + Sunset + Link headers are injected on every 200 response
(and on 403 plan_gated, where the caller may need to upgrade before
migrating). The sunset DATE is founder-controlled (see config
prices_history_sunset_date) — NOT hardcoded here.

## Query parameters

- `symbol` string, required
- `from` string, required
- `to` string, required
- `interval` string
- `limit` integer

## Response `200`

Success. See Deprecation + Sunset + Link headers.

- HistoryResponse — Response envelope for GET /v1/prices/history (DEPRECATED — use /v1/bars). IMPORTANT: This model is for OpenAPI documentation only. The handler returns JSONResponse directly; Pydantic validation does not run on the actual response (preserves byte-identical wire contract). Do not add fields here and expect them to appear in production responses without also updating the handler.
  - `symbol` string, required
  - `interval` string, required — One of "1d", "1h".
  - `from` string, required — ISO-8601 date or timestamp.
  - `to` string, required
  - `series` HistorySeriesEntry[], required
    - `date` string, required — Daily bars: "YYYY-MM-DD". Intraday bars: ISO-8601 UTC timestamp with Z suffix.
    - `open` string, nullable — Open price as decimal string.
    - `high` string, nullable — High price as decimal string.
    - `low` string, nullable — Low price as decimal string.
    - `close` string, nullable — Close price as decimal string.
    - `volume` string, nullable — Always null in the current implementation (close-only legacy path).
    - `is_stale` boolean, required — True if the underlying data row was stale when fetched.
    - `is_closed` boolean, nullable — Present only when core_ohlc_serving_enabled=True (real-bars path). True = settled bar; False = currently-forming (provisional).
  - `meta` HistoryMeta, required — Meta block in HistoryResponse.
    - `tier` string, required
    - `count` integer, required
    - `ohlc_note` string, required

## Other responses

- `400` — Bad request.
- `401` — Authentication failed.
- `403` — The caller's tier does not allow this request.
- `422` — Validation Error
- `429` — Per-minute, anonymous, or monthly quota exceeded.
- `500` — The operation failed internally.
- `503` — A required backend or data source is temporarily unavailable.

---

[API](https://skmtc.net/goldprice/apis/gold-api.md) · [All operations](https://skmtc.net/goldprice/apis/gold-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/goldprice/gold-api/revisions/5e6518098e6e/schema)
