oneapi
Autentificare
Energie v1 / Piaţa de energie

Seria lunară a pieţei

Seria lunară a pieţei într-un singur tabel: preţul mediu, consumul, producţia pe fiecare sursă şi soldul schimburilor, lună de lună.

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

Parametri de interogare

NumeTipDescriereValori acceptate
de_laopțional string | null Începutul intervalului. Implicit acum 7 zile — pentru istoric, cere-l explicit. ex. 2015-01-01
pana_laopțional string | null Sfârşitul intervalului. Implicit acum. ex. 2026-09-01
zonaopțional string | null Codul EIC al zonei de ofertare. Implicit România. Singura zonă importată azi e 10YRO-TEL------P; orice altă valoare dă 422, nu o serie goală. Lista e în /piata/acoperire, la zone_ofertare. 10YRO-TEL------P

Cum se comportă

  • Istoricul are un gol, şi el se vede la /piata/acoperire. Seria începe în 2015, dar importul de istoric e încă în curs: în prezent lipsesc ~28-30 de luni (2015-03 → 2017-08). O cerere care cade în gol întoarce 200 cu listă goală — ceea ce NU înseamnă că piaţa n-a avut activitate, ci că perioada n-a fost adusă încă. Câmpul goluri din acoperire listează exact lunile care lipsesc, calculat din date, deci se micşorează singur pe măsură ce istoricul se completează.
  • Seria poate depăşi momentul prezent. Preţul de zi-următoare se publică în avans, deci ultimul interval din răspuns e adesea o oră care încă nu s-a consumat. Nu e o eroare şi nu e o prognoză de-a noastră: e cotaţia fermă, publicată de bursă înainte de livrare. Consecinţa practică: o fereastră care se termină „acum" poate amesteca ore deja consumate cu ore încă nelivrate, iar o medie peste ea le pune la un loc. Dacă ai nevoie strict de realizat, taie fereastra la ora curentă.
  • Forma în care se citeşte un istoric lung. Aceleaşi date la nivel de interval înseamnă sute de mii de rânduri; aici o lună e un rând, iar mediile rămân ponderate cu durata intervalului.
  • ⚠️ Codurile de producţie NU sunt stabile în timp. Aceleaşi centrale pe cărbune apar sub B05 în seriile vechi şi sub B02 în cele recente: comutarea s-a produs în mai-iunie 2015. În aprilie 2015 B05 avea 1.670 MW medie şi B02 208; în mai ambele se mişcă (1.024 / 573); din iunie raportul e definitiv inversat (157 / 1.434). Suma celor două rămâne aceeaşi peste tranziţie — 1.878, 1.597, 1.591 MW — deci nu s-au mutat centralele, s-a schimbat codul sub care sunt raportate. O serie construită pe un singur cod se rupe acolo; foloseşte pe_grupa, care e stabil.
  • Citeşte ore_acoperite, separat la preţ şi la consum. Nu se acoperă la fel: sunt luni în care preţul e publicat integral, iar consumul doar parţial. O lună incompletă dă tot o medie, la fel de credibilă la prima vedere.
  • Luna e delimitată în UTC, ca tot restul seriei.

La ce folosește

  • Vezi cum a evoluat preţul energiei pe ani întregi, într-o singură cerere.
  • Decontezi un contract indexat la PZU: media lunară ponderată e chiar referinţa folosită.
  • Urmăreşti cum s-a schimbat mixul de producţie al ţării — intrarea fotovoltaicului, ieşirea cărbunelui.

Structura răspunsului

Toate câmpurile de mai jos sunt în data.

