Fastmarkets Market Data API
Table of Contents
Market Data API
The Market Data API provides price values and associated instrument data for market prices: delayed LME officials, LME FX pricing, CME group and SHFE settlements. All price values are associated to instruments which uses a symbol as an identifier.
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.marketdata.api.
The token is then added to an Authorization header parameter using the ‘Bearer’ prefix. For example:
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Retrieving a single price
To return the most recently available assessed price for a specific instrument, the Prices endpoint is used. In this example, the symbol ‘XL-CA-FRC.O’ is used to return the latest available price data (bid, mid and ask fields) for ‘LME Copper Cash Official’.
In the response, bid, mid and ask price values and the price's timestamp ,are returned for the most recent available data.
Example Request (Python)
POST https://api.fastmarkets.com/marketdata/v1/Prices HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Symbols=XL-CA-FRC.O&fields=bid,mid,askurl = "https://api.fastmarkets.com/marketdata/v1/Prices"
query = {'symbols':'XL-CA-FRC.O', 'fields':['bid', 'mid', 'ask']}
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):
{
"instruments": [
{
"symbol": "XL-CA-FRC.O",
"bid": 11280.0,
"bidTime": "2025-12-02T12:46:13.0000000+00:00",
"mid": 11282.5,
"midTime": "2025-12-02T12:46:13.0000000+00:00",
"ask": 11285.0,
"askTime": "2025-12-02T12:46:13.0000000+00:00"
}
]
}A value for the symbols and fields parameter is always required.
Retrieving multiple prices
It is also possible to request prices for multiple instruments in single request using the Prices endpoint.
In the example request below, three different symbols have been requested. In the result, there will be three price results for all the instruments.
Example Request (Python)
POST https://api.fastmarkets.com/marketdata/v1/Prices HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Symbols=XL-CA-FRC.O,XL-NI-FRC.O,XL-SN-FRC.O&Fields=bid,mid,askurl = "https://api.fastmarkets.com/marketdata/v1/Prices"
query = {
'symbols': ['XL-CA-FRC.O','XL-NI-FRC.O','XL-SN-FRC.O'],
'fields': ['bid', 'mid', 'ask']
}
headers = {
'Authorization': 'Bearer ' + accessToken.access_token,
'cache-control': 'no-cache'
}
req = requests.request("GET", url, headers=headers, data = query)
multiplePrices = json.loads(req.content)Example Response (JSON):
{
"instruments": [
{
"symbol": "XL-CA-FRC.O",
"bid": 11280.0,
"bidTime": "2025-12-02T12:46:13.0000000+00:00",
"mid": 11282.5,
"midTime": "2025-12-02T12:46:13.0000000+00:00",
"ask": 11285.0,
"askTime": "2025-12-02T12:46:13.0000000+00:00"
},
{
"symbol": "XL-NI-FRC.O",
"bid": 14715.0,
. . .
},
{
"symbol": "XL-SN-FRC.O",
"bid": 39245.0,
. . .
}
]
}Retrieving a range of prices
Using the Prices/History endpoint, it is possible to retrieve a series of prices over a specified period. In this example, a request is made for the last 6 days of prices leading up to the current time (at the time of writing, 10:18 on 3rd December 2025). The response returns prices in ascending order of date. No data is provided for the 29th or 30th of November as they were at a weekend. The response returns prices in descending order of date.
Example Request (Python)
POST https://api.fastmarkets.com/marketdata/v1/Prices/History HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Symbols=XL-CA-FRC.O&Fields=bid,mid,ask&Interval=6:0:0:0url = "https://api.fastmarkets.com/marketdata/v1/Prices/History"
query = {
'symbols': 'XL-CA-FRC.O',
'Fields': ['bid', 'mid', 'ask'],
'Interval': '6:0:0:0'
}
headers = {
'Authorization' : 'Bearer ' + accessToken.access_token,
'cache-control' : 'no-cache'
}
req = requests.request("GET", url, headers=headers, data = query)
priceRange = json.loads(req.content)Example Response (JSON):
{
"instruments": [
{
"symbol": "XL-CA-FRC.O",
"prices": [
{
"time": "2025-11-27T12:46:12.0000000+00:00",
"bid": 10933.0,
"ask": 10934.0,
"mid": 10933.5
},
{
"time": "2025-11-28T12:45:33.0000000+00:00",
"bid": 11003.0,
"ask": 11004.0,
"mid": 11003.5
},
{
"time": "2025-12-01T12:46:41.0000000+00:00",
"bid": 11298.0,
"ask": 11299.0,
"mid": 11298.5
},
{
"time": "2025-12-02T12:46:13.0000000+00:00",
"bid": 11280.0,
"ask": 11285.0,
"mid": 11282.5
}
]
}
]
}Other fields for retrieving price history
There are several other optional fields that can be used to control the price history requested:
| Field name | Description |
|---|---|
| startDate |
A date/time specified in ISO-8601 format. E.g. 2025-09-10T10:00:00Z
You can request a range of prices working either forwards or backwards from this startTime. If you do not supply a value, we will assume a start time of now and you may supply only a positive interval or count to request a range leading up to now. |
| interval |
A TimeSpan in the format days:hours:minutes:seconds. When you specify a startTime, use a negative value to request a range leading up to your startTime. When startTime is left empty, interval must be positive, and it is used to request a range leading up to now.
You must specify either interval or count. |
| count |
The number of prices you want to retrieve. When you specify a startTime, use a negative value to request prices leading up to your startTime. When startTime is left empty, count must be positive, and it is used to request a range leading up to now.
You must specify either interval or count. |
Market prices data types
The data structure differs depending on source and contract type. To receive the correct price value the correspondent fields should be provided in price request:
| Source label | Fields |
|---|---|
| CME, CBOT, NYMEX | settlement |
| LME, OTC, (LBMA) | mid, bid, ask |
| SHFE, COMEX | settlement, close |
| OTC (.E) | bid, ask |
| OTC | closelondon4pm, closeutcmidnight |
Example COMEX Request
POST https://api.fastmarkets.com/marketdata/v1/Prices HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Symbols=XC-ALI-FR1M&fields=settlement,closeExample Response (JSON):
{
"instruments": [
{
"symbol": "XC-ALI-FR1M",
"close": 2711.25,
"closeTime": "2025-11-21T07:11:05.0000000+00:00",
"settlement": 2849.75,
"settlementTime": "2025-12-02T00:00:00.0000000+00:00"
}
]
}Example OTC LBMA Request
POST https://api.fastmarkets.com/marketdata/v1/Prices HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Symbols=XO-AULBMA-T.AM&fields=bid,mid,askExample Response (JSON):
{
"instruments": [
{
"symbol": "XO-AULBMA-T.AM",
"bid": 4185.7,
"bidTime": "2025-12-02T10:32:16.0000000+00:00",
"mid": 1953.5,
"midTime": "2023-05-26T00:00:00.0000000+00:00",
"ask": 4185.7,
"askTime": "2025-12-02T10:32:16.0000000+00:00"
}
]
}Example OTC Request
POST https://api.fastmarkets.com/marketdata/v1/Prices HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Symbols=XO-USDCAD-RRM1&fields=closelondon4pm,closeutcmidnightExample Response (JSON):
{
"instruments": [
{
"symbol": "XO-USDCAD-RRM1",
"closelondon4pm": -23.75,
"closelondon4pmTime": "2025-12-02T15:59:54.0000000+00:00",
"closeutcmidnight": -23.02,
"closeutcmidnightTime": "2025-12-02T23:59:54.0000000+00:00"
}
]
}Example OTC Request
POST https://api.fastmarkets.com/marketdata/v1/Prices HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Symbols=XO-AULBMA-T.AM&fields=bid,mid,askExample Response (JSON):
{
"instruments": [
{
"symbol": "XO-AULBMA-T.AM",
"bid": 4185.7,
"bidTime": "2025-12-02T10:32:16.0000000+00:00",
"mid": 1953.5,
"midTime": "2023-05-26T00:00:00.0000000+00:00",
"ask": 4185.7,
"askTime": "2025-12-02T10:32:16.0000000+00:00"
}
]
}Example CBOT Request
POST https://api.fastmarkets.com/marketdata/v1/Prices HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Symbols=XB-ZC-FSH26&fields=settlementExample Response (JSON):
{
"instruments": [
{
"symbol": "XB-ZC-FSH26",
"settlement": 450.0,
"settlementTime": "2025-12-02T00:00:00.0000000+00:00"
}
]
}Retrieving instrument data
All market data prices relate to an associated instrument. The instrument consists of various attributes, all of which are available to view using the Instrument endpoint.
If no input parameters are provided, all instruments that the calling service is entitled to see are returned. The Symbols input parameter can be used to return specific instruments.
Example Request (Python)
POST https://api.fastmarkets.com/marketdata/v1/Instruments HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Symbols=XL-CA-FRC.Ourl = "https://api.fastmarkets.com/marketdata/v1/Instruments "
query = {'symbols': 'XL-CA-FRC.O'}
headers = {
'Authorization' : 'Bearer ' + accessToken.access_token,
'cache-control' : 'no-cache'
}
req = requests.request("GET", url, headers=headers, data = query)
priceRange = json.loads(req.content)Example Response (JSON):
{
"instruments": [
{
"symbol": "XL-CA-FRC.O",
"description": "LME Copper Cash (Nov 25) Official USD/t",
"descriptionShort": "LME CA Cash (Nov 25) Off",
"type": {
"code": "FUT",
"label": "Future"
},
"source": {
"code": "LME",
"label": "LME"
},
"product": {
"commodity": {
"code": "CU",
"label": "Copper"
},
"code": "CA",
"label": "Copper Grade A"
},
"maturity": {
"type": {
"code": "R",
"label": "Rolling"
},
"prompt": {
"code": "C",
"label": "Cash"
},
"date": "2025-11-13",
"isExpired": false
},
"currency": {
"code": "USD",
"label": "US Dollar"
},
"unitOfMeasure": {
"code": "t",
"label": "Tonne"
},
"lotSize": 25,
"delayClass": {
"shortLabel": "Live",
"code": "Live",
"label": "Delay Class - Live"
},
"aggregations": [
{
"name": "OHLCV",
"field": "ask",
"schema": "ohlcV-ask",
"periods": [
"P1D",
"P1W",
"P1M"
]
}
],
"frequency": [
"Daily"
]
}
]
}Exchange symbology
The Market Data symbology system aims to be consistent, extensible, unambiguous, machine-readable, unchanged when URL encoded, immediately identifiable, and visually consistent with physical price symbols. The system allows for the extension to cover new instruments and pricing facets not representing intrinsic properties.
All Market Data symbols are subject to the same formation rule:
Future single: {Exchange Code}-{Exchange Product}-FS{Prompt Month}{Prompt Year}
Future rolling: {Exchange Code}-{Exchange Product}-{FR/RR(future rolling/rolling prompt)}{M/Y(month/year)}
Examples:
- XB-ZS-FSX25 (CBOT | Soybean | Future | Single | November | 2025)
- XZ-LBR-FSZ23 (CME | Lumber | Future | Single | December | 2023)
- XN-NG-FR11M (NYMEX | Natural Gas | Future | Rolling | 11M)
- XZ-USDSOFR-RR1Y (CME | Term SOFR | Rolling Prompt | 1Y)
Below are the encoding tables for different exchanges:
| Code | Exchange |
|---|---|
| XL | London Metal Exchange (LME) |
| XC | Chicago Mercantile Exchange (CME group) COMEX |
| XN | Chicago Mercantile Exchange (CME group) NYMEX |
| XS | Shanghai Futures Exchange (SHFE) |
| XO | non-exchange, Over The Counter (OTC) |
| XD | Dalian Commodity Exchange (DCE) |
| XE | Euronext |
| XB | Chicago Mercantile Exchange (CME group) CBOT |
| XM | Minneapolis Grain Exchange (MGX) |
| XA | Mercado a Termino de Buenos Aires (MATBA) |
| XI | ICE (exchange) |
| XZ |
Chicago Mercantile Exchange (CME group) - CME (a sub-brand of the CME group, confusingly called CME. Including Lumber and Live Hogs) |
Month codes:
| Name | Code |
|---|---|
| January | F |
| February | G |
| March | H |
| April | J |
| May | K |
| June | M |
| July | N |
| August | Q |
| September | U |
| October | V |
| November | X |
| December | Z |
Technical API information
To find out more about our APIs please see API technical information
Further help
If you have more questions or need further support please look at all the help content available on our Support Hub. If you can't find what you need and want to contact our support teams then Let’s get you some help.