---
title: "Commodity prices"
method: GET
path: "/v1/macro/commodities"
tags: ["macro"]
---

# Commodity prices

`GET /v1/macro/commodities`

## Request

- Base URL: `https://api.tapetide.com`
- URL: `https://api.tapetide.com/v1/macro/commodities`
- Auth: HTTP bearer

Daily prices for 11 commodities: international benchmark price in USD, computed India landed cost including import duty, and the domestic exchange price. From April 2026 (lead and nickel from July 2026). A stalled international feed (unchanged for more than 5 calendar days, currently zinc) is flagged with `international_stale` and its international, landed and change fields are null. Defaults to the last 30 days. Pages by (date, commodity).

## Query parameters

- `commodity` 'gold' | 'silver' | 'platinum' | 'crudeoil' | 'brentcrude' | 'naturalgas' | 'copper' | 'aluminium' | 'zinc' | 'lead' | 'nickel'
- `from` string
- `to` string
- `order` 'asc' | 'desc'
- `limit` integer
- `cursor` string

## Response `200`

OK. Costs one request unit.

- object
  - `data` CommodityPricesItem[], required
    - `date` string, required: Price date (YYYY-MM-DD).
    - `commodity` string, required: Commodity: gold, silver, platinum, crudeoil (WTI), brentcrude, naturalgas, copper, aluminium, zinc, lead, nickel.
    - `category` string, nullable, required: precious, energy or industrial.
    - `international_price_usd` number, nullable, required: International benchmark price in USD per `international_unit`. Null where no international price is available (lead and nickel).
    - `international_unit` string, nullable, required: Unit of the international price: troy_oz, barrel, mmbtu, pound, metric_ton.
    - `usd_inr` number, nullable, required: USD/INR rate used for the landed-price conversion.
    - `import_duty_pct` number, nullable, required: Effective import duty applied, percent (6 = 6%).
    - `import_duty` string, nullable, required: Import duty components, e.g. "BCD 5% + AIDC 1% = 6%".
    - `india_landed_price_inr` number, nullable, required: Computed landed cost in India: international price converted to INR per `india_unit`, plus import duty. Null where no international price is available.
    - `india_unit` string, nullable, required: Unit of the landed and domestic prices: g, kg, barrel, mmbtu.
    - `india_market_price_inr` number, nullable, required: Domestic commodity-exchange price in INR per `india_market_unit`. Published from July 2026 for exchange-traded commodities; null otherwise.
    - `india_market_unit` string, nullable, required: Unit of the domestic exchange price.
    - `change_pct` number, nullable, required: Day-on-day change in the international price, percent.
    - `india_market_change_pct` number, nullable, required: Day-on-day change in the domestic exchange price, percent.
    - `international_last_updated` string, nullable, required: Date (YYYY-MM-DD) the international price and its day change last changed. Equal to `date` on a fresh print; earlier when the value is carried forward over weekends, holidays or a stalled feed. Null when there is no international price.
    - `international_stale` boolean, required: true when the international price and day change have been identical for more than 5 calendar days (longer than any weekend plus holiday). The feed has stalled: international_price_usd, change_pct and india_landed_price_inr are then null. The domestic exchange price is unaffected.
  - `meta` ListMeta, required
    - `as_of` string, date-time, required: When this response was assembled (UTC).
    - `route` string, required: operationId that served the request.
    - `count` integer, required: Items in this page.
    - `limit` integer, required: Page size applied.
    - `has_more` boolean, required: Whether another page exists.
    - `next_cursor` string, nullable, required: Pass as `cursor` to fetch the next page; null on the last page.
  - `links` Links, required
    - `next` string, nullable: Relative URL of the next page, or null.

## Other responses

- `400`: Malformed or out-of-range parameter. Not charged.
- `401`: Missing or invalid bearer token.
- `404`: The requested resource does not exist. Not charged.
- `429`: Per-minute burst cap (`rate_limited`) or plan quota (`quota_exhausted`) reached.
- `500`: Unexpected server error. Not charged.
- `502`: A data dependency was unavailable. Not charged.
- `503`: Authentication or quota service temporarily unavailable (`service_unavailable`). Not charged; retry after `Retry-After` seconds.

---

[API](https://skmtc.dev/tapetide/apis/tapetide-api.md) · [All operations](https://skmtc.dev/tapetide/apis/tapetide-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tapetide/apis/tapetide-api/revisions/261ec086bde5?raw)
