API de Commodities e macro

2 endpoints · Commodities · Macro

Última atualização 2026-10
URL base
https://api.blave.org
Autenticação
Cabeçalhos api-key + secret-key em toda requisição
Acesso
API plan or Blave Agent plan
Limite de requisições
500 requisições / 5 min por chave e por IP

OHLCV de futuros da CME / ICE

GET/studio/market/db/ohlcv/<dataset>/<symbol>/<schema>
Dados desde
2010-06-06
Atualização
Atraso de ~4 h

Parâmetros

NomeDescriçãoValores permitidosPadrão
dataset
string · pathObrigatório
Dataset da bolsaGLBX.MDP3 (CME), IFEU.IMPACT (ICE)
symbol
string · pathObrigatório
Contrato contínuo do vencimento mais próximoGLBX.MDP3: CL (petróleo WTI), GC (ouro); IFEU.IMPACT: BRN (Brent)
schema
string · pathObrigatório
Tamanho da barraohlcv-1d, ohlcv-1h, ohlcv-1m
start
string · query
Primeiro diaYYYY-MM-DDend − o intervalo máximo do schema
end
string · query
Último diaYYYY-MM-DDhoje (UTC)

Intervalo máximo por requisição (end − start): ohlcv-1d 3650 d · ohlcv-1h 730 d · ohlcv-1m 31 d.

Exemplo

Python
data = requests.get(f"{BASE_URL}/studio/market/db/ohlcv/GLBX.MDP3/CL/ohlcv-1d", headers=headers,                    params={"start": "2024-01-01", "end": "2024-12-31"}, timeout=60).json()["data"]# [{"ts": "2024-01-02 00:00:00+00:00", "open": 71.95, "high": 73.64, "low": 70.06, "close": 70.5,#   "volume": 263594, "instrument_id": 686071},#  {"ts": "2024-01-03 00:00:00+00:00", "open": 70.49, "high": 73.23, "low": 69.28, "close": 73.05,#   "volume": 253755, "instrument_id": 686071}, ...]

Resposta

{"dataset", "symbol", "schema", "data": [...]}.

CampoTipoUnidadeDescrição
tsstringUTC ISOHorário de abertura da barra
open / high / low / closefloatUSD (petróleo: por barril; ouro: por onça)Preços
volumeintcontratosVolume
instrument_idint—Id do instrumento no upstream, repassado a partir da barra de origem

Erros

StatusCorpoQuando
400{"error": "Invalid schema. Allowed: [...]"}Schema inválido
400{"error": "Invalid dataset/symbol combination"}Par inválido
400{"error": "Invalid date format. Use YYYY-MM-DD"}Data malformada
400{"error": "date_range_too_large", "message": "...", "max_days": <n>}Intervalo acima do limite
404mensagem de erroSem dados

Observações

  • As ~4 horas mais recentes não estão disponíveis.
  • Para um histórico longo de ohlcv-1m, faça as requisições em blocos de ≤ 31 dias e concatene (um bloco leva alguns segundos).

Calendário econômico

GET/studio/market/anue/economic_calendar
Acesso
Any valid key
Limite de requisições
100 requisições / min por conta
Dados desde
Janela móvel: do último mês, aproximadamente, até as próximas semanas
Atualização
Cache do servidor de 5 min

Parâmetros

Todos opcionais; sem filtro, retorna o feed inteiro (~1,400 linhas), então filtre sempre.

NomeDescriçãoValores permitidosPadrão
start
string · query
Eventos nesta data ou depoisYYYY-MM-DD (data de Taipei)sem limite inferior
end
string · query
Eventos nesta data ou antesYYYY-MM-DD (data de Taipei)sem limite superior
country
string · query
Filtro de paísCódigos ISO-2, separados por vírgula, sem diferenciar maiúsculas de minúsculas — p. ex. US,CN,TWtodos os países
max_priority
int · query
Mantém priority <= max_priority. 1 é o mais importante, então apenas os grandes eventos = max_priority=11 / 2 / 3todas as prioridades
limit
int · query
Ordena pelo horário do evento e depois mantém os N primeiros≥ 1sem limite
lang
string · query
Idioma de exibição de countryName / subject; os nomes que não estão na tabela de consulta do servidor ficam como estão, então en retorna uma mistura de zh/enen / zhen

