API · versie 1

Externe API

Haal marktprijzen, het leveranciersoverzicht en, met een eigen sleutel, de gegevens van één dossier programmatisch op. Dezelfde berekeningen als de website.

Bereikbaarheid. De API staat op https://energieplatform-vlaanderen.be/api/v1. Een sleutel maakt u zelf aan op Mijn Energieplatform → API-sleutels.

Snelstart

export SEF_URL="https://energieplatform-vlaanderen.be"
export SEF_SLEUTEL="sef_..."

curl -s -H "Authorization: Bearer $SEF_SLEUTEL" "$SEF_URL/api/v1/status"
curl -s -H "Authorization: Bearer $SEF_SLEUTEL" \
     "$SEF_URL/api/v1/leveranciers/overzicht?energie=Elektriciteit"

Het volledige contract (parameters en antwoorden) staat in openapi-extern.json (OpenAPI 3).

Authenticatie en scopes

Elke aanvraag draagt Authorization: Bearer <sleutel>. Een sleutel begint met sef_ en hoort bij één account en één dossier. Hij is standaard 365 dagen geldig, kan elk moment worden ingetrokken en werkt niet meer zodra het account de toegang tot het dossier verliest. Behandel hem als een wachtwoord: niet in code, URL's of logs.

ScopeGeeft toegang tot
publiekPublieke marktdata: prijzen, leveranciersoverzicht, netbeheerders, nieuws, status. Geen persoonsgegevens.
dossier:lezenHet dossier van de sleutel lezen: aansluitingen, verbruik, contractperiodes, simulaties, vergelijkingen.
dossier:uitvoerenEen simulatie of contractvergelijking starten op dat dossier.
dossier:schrijvenMeetwaarden uit uw P1-meter opladen (Home Assistant): kwartieren voor elektriciteit, uren in m³ voor gas. Enkel met uw toestemming per aansluiting.

Endpoints

Alle paden staan onder /api/v1. Wat hier niet staat (aanmelden, accountbeheer, uploaden, wissen, facturen) bestaat extern niet.

MethodePadScopeWat
GET/api/v1/statuspubliekGrove status voor de publieke statuspagina: geen fouttekst, geen host.
GET/api/v1/nieuwspubliekGoedgekeurd energienieuws, nieuwste eerst (ADR-0032). Enkel titel,
GET/api/v1/tariefsignalenpubliekTariefsignalen bij één resultaat (ADR-0033): `geldt` = een aangekondigde
GET/api/v1/prijzen/indexenpubliekAlle marktindexreeksen met gerealiseerde maandwaarden, meest gebruikte eerst.
GET/api/v1/prijzen/indexpubliekMaandwaarden (€/MWh, gerealiseerd) van één reeks. Onbekende reeks -> 404.
GET/api/v1/prijzen/verlooppubliekGemiddelde zuivere energieprijs per maand (c€/kWh, excl. btw) van het
GET/api/v1/leveranciers/overzichtpubliekBewaarde rangschikking van de laatste nachtelijke run op het
GET/api/v1/netbeheerders/vergelijkingpubliekJaarlijkse meerkost per netbeheerder t.o.v. de goedkoopste, per
GET/api/v1/mij/aansluitingendossier:lezenAansluitingen van de gebruiker, met EAN-masker en meetbereik.
GET/api/v1/mij/verbruikdossier:lezenAfname en injectie per maand of dag, lokale tijd, half-open [van, tot).
GET/api/v1/mij/contractperiodesdossier:lezenAlle contractperiodes, met de prijs van elke afgesloten periode
GET/api/v1/mij/prijsdossier:lezenAll-in prijs per kWh (EUR incl. btw) van het huidige
GET/api/v1/mij/gasprijsdossier:lezenWat één kWh en één m³ gas méér kost met het huidige gascontract in
GET/api/v1/mij/simulatie-optiesdossier:lezenKeuzes voor het simulatieformulier: de batterijen, zonnepanelen en
GET/api/v1/mij/simulatiesdossier:lezenBewaarde simulaties van de gebruiker, nieuwste eerst (ADR-0044).
POST/api/v1/mij/simulatiesdossier:uitvoerenSimuleert batterij, extra panelen, een elektrische wagen en/of een
GET/api/v1/mij/simulaties/{run_id}dossier:lezenEén eigen simulatie met haar samenvatting (null bij simulaties van vóór
GET/api/v1/mij/vergelijkingendossier:lezenDe laatste contractvergelijkingen van de gebruiker, nieuwste eerst.
POST/api/v1/mij/vergelijkingendossier:uitvoerenZet een contractvergelijking op de eigen meetdata in de wachtrij.
GET/api/v1/mij/vergelijkingen/{opdracht_id}dossier:lezenStatus van één eigen vergelijking; als ze klaar is ook de rangschikking.
GET/api/v1/mij/waakhonddossier:lezenPer energie: het goedkoopste contract uit uw laatste afgeronde
GET/api/v1/mij/voorschotdossier:lezenHet maandvoorschot per aansluiting tegenover de kost met het huidige
POST/api/v1/mij/aansluitingen/{aansluiting_id}/meetwaardendossier:schrijvenMeetwaarden uit een P1-poort (Home Assistant) op een bestaande

Conventies

Fouten

Fouten zijn application/problem+json met een stabiele code en een correlation_id.

StatusCodeBetekenis
401NIET_GEMACHTIGDSleutel ontbreekt, is ongeldig, verlopen of ingetrokken.
403SCOPE_ONVOLDOENDEDe sleutel mist de vereiste scope.
404NIET_GEVONDENOnbekende route, onbekend object of geen toegang tot het dossier.
422INVOER_ONGELDIG e.a.Ongeldige parameters; de code zegt welke.
403P1_GEEN_TOESTEMMINGP1-upload zonder toestemming voor die aansluiting (Instellingen → P1-meter).
409METER_ANDERSP1-upload met een ander meterserienummer dan de eerste upload op die aansluiting.
422GEEN_OMREKENFACTORP1-gasupload zonder omrekening m³ → kWh: laad uw recentste Fluvius-gasexport (opnieuw) op.
422PRIJS_NIET_BEREKENBAAR/mij/prijs of /mij/gasprijs zonder (gepubliceerd) huidig contract; de titel zegt waarom.
429TE_VEEL_AANVRAGENMeer dan 60 aanvragen per minuut met deze sleutel, of meer dan 2 POST-aanvragen (simulatie of vergelijking starten) per minuut; wacht de seconden uit Retry-After.
429SIMULATIE_BEZIG, TE_VEEL_OPDRACHTEN, WACHTRIJ_VOLEen berekening loopt al of de wachtrij is vol; probeer later opnieuw.

Probeer een 401, 403, 404 of 422 niet automatisch opnieuw; een 429 wel, na Retry-After.

Een contractvergelijking starten

Een vergelijking loopt asynchroon (seconden tot een minuut). Per dossier loopt hoogstens één opdracht tegelijk: een tweede POST geeft de lopende terug (nieuw: false).

# 1. starten: 202 met het opdracht-id
curl -s -X POST -H "Authorization: Bearer $SEF_SLEUTEL" -H "Content-Type: application/json" \
     -d '{"energie": "elektriciteit"}' "$SEF_URL/api/v1/mij/vergelijkingen"

# 2. status opvragen tot "klaar" of "fout" (wachtend, bezig, klaar, fout)
curl -s -H "Authorization: Bearer $SEF_SLEUTEL" "$SEF_URL/api/v1/mij/vergelijkingen/<id>"

Peil niet vaker dan om de paar seconden.