Palmoil physical price methodology
How Palmoil physical observations are sourced, typed, and revised. Available with a Narwhal API key
What the price means
A physical observation preserves the product, source-defined price type, period type, native currency and unit. Indonesian FFB purchase schedules keep every published tree-age row together. CPO prices and Malaysian FFB references remain scalar observations.
Malaysian CPO uses local-delivered market averages in MYR per metric tonne. Malaysian FFB uses the published mill-gate reference in MYR per 1% oil extraction rate (OER). Narwhal does not assume an extraction rate or convert that reference into a per-tonne purchase price.
These observations are not futures settlements or trading signals. Discovery defines the exact price and geographic scope of each admitted series.
Sources and rights
Indonesian FFB schedules come from provincial authorities. Indonesian CPO references come from Ministry of Trade decisions. Malaysian CPO market averages and FFB regional references come from the Malaysian Palm Oil Board (MPOB).
Indonesian Ministry of Trade decisions · MPOB price reports · MPOB explanation of 1% OER
Narwhal serves only sources with an active rights record and complete publication head. A rights withdrawal hides discovery, latest, and history immediately.
Series identity
series_idis stable route identity for one physical market series.productdistinguishes ffb and cpo.countryis ISO 3166-1 alpha-3;areauses ISO 3166-2 where applicable, or Narwhal-defined nwl-* IDs such as nwl-mys-north. National series omit area.producer_arrangementispurchase_agreementorsupported_scheme. Omitted when the source names no arrangement.
Source terms such as mitra swadaya, plasma, and pekebun remain evidence metadata. They do not become global API enums.
Complete schedules
Every tree-age row published together stays in one schedule. Tree-age ranges include both endpoints: a 10–20 band includes every age from 10 through 20. Rows are ordered, non-overlapping, positive decimal-string prices. A missing or ambiguous row rejects the schedule instead of producing a partial response.
Revisions replace the whole schedule. One row cannot revise independently because the authority published the rows as one determination.
Dates and revisions
period_startandperiod_enddescribe inclusive effective dates for Indonesian prices. Malaysian daily observations use the report date and an exclusive next-day end.revisionstarts at one and changes when the price or complete schedule changes.- Identical refetches do not create revisions.
History
History uses a stable series_id. Optional start and end bounds must be supplied together and form a half-open range. Indonesian effective periods are selected when they overlap that range; Malaysian daily prices are selected by report date. Results are oldest-first and keep complete schedules intact.
For each next page, keep all request parameters unchanged, including the limit and any price_month. A publication change returns cursor_expired; restart without the cursor.
History contains accepted prices and complete schedules. Indonesian CPO includes 68 effective periods; Malaysian CPO includes 1,457 daily reports and Malaysian FFB includes 71 months of daily rows. Date bounds do not promise uninterrupted coverage.
Limits
Unavailable reports and contradictory values stay outside the published history. Malaysian CPO has 289 unavailable report dates and one inconsistent report. Four Malaysian FFB months are excluded because source formats disagree. No missing value becomes a zero or an assumed holiday. FCPO futures are not included.
See the Commodities API reference and coverage.
Docs