2 endpoints · Commodities · Macro
https://api.blave.orgapi-key + secret-key em toda requisiçãoAPI plan or Blave Agent plan/studio/market/db/ohlcv/<dataset>/<symbol>/<schema> | Nome | Descrição | Valores permitidos | Padrão |
|---|---|---|---|
datasetstring · pathObrigatório | Dataset da bolsa | GLBX.MDP3 (CME), IFEU.IMPACT (ICE) | |
symbolstring · pathObrigatório | Contrato contínuo do vencimento mais próximo | GLBX.MDP3: CL (petróleo WTI), GC (ouro); IFEU.IMPACT: BRN (Brent) | |
schemastring · pathObrigatório | Tamanho da barra | ohlcv-1d, ohlcv-1h, ohlcv-1m | |
startstring · query | Primeiro dia | YYYY-MM-DD | end − o intervalo máximo do schema |
endstring · query | Último dia | YYYY-MM-DD | hoje (UTC) |
Intervalo máximo por requisição (end − start): ohlcv-1d 3650 d · ohlcv-1h 730 d · ohlcv-1m 31 d.
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}, ...]{"dataset", "symbol", "schema", "data": [...]}.
| Campo | Tipo | Unidade | Descrição |
|---|---|---|---|
ts | string | UTC ISO | Horário de abertura da barra |
open / high / low / close | float | USD (petróleo: por barril; ouro: por onça) | Preços |
volume | int | contratos | Volume |
instrument_id | int | — | Id do instrumento no upstream, repassado a partir da barra de origem |
| Status | Corpo | Quando |
|---|---|---|
| 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 |
| 404 | mensagem de erro | Sem dados |
ohlcv-1m, faça as requisições em blocos de ≤ 31 dias e concatene (um bloco leva alguns segundos)./studio/market/anue/economic_calendar Todos opcionais; sem filtro, retorna o feed inteiro (~1,400 linhas), então filtre sempre.
| Nome | Descrição | Valores permitidos | Padrão |
|---|---|---|---|
startstring · query | Eventos nesta data ou depois | YYYY-MM-DD (data de Taipei) | sem limite inferior |
endstring · query | Eventos nesta data ou antes | YYYY-MM-DD (data de Taipei) | sem limite superior |
countrystring · query | Filtro de país | Códigos ISO-2, separados por vírgula, sem diferenciar maiúsculas de minúsculas — p. ex. US,CN,TW | todos os países |
max_priorityint · query | Mantém priority <= max_priority. 1 é o mais importante, então apenas os grandes eventos = max_priority=1 | 1 / 2 / 3 | todas as prioridades |
limitint · query | Ordena pelo horário do evento e depois mantém os N primeiros | ≥ 1 | sem limite |
langstring · 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/en | en / zh | en |
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}, ...]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).
| Campo | Tipo | Unidade | Descrição |
|---|---|---|---|
startDate | int | segundos epoch | A data civil de Taipei do evento |
time | string | null | HH:MM no horário de Taipei | Horário de divulgação; null se não publicado |
countryId | string | ISO-2 | Código do país |
countryName | string | — | Nome do país (conforme lang) |
subject | string | — | Nome do indicador (conforme lang) |
subjectTitle | string | — | Rótulo do período, p. ex. <7月>, <2季> |
predict | number | null | unit | Consenso do mercado |
last | number | null | unit | Valor anterior |
real | number | null | unit | Valor efetivo; null até a divulgação |
unit | string | — | e.g. %, point, 億USD |
priority | int | 1–3 | 1 = 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.
| Campo | Tipo | Observado |
|---|---|---|
id | int | Id do evento no upstream, p. ex. 79382 |
date | int | Segundos 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 |
dateUnit | string | month |
type | int | 2 |
areaId | string | "4" |
place | string | null | null |
correct | number | null | null |
correctMark | string | "N" |
| Status | Corpo | Quando |
|---|---|---|
| 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 |
200 com [] — isso significa "sem cobertura", não "nenhum evento agendado".start / end definidos, os eventos sem data são descartados; com max_priority definido, os eventos sem prioridade são descartados.real é preenchido depois da divulgação.