Energie v1 / Piaţa de energie
Window summary
Price, consumption and production by source for an interval, gathered into a single response, with total energy computed from the interval powers.
GET
https://oneapi.ro/api/energie/v1/piata/sumar
Query parameters
NameTypeDescriptionAccepted values
de_laoptional
string | null
Start of the window. Defaults to 7 days ago.
e.g. 2026-09-01
pana_laoptional
string | null
End of the window. Defaults to now.
e.g. 2026-09-07
zonaoptional
string | null
The EIC code of the bidding zone. Defaults to Romania. The only zone imported today is
10YRO-TEL------P; any other value returns 422, not an empty series. The list is in /piata/acoperire, under zone_ofertare.
10YRO-TEL------P
How it behaves
- The history has a gap, and it is visible at
/piata/acoperire. The series starts in 2015, but the historical import is still in progress: about 28-30 months are currently missing (2015-03 → 2017-08). A request falling inside the gap returns200with an empty list — which does NOT mean the market had no activity, but that the period has not been imported yet. Thegolurifield in the coverage route lists exactly which months are missing, computed from the data, so it shrinks on its own as the history fills in. - The series can extend past the present moment. Day-ahead prices are published in advance, so the last interval in the response is often an hour that has not been consumed yet. This is not an error and not a forecast of ours: it is the firm quotation, published by the exchange before delivery. The practical consequence: a window ending "now" can mix already-consumed hours with hours not yet delivered, and an average over it lumps them together. If you need strictly realised data, cut the window at the current hour.
- Energy (MWh) is derived: average power × interval duration, summed. It is not a quantity the source publishes — which is why every average here is weighted by duration, never arithmetic.
regenerabil_procentis computed only over codes confirmed as renewable. When unconfirmed codes carry output,procent_este_minimturnstrue: the true share is at least this much, possibly more. We would rather say so than ship a round, false percentage.- The balance is explicit and does not close exactly: generation + import − export does not equal load. Measured over 1-6 September 2026, the difference was 2.4% of load. Generation is published only for units above the reporting threshold, while load is the actual load, network losses included. A few percent is normal; tens of percent means data is missing from the requested window.
- These figures are not comparable with the
senzone. That is the Transelectrica snapshot, at irregular moments; this is the official European series, at a fixed step. Different sources, different definitions.
What it is for
- You want a single request that says what electricity cost, how much was consumed and what it was generated from.
- Report the renewable share over a month, with energy computed correctly from power and duration.
- Compare one week against another without pulling tens of thousands of intervals.
Response structure
All fields below live inside data.
FieldTypeDescription
productie.energie_totala_mwh
number
Energia produsă în fereastră, derivată.
productie.regenerabil_procent
number
Ponderea regenerabilelor, ori
null dacă nu există producţie.
productie.procent_este_minim
boolean
Dacă procentul e un minim din cauza codurilor neconfirmate.
consum.energie_mwh
number
Energia consumată, derivată.
preturi
object
Price statistics over the window: minimum, maximum, weighted average, negative intervals, hours covered.
consum.intervale
integer
How many load intervals enter the calculation.
consum.putere_medie_mw
number
Average load over the window, weighted by duration.
consum.minim_mw
integer
The lowest load in the window.
consum.maxim_mw
integer
The load peak in the window.
productie.energie_regenerabila_mwh
number
Energy generated from sources confirmed as renewable.
productie.pe_sursa[].sursa
object
The generation type, with its code and label.
productie.pe_sursa[].putere_medie_mw
number
The source average power over the window.
productie.pe_sursa[].putere_maxima_mw
integer
The source peak in the window.
productie.pe_sursa[].energie_mwh
number
Energy produced by the source, derived from power × duration.
schimburi.import_mwh
number
Energy into the zone over the window, across all borders.
schimburi.export_mwh
number
Energy out of the zone.
schimburi.sold_mwh
number
The balance: import − export.
schimburi.directie_neta
string
Whether the zone was a net importer or exporter.
schimburi.pe_granita
array
The same figures, broken down per border.
bilant.productie_mwh
number
Energy generated over the window.
bilant.import_mwh
number
Energy in through the borders.
bilant.export_mwh
number
Energy out through the borders.
bilant.disponibil_mwh
integer
Generation + import − export: how much was available in the zone.
bilant.consum_mwh
number
Actual load, for comparison.
bilant.diferenta_mwh
number
How much the balance does NOT close by. Not an error — see the note.
bilant.diferenta_procent
number
The same difference, relative to load.
bilant.observatie
string
Why the balance does not close exactly, and past what point the difference becomes a signal.
coduri_neconfirmate
array
Codes with output that have no confirmed label.
observatie
string
How to read derived energy, and why it is not comparable with the
sen zone.
sursa
object
ENTSO-E Transparency Platform, with the required attribution.
Response examples
GEThttps://oneapi.ro/api/energie/v1/piata/sumar
{
"data": {
"zona": "10YRO-TEL------P",
"de_la": "2026-09-29 20: 39: 53",
"pana_la": "2026-10-06 20: 39: 53",
"preturi": {
"intervale": 593,
"primul": "2026-09-29T20: 45: 00+03: 00",
"ultimul": "2026-10-06T00: 45: 00+03: 00",
"minim_eur_mwh": 0.69,
"maxim_eur_mwh": 435.08,
"medie_ponderata_eur_mwh": 170.1,
"intervale_cu_pret_negativ": 0,
"ore_acoperite": 148.25
},
"consum": {
"intervale": 152,
"putere_medie_mw": 5462.7,
"minim_mw": 3994,
"maxim_mw": 7076,
"energie_mwh": 207581.8
},
"productie": {
"energie_totala_mwh": 190131.5,
"energie_regenerabila_mwh": 112773.9,
"regenerabil_procent": 59.3,
"procent_este_minim": false,
"pe_sursa": [
{
"sursa": {
"cod": "B19",
"nume": "Eolian (pe uscat)",
"grupa": "eolian",
"regenerabila": true,
"confirmat": true
},
"intervale": 152,
"putere_medie_mw": 1580.6,
"putere_maxima_mw": 2446,
"energie_mwh": 60064.5
}
]
},
"schimburi": {
"import_mwh": 159706.9,
"export_mwh": 84351.4,
"sold_mwh": 75355.5,
"directie_neta": "import",
"pe_granita": [
{
"vecin": "BG",
"vecin_denumire": "Bulgaria",
"vecin_eic": "10YCA-BULGARIA-R",
"rezolutie_min": 60,
"import_mwh": 133302.2,
"export_mwh": 15671.3,
"import_putere_medie_mw": 1101.7,
"export_putere_medie_mw": 129.5,
"intervale": 242,
"sold_mwh": 117630.9,
"directie_neta": "import"
}
]
},
"bilant": {
"productie_mwh": 190131.5,
"import_mwh": 159706.9,
"export_mwh": 84351.4,
"disponibil_mwh": 265487,
"consum_mwh": 207581.8,
"diferenta_mwh": -57905.2,
"diferenta_procent": -27.9,
"observatie": "Bilanţul NU se închide exact şi nici nu are cum: producţia se publică doar pentru unităţile peste pragul de raportare, iar consumul e sarcina realizată, cu pierderile de reţea incluse. O diferenţă de câteva procente e normală; una de zeci de procente înseamnă date lipsă în fereastra cerută."
},
"coduri_neconfirmate": [],
"observatie": "Energia e derivată din puterea medie × durata intervalului. Nu se compară direct cu zona `sen`, care e instantaneul Transelectrica, cu altă definiție și alt pas.",
"sursa": {
"nume": "ENTSO-E Transparency Platform",
"url": "https://transparency.entsoe.eu",
"atribuire": "Date din ENTSO-E Transparency Platform.",
"licenta": "Reutilizare permisă cu ATRIBUIRE obligatorie către Transparency Platform. Drepturile nu sunt sublicențiabile.",
"observatie": "Zona `piata` e seria oficială europeană; zona `sen` e instantaneul Transelectrica. Au surse, pași și definiții diferite — cifrele lor nu se compară direct."
}
}
}
GEThttps://oneapi.ro/api/energie/v1/piata/sumar?de_la=2026-08-01&pana_la=2026-09-01
{
"data": {
"zona": "10YRO-TEL------P",
"de_la": "2026-07-31 21: 00: 00",
"pana_la": "2026-08-31 21: 00: 00",
"preturi": {
"intervale": 2977,
"primul": "2026-07-31T21: 00: 00+03: 00",
"ultimul": "2026-08-31T21: 00: 00+03: 00",
"minim_eur_mwh": -0.03,
"maxim_eur_mwh": 569.73,
"medie_ponderata_eur_mwh": 151,
"intervale_cu_pret_negativ": 11,
"ore_acoperite": 744.25
},
"consum": {
"intervale": 2977,
"putere_medie_mw": 5428.6,
"minim_mw": 2804,
"maxim_mw": 7707,
"energie_mwh": 4040234
},
"productie": {
"energie_totala_mwh": 3620595.4,
"energie_regenerabila_mwh": 1983172.9,
"regenerabil_procent": 54.8,
"procent_este_minim": false,
"pe_sursa": [
{
"sursa": {
"cod": "B04",
"nume": "Gaze naturale",
"grupa": "gaze",
"regenerabila": false,
"confirmat": true
},
"intervale": 2973,
"putere_medie_mw": 1136.9,
"putere_maxima_mw": 1394,
"energie_mwh": 845032.3
}
]
},
"schimburi": {
"import_mwh": 992024.2,
"export_mwh": 707946.6,
"sold_mwh": 284077.6,
"directie_neta": "import",
"pe_granita": [
{
"vecin": "BG",
"vecin_denumire": "Bulgaria",
"vecin_eic": "10YCA-BULGARIA-R",
"rezolutie_min": 60,
"import_mwh": 667611.7,
"export_mwh": 96661.4,
"import_putere_medie_mw": 896.1,
"export_putere_medie_mw": 129.7,
"intervale": 1490,
"sold_mwh": 570950.3,
"directie_neta": "import"
}
]
},
"bilant": {
"productie_mwh": 3620595.4,
"import_mwh": 992024.2,
"export_mwh": 707946.6,
"disponibil_mwh": 3904673,
"consum_mwh": 4040234,
"diferenta_mwh": 135561,
"diferenta_procent": 3.36,
"observatie": "Bilanţul NU se închide exact şi nici nu are cum: producţia se publică doar pentru unităţile peste pragul de raportare, iar consumul e sarcina realizată, cu pierderile de reţea incluse. O diferenţă de câteva procente e normală; una de zeci de procente înseamnă date lipsă în fereastra cerută."
},
"coduri_neconfirmate": [],
"observatie": "Energia e derivată din puterea medie × durata intervalului. Nu se compară direct cu zona `sen`, care e instantaneul Transelectrica, cu altă definiție și alt pas.",
"sursa": {
"nume": "ENTSO-E Transparency Platform",
"url": "https://transparency.entsoe.eu",
"atribuire": "Date din ENTSO-E Transparency Platform.",
"licenta": "Reutilizare permisă cu ATRIBUIRE obligatorie către Transparency Platform. Drepturile nu sunt sublicențiabile.",
"observatie": "Zona `piata` e seria oficială europeană; zona `sen` e instantaneul Transelectrica. Au surse, pași și definiții diferite — cifrele lor nu se compară direct."
}
}
}
GEThttps://oneapi.ro/api/energie/v1/piata/sumar?de_la=2024-06-15
{
"data": {
"zona": "10YRO-TEL------P",
"de_la": "2024-06-14 21: 00: 00",
"pana_la": "2026-10-06 20: 39: 53",
"preturi": {
"intervale": 46876,
"primul": "2024-06-14T21: 00: 00+03: 00",
"ultimul": "2026-10-06T00: 45: 00+03: 00",
"minim_eur_mwh": -100.63,
"maxim_eur_mwh": 1021.61,
"medie_ponderata_eur_mwh": 118.97,
"intervale_cu_pret_negativ": 914,
"ore_acoperite": 20236
},
"consum": {
"intervale": 80503,
"putere_medie_mw": 6040.7,
"minim_mw": 0,
"maxim_mw": 9296,
"energie_mwh": 121573442.7
},
"productie": {
"energie_totala_mwh": 108998161.9,
"energie_regenerabila_mwh": 50530559.7,
"regenerabil_procent": 46.4,
"procent_este_minim": false,
"pe_sursa": [
{
"sursa": {
"cod": "B04",
"nume": "Gaze naturale",
"grupa": "gaze",
"regenerabila": false,
"confirmat": true
},
"intervale": 80486,
"putere_medie_mw": 1104.9,
"putere_maxima_mw": 1894,
"energie_mwh": 22232190
}
]
},
"schimburi": {
"import_mwh": 25655193.1,
"export_mwh": 16962012.3,
"sold_mwh": 8693180.8,
"directie_neta": "import",
"pe_granita": [
{
"vecin": "BG",
"vecin_denumire": "Bulgaria",
"vecin_eic": "10YCA-BULGARIA-R",
"rezolutie_min": 60,
"import_mwh": 9763136,
"export_mwh": 4805539.3,
"import_putere_medie_mw": 483.1,
"export_putere_medie_mw": 237.8,
"intervale": 40418,
"sold_mwh": 4957596.7,
"directie_neta": "import"
}
]
},
"bilant": {
"productie_mwh": 108998161.9,
"import_mwh": 25655193.1,
"export_mwh": 16962012.3,
"disponibil_mwh": 117691342.7,
"consum_mwh": 121573442.7,
"diferenta_mwh": 3882100,
"diferenta_procent": 3.19,
"observatie": "Bilanţul NU se închide exact şi nici nu are cum: producţia se publică doar pentru unităţile peste pragul de raportare, iar consumul e sarcina realizată, cu pierderile de reţea incluse. O diferenţă de câteva procente e normală; una de zeci de procente înseamnă date lipsă în fereastra cerută."
},
"coduri_neconfirmate": [],
"observatie": "Energia e derivată din puterea medie × durata intervalului. Nu se compară direct cu zona `sen`, care e instantaneul Transelectrica, cu altă definiție și alt pas.",
"sursa": {
"nume": "ENTSO-E Transparency Platform",
"url": "https://transparency.entsoe.eu",
"atribuire": "Date din ENTSO-E Transparency Platform.",
"licenta": "Reutilizare permisă cu ATRIBUIRE obligatorie către Transparency Platform. Drepturile nu sunt sublicențiabile.",
"observatie": "Zona `piata` e seria oficială europeană; zona `sen` e instantaneul Transelectrica. Au surse, pași și definiții diferite — cifrele lor nu se compară direct."
}
}
}
GEThttps://oneapi.ro/api/energie/v1/piata/sumar?pana_la=2024-06-15
{
"data": {
"zona": "10YRO-TEL------P",
"de_la": "2026-09-29 20: 39: 53",
"pana_la": "2024-06-14 21: 00: 00",
"preturi": null,
"consum": {
"intervale": 0,
"putere_medie_mw": 0,
"minim_mw": 0,
"maxim_mw": 0,
"energie_mwh": 0
},
"productie": {
"energie_totala_mwh": 0,
"energie_regenerabila_mwh": 0,
"regenerabil_procent": null,
"procent_este_minim": false,
"pe_sursa": []
},
"schimburi": {
"import_mwh": 0,
"export_mwh": 0,
"sold_mwh": 0,
"directie_neta": "echilibru",
"pe_granita": []
},
"bilant": null,
"coduri_neconfirmate": [],
"observatie": "Energia e derivată din puterea medie × durata intervalului. Nu se compară direct cu zona `sen`, care e instantaneul Transelectrica, cu altă definiție și alt pas.",
"sursa": {
"nume": "ENTSO-E Transparency Platform",
"url": "https://transparency.entsoe.eu",
"atribuire": "Date din ENTSO-E Transparency Platform.",
"licenta": "Reutilizare permisă cu ATRIBUIRE obligatorie către Transparency Platform. Drepturile nu sunt sublicențiabile.",
"observatie": "Zona `piata` e seria oficială europeană; zona `sen` e instantaneul Transelectrica. Au surse, pași și definiții diferite — cifrele lor nu se compară direct."
}
}
}
Error codes
| Code | Slug | When it occurs |
|---|---|---|
| 401 | neautentificat | Token missing, invalid, expired or revoked. |
| 403 | feature_indisponibil | The current plan does not include the feature the route depends on. |
| 422 | validare | The window is reversed. |
| 429 | cota_depasita | The plan's monthly quota has been exceeded (see Retry-After). |
All errors share the same shape. eroare.cod is stable and is the value you should branch on in code — not the text in mesaj, which may change.
{
"eroare": {
"cod": "validare",
"mesaj": "The window is reversed.",
"detalii": {
"de_la": [
"The value sent does not satisfy the parameter rule."
]
}
}
}