All APIs

Physical commodity prices API

Follow palm oil, coal, weekly US retail fuel prices and monthly commodity benchmarks. Each series keeps its market, published units and observation period.

First request

Quickstart →
curl --request GET \
  --url "https://api.narwhalapi.com/v1/commodities/palmoil/physical/id-ri-oil-palm-ffb-smallholder-purchase-agreement" \
  --header "Authorization: Bearer $NARWHAL_API_KEY"
Example response Illustrative response · not a live request
{
  "series_id": "id-ri-oil-palm-ffb-smallholder-purchase-agreement",
  "currency": "IDR",
  "unit": "kilogram",
  "period_start": "2026-08-26",
  "period_end": "2026-09-01",
  "revision": 1,
  "prices": [
    {
      "tree_age_min_years": 3,
      "tree_age_max_years": 3,
      "price": "2998.31"
    },
    {
      "tree_age_min_years": 4,
      "tree_age_max_years": 4,
      "price": "3347.20"
    },
    {
      "tree_age_min_years": 5,
      "tree_age_max_years": 5,
      "price": "3595.38"
    },
    {
      "tree_age_min_years": 6,
      "tree_age_max_years": 6,
      "price": "3734.94"
    },
    {
      "tree_age_min_years": 7,
      "tree_age_max_years": 7,
      "price": "3818.86"
    },
    {
      "tree_age_min_years": 8,
      "tree_age_max_years": 8,
      "price": "3865.46"
    },
    {
      "tree_age_min_years": 9,
      "tree_age_max_years": 9,
      "price": "3878.72"
    },
    {
      "tree_age_min_years": 10,
      "tree_age_max_years": 20,
      "price": "3836.93"
    },
    {
      "tree_age_min_years": 21,
      "tree_age_max_years": 21,
      "price": "3770.94"
    },
    {
      "tree_age_min_years": 22,
      "tree_age_max_years": 22,
      "price": "3695.31"
    },
    {
      "tree_age_min_years": 23,
      "tree_age_max_years": 23,
      "price": "3609.33"
    },
    {
      "tree_age_min_years": 24,
      "tree_age_max_years": 24,
      "price": "3544.29"
    },
    {
      "tree_age_min_years": 25,
      "tree_age_max_years": 25,
      "price": "3490.84"
    },
    {
      "tree_age_min_years": 26,
      "tree_age_max_years": 26,
      "price": "3471.62"
    },
    {
      "tree_age_min_years": 27,
      "tree_age_max_years": 27,
      "price": "3441.82"
    },
    {
      "tree_age_min_years": 28,
      "tree_age_max_years": 28,
      "price": "3385.41"
    },
    {
      "tree_age_min_years": 29,
      "tree_age_max_years": 29,
      "price": "3344.02"
    },
    {
      "tree_age_min_years": 30,
      "tree_age_max_years": 30,
      "price": "3249.41"
    }
  ]
}

Endpoints

GETDiscover palm oil series./v1/commodities/palmoil/physical
GETInspect a palm oil series./v1/commodities/palmoil/physical/{series_id}
GETRetrieve palm oil observations./v1/commodities/palmoil/physical/{series_id}/observations

Sources and methodology

Keep the local meaning

A government reference price, producer schedule, and trade unit value each retain their own definition.

Track changes over time

Read observations for a selected series, preserving native units and the dates each price applies to.

Compare like with like: currency, unit, grade, location, price type and period all matter. Weekly fuel prices are retail averages. Source: U.S. Energy Information Administration. Monthly benchmarks cover 70 series with history back to 1960. Source: The World Bank: World Bank Commodity Price Data (The Pink Sheet), CC BY 4.0

Explore related pages

Spot metals price API

Get gold, silver, platinum and palladium spot prices, plus WTI, Brent and copper reference prices derived from futures markets, not physical spot cargo prices.

Explore the API →

Common questions

Which commodities are covered?

Coverage includes palm oil, coal, weekly US gasoline and diesel retail averages, and monthly commodity benchmarks. Each series has its own market, unit and coverage dates.

Can I combine the series into one price?

Use the series definitions first. Prices with different grades, units, delivery bases, or effective periods are not interchangeable.

Make your first request

Get a free API key →