API de Metric Export
La API de Metric Export entrega cualquier métrica de tus plantas como serie temporal, en CSV o JSON, con una sola solicitud GET. Lee la misma colección de métricas que los informes, incluidas las métricas que tu organización ha definido.
Cada enlace que muestra la página Exportación de datos es una llamada a esta API, así que la forma más fácil de llegar a una solicitud que funcione es construirla allí y copiarla.
Abrir en Mirox
Exportación de datos ▸ Métricas para una selección libre, Exportación de datos ▸ Constructor de API para una plantilla. Ambas muestran el enlace de lo que has seleccionado.
Los enlaces de exportación de la exportación anterior siguen funcionando sin cambios. Se describen en la API de exportación heredada; cómo pasar de una a otra está en la guía de migración.
Rutas
Todas las rutas siguen a https://service.mirox.io/api.
| Ruta | Respuesta | Propósito |
|---|---|---|
GET /v1/export/series | CSV, o JSON con format=json | Exportar métricas como serie temporal |
GET /v1/export/series/estimate | JSON | Tamaño y duración de una exportación, sin leer datos |
GET /v1/export/series/catalog | JSON, o un glosario CSV con format=csv | Las métricas que puedes exportar |
GET /v1/export/series/lanes | JSON | Los componentes de una planta |
GET /v1/export/series/template/{template_uid} | CSV, o JSON con format=json | Exportar una plantilla |
POST /v1/export/template/{template_uid}/convert | JSON | Convertir una plantilla heredada |
Autenticación
Envía un token de API del grupo Metric Export en el encabezado Authorization:
Authorization: Bearer YOUR_API_TOKEN
El token lee todas las rutas de exportación de esta página y las rutas heredadas. No puede crear, modificar ni eliminar nada. En un navegador en el que has iniciado sesión en Mirox, los enlaces funcionan sin token.
Solo recibes datos de las plantas cuyas mediciones puedes leer. Las métricas de tu organización las exportan todos los roles de organización excepto Externo. Consulta Quién puede exportar qué.
Las métricas se seleccionan por id; una consulta se limita a la planta
Una exportación nombra las métricas por su id. Mirox resuelve cada id en su propia consulta, limitada a la planta. Las métricas de tu organización son entradas validadas de la colección que se limitan a la planta de la misma manera. El único texto de consulta que puede enviar quien llama es una expresión MetricsQL en expr: se ejecuta solo en las plantas de la solicitud, con la planta añadida a cada selector, y se rechaza si nombra por sí misma una planta, un parque o una organización.
Exportar una serie temporal
GET /v1/export/series
Inyección a red de una planta durante el mes anterior, por día:
curl --compressed "https://service.mirox.io/api/v1/export/series?park=ABC123DEF456&metrics=plant.grid_feedin&window=previous_month&step=day" \
-H "Authorization: Bearer YOUR_API_TOKEN" -o feedin.csv
Date;Grid feed-in (kWh)
2026-08-01;5321,4
2026-08-02;4980,2
...
Parámetros
| Parámetro | Valores | Predeterminado | Significado |
|---|---|---|---|
metrics | de 1 a 20 ids de métrica, separados por comas | obligatorio salvo que se indique expr | Las columnas, en este orden. Consulta Métricas y valores. |
expr | una expresión MetricsQL, repetible hasta 5 veces | — | Consultas en bruto de la base de datos de series temporales, un juego de columnas cada una, después de las métricas. Consulta Consultas MetricsQL en bruto. |
park | UIDs de planta, separados por comas | — | Las plantas. park o portfolio es obligatorio. |
portfolio | UIDs de portfolio, separados por comas | — | Todas las plantas de estos portfolios, además de park. Como máximo 50 plantas en total. |
start, end | fecha o fecha con hora | — | Un periodo libre. Consulta Periodo. |
year, quarter, month, week, day | números | — | Un periodo de calendario. |
window | periodo predefinido | previous_month | Un periodo con nombre. |
step | auto, 1min, 5min, 15min, 1h, day, week, month, quarter, year | auto | La duración de una fila. Consulta Pasos. |
mismatch | refuse, sparse | refuse | Qué ocurre con una métrica que no ofrece el paso: rechazar la solicitud o exportarla con su propio paso. Consulta Métricas con distintos pasos. |
values | auto, delta, cumulative, native | auto | El modo de valores de todas las métricas. |
tz | local, utc | local | El calendario de las filas. Consulta Rejilla de tiempo. |
multi_park_agg | merge, split | merge | Varias plantas combinadas, o una columna por planta. Consulta Varias plantas. |
components | hasta 100 referencias de componente, separadas por comas | todos | Restringe las métricas de componentes a estos componentes. Consulta Componentes. |
lane_limit | de 1 a 100 | 50 | Componentes por métrica y página. |
lane_page | de 1 en adelante | 1 | La página de componentes. |
format | csv, json | csv | El formato de la respuesta. |
language | en, de, es, fr, it, pt | en | El idioma de los nombres de columna. |
separator_csv | , ; tabulador | | ; | El separador de columnas. |
separator_decimal | . , | , | El separador decimal. Debe ser distinto de separator_csv. |
datetime_format | patrón strftime, hasta 64 caracteres | según el paso | El formato de la columna de tiempo. |
header | name, id | name | Encabezados de columna como nombres o como ids. Consulta Respuesta CSV. |
empty | blank, zero | blank | Un valor ausente como celda vacía o como 0. |
offset_column | true, false | true | La columna Desfase UTC. Solo aparece con pasos más cortos que un día en la hora local de la planta. |
precision | display, full | display | Valores redondeados a los decimales de la métrica, o sin redondear. |
lane_limit y lane_page fuera de sus límites se ajustan al límite más cercano. Un parámetro que la ruta no conoce se ignora.
Métricas y valores
Un id de métrica tiene la forma <prefijo>.<nombre>, por ejemplo plant.grid_feedin, inverter.ac_power o sensor.irradiance. Una métrica de tu organización es organization.<id de la métrica>. El catálogo las enumera todas.
Cada métrica tiene una magnitud, que decide los modos de valores que ofrece:
values | Una fila muestra | Se aplica a |
|---|---|---|
delta | la cantidad dentro del intervalo | solo energía |
cumulative | el total acumulado desde el inicio del periodo | energía y otras magnitudes contadas |
native | el valor tal como lo entrega la métrica | todas las métricas |
auto | delta para energía, native para todo lo demás |
Un sufijo fija el modo de una métrica y prevalece sobre values:
metrics=plant.grid_feedin:cumulative,plant.grid_power
Un modo que no se aplica a una métrica nunca es un error. La métrica se exporta como native, y la nota value_mode_ignored lo indica. delta nunca se aplica a una potencia.
La misma métrica en dos modos da dos columnas. La misma métrica dos veces en el mismo modo da una.
Energía por intervalo por debajo de 15 minutos
Un contador cuenta la energía en escalones enteros. Con 1min o 5min, una energía en modo delta salta por tanto entre cero y un escalón. La exportación la entrega y añade la nota energy_delta_fine_step, que nombra la métrica de potencia correspondiente cuando la colección tiene una. Para una curva usa la métrica de potencia; para energía usa 15min o más.
Periodo
Indica el periodo de una de tres formas. Dos formas en una misma solicitud responden 400 window_conflict.
| Forma | Parámetros | Ejemplo |
|---|---|---|
| Periodo libre | start, end | start=2026-07-01&end=2026-07-31 |
| Calendario | year con quarter, month, week o day | year=2026&quarter=2 |
| Periodo predefinido | window | window=previous_week |
Periodo libre. start y end son una fecha (2026-07-01) o una fecha con hora (2026-07-01T06:00, 2026-07-01T06:00:00Z, 2026-07-01T06:00:00+02:00). Un valor sin zona horaria se lee en la zona horaria de las filas. Un end que es una fecha incluye ese día; un end con hora es el momento en que termina el periodo. Sin end, el periodo termina ahora. end solo, sin start, se rechaza.
Calendario. year de 2020 a 2100, quarter de 1 a 4, month de 1 a 12, week de 1 a 53 (semana ISO), day de 1 a 31. day necesita month. Sin year, se entiende el año en curso. day prevalece sobre week, week sobre month, month sobre quarter.
Periodos predefinidos. today, yesterday, last_7_days, last_30_days, this_week, previous_week, this_month, previous_month, this_quarter, previous_quarter, this_year, previous_year. Los periodos this_ llegan hasta ahora; last_7_days y last_30_days son móviles hasta ahora con pasos inferiores a un día (la misma hora 7 o 30 días atrás); desde day son los últimos 7 o 30 días locales incluido hoy. Desde day cada ventana se amplía a días completos (semanas, meses …) en la zona horaria de la planta, y la respuesta devuelve la ventana efectiva.
Un periodo empieza como muy pronto en 2020 y abarca como máximo 1827 días (cinco años). Un periodo que llega al futuro termina ahora, con la nota end_clamped.
Pasos
step=auto elige un paso que ofrezcan todas las métricas solicitadas y que encaje con los límites: 15min hasta dos días, 1h hasta 62 días, day hasta tres años, month a partir de ahí. Si ese paso no encaja, se prueba el siguiente más grueso y después los más finos. La nota step_auto y el encabezado X-Mirox-Step nombran el paso elegido.
Cada métrica ofrece sus propios pasos. El catálogo los enumera como export_steps:
| Tipo de métrica | Pasos |
|---|---|
| Energía de un contador que cuenta cada minuto | de 1min a year |
| Energía contada con menor frecuencia: aerogeneradores, limitación liquidada | de 15min a year |
| Potencia (W, var, VA, W/m²), tensión, corriente, frecuencia | 1min, 5min, 15min |
| Temperatura, estado de carga y otros niveles medidos | del intervalo de medición a year |
| Estados de funcionamiento y códigos de estado | 15min |
| Performance ratio | day, week, month, quarter, year |
| Disponibilidad | 15min, 1h, day, week, month, quarter, year |
| Métricas de tu organización | de su resolución más fina a year, nunca más fino que 15min |
La potencia se ofrece solo con 15 minutos o más fino. Una potencia diaria o mensual es un promedio que oculta lo que ocurrió; la métrica de energía da la cifra que se busca.
Un paso nunca se cambia en silencio. Con mismatch=refuse, el valor predeterminado, un paso que una de las métricas no ofrece responde 400 step_not_served con los pasos de cada métrica, y con step=auto las métricas que no comparten ningún paso responden 400 no_common_step. Con mismatch=sparse, esa solicitud se entrega igualmente: consulta Métricas con distintos pasos.
Los pasos de un día o más cubren intervalos completos. Un periodo que empieza o termina dentro de uno de ellos se amplía hacia fuera, con la nota window_aligned. Las semanas empiezan el lunes.
Métricas con distintos pasos
mismatch=sparse entrega una solicitud cuyas métricas no ofrecen todas el paso, siempre que cada una ofrezca algún paso. La cuadrícula del archivo es el paso solicitado; con step=auto es el paso que más métricas ofrecen tal cual, elegido por el periodo y los límites como de costumbre. Las posiciones de las columnas y la forma de la respuesta CSV y JSON no cambian.
| La métrica ofrece | Qué hace la exportación | Nota |
|---|---|---|
| solo pasos más finos | La lee con el más grueso de ellos y la agrega a la cuadrícula según la regla de su magnitud: una energía se suma, una lectura se promedia, un ratio se recalcula a partir de sus dos mitades, un estado conserva su último código. | step_folded con el step leído |
| solo pasos más gruesos | La lee con el más fino de ellos y escribe cada valor en la fila en la que empieza su propio intervalo: la cifra de un día en la fila de su medianoche local, la de un mes en la fila de su primer día. Las filas intermedias quedan vacías. | step_sparse con ese step |
| un paso más grueso, pero ninguno de sus intervalos empieza en una fila | La columna queda vacía, por ejemplo una cifra diaria en un archivo que empieza a las 06:00. | metric_unavailable con reason off_grid |
Dos casos se rechazan en ambos modos con 400 step_not_served: una cifra por mes, trimestre o año en un archivo por week, porque su primer día casi nunca es lunes; y una cifra mensual como el Marktwert en un archivo por quarter o year, porque una suma o un promedio de meses no es esa cifra. En un archivo por month se lee tal cual; en uno más fino queda dispersa.
La estimación enumera las mismas notas, cuenta las lecturas con el paso propio de cada métrica y marca un paso en per_step como dentro del límite aunque no todas las métricas lo ofrezcan. La página Exportación de datos pregunta siempre con mismatch=sparse; una plantilla lleva su propio mismatch en su spec.
Rejilla de tiempo
Con tz=local, las filas siguen la hora local de la planta, incluido el horario de verano: un día es un día local de 23, 24 o 25 horas, un mes es un mes local. Con tz=utc, las filas siguen el calendario UTC.
- Con pasos más cortos que un día en hora local, la columna Desfase UTC sigue a la columna de tiempo (
+02:00). El día en que los relojes se atrasan, una hora aparece dos veces; el desfase distingue una de otra.offset_column=falseomite la columna. - Las plantas en zonas horarias distintas comparten una sola columna de tiempo. Una solicitud así se responde en el calendario UTC, con la nota
merged_on_utc, tanto si las plantas se combinan como si se separan. - Con
tz=utcy un paso de un día o más, una métrica que solo existe por día local no tiene valor UTC. Su columna queda vacía, con la notautc_calendar_unsupported.
El encabezado X-Mirox-Grid nombra el calendario que se usó: local:Europe/Berlin o utc.
Varias plantas
Con multi_park_agg=merge, cada métrica es una columna para todas las plantas, combinada según la regla de la métrica. El catálogo enumera la regla como merge:
merge | Valor combinado | Métricas |
|---|---|---|
sum | sumado sobre las plantas | energía, magnitudes contadas, potencia |
mean | promediado sobre las plantas | irradiancia, temperatura, estado de carga y otros niveles |
pair_ratio | recalculado a partir de los totales de las plantas | performance ratio, disponibilidad y otros ratios |
first | el valor común | precios, cuando todas las plantas están en una misma zona de mercado |
split_only | no se puede combinar | estados y códigos de estado |
Una métrica que no se puede combinar se exporta por planta, con la nota merge_not_meaningful. Esto vale también para un ratio con un paso en el que sus dos mitades no están disponibles, y para los precios de plantas en zonas de mercado distintas.
Con multi_park_agg=split, cada métrica es una columna por planta. Con una única planta, ambas dan el mismo archivo.
Las métricas de componentes son siempre por planta (nota components_split_by_park).
Componentes
Una métrica de un nivel de componente da una columna por componente. Los niveles son inverter, gak (caja de conexión), string, turbine, sensor, meter, battery_box (contenedor), battery_storage (rack), battery_module, battery_cell y battery_pcs (convertidor).
Sin components, la exportación lleva todos los componentes visibles de las plantas, lane_limit por métrica y página. Si hay más, la nota lanes_truncated nombra el total; solicita la página siguiente con lane_page.
components restringe la exportación a los componentes que nombras. Una referencia tiene la forma <nivel>:<id>, por ejemplo inverter:1043. Un sensor o contador que Mirox mide pero que no tiene entrada en los componentes de la planta tiene una referencia de la forma sensor:h3f9c2a71b04e6d5. La ruta de componentes enumera las referencias de una planta. Una referencia que no pertenece a ninguna de las plantas seleccionadas responde 400 unknown_lane.
metrics=inverter.ac_power&components=inverter:1043,inverter:1044
Consultas MetricsQL en bruto
expr añade a una exportación una consulta en bruto en MetricsQL, el lenguaje de consulta de la base de datos de series temporales de la plataforma, para una serie para la que la colección no tiene métrica. El parámetro puede repetirse hasta cinco veces; cada expresión puede tener hasta 4 000 caracteres. Una solicitud puede llevar solo expr, o metrics y expr juntos; las columnas de las métricas van primero.
expr=sum by (inverter_id) (powerplant_inverter_power_ac)&park=ABC123DEF456&window=yesterday&step=15min
Una expresión se evalúa por planta, como la evalúa un panel: sobre los datos de la propia planta, con el paso solicitado, como muestras brutas. Se admite cualquier paso, y values y las reglas de agregación de las métricas no se aplican. Mirox añade la planta a cada selector de la expresión; una expresión que nombra por sí misma una etiqueta park, organization o plant se rechaza con 400 expr_forbidden_label.
| Caso | header=name | header=id |
|---|---|---|
| Una serie por planta | MetricsQL sum by (inverter_id) (powerplant_inverter_power_ac) | expr1 |
| Varias series en alguna planta | el encabezado seguido del name{labels} propio de cada serie | expr1{inverter_id="INV1"} |
| Varias plantas | el nombre de la planta delante, como en cualquier columna | ABC123DEF456/expr1 |
Cuando una expresión responde varias series en alguna de sus plantas, las columnas de esa expresión en todas las plantas llevan las etiquetas de serie, de modo que un archivo tiene una sola forma de nombrar cada expresión. Un encabezado de más de 1 000 caracteres se corta con … dentro de la expresión, nunca en el texto de la serie. En la respuesta JSON, columns[].key es el texto de header=id y columns[].metric es el id de la expresión, expr.e1, expr.e2, …, que usan las notas y los rechazos. Una planta en la que la expresión no responde nada conserva una columna vacía, con la nota expr_no_series; con varias plantas, cada planta recibe sus propias columnas, con la nota expr_split_by_park.
Una expresión puede responder como máximo 500 series en una planta (400 expr_too_many_series); agrégala, por ejemplo con sum by (…). Las series cuentan para las mismas 400 columnas y 1 800 000 valores que cualquier exportación: la primera lectura de cada expresión en cada planta es una breve sonda, las anchuras se suman en toda la solicitud y una solicitud que supera los límites se rechaza con 400 over_budget y params.series antes de leer por completo ninguna expresión. Una expresión que no se puede analizar, está vacía, es demasiado larga o que la base de datos rechaza responde 400 expr_invalid con el reason.
La estimación cuenta una expresión como una columna por planta, porque sus series solo se conocen al leerla. Las expresiones no se guardan en las plantillas.
Respuesta CSV
La respuesta es UTF-8, con el nombre de archivo series_export_<primer día>_<último día>_<paso>.csv. Una respuesta de más de 1 MB aproximadamente se comprime cuando la solicitud lleva Accept-Encoding: gzip (curl: --compressed).
Las columnas son, en este orden: el tiempo, el Desfase UTC cuando corresponde, y después las métricas en el orden de metrics.
| Caso | header=name | header=id |
|---|---|---|
| Tiempo | Date | timestamp |
| Desfase UTC | UTC offset | utc_offset |
| Una planta, o plantas combinadas | Grid feed-in (kWh) | plant.grid_feedin |
| Plantas separadas | Sunnyside - Grid feed-in (kWh) | ABC123DEF456/plant.grid_feedin |
| Componente | WR 01.01 - AC power per inverter (W) | ABC123DEF456/inverter:1043/inverter.ac_power |
| Componente, varias plantas | Sunnyside - WR 01.01 - AC power per inverter (W) | ABC123DEF456/inverter:1043/inverter.ac_power |
| Métrica con variantes, como tres fases | el nombre seguido de la variante | el id seguido de #<variante> |
| Una métrica en dos modos de valores | el mismo nombre dos veces | plant.grid_feedin:delta, plant.grid_feedin:cumulative |
| Consulta MetricsQL en bruto | MetricsQL <expresión>, seguido de las etiquetas de serie cuando hay varias | expr1, expr1{inverter_id="INV1"}: consulta Consultas MetricsQL en bruto |
Usa header=id en scripts y libros de Excel
Los nombres están hechos para personas: siguen a language y cambian cuando una métrica cambia de nombre. Los ids son estables. Un script o un libro de Excel que busca sus columnas por el encabezado debería solicitar header=id. En una plantilla puedes además dar a cada columna un texto de encabezado propio.
La columna de tiempo se formatea según el paso, salvo que se indique datetime_format:
| Paso | Formato | Ejemplo |
|---|---|---|
1min, 5min, 15min, 1h | %Y-%m-%d %H:%M | 2026-08-01 06:15 |
day, week | %Y-%m-%d | 2026-08-01 |
month, quarter, year | %Y-%m | 2026-08 |
Cada fila lleva la marca del inicio de su intervalo. Un valor ausente es una celda vacía, de modo que «sin datos» y «cero» se pueden distinguir; empty=zero escribe 0 en su lugar.
Cuatro encabezados de la respuesta repiten lo que se resolvió:
| Encabezado | Contenido | Ejemplo |
|---|---|---|
X-Mirox-Step | el paso | day |
X-Mirox-Grid | el calendario | local:Europe/Berlin |
X-Mirox-Window | inicio y fin del periodo exportado | 2026-08-01T00:00:00+02:00/2026-09-01T00:00:00+02:00 |
X-Mirox-Notes | las notas, separadas por ; | step_auto:step=day |
Respuesta JSON
format=json responde la misma tabla como datos estructurados:
| Campo | Contenido |
|---|---|
window | start, end, grid, tz_name, step, y aligned cuando el periodo se amplió |
parks | las plantas exportadas con uid, name y timezone |
buckets | las filas: start como hora con desfase, ts como segundos Unix |
columns | una entrada por columna: key (el texto de header=id), metric, name, unit, digits, quantity, values_mode, merge, park_uid, lane (ref, level, title), variant, y values en el orden de buckets; un valor ausente es null |
notes | las notas con code, metric y params |
lanes_total | componentes por métrica de componentes, antes de paginar |
lane_page, lane_limit | la página que se entregó |
totals | values, queries y duration_ms de la exportación |
Notas
Una nota te dice qué ha hecho Mirox por su cuenta. Nunca hace fallar una exportación. Las notas forman parte de la respuesta JSON y del encabezado X-Mirox-Notes. El encabezado contiene hasta 1 KB de notas, escritas como code:key=value,key=value y separadas por ;. Si no caben todas, el encabezado termina con notes_omitted:count=<n>; la respuesta JSON las contiene todas.
| Nota | Significado |
|---|---|
parks_dropped | Se omitieron plantas que nombraste pero no puedes leer. uids las nombra. |
grant_required | Una métrica monetaria queda vacía para una planta en la que te falta el permiso de contabilidad. |
value_mode_ignored | El modo de valores solicitado no se aplica a la métrica; se exportó como native. |
energy_delta_fine_step | Una energía por intervalo con un paso inferior a 15 minutos muestra escalones del contador. twin nombra la métrica de potencia correspondiente. |
legacy_id_mapped | Se tradujo un id de la exportación anterior. from, to y exactness indican cómo. |
merge_not_meaningful | La métrica no se puede combinar entre plantas y se muestra por planta. |
components_split_by_park | Las métricas de componentes se muestran por planta. |
merged_on_utc | Las plantas están en zonas horarias distintas; las filas están en UTC. |
utc_calendar_unsupported | La métrica no tiene valor en el calendario UTC; su columna está vacía. |
window_aligned | El periodo se amplió a intervalos completos. start y end dan el resultado. |
end_clamped | El periodo llegaba al futuro y termina ahora. |
step_auto | El paso que eligió auto. |
step_folded | Con mismatch=sparse: la métrica se leyó con un step más fino y se agregó a la cuadrícula. |
step_sparse | Con mismatch=sparse: la métrica tiene un valor por step, en la primera fila de cada uno de sus intervalos. |
lanes_truncated | La métrica tiene más componentes de los que caben en la página. total, page y limit indican dónde estás. |
lanes_unpaged | Las series medidas sin entrada en los componentes de la planta se exportaron tal como se miden. |
metric_unavailable | La métrica no tiene valores para una planta; la columna está vacía. reason es planned, not_applicable, no_data_source, draft, deleted, unknown_lane, off_grid o, en una plantilla, not_permitted. |
expr_no_series | Una consulta en bruto no respondió ninguna serie en una planta; su columna está vacía. |
expr_split_by_park | Las consultas en bruto se leen por planta y reciben un juego de columnas por planta. |
provider_note | Una observación de la propia métrica, por ejemplo qué fuente respondió. |
Una columna vacía siempre se conserva. Una métrica que no se aplica a una de las plantas, o una métrica monetaria sin el permiso de contabilidad, deja su columna en su sitio, de modo que las posiciones de las demás columnas nunca se mueven.
Estimar antes de exportar
GET /v1/export/series/estimate
La ruta acepta los parámetros de la exportación, sin el formato de archivo, y responde lo que sería la exportación, sin leer datos y sin contar para el cupo por hora.
| Campo | Contenido |
|---|---|
step, grid, window | en qué se resuelve la solicitud |
parks, columns, rows, values, queries | el tamaño |
bytes_csv, seconds_estimate | tamaño aproximado del archivo y duración |
within_budget | si la exportación se entregaría |
preview_ok | si es lo bastante pequeña para la vista previa de la aplicación (200 000 valores) |
limits | los límites vigentes |
per_step | para cada paso: served_by_all, values, within_budget, y el reason si no |
refusals | cada error que respondería la exportación, con code, params y hint |
notes | las notas que llevaría la exportación |
Un rechazo nunca hace fallar la estimación: responde 200 y enumera el rechazo. La estimación cuenta, no genera nada: las etiquetas de fila y los encabezados son los de la exportación. Una consulta en bruto cuenta como una columna por planta, y con mismatch=sparse las notas nombran las columnas agregadas y dispersas.
El catálogo de métricas
GET /v1/export/series/catalog
| Parámetro | Valores | Predeterminado | Significado |
|---|---|---|---|
park, portfolio | UIDs | — | Las plantas frente a las que se evalúan las métricas. Sin plantas, se enumera toda la colección. |
language | en, de, es, fr, it, pt | en | El idioma de los nombres y las descripciones. |
level | un nivel | todos | Solo un nivel. |
quantity | energy, amount, rate, level, ratio, state, price | todas | Solo una magnitud. |
search | texto, hasta 100 caracteres | — | Busca en el nombre, la descripción, la unidad, el id y los ids de la exportación anterior. |
include_unavailable | true, false | true | Enumera también las métricas que no se pueden exportar para las plantas seleccionadas. |
page, limit | números, limit hasta 100 | 1, 100 | Paginación. |
sort | order, name, id, level, con - delante para orden descendente | order | El orden de la lista. |
format | json, csv | json | csv responde el glosario. |
Cada métrica lleva, junto a su id, nombre, descripción, unidad y nivel:
| Campo | Contenido |
|---|---|
quantity | qué es la cifra: energy, amount (otra magnitud contada), rate (potencia), level, ratio, state o price |
value_modes, default_value_mode | los modos de valores que ofrece, y el que elige auto |
export_steps | los pasos que ofrece |
native_step_seconds | con qué frecuencia se mide |
merge | cómo se combinan varias plantas |
twin_item_id | para una métrica de energía, su métrica de potencia |
lane_level | para una métrica de componentes, el nivel de sus componentes |
legacy_ids | los ids de la exportación anterior por los que responde |
applies_parks | en cuántas de las plantas seleccionadas se aplica |
exportable, export_reason | si se puede exportar, y si no por qué: draft, planned, grant_required, not_applicable o no_source |
Con hasta 10 plantas, se comprueba en cada planta el equipamiento que necesita una métrica. Por encima de esa cifra, las plantas se evalúan solo por su tipo; lo que le falta a una planta concreta se muestra en el momento de exportar como una nota metric_unavailable.
Glosario. format=csv responde toda la lista filtrada como archivo, metric_catalog_<idioma>.csv, con las columnas id, nivel, nombre, unidad, descripción, magnitud, modos de valores, pasos, intervalo de medición, combinación entre plantas, nota e ids anteriores. page y limit no se aplican.
curl "https://service.mirox.io/api/v1/export/series/catalog?format=csv&language=en" \
-H "Authorization: Bearer YOUR_API_TOKEN" -o metric_catalog_en.csv
Métricas disponibles
La colección está ordenada por nivel. El prefijo de un id indica a dónde pertenece una métrica.
| Nivel | level | Prefijo del id | Qué contiene |
|---|---|---|---|
| Planta · medida | plant | plant. | Lo que mide la propia planta: el contador de red, las sumas de los inversores, los sensores del emplazamiento, los límites de potencia que se le impusieron. |
| Planta · referencia | plant_reference | plant. | Lo que la planta debería haber hecho: irradiación en el plano de los módulos, producción esperada, performance ratio, producción específica, pérdidas. |
| Planta · compensación | plant_compensation | plant. | Limitación y pérdidas por limitación como energía y potencia, por destinatario y método. |
| Métricas | metrics | availability., organization. | Cifras de disponibilidad, horas de sol y las métricas de tu organización. |
| Inversor | inverter | inverter. | Una columna por inversor. |
| Caja de conexión | gak | gak. | Una columna por caja de conexión. |
| String | string | string. | Una columna por string. |
| Batería | battery | battery. | El almacenamiento en conjunto: energía, potencia, estado de carga, consignas. |
| Contenedor de baterías | battery_box | battery_box. | Una columna por contenedor. |
| Rack de baterías | battery_storage | battery_storage. | Una columna por rack. |
| Módulo de batería | battery_module | battery_module. | Una columna por módulo. |
| Celda de batería | battery_cell | battery_cell. | Una columna por celda o punto de medida. |
| Convertidor de batería (PCS) | battery_pcs | battery_pcs. | Una columna por convertidor. |
| Aerogenerador | turbine | turbine. | Una columna por aerogenerador. |
| Sensor | sensor | sensor. | Una columna por sensor: irradiancia, irradiación, temperatura, humedad, viento. |
| Contador | meter | meter. | Una columna por contador de energía. |
| Infraestructura | infrastructure | infrastructure. | La ruta de los datos y el emplazamiento: completitud, estado de los loggers, red, alarmas, conexiones de control. |
| Meteorología | weather | weather. | Meteorología en el emplazamiento, incluidos viento y temperatura a 80, 120 y 180 m. |
| Mercado | market | market. | Precios y valores de mercado. |
| Finanzas de la planta | financial | financial. | Importes monetarios de la planta. Necesitan el permiso de contabilidad. |
La lista completa con nombres, unidades y descripciones en tu idioma es el catálogo, el archivo de glosario o Explicaciones en la pestaña Métricas. Los valores de previsión meteorológica de la exportación anterior no forman parte de la colección; consulta la guía de migración.
Componentes de una planta
GET /v1/export/series/lanes
| Parámetro | Valores | Predeterminado | Significado |
|---|---|---|---|
park | un UID de planta | obligatorio | La planta. |
level | un nivel de componente | obligatorio | Consulta Componentes. |
metric | un id de métrica | — | Para sensores y contadores: enumera los que entregaron esta métrica en los últimos 30 días. |
search | texto | — | Busca en los nombres. |
include_hidden | true, false | false | Enumera también los componentes ocultos. |
page, limit | números, limit hasta 100 | 1, 50 | Paginación. |
sort | order, name, con - delante para orden descendente | order | order es el orden de las columnas en la exportación. |
Cada entrada tiene la referencia ref para el parámetro components, el name, el level, el elemento superior (parent_ref, parent_name — el inversor de un string, por ejemplo), attributes (role de un contador, position de un sensor de irradiancia, vendor), hidden, y source: db para una entrada de los componentes de la planta, store para una serie que se mide pero no tiene tal entrada.
Una planta que no existe y una planta que no puedes leer responden ambas 404 park_not_found.
Sistema de plantillas
Una plantilla es una lista guardada de métricas con valores predeterminados para el paso, el periodo, los valores, la zona horaria, la combinación de plantas, el tamaño de página de componentes y los encabezados de columna. Para qué sirven las plantillas, y cómo gestionarlas en la aplicación, está en la guía de Metric Export.
Exportar una plantilla
GET /v1/export/series/template/{template_uid}
La ruta acepta los parámetros de la exportación salvo metrics, components y values, que fija la plantilla. Cada parámetro que omites toma el valor predeterminado de la plantilla; cada parámetro que indicas prevalece sobre él.
curl --compressed "https://service.mirox.io/api/v1/export/series/template/CAFE1000CAFE?park=ABC123DEF456&window=previous_month&header=id" \
-H "Authorization: Bearer YOUR_API_TOKEN" -o standard.csv
- Una plantilla de otra organización responde
404 template_not_found. - Una plantilla heredada responde
400 template_is_legacy;params.legacy_urles el enlace que la exporta. - Una columna cuya métrica ya no está disponible se exporta vacía bajo su encabezado, con la nota
metric_unavailable. Lo mismo ocurre con una métrica de tu organización cuando exportas como Externo (reasonnot_permitted).
Plantillas del sistema
| Plantilla | UID | Paso | Periodo |
|---|---|---|---|
| Exportación estándar | CAFE1000CAFE | day | previous_month |
| Exportación ampliada | CAFE1001CAFE | day | previous_month |
| Exportación ampliada (disponibilidad de inversores) | CAFE1002CAFE | day | previous_month |
| Exportación de disponibilidad energética | CAFE1003CAFE | day | previous_month |
| Informe técnico | ABCD12340002 | day | previous_month |
| Aerogeneradores | CAFE1010CAFE | day | previous_month |
| Almacenamiento en baterías | CAFE1020CAFE | day | previous_month |
| Sensores de irradiancia | CAFE1030CAFE | 15min | yesterday |
Las cinco primeras suceden a CAFE0000CAFE, CAFE0001CAFE, CAFE0002CAFE, CAFE0003CAFE y ABCD12340001, que siguen funcionando en la ruta heredada. Sus columnas se enumeran en la guía de migración. Ofrecen los pasos day, week, month, quarter y year; las cuatro primeras ofrecen además 15min y 1h.
Gestionar plantillas
Las plantillas se enumeran, leen, crean, modifican y eliminan bajo /v1/export/template. La lectura funciona con un token Metric Export. La escritura necesita el rol de organización Administrador, Moderador, Gestor de activos (técnico) o Gestor de activos (comercial) y un inicio de sesión o un token Acceso completo.
| Solicitud | Propósito |
|---|---|
GET /v1/export/template | Enumerar plantillas. view=current enumera las plantillas del sistema de esta página y las plantillas de tu organización; view=legacy, el valor predeterminado, enumera las plantillas guardadas como antes; view=all enumera ambas. kind=series o kind=legacy filtra. |
GET /v1/export/template/{template_uid} | Leer una plantilla. |
POST /v1/export/template | Crear una plantilla con kind=series y el contenido en spec. Sin kind, la solicitud crea una plantilla heredada a partir de metric_ids, como antes. |
PUT /v1/export/template/{template_uid} | Cambiar el nombre, la descripción o spec. El tipo no puede cambiar. |
DELETE /v1/export/template/{template_uid} | Eliminar una plantilla. Las plantillas del sistema no se pueden modificar ni eliminar. |
El spec de una plantilla:
| Campo | Valores | Predeterminado |
|---|---|---|
items | de 1 a 40 entradas, cada una con metric y, opcionalmente, values y label | obligatorio |
step | un paso | auto |
values | un modo de valores | auto |
tz | local, utc | local |
window | un periodo predefinido | previous_month |
multi_park_agg | merge, split | merge |
lane_limit | de 1 a 100 | 50 |
header | name, id | name |
mismatch | refuse, sparse | refuse |
label es el texto de encabezado de la columna con header=name. Una métrica puede aparecer una sola vez, y una plantilla no contiene consultas en bruto. Cuando se guarda una plantilla, todas las métricas deben ser exportables y deben compartir un paso —con mismatch=sparse, cada una debe ofrecer algún paso—; de lo contrario la respuesta es 422 spec_invalid y params.problems nombra la métrica y el motivo. Una plantilla se ejecuta con su propio mismatch (la aplicación lo muestra como Métricas de otro paso: Estricto o Flexible); el parámetro del enlace de exportación tiene prioridad.
Convertir una plantilla heredada
POST /v1/export/template/{template_uid}/convert
| Campo | Valores | Significado |
|---|---|---|
name | hasta 100 caracteres | El nombre de la plantilla nueva. Predeterminado: el nombre de la plantilla heredada seguido de «(new)». |
dry_run | true, false | true responde la correspondencia sin crear nada. |
La respuesta enumera mapped (legacy_id, metric, values, exactness: exact o approximate) y unmapped (legacy_id, reason: formula, no_equivalent, report_value o instant, y hasta tres suggestions), y, salvo que fuera una simulación, la nueva template. Una simulación responde 200, una conversión 201.
La plantilla nueva exporta días durante el mes anterior. La plantilla heredada nunca se modifica. Dos columnas heredadas que leen el mismo contador se convierten en una sola columna. 422 nothing_to_convert significa que ninguna columna tiene equivalente, o que la plantilla no es una plantilla heredada.
Límites
Una exportación se responde dentro de una sola solicitud, así que su tamaño está acotado. Cada límite se comprueba antes de leer datos; una solicitud demasiado grande se rechaza de inmediato y te dice qué cabría.
| Límite | Valor |
|---|---|
| Métricas por solicitud | 20; en una plantilla 40 |
| Consultas MetricsQL en bruto por solicitud | 5, de 4 000 caracteres cada una, con como máximo 500 series por planta |
| Plantas por solicitud | 50 |
| Componentes por métrica y página | 50 de forma predeterminada, como máximo 100 |
| Columnas | 400 |
| Valores por columna | 180 000 — 125 días con 1min, 625 días con 5min, cinco años con 15min |
| Valores en total | 1 800 000 (filas × columnas) |
| Periodo | 1827 días |
| Lecturas del almacén de mediciones por solicitud | 1 500 |
| Duración | 50 segundos |
| Exportaciones por usuario y hora | 240 |
| Exportaciones en curso al mismo tiempo | 3 por organización |
Dividir una exportación grande
400 over_budget nombra en params lo que se necesitaba y lo que está permitido, y en hint la salida: step, el siguiente paso más grueso que cabe, y max_days, el periodo más largo que cabe con el paso solicitado. Consulta primero la estimación si construyes solicitudes en un script; su per_step enumera el tamaño para cada paso.
Si no quieres ni un paso más grueso ni un periodo más corto, divide la exportación:
| Dividir por | Cómo |
|---|---|
| Tiempo | Una solicitud por mes o trimestre. Usa los parámetros de calendario (year=2026&month=7) y une los archivos. |
| Planta | Una solicitud por planta o portfolio. |
| Métrica | Las métricas de componentes en solicitudes propias. Una métrica de componentes en una planta con 200 inversores son 200 columnas. |
| Página | lane_page=1, 2, … para los componentes de una métrica. |
Algunas métricas se calculan a partir de varias fuentes para cada día, sobre todo plant.production_reported (Producción, resuelta). Necesitan muchas más lecturas del almacén de mediciones que una lectura de contador, con cualquier paso. Una solicitud o una plantilla que lleva una métrica así alcanza actualmente unos nueve meses-planta: una planta durante nueve meses, o nueve plantas durante un mes. Un paso de una semana o más amplía el periodo a intervalos completos, y cuenta el periodo ampliado. Divide estas exportaciones por tiempo o por planta, o exporta la métrica en una solicitud propia.
429 busy y 429 rate_limited llevan el encabezado Retry-After con los segundos que hay que esperar.
Errores
Un error de las rutas de esta página tiene esta forma:
{
"detail": {
"code": "step_not_served",
"message": "The step is not served by every requested metric.",
"params": {"step": "1h", "metrics": {"plant.grid_power": ["1min", "5min", "15min"]}},
"hint": {"offered_common": ["1min", "5min", "15min"]}
}
}
code es estable y está pensado para programas. message es un texto en inglés para personas. params indica qué estaba mal, hint qué funcionaría.
| Estado | code | Significado | params y hint |
|---|---|---|---|
| 400 | scope_required | No se indicó ni park ni portfolio. | hint.example |
| 400 | unknown_metric | Un id de métrica no existe. | params.ids; hint.suggestions con ids parecidos |
| 400 | legacy_metric_id | Un id de la exportación anterior no tiene equivalente en la colección. | params.id, params.legacy_url; hint.reason, hint.closest, hint.pending, hint.legacy_url |
| 400 | metric_not_exportable | La métrica existe, pero no es una serie temporal que puedas exportar. | params.id, params.reason: draft, planned, no_source, events o master |
| 400 | window_conflict | El periodo se indicó de más de una forma. | params.families |
| 400 | window_invalid | El periodo no es válido. | params.reason: end_before_start, start_in_future, before_2020, too_long, day_requires_month, start_required o invalid_date |
| 400 | step_not_served | Una métrica no ofrece el paso solicitado. | params.metrics con los pasos de cada métrica; hint.offered_common |
| 400 | no_common_step | Las métricas no comparten ningún paso. | params.metrics; hint.split |
| 400 | over_budget | La exportación supera un límite. | params.values, limit, queries, query_limit, columns, column_limit, parks; con más de 50 plantas params.parks y park_limit; con una consulta en bruto params.series; hint.step, hint.max_days, hint.lane_limit, hint.reduce |
| 400 | unknown_lane | Una referencia de componente no pertenece a ninguna de las plantas. | params.refs |
| 400 | expr_invalid | Una consulta en bruto no se puede ejecutar. | params.expr, params.reason: empty, syntax (con detail), too_long, too_large, store (con el detail de la base de datos) o parser_unavailable |
| 400 | expr_forbidden_label | Una consulta en bruto nombra por sí misma una planta, un parque o una organización. | params.expr, params.labels |
| 400 | expr_too_many_series | Una consulta en bruto responde más de 500 series en una planta. | params.expr, params.park, params.series, params.limit; hint.reduce |
| 400 | separator_conflict | El separador de columnas y el separador decimal son iguales. | — |
| 400 | invalid_datetime_format | datetime_format no es un patrón válido. | hint.example |
| 400 | template_is_legacy | La plantilla es una plantilla heredada. | params.legacy_url |
| 403 | no_accessible_parks | No puedes leer ninguna de las plantas seleccionadas. | — |
| 403 | metric_forbidden | Se solicitó una métrica de tu organización con el rol de organización Externo. | params.ids |
| 404 | template_not_found, park_not_found | La plantilla o la planta no existe, o no puedes leerla. | — |
| 409 | name_conflict | Ya existe una plantilla con este nombre. | params.name |
| 422 | — | Un parámetro tiene un valor fuera de su lista, o metrics contiene más de 20 ids. | el campo y el motivo |
| 422 | spec_invalid, use_spec, nothing_to_convert | Una plantilla no se puede guardar o convertir tal como se envió. | params.problems |
| 429 | busy | Hay demasiadas exportaciones en curso. | encabezado Retry-After |
| 429 | rate_limited | El cupo por hora está agotado. | encabezado Retry-After |
| 502 | store_error | El almacén de mediciones respondió con un error. No se exportó nada; un valor nunca se sustituye por cero. | params.metric |
| 503 | store_timeout | El almacén de mediciones no respondió a tiempo. | hint.step con un paso más grueso |
401 significa que el token falta, ha caducado o se ha revocado.
Ids de la exportación anterior
El parámetro metrics acepta también los ids de la exportación anterior, como energy_grid_daily o raw_grid_power. Un id con equivalente se traduce a su métrica, en el modo de valores que más se acerca a la cifra anterior, y la nota legacy_id_mapped indica qué métrica respondió y si la cifra es la misma (exact) o la misma magnitud leída de una forma mejor (approximate).
Un id sin equivalente responde 400 legacy_metric_id. hint.reason indica el motivo, hint.closest nombra la métrica más cercana cuando la hay, hint.pending nombra la métrica prevista para sustituirlo, y legacy_url es el enlace de la exportación anterior que sigue entregando el id. Con más plantas de las que puede nombrar un enlace, legacy_url nombra la primera planta y params.legacy_url_scope es first. Un id de componente de un nivel de batería no tiene enlace de la exportación anterior; en ese caso hint.legacy_route es none. La guía de migración enumera todos los ids.
Excel y scripts
- Metric Export para Excel: recetas, y la conexión de Power Query con el encabezado
Authorization - Generador de informes externos: un ejemplo completo en Python
Funciones relacionadas
- Metric Export: la página Exportación de datos
- Migrar a Metric Export: ids antiguos, métricas nuevas y qué cambia
- API de exportación heredada: los enlaces de exportación anteriores
- Métricas: define métricas propias y expórtalas
- Tokens de API: crea el token Metric Export
- Descripción general de la API: la referencia interactiva de todas las rutas