oneapi
Sign in
Energie v1 / Piaţa de energie

Generation by source type

Actual generation by source type, in MW for each interval: nuclear, hydro, wind, solar, gas, coal. Use sursa to ask for just one.

GET
https://oneapi.ro/api/energie/v1/piata/productie

Query parameters

NameTypeDescriptionAccepted values
de_laoptional string | null Start of the window. Defaults to 7 days ago. e.g. 2026-09-05
pana_laoptional string | null End of the window. Defaults to now. e.g. 2026-09-06
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
sursaoptional string | null A single generation code, from the /piata/surse route. e.g. B16
per_paginaoptional text Intervals per page, up to 2000. e.g. 500
paginaoptional text The page, counted from 1. e.g. 1

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 value is average power over the interval (MW), not energy. To get MWh, multiply by the interval length in hours — or call the summary route, which does exactly that.
  • The code labels are not copied from a list. The official ENTSO-E list is not programmatically accessible, so every code was established empirically: by comparison with Transelectrica for the same moment, by elimination against the 2015 history, or from the hourly profile. confirmat refers to the CLASSIFICATION (group and renewable/non-renewable); nume can be null on a confirmed code, where the evidence supports the classification but not a fuel name.
  • The source also publishes the units own consumption, as a reverse flow. Only generation is included here; plant self-consumption is neither subtracted from it nor mixed into it.

What it is for

  • Track how much wind or solar produced on a given day, interval by interval.
  • Tie renewable output to the negative-price intervals, to explain why they occur.
  • Build a per-type generation profile for a forecasting model.

Response structure

FieldTypeDescription
data.serie[].valoare_mw number Puterea medie pe interval, în MW.
data.serie[].sursa.cod string Codul ENTSO-E al tipului de producţie.
data.serie[].sursa.confirmat boolean Dacă eticheta a fost verificată pe date reale.
data.filtru_sursa null The generation code the series was filtered on, if one was requested.
data.serie[].moment string Start of the interval, in UTC.
data.fara_date null Present (non-null) ONLY when the series is empty, and says WHY: motiv is dupa_acoperire (the window is past the last imported point), inainte_de_acoperire, or gol_in_acoperire (a hole inside the history). acoperire gives the real ends of the series. ⚠️ An empty series does NOT mean the market had no activity.
data.serie[].rezolutie_min integer Interval duration, in minutes.
data.serie[].sursa.nume string The source name. It can be null even on a confirmed code, when the evidence supports the classification but not a fuel name.
data.serie[].sursa.grupa string The source grouping, for your own aggregations.
data.serie[].sursa.regenerabila boolean Whether the source counts towards the renewable share.
data.observatie string Why the value is power, not energy.
data.sursa object ENTSO-E Transparency Platform, with the required attribution.
meta.paginare.pagina integer Current page, counted from 1.
meta.paginare.per_pagina integer How many records a page holds.
meta.paginare.total integer Total matching records, beyond the current page.
meta.paginare.pagini integer How many pages the list has.

Response examples

GEThttps://oneapi.ro/api/energie/v1/piata/productie
{
    "data": {
        "zona": "10YRO-TEL------P",
        "de_la": "2026-09-29 20: 39: 52",
        "pana_la": "2026-10-06 20: 39: 52",
        "filtru_sursa": null,
        "fara_date": null,
        "serie": [
            {
                "moment": "2026-09-29T20: 45: 00+03: 00",
                "rezolutie_min": 15,
                "sursa": {
                    "cod": "B01",
                    "nume": "Biomasă",
                    "grupa": "biomasa",
                    "regenerabila": true,
                    "confirmat": true
                },
                "valoare_mw": 64
            }
        ],
        "observatie": "Valoarea e PUTERE medie pe interval (MW), nu energie. Pentru energie, înmulțește cu durata intervalului — sau folosește ruta de sumar, care o calculează.",
        "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."
        }
    },
    "meta": {
        "paginare": {
            "pagina": 1,
            "per_pagina": 500,
            "total": 1520,
            "pagini": 4
        }
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatToken missing, invalid, expired or revoked.
403feature_indisponibilThe current plan does not include the feature the route depends on.
422validareThe source code is not of the form Bnn, or the window is reversed.
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 source code is not of the form Bnn, or the window is reversed.",
        "detalii": {
            "de_la": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}