ELRADAR.SE

Prognos-API · dokumentation

← Till prognossidan

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-URLhttps://elradar.se/api/
FormatJSON (UTF-8), komprimeras med gzip
Prisenhetkr/kWh – spotpris exklusive moms, energiskatt och avgifter
TidszonEurope/Stockholm för alla lokala tider; generated_at_utc och issued_at_utc är UTC
UppdaterasVarje timme (samma källor som sajten)
AutentiseringIngen
API-versionFältet api_version i varje svar (nuvarande: 1)

Endpoints

EndpointVad 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ältBetydelse
priceDet pris som visas: publicerat spotpris där det finns, annars modellprognos. kr/kWh.
model_priceModellens egna prognos för timmen, oavsett om priset är publicerat. Används när man vill jämföra modellen mot marknadens pris.
lo / hiOsäkerhetsintervall (lägre respektive övre gräns) runt prognosen. Samma som price när priset är publicerat.
kindreal = 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.)
hourTimmes start i lokal tid (Europe/Stockholm), formatet HH:00.
date / todayLokalt datum, ÅÅÅÅ-MM-DD.
mean / min / maxDagssammanfattning: medelvärde, lägsta respektive högsta timpris.
min_hour / max_hourKlockslag för dygnets lägsta respektive högsta timme.
cheapest_windowsDe tre billigaste timmarna i dygnet.
mae_kwhGenomsnittlig skillnad mellan prognos och faktiskt pris i kr/kWh (summa av absoluta avvikelser dividerad med antal timmar). Lägre är bättre.
bias_kwhSnedvridning i kr/kWh: negativt betyder att prognosen låg för lågt i genomsnitt.
band_coverage_pctAndel timmar där det faktiska priset låg inom osäkerhetsintervallet, i procent.
lead_hoursTimmar mellan när prognosen sparades och den tid den gäller (liveuppföljning kräver minst 24 h).
issued_at_utcNär prognosen sparades, i UTC.
cost_settingsEndast 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

StatusVad det betyder
200OK. Svarsobjektet börjar alltid med "ok": true.
404Okänd endpoint eller elområde. JSON-fel: {"error": "…"}.
500Sä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