CâmpTipDescriere
luni[].luna string Luna, AAAA-LL.
luni[].pret.medie_ponderata_eur_mwh number Media lunară ponderată.
luni[].productie.pe_grupa object Grupă → MWh. Forma stabilă în timp.
luni[].schimburi.sold_mwh number Import − export, în MWh.
inregistrari integer Câte luni sunt în răspuns.
luni[].pret.minim number Cel mai mic preţ al lunii.
luni[].pret.maxim number Cel mai mare preţ al lunii.
luni[].pret.intervale integer Câte intervale de preţ au fost publicate.
luni[].pret.intervale_cu_pret_negativ integer Câte intervale au avut preţ sub zero.
luni[].pret.ore_acoperite integer Câte ore de piaţă acoperă luna. O lună întreagă are 672-744.
luni[].consum.putere_medie_mw number Consumul mediu al lunii, ponderat cu durata.
luni[].consum.varf_mw integer Vârful de consum din lună.
luni[].consum.energie_mwh number Energia consumată, derivată din putere × durată.
luni[].consum.ore_acoperite integer Câte ore de consum sunt publicate — poate fi mai puţin decât la preţ.
luni[].productie.energie_totala_mwh integer Energia produsă în lună, toate sursele.
luni[].productie.energie_regenerabila_mwh integer Energia din surse confirmate ca regenerabile.
luni[].productie.regenerabil_procent null Ponderea regenerabilelor în luna respectivă.
luni[].productie.pe_cod array Energia pe fiecare cod ENTSO-E. ⚠️ Codurile NU sunt stabile în timp.
luni[].schimburi.import_mwh integer Energia intrată prin graniţe în lună.
luni[].schimburi.export_mwh integer Energia ieşită prin graniţe.
luni[].coduri_neconfirmate array Codurile cu producţie în luna aceea care n-au etichetă confirmată.
observatie string De ce mediile sunt ponderate şi ce înseamnă o lună incompletă.
avertisment_coduri string Avertismentul despre reclasificarea codurilor de producţie în timp.
sursa object ENTSO-E Transparency Platform, cu atribuirea obligatorie.

Exemple de răspuns

GEThttps://oneapi.ro/api/energie/v1/piata/lunar?de_la=2015-01-01
{
    "data": {
        "zona": "10YRO-TEL------P",
        "de_la": "2014-12-31 22: 00: 00",
        "pana_la": "2026-10-06 20: 39: 50",
        "inregistrari": 143,
        "luni": [
            {
                "luna": "2014-12",
                "pret": {
                    "medie_ponderata_eur_mwh": 202.08,
                    "minim": 202.08,
                    "maxim": 202.08,
                    "intervale": 1,
                    "intervale_cu_pret_negativ": 0,
                    "ore_acoperite": 1
                },
                "consum": null,
                "productie": {
                    "energie_totala_mwh": 0,
                    "energie_regenerabila_mwh": 0,
                    "regenerabil_procent": null,
                    "pe_cod": [],
                    "pe_grupa": []
                },
                "schimburi": {
                    "import_mwh": 0,
                    "export_mwh": 0,
                    "sold_mwh": 0
                },
                "coduri_neconfirmate": []
            }
        ],
        "observatie": "Mediile lunare sunt PONDERATE cu durata intervalului, nu aritmetice — o lună poate amesteca intervale de 15 minute cu unele orare. `ore_acoperite` spune cât din lună e efectiv publicat: o lună incompletă dă tot o medie, care arată la fel de credibilă ca oricare alta.",
        "avertisment_coduri": "Codurile de producţie NU sunt stabile în timp: aceleaşi centrale pe cărbune au fost raportate sub `B05` până în trecut şi sub `B02` acum. O serie pe un singur cod se rupe la reclasificare — foloseşte `grupa` sau suma codurilor de cărbune. Vezi /energie/v1/piata/surse.",
        "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."
        }
    }
}

Coduri de eroare

CodSlugCând apare
401neautentificatToken lipsă, invalid, expirat sau revocat.
403feature_indisponibilPlanul curent nu include funcţia de care ţine ruta.
422validareIntervalul e inversat.
429cota_depasitaCota lunară a planului a fost depăşită (vezi Retry-After).

Toate erorile au aceeași formă. eroare.cod e stabil și e cel după care trebuie să ramifici în cod — nu după textul din mesaj, care se poate schimba.

{
    "eroare": {
        "cod": "validare",
        "mesaj": "Intervalul e inversat.",
        "detalii": {
            "de_la": [
                "Valoarea trimisă nu respectă regula parametrului."
            ]
        }
    }
}