Energie v1 / Piaţa de energie
Market series coverage
From when to when we hold the market series, at which resolutions and where it has gaps. Worth reading before asking for a long interval, so missing data is not read as zero.
GET
https://oneapi.ro/api/energie/v1/piata/acoperire
Query parameters
This route accepts no query parameters.
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.
- A free route, like every coverage route on the platform: it tells you what can be asked for before you ask.
- The mix of hourly and quarter-hourly intervals is real, not an inconsistency: the market moved to the quarter hour, and older series stay as they were published. Any average over the mix must be weighted by duration.
What it is for
- Check what range you can ask for before building a large request.
- See how many intervals are hourly and how many quarter-hourly, so you weight your own averages correctly.
- Monitor the freshness of the series without consuming a gated route.
Response structure
All fields below live inside data.
FieldTypeDescription
preturi.primul
string|null
Primul moment cu preţ, în UTC.
preturi.intervale_15min
integer
Câte intervale sunt la sfert de oră.
coduri_neconfirmate
array
Codurile fără etichetă confirmată.
preturi.goluri[]
array
Months missing between the first and last point:
{de_la, pana_la, luni}.
preturi.inregistrari
integer
How many price intervals the database holds.
preturi.zone
integer
How many bidding zones the price series covers.
preturi.ultimul
string
The last moment with a price.
preturi.intervale_orare
integer
How many intervals are hourly.
productie
object
The same figures, for the generation series.
consum
object
The same figures, for the load series.
schimburi
object
The same figures, for the cross-border flows.
zone_ofertare
array
The imported bidding zones — the only values accepted by the
zona parameter.
zone_ofertare[].eic
string
The EIC code of the zone.
zone_ofertare[].denumire
string
The country of the zone.
granite[].vecin
string
The country code of the published border.
granite[].denumire
string
The neighbour name.
granite[].eic
string
The EIC code of the neighbouring zone.
coduri_de_productie
array
Every generation code encountered in the data.
observatie
string
Why the mix of resolutions is real, and what it implies for averages.
sursa
object
ENTSO-E Transparency Platform, with the required attribution.
Response examples
GEThttps://oneapi.ro/api/energie/v1/piata/acoperire
{
"data": {
"preturi": {
"inregistrari": 129623,
"zone": 1,
"primul": "2015-01-01 01: 00: 00+02",
"ultimul": "2026-10-06 00: 45: 00+03",
"intervale_15min": 35520,
"intervale_orare": 94103,
"goluri": []
},
"productie": {
"inregistrari": 2321688,
"zone": 1,
"primul": "2015-01-05 00: 00: 00+02",
"ultimul": "2026-10-01 10: 30: 00+03",
"intervale_15min": 1843243,
"intervale_orare": 478445,
"goluri": []
},
"consum": {
"inregistrari": 251491,
"zone": 1,
"primul": "2015-01-05 23: 00: 00+02",
"ultimul": "2026-10-01 10: 30: 00+03",
"intervale_15min": 198332,
"intervale_orare": 53159,
"goluri": []
},
"schimburi": {
"inregistrari": 1183966,
"zone": 1,
"primul": "2015-01-01 02: 00: 00+02",
"ultimul": "2026-10-04 22: 00: 00+03",
"intervale_15min": 396630,
"intervale_orare": 787336,
"goluri": []
},
"zone_ofertare": [
{
"eic": "10YRO-TEL------P",
"denumire": "România"
}
],
"granite": [
{
"vecin": "BG",
"denumire": "Bulgaria",
"eic": "10YCA-BULGARIA-R"
}
],
"coduri_de_productie": [
"B01",
"B02",
"B04",
"B05",
"B11",
"B12",
"B14",
"B16",
"B19",
"B25"
],
"coduri_neconfirmate": [],
"observatie": "Amestecul de intervale de 15 minute și orare e real, nu o inconsecvență: piața a trecut la sfertul de oră, iar seriile vechi rămân orare. Orice medie trebuie ponderată cu durata. `goluri` listează lunile care LIPSESC între primul şi ultimul punct — o cerere căzută în ele întoarce 200 cu listă goală, ceea ce nu înseamnă că piaţa n-a avut activitate, ci că perioada n-a fost încă importată.",
"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 | modul_interzis | The token has no access to the route's module. |
| 422 | validare | The route takes no parameters apart from lang: any other parameter returns 422 instead of being ignored. |
| 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 route takes no parameters apart from lang: any other parameter returns 422 instead of being ignored."
}
}