API de Preços Físicos Fastmarkets
Table of Contents
API de Preços Físicos
O API de Preços Físicos fornece valores de preços e dados associados aos instrumentos para preços avaliados pela Fastmarkets. Todos os valores de preços estão associados a instrumentos que utilizam um símbolo como identificador.
Documentação técnica da API
Para mais detalhes sobre as especificações desta API e para testá-la, consulte a página de Documentação API ("Swagger")
Você pode tentar executar chamadas de API reais usando suas credenciais da plataforma Fastmarkets . Solicite à equipe Fastmarkets que conceda acesso ao Swagger à sua conta.
Autenticação
Todas as APIs Fastmarkets exigem um token de acesso válido para acessar dados protegidos. Para gerar um token de acesso, consulte o guia da API de autenticação com o escopo: fastmarkets.physicalprices.api.
O token deve ser enviado no cabeçalho "Authorization" com o prefixo "Bearer".
Exemplo:Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjdjZTkyOTQ4NDk0ODRkMDM4YzQ
Recuperando um único preço
Para retornar o preço avaliado mais recente de um instrumento específico, use o "endpoint Prices". Por exemplo, o símbolo 'MB-AL-0004' é usado para retornar o dado mais recente de preços disponíveis para "Aluminium P1020A, in-warehouse Rotterdam duty-paid, spot $/tonne" em 2 de março de 2019.
A resposta retorna os valores de preço "low", "mid" e "high" de 1º de março 2019, como esta foi a avaliação mais recente disponível para a data especificada.
Exemplo de solicitação (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)Exemplo de resposta (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"
}
]
}Se nenhum valor for incluído para o parâmetro "Dates" na solicitação, então os dados de preço mais recentes serão retornados. Um valor para o parâmetro "Symbols" é sempre obrigatório.
Recuperando vários preços
Também é possível solicitar preços para vários instrumentos e várias datas em uma única requisição usando o "endpoint Prices".
No exemplo abaixo, dois símbolos diferentes e duas datas diferentes foram solicitados. Como resultado, haverá dois preços retornados para cada um dos dois instrumentos.
Exemplo de solicitação (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)Exemplo de resposta (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"
}
Recuperando um intervalo de preços
Utilizando o "endpoint Prices/History", é possível recuperar uma série de preços ao longo de um período específico. No exemplo, a solicitação é feita para um período de sete dias (entre 20 de fevereiro de 2019 e 27 de fevereiro de 2019). A resposta retorna os preços em ordem decrescente de data.
Exemplo de solicitação (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)
Exemplo de resposta (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"
}Recuperando preços médios
eriodicamente, preços médios para muitos instrumentos da Fastmarkets são publicados. Esses valores são calculados com base nos preços de avaliação subjacentes ao longo de um período — seja uma semana, um mês ou um ano.
Tanto o "endpoint Prices" quanto o "Prices History" aceitam um parâmetro de entrada chamado "Price Calculation Type".
Há vários valores válidos para esse parâmetro, sendo os mais comuns:
- Média semanal
- Média mensal
- Média anual
Se nenhum "Price Calculation Type" for especificado, então o valor real da avaliação é retornado.
Observação: Para descobrir quais tipos de cálculo de preço estão disponíveis para um determinado instrumento, utilize o “endpoint Instrument”
(consulte a seção: Recuperação de dados de instrumentos)
Exemplo de solicitação (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)
Exemplo de resposta (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"
}Recuperando preços previstos
A previsão de curto prazo ("short term forecast") é uma série temporal que projeta preços futuros de instrumentos que já existem na Physical Prices API.
A API de Preços Físicos retornará tanto os preços físicos quanto os preços previstos se o parâmetro "forecastType" for fornecido e ambos os preços estiverem disponíveis no intervalo de datas especificado.
Todas as opções de previsão disponíveis para um determinado preço podem ser solicitadas com um campo adicional na consulta de dados do instrumento (por exemplo, F24M para MB-AL-0004).
Exemplo de solicitação (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)Exemplo de resposta (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"
}Recuperando dados de curva futura ("forward curve")
Os dados de "forward curve" estão disponíveis para alguns preços agrícolas como parte da entidade de preço. Eles serão retornados em chamadas de preço único, múltiplos preços ou intervalo de preços. Use o "endpoint Instruments" para verificar se o preço possui dados de "forward curve".
Exemplo de solicitação (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)Exemplo de resposta (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"
}Campos opcionais de dados de preço
Ao solicitar dados de preço, nem todas as informações disponíveis associadas a um preço são retornadas por padrão. Isso é intencional para ajudar a reduzir o tamanho da resposta quando uma grande quantidade de registros é requisitada.
No entanto, esses dados adicionais podem ser retornados usando o parâmetro de entrada "Fields". A seguir está a lista de campos opcionais disponíveis que podem ser adicionados à solicitação:
- appraisalPrice - Valor que indica se o preço está passando por um processo de avaliação no momento da apuração (Booleano)
- pricingRationale - Descrição da justificativa por trás da avaliação feita pelo Analista de Preços (string)
- assessmentPeriod - Descrição do período de avaliação ao retornar os tipos de cálculo do preço médio (string)
- lowChangeSincePrevious - Diferença entre o valor do preço mínimo da avaliação anterior e o valor do preço mínimo desta avaliação (número)
- midChangeSincePrevious – (Mesma lógica acima, mas para o valor médio do preço)
- highChangeSincePrevious – (Mesma lógica acima, mas para valores de preço altos)
- lowChangeSincePreviousProportion - Diferença entre o valor mínimo do preço na avaliação anterior e o valor mínimo do preço nesta avaliação, em decimal. 1 representa uma variação de 100%, -1 representa uma variação de -100% (número).
- midChangeSincePreviousProportion – (Mesma lógica acima, mas para o valor médio do preço)
- highChangeSincePreviousProportion – (Mesma lógica acima, mas para valores de preço altos)
Exemplo de solicitação (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)
Exemplo de resposta (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"
}Recuperando dados do instrumento
Todos os preços físicos estão vinculados a um instrumento associado. Cada instrumento possui diversos atributos, que podem ser visualizados por meio do "endpoint Instrument".
Se nenhum parâmetro de entrada for fornecido, o "endpoint" retornará todos os instrumentos aos quais o serviço chamador tem permissão de acesso. Para recuperar apenas instrumentos específicos, utilize o parâmetro "Symbols" na solicitação (veja no exemplo).
.
Exemplo de solicitação (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)
Exemplo de resposta (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"
}
]
}Por padrão, muitos dos atributos retornados são valores de ID (por exemplo: ID da mercadoria e moeda). Para retornar o nome completo desses atributos, eles precisam ser incluídos no parâmetro de entrada "Fields", já que são opcionais.
Esses campos opcionais incluem:
- Mercadoria
- Localização
- Moeda
- Unidade de Medida
- Incoterm
- Fonte
- forecastTypeIds - quando os dados de previsão estiverem disponíveis para preço, retornará a lista de tipos de previsão disponíveis.
- hasForwardCurves - quando os dados das curvas a termo estiverem disponíveis, retornará "True", caso contrário, "False".
No exemplo abaixo, a solicitação inclui os campos "ForecastTypeIds", "HasForwardCurves", "Commodity", "Currency" e "Location" para que esses valores completos sejam retornados:
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)
Exemplo de resposta (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"
}
]
}Recuperando dados de referência
O "endpoint References" é útil para obter detalhes sobre todos os valores válidos de um determinado campo (como códigos de moeda) ou para recuperar o nome completo de um valor de referência específico.
Os seguintes tipos de dados de referência podem ser obtidos usando este "endpoint":
- Moeda
- Unidade de Medida
- Tipo de cálculo de preço
- Incoterm
- Mercadoria
- Fonte
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)
Exemplo de resposta (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"
}
]
}
]
}Informações técnicas da API
Para saber mais sobre nossas APIs, consulte as informações técnicas da API .
Ajuda adicional
Se você tiver mais perguntas ou precisar de suporte adicional, consulte todo o conteúdo de ajuda disponível em nosso Hub de suporte.
Se você não encontrar o que precisa e quiser contatar nossas equipes de suporte, então vamos ajudá-lo(a).