Exemplo

Python
params = {"start": "2026-09-16", "end": "2026-09-23", "max_priority": 1, "lang": "zh"}response = requests.get(    f"{BASE_URL}/studio/market/anue/economic_calendar",    headers=headers, params=params, timeout=60,)data = response.json()# [{"id": 79382, "startDate": 1790121600, "date": 1788220800, "dateUnit": "month", "time": "16:30",#   "countryId": "GB", "countryName": "英國", "areaId": "4",#   "subject": "S&P Global Manufacturing PMI - 初值", "subjectTitle": "<9月>", "unit": "point",#   "predict": 51.7, "last": 51.7, "real": None, "correct": None, "correctMark": "N",#   "place": None, "priority": 1, "type": 2}, ...]

Resposta

Um array JSON simples (não envolvido em {"data": ...}). A ordem é a do próprio feed, a menos que limit esteja definido (nesse caso, ordenado por startDate, time).

CampoTipoUnidadeDescrição
startDateintsegundos epochA data civil de Taipei do evento
timestring | nullHH:MM no horário de TaipeiHorário de divulgação; null se não publicado
countryIdstringISO-2Código do país
countryNamestring—Nome do país (conforme lang)
subjectstring—Nome do indicador (conforme lang)
subjectTitlestring—Rótulo do período, p. ex. <7月>, <2季>
predictnumber | nullunitConsenso do mercado
lastnumber | nullunitValor anterior
realnumber | nullunitValor efetivo; null até a divulgação
unitstring—e.g. %, point, 億USD
priorityint1–31 = mais importante (payroll não agrícola, decisões de juros), 3 = menos importante (contagens de sondas)

Uma resposta real trazia estes campos adicionais, repassados do feed do upstream. Só o que foi observado é descrito; não deduza deles mais do que isso.

CampoTipoObservado
idintId do evento no upstream, p. ex. 79382
dateintSegundos epoch do período que a leitura cobre, não da divulgação — linhas rotuladas com subjectTitle: "<9月>" traziam date = 2026-09-01, enquanto startDate era 2026-09-23
dateUnitstringmonth
typeint2
areaIdstring"4"
placestring | nullnull
correctnumber | nullnull
correctMarkstring"N"

Erros

StatusCorpoQuando
400{"error": "Invalid date format. Use YYYY-MM-DD"}start / end malformados
400{"error": "max_priority must be an integer"}max_priority não inteiro
400{"error": "limit must be an integer"} / {"error": "limit must be >= 1"}limit inválido
429{"error_code": "ERR429", "message": "User rate limit exceeded"}Mais de 100 requisições / min

Observações

  • Um intervalo fora da janela móvel retorna 200 com [] — isso significa "sem cobertura", não "nenhum evento agendado".
  • Com start / end definidos, os eventos sem data são descartados; com max_priority definido, os eventos sem prioridade são descartados.
  • Esta é a única fonte para eventos macro e seus números — nunca a substitua por uma busca na web ou por um valor lembrado de memória. Sites agregadores de calendário trazem tabelas erradas (um deles listou um valor efetivo já publicado como o consenso), e os campos que uma página não cobre acabam preenchidos com dados de treinamento — um valor anterior, que tem exatamente uma resposta certa, já foi escrito errado desse jeito. Se este endpoint não puder responder, diga isso.
  • A janela é móvel — aproximadamente o último mês mais as próximas semanas — e não um arquivo histórico.
  • real é preenchido depois da divulgação.