Fastmarkets Analytics API
Discover how to leverage the Fastmarkets Analytics API for real-time data insights to enhance decision-making and boost efficiency.
Table of Contents
Analytics API
The Analytics API delivers Fastmarkets analytical content, including forecast values, forecast version history, fundamental data, and associated instrument metadata. All data is linked to a unique symbol that serves as the primary identifier within the API.
API technical documentation
For more on the specification of this API and to try it out, please refer to the API’s documentation page (Swagger)
You can try running real API calls there using your Fastmarkets Platform credentials. Ask Fastmarkets team to provide your account with Swagger access.
Authenticating
All Fastmarkets APIs require a valid Access Token to retrieve permissioned data. To generate an Access Token, please refer to the Authentication API guide with the scope: fastmarkets.analytics.api.
The token is then added to an Authorization header parameter using the ‘Bearer’ prefix. For example:
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Retrieving the latest forecast
To return the most recently available forecast dataset for a specific instrument, the Forecast endpoint is used. In this example, the symbol ‘MB-AL-0004.F24M’ is used to return the latest available price data for monthly forecast of Aluminium P1020A, in-warehouse Rotterdam duty-paid, spot $/tonne’ as of 7th March 2026, filtered by target date.
In the response, set of the latest forecast prices values of low, mid and high price values are returned for the 7th of March 2026, as this was the most recent forecast available for the specified date.
Example Request (Python):
GET https://api.fastmarkets.com/Analytics/v1/Forecast HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Symbols=MB-AL-0004.F24M&FromForecastTargetDate=2027-04-01&ToForecastTargetDate=2028-01-01url = "https://api.fastmarkets.com/Analytics/v1/Forecast"
query = {
'symbols':'MB-AL-0004.F24M',
'FromForecastTargetDate':'2027-04-01',
'ToForecastTargetDate':'2028-01-01'
}
headers = {
'Authorization': 'Bearer ' + accessToken.access_token,
'cache-control': 'no-cache'
}
req = requests.request("GET", url, headers=headers, data = query)
singlePrice = json.loads(req.content)Example Response (JSON):
{
"forecast": [
{
"symbol": "MB-AL-0004.F24M",
"version": 62,
"publicationDate": "2026-07-31T00:00:00.0000000+00:00",
"forecastType": "Regular",
"forecastPrices": [
{
"date": "2027-04-01",
"low": 2741.0,
"mid": 2741.0,
"high": 2741.0
},
. . .
{
"date": "2028-01-01",
"low": 301.0,
"mid": 301.0,
"high": 301.0
}
]
}
]
}If no value for the FromForecastTargetDate and ToForecastTargetDate parameters are included in the request, then the whole forecast set is returned. A value for the Symbols parameter is always required.
Retrieving forecast versions
To retrieve all historical values for a given forecasted market, the Forecast/Versions endpoint is used. It returns a time series of versioned forecast history data for specified symbol(s) and a specified date range.
Example Request (Python):
GET https://api.fastmarkets.com/Analytics/v1/Forecast/Versions HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Symbols=MB-AL-0004.F24M&fromDate=2026-06-04&toDate=2028-06-04url = "https://api.fastmarkets.com/Analytics/v1/Forecast/Versions"
query = {
'symbols':'MB-AL-0004.F24M',
'fromDate':'2026-06-04',
'toDate':'2028-06-04'
}
headers = {
'Authorization': 'Bearer ' + accessToken.access_token,
'cache-control': 'no-cache'
}
req = requests.request("GET", url, headers=headers, data = query)
singlePrice = json.loads(req.content)Example Response (JSON):
{
"data": [
{
"symbol": "MB-AL-0004.F24M",
"versions": [
{
"version": "82",
"forecastPublicationDate": "2026-07-03T01:00:00.0000000+01:00",
"rows": [
{
"assessmentDate": "2022-01-01T00:00:00+00:00",
"low": 443.7,
"mid": 443.7,
"high": 443.7
},
. . .
{
"assessmentDate": "2028-06-01T00:00:00+00:00",
"low": 315.0,
"mid": 315.0,
"high": 315.0
}
]
},
. . .
{
"version": "120",
"forecastAssessmentType": "Regular",
"forecastPublicationDate": "2026-07-31T00:00:00.0000000+00:00",
"forecastVersion": 1,
"rows": [
{
"assessmentDate": "2028-02-01T00:00:00+00:00",
"low": 112.0,
"mid": 112.0,
"high": 112.0
},
. . .
{
"assessmentDate": "2028-06-01T00:00:00+00:00",
"low": 255.0,
"mid": 255.0,
"high": 255.0
}
]
}
]
}
]
}If no value for the FromDate and TotDate parameters are included in the request, then the whole forecast history is returned. A value for the Symbols parameter is always required.
The ForecastTargetDate parameter filters the response to a single forecast period and returns the corresponding value from each available forecast version. This is useful for analysing forecast revisions over time, like in the example below:
Example Request (Python):
GET https://api.fastmarkets.com/Analytics/v1/Forecast/Versions HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Symbols=MB-AL-0004.F24M&fromDate=2026-06-04&toDate=2028-06-04&ForecastTargetDate=2027-01-01url = "https://api.fastmarkets.com/Analytics/v1/Forecast/Versions"
query = {
'symbols':'MB-AL-0004.F24M',
'fromDate':'2026-06-04',
'toDate':'2028-06-04',
'forecastTargetDate':'2027-01-01'
}
headers = {
'Authorization': 'Bearer ' + accessToken.access_token,
'cache-control': 'no-cache'
}
req = requests.request("GET", url, headers=headers, data = query)
singlePrice = json.loads(req.content)Example Response (JSON):
{
"data": [
{
"symbol": "MB-AL-0004.F24M",
"versions": [
{
"version": "82",
"forecastPublicationDate": "2026-07-03T01:00:00.0000000+01:00",
"rows": [
{
"assessmentDate": "2027-01-01T00:00:00+00:00",
"low": 425.0,
"mid": 425.0,
"high": 425.0
}
]
},
{
"version": "83",
"forecastPublicationDate": "2026-08-04T01:00:00.0000000+01:00",
"rows": [
{
"assessmentDate": "2027-01-01T00:00:00+00:00",
"low": 490.0,
"mid": 490.0,
"high": 490.0
}
]
},
. . .
{
"version": "99",
"forecastAssessmentType": "Revision",
"forecastRationale": "Correction",
"forecastPublicationDate": "2026-07-07T00:00:00.0000000+00:00",
"forecastVersion": 2,
"rows": [
{
"assessmentDate": "2027-01-01T00:00:00+00:00",
"low": 200.0,
"mid": 200.0,
"high": 200.0
}
]
}
]
}
]
}The assessed forecast version contain embedded metadata in each record, described below:
| Field | Description | Possible Values |
|---|---|---|
| version | Unique identifier of the forecast set. Forecasts with different version values represent separate forecast publications. | Numeric version identifier |
| forecastVersion | Revision number of the same forecast set. A new forecast version is created when a forecast is corrected or republished for the same publication period and forecast date range. | Numeric version identifier |
| forecastType | Indicates whether the forecast version is part of the regular publication cycle or a subsequent revision. | Regular, Revision |
| forecastRationale | The reason why a forecast version was created or updated. This is particularly useful when reviewing revisions to previously published forecasts. | Market Movement, Correction, Other |
Retrieving metadata
All analytical data relate to an associated instrument. The instrument consists of various attributes, all of which are available to view using the MetaData endpoint.
If no input parameters are provided, all instruments that the calling service are entitled to see are returned. The Symbols input parameter can be used return specific instruments (see example).
Example Request (Python):
GET https://api.fastmarkets.com/Analytics/v1/MetaData HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Symbols=MB-AL-0002.F24M,AG-BRY-0008.F24M,BA-CI-CATL_PR_LFP_CAM_NI
url = "https://api.fastmarkets.com/Analytics/v1/MetaData"
query = {'symbols':'MB-AL-0002.F24M,AG-BRY-0008.F24M,BA-CI-CATL_PR_LFP_CAM_NI'}
headers = {
'Authorization': 'Bearer ' + accessToken.access_token,
'cache-control': 'no-cache'
}
req = requests.request("GET", url, headers=headers, data = query)
instrumentMetadata = json.loads(req.content)
Example Response (JSON):
{
"metadata": [
{
"symbol": "MB-AL-0002.F24M",
"parentSymbol": "MB-AL-0002",
"shortDesc": "Aluminium 6063 extrusion billet premium, in-whs dp Rotterdam, $/tonne",
"desc": "Aluminium 6063 extrusion billet premium, in-whs dp Rotterdam, $/tonne",
"type": "Forecast",
"currency": "USD",
"unitOfMeasure": "Tonne",
"division": "Metal Bulletin",
"item": "Aluminum 6063 Extrusion Billet",
"location": "Rotterdam",
"frequency": "Weekly",
"grade": "Aluminium",
"publicationDate": "2026-08-11T15:16:37.6881701+00:00",
"forecastUpdateFrequency": "Every month",
"maxDecimalAllowed": 2
},
{
"symbol": "AG-BRY-0008.F24M",
"parentSymbol": "AG-BRY-0008",
"shortDesc": "Barley Feed barley FOB France $/mt",
"desc": "Barley Feed barley FOB France $/mt",
"type": "Forecast",
"currency": "USD",
"unitOfMeasure": "Tonne",
"division": "",
"measure": "",
"item": "",
"location": "FRA",
"location2": "",
"frequency": "Daily",
"publicationDate": "2026-08-11T15:39:58.0343175+00:00",
"forecastUpdateFrequency": "Every week",
"maxDecimalAllowed": 2
},
{
"symbol": "BA-CI-CATL_PR_LFP_CAM_NI",
"parentSymbol": "BA-CI-CATL_PR_LFP_CAM_NI",
"shortDesc": "Cell 4: LFP CATL 160 Ah Prismatic CAM Ni",
"desc": "Cell 4: LFP CATL 160 Ah Prismatic CAM Ni",
"type": "Economic",
"currency": "USD",
"unitOfMeasure": "kWh",
"division": "BRM",
"measure": "Cost Index",
"item": "Battery",
"location": "CN",
"frequency": "Monthly",
"grade": "BRM",
"publicationDate": "2025-11-26T15:47:48.2648068+00:00",
"cell": "LFP CATL 160 Ah Prismatic",
"category": "CAM Ni"
}
]
}Available forecast metadata fields:
| Field | Description | Possible Values |
|---|---|---|
| firstPublishDate | The date on which the forecast was first published. This field is populated when a new forecast series is launched. | Date/time value |
| lastPublishDate | The date on which the forecast was last published. For active forecasts, this field is typically blank. It is populated when a forecast is discontinued. | Date/time value or null |
| status | Indicates the current availability status of the forecast. | Active, Discontinued, Suspended |
| frequency | The frequency of the forecast values returned by the forecast series. This describes the forecast period itself rather than the update schedule. | Examples: Monthly, Quarterly, Yearly |
| forecastUpdateFrequency | Indicates how often Fastmarkets analysts review and publish updates to the forecast series. This field is populated when a forecast is launched/revised | Every month, Every week |
| maxDecimalAllowed | The maximum number of decimal places that may be returned for forecast values. | Integer value |
| version | The metadata version number for the forecast symbol. A new version is created when forecast metadata is modified. | Numeric version identifier |
| versionRemark | Additional notes describing the metadata version or changes introduced in that version. | Free-text value |
Get metadata versions
Metadata version history is available for analytics data through the MetaData/Versions endpoint. For the requested symbol, the response returns all available metadata versions within the specified date range. If no date range is provided, the full metadata history is returned.
Example Request (Python):
GET https://api.fastmarkets.com/Analytics/v1/MetaData/versions HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Symbols=MB-AL-0004.F24M
url = "https://api.fastmarkets.com/Analytics/v1/MetaData/versions"
query = {'symbols':'MB-AL-0004.F24M'}
headers = {
'Authorization': 'Bearer ' + accessToken.access_token,
'cache-control': 'no-cache'
}
req = requests.request("GET", url, headers=headers, data = query)
instrumentMetadata = json.loads(req.content)
Example Response (JSON):
{
"items": [
{
"symbol": "MB-AL-0004.F24M",
"versions": [
{
"version": 3,
"status": "Available",
"asAt": "2026-06-18T08:48:51.1616936+00:00",
"createdAt": "2026-06-18T08:48:51.1616936+00:00",
"metadata": {
"symbol": "MB-AL-0004.F24M",
"parentSymbol": "MB-AL-0004",
"shortDesc": "Aluminium P1020A premium, in-whs dp Rotterdam, $/tonne",
"desc": "Aluminium P1020A premium, in-whs dp Rotterdam, $/tonne",
"type": "Forecast",
"currency": "USD",
"unitOfMeasure": "Tonne",
"division": "Metal Bulletin",
"measure": "",
"item": "",
"location": "",
"location2": "",
"frequency": "Monthly",
"version": "3",
"publicationDate": "0001-01-01T00:00:00+00:00",
"status": "Active",
"firstPublishDate": "2016-01-01T00:00:00+00:00",
"lastPublishDate": "2027-06-01T00:00:00+00:00",
"forecastUpdateFrequency": "Every month",
"maxDecimalAllowed": 2,
"versionRemark": "Initial Definition"
}
},
. . .
{
"version": 0,
"status": "Available",
"asAt": "2021-10-03T01:48:26.2856684+01:00",
"createdAt": "2021-10-03T01:48:26.2856684+01:00",
"metadata": {
"symbol": "MB-AL-0004.F24M",
"parentSymbol": "MB-AL-0004",
"shortDesc": "Monthly forecast for MB-AL-0004",
"desc": "Monthly forecast for MB-AL-0004",
"type": "Forecast",
"currency": "USD",
"unitOfMeasure": "Tonne",
"publicationDate": "2016-01-01T00:00:00+00:00"
}
}
]
}
]
}Retrieving single/multiple fundamental data values
To return the most recently available assessed value for a specific fundamental, the Data endpoint is used. In this example, the symbol ‘BA-CI-LG_PO_NCM_622_LAB’ is used to return the latest available price data for ‘Cell 1: NCM-622 LG 58 Ah Pouch Labour’.
In response, low, mid and high price values are returned for the 8th of October 2025, as this was the most recent assessment available for the specified date.
Example Request (Python):
GET https://api.fastmarkets.com/Analytics/v1/Data HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Symbols=BA-CI-LG_PO_NCM_622_LAB&Dates=2025-10-16url = "https://api.fastmarkets.com/Analytics/v1/Data"
query = {
'symbols':'BA-CI-LG_PO_NCM_622_LAB',
'Dates':'2025-10-16'
}
headers = {
'Authorization': 'Bearer ' + accessToken.access_token,
'cache-control': 'no-cache'
}
req = requests.request("GET", url, headers=headers, data = query)
singlePrice = json.loads(req.content)Example Response (JSON):
{
"data": [
{
"symbol": "BA-CI-LG_PO_NCM_622_LAB",
"type": "Economic",
"rows": [
{
"assessmentDate": "2025-08-31T00:00:00+00:00",
"low": 0.58,
"mid": 0.58,
"high": 0.58
}
]
}
]
}
If no value for the Dates parameter is included in the request, then the most recent price data is returned. A value for the Symbols parameter is always required.
A single request can be used to retrieve data for multiple symbols and dates. In this example, the response returns the available values for each requested symbol for each specified assessment date:
Example Request (Python):
GET https://api.fastmarkets.com/Analytics/v1/Data HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Symbols=BA-CI-SDI_50G_NCA_87_CAM_NI,BA-CI-SDI_50G_NCA_87_CAM_LI,BA-CI-SDI_50G_NCA_87_CAM_FE&Dates=2019-03-02,2019-03-04url = "https://api.fastmarkets.com/Analytics/v1/Data"
query = {
'symbols':'BA-CI-SDI_50G_NCA_87_CAM_NI,BA-CI-SDI_50G_NCA_87_CAM_LI,BA-CI-SDI_50G_NCA_87_CAM_FE',
'Dates':'2019-03-02,2019-03-04'
}
headers = {
'Authorization': 'Bearer ' + accessToken.access_token,
'cache-control': 'no-cache'
}
req = requests.request("GET", url, headers=headers, data = query)
singlePrice = json.loads(req.content)Example Response (JSON):
{
"data": [
{
"symbol": "BA-CI-SDI_50G_NCA_87_CAM_NI",
"type": "Economic",
"rows": [
{
"assessmentDate": "2025-08-31T00:00:00+00:00",
"low": 10.75,
"mid": 10.75,
"high": 10.75
}
]
},
{
"symbol": "BA-CI-SDI_50G_NCA_87_CAM_LI",
"type": "Economic",
"rows": [
{
"assessmentDate": "2025-08-31T00:00:00+00:00",
"low": 4.92,
"mid": 4.92,
"high": 4.92
}
]
},
{
"symbol": "BA-CI-SDI_50G_NCA_87_CAM_FE",
"type": "Economic",
"rows": [
{
"assessmentDate": "2025-08-31T00:00:00+00:00",
"low": 0.0,
"mid": 0.0,
"high": 0.0
}
]
}
]
}
Retrieving a range of fundamental data values
The Data/History endpoint provides access to historical data over a defined period. The example below requests data between 1 January 2023 and 11 November 2025. The response contains the available assessment values for the requested symbol and date range.
Example Request (Python):
GET https://api.fastmarkets.com/Analytics/v1/Data/History HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Symbols=BA-CI-SDI_50G_NCA_87_CAM_NI&FromDate=2023-01-01&ToDate=2025-11-11url = "https://api.fastmarkets.com/Analytics/v1/Data/History"
query = {
'symbols':'BA-CI-SDI_50G_NCA_87_CAM_NI',
'FromDate':'2023-01-01',
'ToDate':'2025-11-11'
}
headers = {
'Authorization': 'Bearer ' + accessToken.access_token,
'cache-control': 'no-cache'
}
req = requests.request("GET", url, headers=headers, data = query)
singlePrice = json.loads(req.content)Example Response (JSON):
{
"data": [
{
"symbol": "BA-CI-SDI_50G_NCA_87_CAM_NI",
"type": "Economic",
"rows": [
{
"assessmentDate": "2023-01-31T00:00:00+00:00",
"low": 16.98,
"mid": 16.98,
"high": 16.98
},
. . .
{
"assessmentDate": "2025-07-31T00:00:00+00:00",
"low": 10.23,
"mid": 10.23,
"high": 10.23
},
{
"assessmentDate": "2025-08-31T00:00:00+00:00",
"low": 10.75,
"mid": 10.75,
"high": 10.75
}
]
}
]
}