API de Materias primas y macro

2 endpoints · Materias primas · Macro

Última actualización 2026-10
URL base
https://api.blave.org
Autenticación
Encabezados api-key + secret-key en cada solicitud
Acceso
API plan or Blave Agent plan
Límite de uso
500 solicitudes / 5 min por clave y por IP

OHLCV de futuros de CME / ICE

GET/studio/market/db/ohlcv/<dataset>/<symbol>/<schema>
Datos desde
2010-06-06
Actualización
Retraso de ~4 h

Parámetros

NombreDescripciónValores permitidosPredeterminado
dataset
string · pathObligatorio
Conjunto de datos del mercadoGLBX.MDP3 (CME), IFEU.IMPACT (ICE)
symbol
string · pathObligatorio
Contrato continuo del mes más cercanoGLBX.MDP3: CL (crudo WTI), GC (oro); IFEU.IMPACT: BRN (Brent)
schema
string · pathObligatorio
Tamaño de la velaohlcv-1d, ohlcv-1h, ohlcv-1m
start
string · query
Primer díaYYYY-MM-DDend − el rango máximo del schema
end
string · query
Último díaYYYY-MM-DDhoy (UTC)

Rango máximo por solicitud (end − start): ohlcv-1d 3650 d · ohlcv-1h 730 d · ohlcv-1m 31 d.

Ejemplo

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}, ...]

Respuesta

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

CampoTipoUnidadDescripción
tsstringISO en UTCHora de apertura de la vela
open / high / low / closefloatUSD (crudo: por barril; oro: por onza)Precios
volumeintcontratosVolumen
instrument_idint—Id del instrumento en el origen, tal como viene en la vela de la fuente

Errores

EstadoCuerpoCuándo
400{"error": "Invalid schema. Allowed: [...]"}Schema no válido
400{"error": "Invalid dataset/symbol combination"}Par no válido
400{"error": "Invalid date format. Use YYYY-MM-DD"}Fecha mal formada
400{"error": "date_range_too_large", "message": "...", "max_days": <n>}Rango por encima del máximo
404mensaje de errorSin datos

Notas

  • Las ~4 horas más recientes no están disponibles.
  • Para un historial largo de ohlcv-1m, haga solicitudes en tramos de ≤ 31 días y concaténelos (un tramo tarda unos segundos).

Calendario económico

GET/studio/market/anue/economic_calendar
Acceso
Any valid key
Límite de uso
100 solicitudes / min por cuenta
Datos desde
Ventana móvil: aproximadamente desde el último mes hasta las próximas semanas
Actualización
Caché del servidor de 5 min

Parámetros

Todos opcionales; sin filtros se devuelve todo el feed (~1,400 filas), así que siempre conviene filtrar.

NombreDescripciónValores permitidosPredeterminado
start
string · query
Eventos en esta fecha o posterioresYYYY-MM-DD (fecha de Taipéi)sin límite inferior
end
string · query
Eventos en esta fecha o anterioresYYYY-MM-DD (fecha de Taipéi)sin límite superior
country
string · query
Filtro por paísCódigos ISO-2 separados por comas, sin distinguir mayúsculas de minúsculas — p. ej. US,CN,TWtodos los países
max_priority
int · query
Conserva priority <= max_priority. 1 es lo más importante, así que solo eventos grandes = max_priority=11 / 2 / 3todas las prioridades
limit
int · query
Ordena por hora del evento y luego conserva los N primeros≥ 1sin límite
lang
string · query
Idioma de visualización de countryName / subject; los nombres que faltan en la tabla de correspondencias del servidor quedan tal cual, por lo que en devuelve una mezcla de zh/enen / zhen

Ejemplo

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}, ...]

Respuesta

Un array JSON sin envoltorio (no va dentro de {"data": ...}). El orden es el del propio feed salvo que se indique limit (entonces se ordena por startDate, time).

CampoTipoUnidadDescripción
startDateintsegundos epochFecha de calendario del evento en Taipéi
timestring | nullHH:MM en hora de TaipéiHora de publicación; null si no se ha publicado
countryIdstringISO-2Código de país
countryNamestring—Nombre del país (según lang)
subjectstring—Nombre del indicador (según lang)
subjectTitlestring—Etiqueta del periodo, p. ej. <7月>, <2季>
predictnumber | nullunitConsenso del mercado
lastnumber | nullunitValor anterior
realnumber | nullunitDato real; null hasta su publicación
unitstring—e.g. %, point, 億USD
priorityint1–31 = lo más importante (nóminas no agrícolas, decisiones de tipos de interés), 3 = lo menos (recuento de plataformas de perforación)

Una respuesta real incluía estos campos adicionales, transmitidos tal cual desde el feed de origen. Solo se indica lo observado; no debe interpretarse nada más allá de eso.

CampoTipoObservado
idintId del evento en el origen, p. ej. 79382
dateintSegundos epoch del periodo al que se refiere el dato, no de la publicación — las filas con subjectTitle: "<9月>" llevaban date = 2026-09-01 mientras que startDate era 2026-09-23
dateUnitstringmonth
typeint2
areaIdstring"4"
placestring | nullnull
correctnumber | nullnull
correctMarkstring"N"

Errores

EstadoCuerpoCuándo
400{"error": "Invalid date format. Use YYYY-MM-DD"}start / end mal formados
400{"error": "max_priority must be an integer"}max_priority no entero
400{"error": "limit must be an integer"} / {"error": "limit must be >= 1"}limit no válido
429{"error_code": "ERR429", "message": "User rate limit exceeded"}Más de 100 solicitudes / min

Notas

  • Un rango fuera de la ventana móvil devuelve 200 con [] — eso significa «sin cobertura», no «sin eventos programados».
  • Con start / end definidos, se descartan los eventos sin fecha; con max_priority definido, se descartan los eventos sin prioridad.
  • Esta es la única fuente para los eventos macro y sus cifras — nunca debe sustituirse por una búsqueda web o por un valor recordado. Los sitios agregadores de calendarios contienen tablas erróneas (uno mostraba un dato real ya publicado como si fuera el consenso), y los campos que una página no cubre acaban rellenándose con datos de entrenamiento — un valor anterior, que tiene exactamente una respuesta correcta, se ha escrito mal de esta forma. Si este endpoint no puede responder, hay que decirlo.
  • La ventana es móvil — aproximadamente el último mes más las próximas semanas —, no un archivo histórico.
  • real se rellena después de la publicación.