oneapi
Autentificare
Energie v1 / Piaţa de energie

Preţul energiei, interval cu interval

Seria preţului pe piaţa pentru ziua următoare, interval cu interval, în EUR/MWh — la sfert de oră de când rezoluţia s-a schimbat, la oră înainte. Răspunsul spune ce rezoluţie a avut fiecare bucată.

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

Parametri de interogare

NumeTipDescriereValori acceptate
de_laopțional string | null Începutul ferestrei. Implicit acum 7 zile. ex. 2026-09-01
pana_laopțional string | null Sfârşitul ferestrei. Implicit acum. ex. 2026-09-07
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
per_paginaopțional text Câte intervale pe pagină, până la 2000. ex. 96
paginaopțional text Pagina, numărată de la 1. ex. 1

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ă.
  • Preţul de zi-următoare al zonei de ofertare, aşa cum îl publică ENTSO-E Transparency Platform. Nu e preţul din factură: peste el se adaugă tarifele de reţea, certificatele şi marja furnizorului.
  • Preţul poate fi negativ şi rămâne aşa în răspuns. Se întâmplă când producţia regenerabilă depăşeşte cererea şi cineva plăteşte ca să scape de energie. Dacă tai valorile la zero, falsifici media zilei.
  • Rezoluţia nu e constantă. Piaţa a trecut la sfertul de oră, iar seriile mai vechi rămân orare — de aceea fiecare interval îşi poartă rezolutie_min, iar orice medie calculată de noi e ponderată cu durata. O medie aritmetică peste amestec dă un rezultat greşit, care arată plauzibil.
  • sumar se calculează pe toată fereastra, nu pe pagina returnată — altfel paginarea ar schimba media.

La ce folosește

  • Indexezi un contract de furnizare la preţul pieţei şi ai nevoie de seria exactă, nu de o medie.
  • Alegi ora din zi în care porneşti un consum flexibil — încărcarea unei flote, o pompă de căldură, un proces industrial.
  • Arăţi într-un grafic cât a costat energia ieri, cu tot cu intervalele în care preţul a fost negativ.

Structura răspunsului

CâmpTipDescriere
data.serie[].moment string Începutul intervalului, ISO 8601 în UTC.
data.serie[].rezolutie_min integer 15 sau 60.
data.serie[].pret_eur_mwh number Preţul intervalului. Poate fi negativ.
data.sumar object Statistica întregii ferestre, nu doar a paginii: minim, maxim, medie ponderată, câte intervale au avut preț negativ.
data.sumar.medie_ponderata_eur_mwh number Media pe fereastră, ponderată cu durata.
data.zona string Codul EIC al zonei de ofertare pentru care e seria.
data.de_la string Începutul ferestrei cerute, în UTC.
data.pana_la string Sfârșitul ferestrei cerute, în UTC.
data.fara_date null Prezent (nenul) DOAR când seria e goală, şi spune DE CE: motiv e dupa_acoperire (fereastra cerută e după ultimul punct importat), inainte_de_acoperire sau gol_in_acoperire (lipsă în mijlocul istoricului). acoperire dă capetele reale ale seriei. ⚠️ O serie goală NU înseamnă că piaţa n-a avut activitate.
data.sumar.intervale_cu_pret_negativ integer Câte intervale au avut preț sub zero. Nu e o anomalie de date.
data.sumar.ore_acoperite number Câte ore de piață acoperă intervalele din fereastră — arată golurile fără să le cauți.
data.observatie string Cum se citesc prețurile negative și amestecul de rezoluții.
data.sursa object ENTSO-E Transparency Platform, cu atribuirea obligatorie.
meta.paginare.pagina integer Pagina curentă, numărată de la 1.
meta.paginare.per_pagina integer Câte înregistrări are o pagină.
meta.paginare.total integer Totalul înregistrărilor care se potrivesc, dincolo de pagina curentă.
meta.paginare.pagini integer Câte pagini are lista.

Exemple de răspuns

GEThttps://oneapi.ro/api/energie/v1/piata/preturi
{
    "data": {
        "zona": "10YRO-TEL------P",
        "de_la": "2026-09-29 20: 39: 50",
        "pana_la": "2026-10-06 20: 39: 50",
        "fara_date": null,
        "sumar": {
            "intervale": 593,
            "primul": "2026-09-29T20: 45: 00+03: 00",
            "ultimul": "2026-10-06T00: 45: 00+03: 00",
            "minim_eur_mwh": 0.69,
            "maxim_eur_mwh": 435.08,
            "medie_ponderata_eur_mwh": 170.1,
            "intervale_cu_pret_negativ": 0,
            "ore_acoperite": 148.25
        },
        "serie": [
            {
                "moment": "2026-09-29T20: 45: 00+03: 00",
                "rezolutie_min": 15,
                "pret_eur_mwh": 242.65
            }
        ],
        "observatie": "Prețurile pot fi NEGATIVE — se întâmplă când producția regenerabilă depășește cererea. Nu e o eroare de date. `rezolutie_min` spune cât durează intervalul: seriile recente sunt la 15 minute, cele vechi la o oră.",
        "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": 593,
            "pagini": 2
        }
    }
}

Coduri de eroare

CodSlugCând apare
401neautentificatToken lipsă, invalid, expirat sau revocat.
403feature_indisponibilPlanul curent nu include funcţia de care ţine ruta.
422validareFereastra e inversată ori parametrii de paginare depăşesc limitele.
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": "Fereastra e inversată ori parametrii de paginare depăşesc limitele.",
        "detalii": {
            "de_la": [
                "Valoarea trimisă nu respectă regula parametrului."
            ]
        }
    }
}