---
title: "Per-gram gold price by karat purity"
method: GET
path: "/v1/carat"
tags: ["convert"]
---

# Per-gram gold price by karat purity

`GET /v1/carat`

Per-gram XAU price for karats 24 / 22 / 21 / 20 / 18 / 16 / 14 / 10.

Logic: per_gram_24k = spot_xau_usd_per_oz / GRAMS_PER_TROY_OUNCE * fx_rate;
per_gram_Nk = per_gram_24k * N/24.

Historical `date` support is not implemented; omit the param or use
/v1/prices/history + do the math client-side.

## Query parameters

- `currency` string — Quote currency (default USD).

## Response `200`

Successful Response

- CaratResponse — Response for GET /v1/carat.
  - `currency` string, required
  - `timestamp` string, required
  - `price_gram_24k` string, required — 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().
  - `price_gram_22k` string, required — 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().
  - `price_gram_21k` string, required — 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().
  - `price_gram_20k` string, required — 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().
  - `price_gram_18k` string, required — 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().
  - `price_gram_16k` string, required — 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().
  - `price_gram_14k` string, required — 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().
  - `price_gram_10k` string, required — 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().

## 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)
