oneapi
Sign in
Energie v1 / Sistemul energetic (SEN)

System state right now

Generation by source, consumption, the balance and the flows on each interconnection, at the latest reading.

GET
https://oneapi.ro/api/energie/v1/sen/acum

Query parameters

This route accepts no query parameters.

How it behaves

  • This is a snapshot, not an average. Transelectrica publishes an instantaneous reading, and we capture it when the import runs — not continuously. Check vechime_minute and invechit before presenting the figures as "now".
  • Wind can be negative. In low wind, the farms draw from the grid instead of generating. That is not a reading error and it is not clamped to zero — clamping would falsify the balance.
  • The sign convention is uniform: a negative sold_mw means Romania is a net exporter, and a negative flux_mw on an interconnection means export through that point. directie_sold and directie state the same thing in words, so you never have to rely on the sign.
  • regenerabil_procent is relative to the sum of the sources we read, not to the total generation the source reports. If Transelectrica adds a generation type we do not map yet, the reported total would include it while our sum would not — and the percentage would come out too high with nothing to flag it.
  • Nuclear can be 0: the two Cernavodă units go into periodic outage. It is not a missing field.

What it is for

  • Show on a dashboard how much Romania is generating right now, and from which sources.
  • Track the renewable share in real time, for reporting or for a consumption decision.
  • See which interconnections are importing and which are exporting at this moment.

Response structure

All fields below live inside data.

FieldTypeDescription
momentul string Momentul citirii, în UTC. Sursa o publică în ora locală a României; conversia o facem noi.
vechime_minute integer De câte minute e veche citirea.
invechit boolean true peste 15 minute — nu o prezenta ca stare curentă.
sistem.productie_mw integer Producția totală a sistemului, în MW.
sistem.consum_mw integer Consumul total, în MW.
sistem.sold_mw integer Soldul schimburilor: NEGATIV = România exportă net, pozitiv = importă net.
sistem.directie_sold string export, import sau echilibru — citirea în clar a semnului.
sistem.regenerabil_procent number Ponderea hidro + eolian + fotovoltaic + biomasă în suma surselor citite.
productie_pe_sursa[].cod string Codul sursei (carbune_mw, fotovoltaic_mw…).
productie_pe_sursa[].denumire string Denumirea lizibilă.
productie_pe_sursa[].regenerabila boolean Dacă intră în ponderea regenerabilelor.
productie_pe_sursa[].valoare_mw integer Producția din acea sursă, în MW. Poate fi NEGATIVĂ la eolian.
interconexiuni[].punct string Codul punctului de interconexiune.
interconexiuni[].denumire string Denumirea stației.
interconexiuni[].tara string Țara vecină (ISO 3166-1 alpha-2).
interconexiuni[].flux_mw integer Fluxul instantaneu: pozitiv = import în România.
interconexiuni[].directie string import, export sau inactiv.
observatie string Avertismentul că e o citire momentană.
sursa object The data source, with its licence and notes.
sursa.nume string Sursa datelor.
sursa.url string Pagina sursei.
sursa.observatie string Temeiul publicării și precizarea că sursa nu publică termeni de reutilizare pentru acest flux.

Response examples

GEThttps://oneapi.ro/api/energie/v1/sen/acum
{
    "data": {
        "momentul": "2026-09-04 12: 13: 29+03",
        "vechime_minute": 46766,
        "invechit": true,
        "derivat": false,
        "sistem": {
            "productie_mw": 5152,
            "consum_mw": 4754,
            "sold_mw": -398,
            "directie_sold": "export",
            "regenerabil_procent": 68.8
        },
        "productie_pe_sursa": [
            {
                "cod": "carbune_mw",
                "denumire": "Cărbune",
                "regenerabila": false,
                "valoare_mw": 640
            }
        ],
        "interconexiuni": [
            {
                "punct": "DOBR",
                "denumire": "Dobrudja",
                "tara": "BG",
                "flux_mw": 55,
                "directie": "import"
            }
        ],
        "observatie": "Instantaneu, nu medie: valorile sunt citiri momentane publicate de Transelectrica, preluate de noi la rularea importului. Verifică `vechime_minute` înainte de a le prezenta ca fiind „acum\". Observaţiile cu `derivat: true` vin din perechea „acum 15 minute\" a unei citiri ulterioare: producţia e SUMA surselor (sursa nu publică un total pentru ele, abatere tipică sub 1%), iar soldul lipseşte — nu se poate calcula, fiindcă soldul raportat nu e exact consum minus producţie.",
        "sursa": {
            "nume": "Transelectrica — harta operativă a Sistemului Energetic Național",
            "url": "https://www.transelectrica.ro/",
            "observatie": "Date de transparență publicate în temeiul Regulamentului (UE) 543/2013. Transelectrica nu publică termeni de reutilizare pentru acest flux."
        }
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatToken missing, invalid, expired or revoked.
403feature_indisponibilThe current plan does not include the feature the route depends on.
404negasitThere is no SEN observation yet.
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": "negasit",
        "mesaj": "There is no SEN observation yet."
    }
}