Elradar prognos-API
Öppet JSON-API för Elradars elprisprognos. Inga nycklar, ingen registrering och inga begränsningar utom vettig förbrukning. Alla svar är statiska filer som uppdateras av motorn varje timme.
| Grund-URL | https://elradar.se/api/ |
|---|---|
| Format | JSON (UTF-8), komprimeras med gzip |
| Prisenhet | kr/kWh – spotpris exklusive moms, energiskatt och avgifter |
| Tidszon | Europe/Stockholm för alla lokala tider; generated_at_utc och issued_at_utc är UTC |
| Uppdateras | Varje timme (samma källor som sajten) |
| Autentisering | Ingen |
| API-version | Fältet api_version i varje svar (nuvarande: 1) |
Endpoints
| Endpoint | Vad den returnerar |
|---|---|
GET /api/forecast.json |
Alla fyra elområden: åtta dygn med timpriser, osäkerhetsintervall och dagssammanfattning. Störst svar (~1 MB komprimerat). |
GET /api/forecast/{area}.json |
En enskild områdesprognos. {area} är SE1, SE2, SE3 eller SE4 (versaler). |
GET /api/now.json |
Aktuell timmes pris för alla fyra områden – liten och snabb. |
GET /api/history/{area}.json |
Utvärdering av hur bra prognosen varit: sparade liveprognoser kontra faktiskt utfall plus historiskt test. |
GET /api/health.json |
Status, tidpunkt för senaste uppdatering och lista över endpoints. |
Endast GET stöds. Okänd {area} ger 404 med {"error": "okänd endpoint eller elområde – använd SE1, SE2, SE3 eller SE4"}.
Exempel
1. Nuvarande timmes pris i SE3
curl https://elradar.se/api/now.json
Svar (avkortat):
{
"ok": true,
"api_version": 1,
"generated_at_stockholm": "2026-09-20T01:20:33.880203+02:00",
"time_zone": "Europe/Stockholm",
"price_unit": "kr/kWh",
"areas": {
"SE1": { "hour": "01:00", "price": 0.1875, "kind": "real" },
"SE2": { "hour": "01:00", "price": 0.152, "kind": "real" },
"SE3": { "hour": "01:00", "price": 0.132, "kind": "real" },
"SE4": { "hour": "01:00", "price": 0.214, "kind": "forecast" }
}
}
2. Hel områdesprognos (SE3)
curl https://elradar.se/api/forecast/SE3.json
Svar (avkortat till ett par timmar):
{
"ok": true,
"api_version": 1,
"area": "SE3",
"area_name": "Mellansverige",
"generated_at_stockholm": "2026-09-20T01:20:33.880203+02:00",
"today": "2026-09-20",
"time_zone": "Europe/Stockholm",
"price_unit": "kr/kWh",
"horizon_days": 8,
"days": [
{
"date": "2026-09-20",
"kind": "real",
"mean": 0.099,
"min": 0.0091,
"max": 0.348,
"min_hour": "00:00",
"max_hour": "20:00",
"cheapest_windows": ["00:00", "01:00", "02:00"],
"hours": [
{ "hour": "00:00", "price": 0.0091, "model_price": -0.2975,
"lo": 0.0091, "hi": 0.0091, "kind": "real" },
{ "hour": "01:00", "price": 0.132, "model_price": 0.118,
"lo": 0.05, "hi": 0.21, "kind": "real" }
]
}
]
}
3. Hur bra har prognosen varit (SE3)
curl https://elradar.se/api/history/SE3.json
Svar (avkortat):
{
"ok": true,
"api_version": 1,
"area": "SE3",
"live": {
"source": "live",
"definition": "Liveuppföljning: sparade prognoser jämförs med publicerat utfall när minst ett dygn har gått.",
"n_hours": 24,
"mae_kwh": 0.297,
"bias_kwh": -0.232,
"available_from": "2026-09-20",
"available_to": "2026-09-20",
"daily": [
{ "date": "2026-09-20", "n_hours": 24, "mae_kwh": 0.297,
"bias_kwh": -0.232, "mean_abs_actual_kwh": 0.099 }
],
"points": [
{ "target_local": "2026-09-20T00:00", "forecast": -0.3317, "actual": 0.0091,
"error": -0.3408, "lo": -0.8734, "hi": 0.348,
"lead_hours": 24.7, "issued_at_utc": "2026-09-18T21:20:20+00:00" }
]
},
"backtest": {
"source": "backtest",
"definition": "Historiskt test: ett dygn i taget utelämnades från träningen innan prognosen beräknades.",
"n_hours": 1416,
"mae_kwh": 0.326,
"bias_kwh": 0.003,
"available_from": "2026-07-23",
"available_to": "2026-09-19",
"daily": [
{ "date": "2026-07-23", "n_hours": 24, "mae_kwh": 0.32,
"bias_kwh": 0.248, "mean_abs_actual_kwh": null }
],
"points": [
{ "target_local": "2026-07-23T00:00", "forecast": 1.0597, "actual": 0.5472,
"error": 0.5125, "lo": null, "hi": null,
"lead_hours": null, "issued_at_utc": null }
]
}
}
live är null tills de allra första sparade prognoserna har fått ett utfall att jämföras mot. I backtest-punkterna är lo, hi, lead_hours och issued_at_utc null eftersom inget intervall sparades för de historiska körningarna.
Fältförklaringar
| Fält | Betydelse |
|---|---|
price | Det pris som visas: publicerat spotpris där det finns, annars modellprognos. kr/kWh. |
model_price | Modellens egna prognos för timmen, oavsett om priset är publicerat. Används när man vill jämföra modellen mot marknadens pris. |
lo / hi | Osäkerhetsintervall (lägre respektive övre gräns) runt prognosen. Samma som price när priset är publicerat. |
kind | real = publicerat pris från ENTSO-E; forecast = modellprognos. (Sajten använder även partial internt för halvpublicerade dygn – i API:t slår det ut antingen real eller forecast per timme.) |
hour | Timmes start i lokal tid (Europe/Stockholm), formatet HH:00. |
date / today | Lokalt datum, ÅÅÅÅ-MM-DD. |
mean / min / max | Dagssammanfattning: medelvärde, lägsta respektive högsta timpris. |
min_hour / max_hour | Klockslag för dygnets lägsta respektive högsta timme. |
cheapest_windows | De tre billigaste timmarna i dygnet. |
mae_kwh | Genomsnittlig skillnad mellan prognos och faktiskt pris i kr/kWh (summa av absoluta avvikelser dividerad med antal timmar). Lägre är bättre. |
bias_kwh | Snedvridning i kr/kWh: negativt betyder att prognosen låg för lågt i genomsnitt. |
band_coverage_pct | Andel timmar där det faktiska priset låg inom osäkerhetsintervallet, i procent. |
lead_hours | Timmar mellan när prognosen sparades och den tid den gäller (liveuppföljning kräver minst 24 h). |
issued_at_utc | När prognosen sparades, i UTC. |
cost_settings | Endast i /api/forecast.json: siffror för att räkna konsumentpris (energiskatt, moms, rörlig avgift). Se nedan. |
Konsumentpris (valfritt påslag)
API-priser är alltid spot. Vill du ha ett pris nära vad en hushållskund faktiskt betalar, lägg till energiskatt, en eventuell rörlig avgift och moms enligt cost_settings i /api/forecast.json:
konsumentpris = (spot + energy_tax_sek_kwh + rörlig_avgift_sek_kwh) × (1 + vat_rate)
Siffrorna är gemensamma för hela Sverige och uppdateras i takt med skatteregler. Fasta nät- och elhandelsavgifter ingår inte – de skiljer sig mellan avtal.
Fel och status
| Status | Vad det betyder |
|---|---|
200 | OK. Svarsobjektet börjar alltid med "ok": true. |
404 | Okänd endpoint eller elområde. JSON-fel: {"error": "…"}. |
500 | Sällsynt: publiceringen har misslyckats. Sista lyckade datan levereras kvar i stället; kolla /api/health.json för att se hur färsk datan är. |
Svaren är statiska filer: om uppdateringen misslyckas levereras sista lyckade versionen. Jämför generated_at_stockholm mot klockan för att se hur färsk datan är.
Rekommenderat användningsmönster
- Polla
/api/now.jsoneller/api/health.jsonför att se när den senaste uppdateringen skedde – inte för varje pris. - Hämta hela
/api/forecast.jsonen gång i timmen (eller vid behov) och cacha lokalt; det är samma data sajten använder. - För ett enda elområde är
/api/forecast/{area}.jsonmindre och snabbare. - Respektera
Cache-Control: no-cache– servern skickar ETag så en oändrad timma ger304och minimal trafik.