Fastmarkets实物商品价格API
Table of Contents
实物商品价格API 为由Fastmarkets评估的价格提供价格数值和与其相关的instrument数据。所有的价格数值都与以Symbol作为标识符的instrument相关联。
API技术文档
了解更多关于此 API 的详细说明以及试用方法, 请参考 API文档页 (Swagger)
您可以尝试使用您的Fastmarkets Platform账号信息运行真实的 API 调用。请联系Fastmarkets团队,为您帐户供 Swagger 访问权限。
认证
所有Fastmarkets API 都需要有效的访问令牌才能检索授权数据。要生成访问令牌,请参阅认证API指南,范围: fastmarkets.physicalprices.api。
然后,该令牌会通过“Bearer”前缀添加到授权标头参数中。例如:
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
获取单一价格
要返回特定instrument的最新可用评估价格,可使用“价格”端点。 在此示例中, symbol “MB-AL-0004” 用于返回 ‘Aluminium P1020A, in-warehouse Rotterdam duty-paid, spot $/tonne’ 截至2019年3月2日起的最新可用价格数据。
在回复中, 返回了2019年3月1日的低, 中 , 高的价格值 ,因为这是针对该特定日期所能获取的最新评估结果。
请求示例(Python):
POST https://api.fastmarkets.com/physical/v2/Prices HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Symbols=MB-AL-0004&Dates=2019-03-02
url = "https://api.fastmarkets.com/Physical/v2/Prices"
query = {'symbols':'MB-AL-0004', 'dates':'2019-03-02'}
headers = {
'Authorization': 'Bearer ' + accessToken.access_token,
'cache-control': 'no-cache'
}
req = requests.request("GET", url, headers=headers, data = query)
singlePrice = json.loads(req.content)响应示例(JSON):
{
"instruments": [
{
"firstDate": "1987-04-07T00:00:00+00:00",
"lastDate": "2019-05-21T15:00:00+00:00",
"prices": [
{
"date": "2019-03-02",
"assessmentDate": "2019-03-01T16:00:12+00:00",
"revision": 0,
"low": 130,
"mid": 135,
"high": 140
}
],
"symbol": "MB-AL-0004"
}
]
}如果请求中未包含“日期”参数的值,那么将返回最新的价格数据。Symbols 参数始终是必需的。
获取多个价格
还可以通过“价格”端点一次性提交多个instrument和多个日期的价格请求。
在下面的请求示例中, 请求了两个不同的symbol 和两个不同的日期。结果是, 对于这两个instrument,都会有两个价格结果。
请求示例(Python):
POST https://api.fastmarkets.com/physical/v2/Prices HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Symbols=MB-AL-0004,MB-AL-0006&Dates=2019-03-02,2019-03-04
url = "https://api.fastmarkets.com/Physical/v2/Prices"
query = {
'symbols': ['MB-AL-0004', 'MB-AL-0006'],
'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)
multiplePrices = json.loads(req.content)响应示例(JSON):
{
"instruments": [
{
"firstDate": "1987-04-07T00:00:00+00:00",
"lastDate": "2025-11-11T16:00:00+00:00",
"prices": [
{
"date": "2019-03-02",
"assessmentDate": "2019-03-01T16:00:12+00:00",
"revision": 0,
"low": 130.0,
"mid": 135.0,
"high": 140.0
},
{
"date": "2019-03-04",
"assessmentDate": "2019-03-01T16:00:12+00:00",
"revision": 0,
"low": 130.0,
"mid": 135.0,
"high": 140.0
}
],
"symbol": "MB-AL-0004"
},
{
"firstDate": "1995-07-05T00:00:00+00:00",
"lastDate": "2025-11-05T16:00:00+00:00",
"prices": [
{
"date": "2019-03-02",
"assessmentDate": "2019-02-27T15:06:11+00:00",
"revision": 0,
"low": 780.0,
"mid": 790.0,
"high": 800.0
},
{
"date": "2019-03-04",
"assessmentDate": "2019-02-27T15:06:11+00:00",
"revision": 0,
"low": 780.0,
"mid": 790.0,
"high": 800.0
}
],
"symbol": "MB-AL-0006"
}
],
"priceCalculationType": "None"
}
获取一系列价格
使用 Prices/History 端点,可以检索指定时间段内的一系列价格。 在此示例中, 发送了一个7天 (从2019 年 2 月 20 日至 2019 年 2 月 27 日)的请求。响应按照日期降序返回价格。
请求示例(Python):
POST https://api.fastmarkets.com/physical/v2/Prices/History HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Symbols=MB-IRO-0001&FromDate=2019-02-20&ToDate=2019-03-27
url = "https://api.fastmarkets.com/Physical/v2/Prices/history"
query = {
'symbols': 'MB-IRO-0001',
'fromDate': '2019-02-20',
'toDate': '2019-02-27',
'calendarType': 'Weekdays',
'carryForward': True
}
headers = {
'Authorization' : 'Bearer ' + accessToken.access_token,
'cache-control' : 'no-cache'
}
req = requests.request("GET", url, headers=headers, data = query)
priceRange = json.loads(req.content)
响应示例(JSON):
{
"instruments": [
{
"firstDate": "1994-08-31T00:00:00+00:00",
"lastDate": "2024-08-15T15:52:29+01:00",
"prices": [
{
"date": "2019-03-21",
"assessmentDate": "2019-03-21T15:12:56+00:00",
"revision": 0,
"low": 390.0,
"mid": 390.0,
"high": 390.0
},
. . .
{
"date": "2019-02-21",
"assessmentDate": "2019-02-21T15:45:24+00:00",
"revision": 0,
"low": 385.0,
"mid": 387.5,
"high": 390.0
}
],
"symbol": "MB-IRO-0001"
}
],
"calendar": {
"type": "AssessmentDays",
"dates": [
"2019-03-21",
"2019-03-14",
"2019-03-07",
"2019-02-28",
"2019-02-21"
]
},
"priceCalculationType": "None"
}获取平均价格
每隔一段时间,Fastmarkets 的许多instrument的平均价格就会公布一次。这些价格是基于一周、一个月或一年内的基础评估价格计算得出的数值。
“Prices”和“Prices History”这两个端点都接受一个名为“Price Calculation Type”的输入参数。该参数有几个有效值,其中最常见的有:
- 周平均值
- 月平均值
- 年平均值
如果没有定义 Price Calculation Type,将返回实际评估值。
注: 想找到一个指定的instrument可用的Price Calculation Types, 可以使用Instrument endpoint。(参见:Retrieving instruments data)
请求示例(Python):
POST https://api.fastmarkets.com/physical/v2/Prices/MonthlyAverage HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Symbols=MB-AL-0004&Dates=2019-03-02
url = "https://api.fastmarkets.com/Physical/v2/Prices/MonthlyAverage"
query = {'symbols':'MB-AL-0004',
'dates':'2019-03-02'}
headers = {
'Authorization': 'Bearer ' + accessToken.access_token,
'cache-control': 'no-cache'
}
req = requests.request("GET", url, headers=headers, data = query)
monthlyAveragePrice = json.loads(req.content)
响应示例(JSON):
{
"instruments": [
{
"firstDate": "1992-01-31T12:00:00+00:00",
"lastDate": "2025-10-31T16:11:21+00:00",
"prices": [
{
"date": "2019-03-02",
"assessmentDate": "2019-02-28T12:00:00+00:00",
"revision": 1,
"low": 125.0,
"mid": 130.32,
"high": 135.63
}
],
"symbol": "MB-AL-0004"
}
],
"priceCalculationType": "MonthlyAverage"
}获取预测价格
短期预测是一个时间序列,用于预测实物商品价格API 中已存在的instrument的未来价格。
如果提供了forecastType参数,并且在提供的日期范围内两组价格均可用,那么实物商品价格API 将返回现货价格和预测价格。
可以通过在instrument数据查询中添加一个字段来请求特定价格的所有可用预测选项(例如,MB-AL-0004 的 F24M)。
请求示例(Python):
POST https://api.fastmarkets.com/physical/v2/Prices/History HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Symbols=MB-AL-0004&FromDate=2025-09-27&ToDate=2029-02-20
&forecastType=F24M
url = "https://api.fastmarkets.com/Physical/v2/Prices/history"
query = {
'symbols': 'MB-AL-0004',
'fromDate': '2025-11-01',
'toDate': '2029-02-20
',
'forecastType': 'F24M'
}
headers = {
'Authorization' : 'Bearer ' + accessToken.access_token,
'cache-control' : 'no-cache'
}
req = requests.request("GET", url, headers=headers, data = query)
priceRange = json.loads(req.content)响应示例(JSON):
{
"instruments": [
{
"firstDate": "1987-04-07T00:00:00+00:00",
"lastDate": "2025-11-11T16:00:00+00:00",
"prices": [
{
"date": "2025-11-11",
"assessmentDate": "2025-11-11T16:00:00+00:00",
"revision": 0,
"low": 310.0,
"mid": 325.0,
"high": 340.0
},
. . .
{
"date": "2025-11-04",
"assessmentDate": "2025-11-04T16:00:00+00:00",
"revision": 0,
"low": 310.0,
"mid": 320.0,
"high": 330.0
}
],
"forecast": {
"symbol": "MB-AL-0004.F24M",
"version": 73,
"publicationDate": "2025-11-04T00:00:00.000Z",
"forecastPrices": [
{
"date": "2025-11-01T00:00:00.000Z",
"low": 330.0,
"mid": 330.0,
"high": 330.0
},
. . .
{
"date": "2027-10-01T00:00:00.000Z",
"low": 265.0,
"mid": 265.0,
"high": 265.0
}
]
},
"symbol": "MB-AL-0004"
}
],
"calendar": {
"type": "AssessmentDays",
"dates": [
"2025-11-11",
"2025-11-07",
"2025-11-04"
]
},
"priceCalculationType": "None"
}获取远期曲线数据
部分农产品价格的远期曲线数据包含在价格实体中。调用单个价格、多个价格或是特定范围的价格,都会返回远期曲线数据。使用“Instruments”端点来确定价格是否具有远期曲线数据。
请求示例(Python):
POST https://api.fastmarkets.com/physical/v2/Prices HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Symbols=AG-CRN-0071url = "https://api.fastmarkets.com/Physical/v2/Prices"
query = {'symbols':'AG-CRN-0071'}
headers = {
'Authorization': 'Bearer ' + accessToken.access_token,
'cache-control': 'no-cache'
}
req = requests.request("GET", url, headers=headers, data = query)
singlePrice = json.loads(req.content)响应示例(JSON):
{
"instruments": [
{
"firstDate": "2017-09-29T12:00:00+00:00",
"lastDate": "2025-11-11T14:53:49-05:00",
"prices": [
{
"forwardCurves": [
{
"forwardCode": "M1",
"forwardMonth": "DEC",
"low": 218.25,
"mid": 218.25,
"high": 218.25
},
. . .
{
"forwardCode": "M8",
"forwardMonth": "JUL",
"low": 215.0,
"mid": 215.0,
"high": 215.0
},
{
"forwardCode": "M9",
"forwardMonth": "AUG",
"low": 213.5,
"mid": 213.5,
"high": 213.5
}
],
"date": "2025-11-12",
"assessmentDate": "2025-11-11T14:53:49-05:00",
"revision": 0,
"low": 218.25,
"mid": 218.25,
"high": 218.25
}
],
"symbol": "AG-CRN-0071"
}
],
"priceCalculationType": "None"
}可选的价格数据字段
在请求价格数据时,默认情况下不会返回与价格相关的所有可用数据。这是有意为之的,旨在当请求大量记录时,能够减少响应的数量。
然而,这些额外的数据可以通过使用“Field”输入参数来获取。以下是可供添加到请求中的可选字段列表:
- appraisalPrice - 表示在评估时是否正在进行评估流程的值(Boolean)
- pricingRationale - 价格报告员所作评估的理由描述(string)
- assessmentPeriod - 返回平均价格计算类型时的评估周期描述(string)
- lowChangeSincePrevious - 上次评估的最低价与本次评估的最低价之间的差值(number)
- midChangeSincePrevious – (与上述相同,但适用于中间价格值)
- highChangeSincePrevious – (与上述相同,但用于高价格值)
- lowChangeSincePreviousProportion - 上次评估的最低价与本次评估的最低价之差,以小数形式表示。1 表示变化 100%,-1 表示变化 -100%。(number)
- midChangeSincePreviousProportion – (与上述相同,但适用于中间价格值)
- highChangeSincePreviousProportion – (与上述相同,但适用于高价格值)
请求示例(Python):
POST https://api.fastmarkets.com/physical/v2/Prices HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Symbols=MB-AL-0004&Dates=2019-03-02&
Fields=assessmentPeriod,pricingRationale,lowChangeSincePrevious,midChangeSincePrevious
url = "https://api.fastmarkets.com/Physical/v2/Prices"
query = {
'symbols':'MB-AL-0004',
'fields': [
'assessmentPeriod',
'lowChangeSincePrevious',
'PricingRationale',
'MidChangeSincePrevious'
]
}
headers = {
'Authorization': 'Bearer ' + accessToken.access_token,
'cache-control': 'no-cache'
}
req = requests.request("GET", url, headers=headers, data = query)
priceWithOptionalFields = json.loads(req.content)
响应示例(JSON):
{
"instruments": [
{
"firstDate": "1987-04-07T00:00:00+00:00",
"lastDate": "2025-11-11T16:00:00+00:00",
"prices": [
{
"date": "2019-03-02",
"assessmentDate": "2019-03-01T16:00:12+00:00",
"revision": 0,
"low": 130.0,
"mid": 135.0,
"high": 140.0,
"pricingRationale": "Premium unchanged at $130-140/t. \n\nOne deal for small tonnage was reported at $140/t. \n\nOne bid was reported at $141/t for small tonnage and an offer for standard tonnage was reported at $127/t. One trader assessed the market unchanged $130-140/t, a second saw it at $135/t, a third at $138/t and a fourth at $140/t. \n\nOne deal for small tonnage at $150/t was discarded because in our judgement it is an outlier and not representative of the bulk of the market. \n\nContango in LME spreads continues to support premium. Participants expect premium could move higher in coming pricing sessions due to higher duty-unpaid levels.\n\nBut tighter duty-unpaid market leading to a disparity in duty spread between unpaid and paid market for now.",
"lowChangeSincePrevious": 0.0,
"midChangeSincePrevious": 0.0,
"assessmentPeriod": "01 Mar 2019"
}
],
"symbol": "MB-AL-0004"
}
],
"priceCalculationType": "None"
}检索instrument数据
所有实物商品价格都与相应的instument相关联。该instrument包含多种属性,所有这些属性均可通过“Instrument”端点进行查看。
如果未提供任何输入参数, 将返回调用服务已授权查看的所有instrument。Symbols 输入参数可用于返回特定instrument(参见示例)。
请求示例(Python):
POST https://api.fastmarkets.com/physical/v2/Instruments HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Symbols=MB-STS-0236
url = "https://api.fastmarkets.com/Physical/v2/Instruments"
query = {'symbols':'MB-STS-0236'}
headers = {
'Authorization': 'Bearer ' + accessToken.access_token,
'cache-control': 'no-cache'
}
req = requests.request("GET", url, headers=headers, data = query)
instrumentMetadata = json.loads(req.content)
响应示例(JSON):
{
"instruments": [
{
"productId": "B1GLNZZQZH7H3N",
"description": "Stainless steel scrap 304 turnings, broker buying price, delivered to processor New York, US cents/lb",
"descriptionShort": "Stainless steel scrap 304 turnings, broker buying price, delivered to processor New York, US cents/lb",
"commodityId": "STS",
"priceType": "Price",
"locationId": "USA-NY",
"currencyId": "USd",
"unitOfMeasureId": "Pound",
"incotermId": "DLVD",
"launchDate": "2015-10-20",
"frequency": "Weekly",
"sourceId": "AMM",
"status": "Discontinued",
"priceCalculationTypeIds": [
"WeeklyAverage",
"MonthlyAverage",
"QuarterlyAverage",
"YearlyAverage"
],
"symbol": "MB-STS-0236"
}
]
}默认情况下,返回的许多属性都是 ID 值(例如:商品 ID 和货币 ID)。若要返回这些属性的完整名称,则需要将它们包含在“Fields”输入参数中,因为这些属性是可选的。
这些可选的 field 包括:
- Commodity
- Location
- Currency
- UnitOfMeasure
- Incoterm
- Source
- forecastTypeIds - 当价格的预测数据可用时,将返回可用的预测类型列表
- hasForwardCurves - 当远期曲线数据可用时,将返回“True”,否则返回“False”
在此示例中,发送了一个包含ForecastTypeIds 的请求。 回复中包含了ForwardCurves、 Commodity、Currency 和 Location:
POST https://api.fastmarket.com/physical/v2/Instruments HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Symbols=MB-AL-0004&Fields=Commodity,Location,Currency,forecastTypeIds,hasForwardCurves
url = "https://api.fastmarkets.com/Physical/v2/Instruments"
query = {
'symbols': 'MB-AL-0004',
'fields': ['Commodity', 'Currency','Location','forecastTypeIds','hasForwardCurves
']
}
headers = {
'Authorization': 'Bearer ' + accessToken.access_token,
'cache-control': 'no-cache'
}
req = requests.request("GET", url, headers=headers, data = query)
instrumentMetadataOptional = json.loads(req.content)
响应示例(JSON):
{
"instruments": [
{
"productId": "B1GLNZZQZBPPP5",
"description": "Aluminium P1020A premium, in-whs dp Rotterdam, $/tonne",
"descriptionShort": "Aluminium P1020A premium, in-whs dp Rotterdam, $/tonne",
"commodity": "Aluminium",
"commodityId": "AL",
"priceType": "Premium/Discount",
"location": "Rotterdam",
"locationId": "ROT",
"currency": "US Dollar",
"currencyId": "USD",
"unitOfMeasureId": "Tonne",
"incotermId": "IWDP",
"launchDate": "2014-07-25",
"frequency": "Twice weekly",
"sourceId": "MB",
"status": "Active",
"priceCalculationTypeIds": [
"WeeklyAverage",
"MonthlyAverage",
"QuarterlyAverage",
"YearlyAverage"
],
"forecastTypeIds": [
"F24M"
],
"hasForwardCurves": false,
"symbol": "MB-AL-0004"
}
]
}检索参考数据
References 端点可用于获取特定字段(例如货币代码)的所有有效值的详细信息,或者获取特定引用值的完整名称。
通过此端点可以获取以下参考数据:
- Currency
- Unit Of Measure
- Price Calculation Type
- Incoterm
- Commodity
- Source
POST https://api.fastmarkets.com/physical/v2/References HTTP/1.1
Host: api.fastmarkets.com
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Types=Currency
url = "https://api.fastmarkets.com/Physical/v2/References"
query = {'types': 'Currency'}
headers = {
'Authorization': 'Bearer ' + accessToken.access_token,
'cache-control': 'no-cache'
}
req = requests.request("GET", url, headers=headers, data = query)
currencyReferenceData = json.loads(req.content)
响应示例(JSON):
{
"references": [
{
"type": "Currency",
"items": [
{
"availableConversionIds": [],
"sign": "COP",
"id": "COP",
"description": "Colombia Peso"
},
{
"availableConversionIds": [
"SEK",
"GBP",
"GBp",
"USD",
"USd",
"BRL",
"CHF",
"VND",
"AUD",
"IDR",
"MXN",
"CNY",
. . .
"JPY",
"MYR",
"CZK",
"PLN",
"RUB",
"CLP",
"ZAR",
"CAD",
"CAd"
],
"sign": "TRY",
"id": "TRY",
"description": "Turkish lira"
},
. . .
{
"availableConversionIds": [],
"sign": "£",
"id": "SHP",
"description": "Saint Helena Pound"
}
]
}
]
}API技术信息
如需了解更多关于我们 API 的信息,请参阅API技术信息。
更多帮助
如果您还有其他问题或需要进一步的帮助,请查看我们支持中心提供的所有帮助内容。
如果您找不到所需信息并希望联系我们的支持团队,那么让我们为您提供帮助吧。