Browse all documentation

Physical price history API

Read weekly fuel or monthly commodity price history with periods, published units and revisions.

Endpoint and request

REST endpoint
GET /v1/commodities/physical/series/{series_id}/observations
Contract request
curl --request GET \
  --url "https://api.narwhalapi.com/v1/commodities/physical/series/worldbank-cmo-copper/observations?start=2026-07-01&end=2026-10-01&limit=100" \
  --header "Authorization: Bearer $NARWHAL_API_KEY"

MCP uses commodities_get_physical_observations. REST and MCP share the same schema, account quota, rights check, and problem shape.

Parameters

NameRequiredTypeMeaning
series_idYespath · stringUse a stable ID returned by discovery, such as fuel-eia-usa-regular-gasoline or worldbank-cmo-copper.
startNoquery · YYYY-MM-DDInclusive start date. Supply start and end together, or omit both.
endNoquery · YYYY-MM-DDExclusive end date, later than start. Observations overlapping the date window are returned.
limitNoquery · integer, 1–500Maximum items per page. Defaults to 100.
cursorNoquery · stringUse next_cursor from the previous page with the same filters and limit. Null means there are no more pages.

Source: U.S. Energy Information Administration. Source: The World Bank: World Bank Commodity Price Data (The Pink Sheet), CC BY 4.0

Response

Contract example
{
  "series_id": "worldbank-cmo-copper",
  "currency": "USD",
  "unit": "metric_ton",
  "unit_quantity": "1",
  "attribution": "The World Bank: World Bank Commodity Price Data (The Pink Sheet)",
  "observations": [
    {
      "period_start": "2026-07-01",
      "period_end": "2026-07-31",
      "price": "13543",
      "published_on": null,
      "revision": 1
    },
    {
      "period_start": "2026-08-01",
      "period_end": "2026-08-31",
      "price": "14326",
      "published_on": null,
      "revision": 1
    },
    {
      "period_start": "2026-09-01",
      "period_end": "2026-09-30",
      "price": "14474",
      "published_on": null,
      "revision": 1
    }
  ],
  "next_cursor": null
}
FieldTypeRequiredMeaning
series_idstringYesStable ID returned by series discovery.
currencystringYesQuote currency. Both US fuel and monthly benchmark series use USD.
unit / unit_quantitystringsYesPublished unit and the quantity priced. Fuel uses us_gallon. Monthly benchmarks use metric_ton, kilogram, barrel, cubic_meter, troy_ounce, mmbtu, dry_metric_ton_unit or sheet. The quantity is 1 except for plywood, which uses USD per 100 sheets. Values are not converted.
attributionstring or nullYesKeep the response attribution with the data. Source: U.S. Energy Information Administration. Source: The World Bank: World Bank Commodity Price Data (The Pink Sheet), CC BY 4.0
observationsarrayYesOldest-first observations. Each contains period_start, period_end, a decimal-string price, nullable published_on and revision.
observations[].period_start / observations[].period_enddatesYesInclusive observation dates. Fuel uses the Monday survey date for both. A monthly observation spans the whole month, such as 2026-09-01 to 2026-09-30.
observations[].pricedecimal stringYesPublished price in the series currency per unit_quantity units. Read it with the series price type and basis.
observations[].published_ondate or nullYesPublication date when available. Null is preserved when it is unknown.
observations[].revisionintegerYesStarts at 1 and increases when a later publication changes the value for that period.
next_cursorstring or nullYesOpaque continuation token. Null marks the final page.

Errors and quota

  • 400 invalid_query, a code, area, date range, limit, or selector is invalid.
  • 400 invalid_cursor, the cursor is invalid or does not match the request filters.
  • 400 cursor_expired, the publication changed. Restart pagination without a cursor.
  • 401 invalid_api_key, the Bearer key is missing or rejected.
  • 404 physical_series_not_found, no complete approved data matches the request.
  • 429 rate_limit_exceeded or quota_exhausted, the shared allowance is exhausted.
  • 503 physical_reference_unavailable, a complete publication is unavailable.

Rejected requests and server errors do not consume monthly quota.

Coverage

20 weekly US retail fuel series: regular gasoline and No. 2 on-highway diesel, each for the US average and nine regions. Prices use USD per US gallon. History starts on 20 July 2026 and grows each week after the Monday survey. Source: U.S. Energy Information Administration. Monthly coverage includes 70 World Bank series across softs, oils and oilseeds, metals, grains, energy, fertilizers, forestry, and livestock and dairy. History reaches back to 1960, with later starts for some series. The latest available month is September 2026, but individual series can lag or have ended. Barley and sorghum end in August 2020; Mexican shrimp ends in October 2023. Check coverage_end for each series. All prices use USD and units as published. Source: The World Bank: World Bank Commodity Price Data (The Pink Sheet), CC BY 4.0

Available with a Narwhal API key.