---
title: "Latest spot price for one symbol — flat shape, no envelope (parity convenience)"
method: GET
path: "/v1/spot/{symbol}"
tags: ["prices"]
---

# Latest spot price for one symbol — flat shape, no envelope (parity convenience)

`GET /v1/spot/{symbol}`

## Path parameters

- `symbol` string, required

## Query parameters

- `include` string, nullable — Comma-separated field groups to include in the response. Tokens: sources, karat, stats, all. Unknown tokens are ignored. Omit for the lean default (anon) or the full shape (authed, Phase A).

## Response `200`

Successful Response

- SpotResponse — Single tier-filtered spot row. Shared shape between the envelope (`/v1/prices` returns `{"symbols": [SpotResponse, ...]}`) and the convenience endpoint (`/v1/spot/{symbol}` returns the SpotResponse unwrapped).
  - `symbol` string, required
  - `quote_currency` string, required
  - `unit` string, required
  - `contract_type` string, required
  - `price` string, nullable — Price value as Decimal (up to 8 decimal places). JSON-serialized as a string by Pydantic to avoid float drift; callers should parse with Decimal(), not float().
  - `bid` string, nullable — Price value as Decimal (up to 8 decimal places). JSON-serialized as a string by Pydantic to avoid float drift; callers should parse with Decimal(), not float().
  - `ask` string, nullable — Price value as Decimal (up to 8 decimal places). JSON-serialized as a string by Pydantic to avoid float drift; callers should parse with Decimal(), not float().
  - `is_stale` boolean, required
  - `divergence_flag` boolean, nullable — Present only when requested via ?include= (stats or all). True when a tokenized-gold source diverges > 0.5% from primary.
  - `computed_at` string, nullable
  - `sources` SourceEntry[], nullable — Present only when requested via ?include= (sources or all). Tier-filtered provenance array; vendor keys obfuscated.
    - `source` string, required
    - `display_name` string, nullable
    - `price` string, nullable
    - `unit` string, nullable
    - `license` string, nullable
    - `is_stale` boolean, nullable
    - `informational` boolean, nullable
  - `divergence_bps` integer, nullable
  - `value_stale` boolean, nullable
  - `price_gram_24k` string, nullable
  - `price_gram_22k` string, nullable
  - `price_gram_21k` string, nullable
  - `price_gram_20k` string, nullable
  - `price_gram_18k` string, nullable
  - `price_gram_16k` string, nullable
  - `price_gram_14k` string, nullable
  - `price_gram_10k` string, nullable
  - `open_price` string, nullable — Price value as Decimal (up to 8 decimal places). JSON-serialized as a string by Pydantic to avoid float drift; callers should parse with Decimal(), not float().
  - `high_price` string, nullable — Price value as Decimal (up to 8 decimal places). JSON-serialized as a string by Pydantic to avoid float drift; callers should parse with Decimal(), not float().
  - `low_price` string, nullable — Price value as Decimal (up to 8 decimal places). JSON-serialized as a string by Pydantic to avoid float drift; callers should parse with Decimal(), not float().
  - `prev_close_price` string, nullable
  - `ch` string, nullable
  - `chp` string, nullable
  - `open_time` integer, nullable

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `422` — Validation Error
- `429` — Too Many Requests
- `503` — Service 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/versions/7885a141754c/schema)
