oneapi
Sign in
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 returns 200 with an empty list — which does NOT mean the market had no activity, but that the period has not been imported yet. The goluri field 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

CodeSlugWhen it occurs
401neautentificatToken missing, invalid, expired or revoked.
403modul_interzisThe token has no access to the route's module.
422validareThe route takes no parameters apart from lang: any other parameter returns 422 instead of being ignored.
429cota_depasitaThe 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."
    }
}