SPOTPULS OPEN REST API (V1) — FREE, NO API KEY, CORS *
openapi.json →
Spotpuls (https://spotpuls.app) provides a free, zero-key, CORS-enabled REST & automation API delivering official day-ahead electricity spot prices together with an empirically calibrated 7-day (168 h) Log-Merit + Hist-GBDT hourly forecast (including negative price regimes and conformal probability bands) across all 40 European bidding zones. Ten native output formats allow direct integration into smart-home hubs, relays, EV chargers, microcontrollers, calendars, spreadsheets, monitoring stacks, and websites.
1. HOURLY SPOT + 7-DAY FORECAST + SMART AUTOMATION
GET https://spotpuls.app/api/v1/prices?zone=FI&vat=1&window=3&format=json
zone— Any of 40 European zones (FI,SE1..SE4,NO1..NO5,DK1..DK2,EE,LV,LT,DE-LU,FR,NL,ES,IT-North,PL,GB).vat—1(incl. national electricity VAT, default) or0(VAT 0 %).currency—local(snt, öre, øre, ct, p, gr, Ft, Kč),eur_cents,eur_kwh, oreur_mwh.window—1..24(default3): computescheapestContiguousWindowandcheapestHoursfor relays, boilers, heat pumps, and EVs.margin/transfer/threshold— Optional contract add-ons & price trigger threshold.format—json,compact(shelly),ha,evcc,victron,csv,ical,prometheus,plain,badge, orwidget.
2. CLEAN INTEGRATION SHORTCUT URLS
GET https://spotpuls.app/api/v1/zones GET https://spotpuls.app/api/v1/ha/FI.json?window=3 GET https://spotpuls.app/api/v1/shelly/FI.json?window=3 GET https://spotpuls.app/api/v1/evcc/DE-LU.json GET https://spotpuls.app/api/v1/ical/FI.ics?window=3 GET https://spotpuls.app/api/v1/metrics?zone=FI GET https://spotpuls.app/api/v1/plain/FI?field=run_now&window=33. LIVE SVG BADGE & IFRAME MINI-CHART WIDGET
<iframe src="https://spotpuls.app/api/v1/widget/FI?theme=light" width="100%" height="198" style="border:0;max-width:460px;" loading="lazy"></iframe>
READY-TO-USE APPLICATION & HARDWARE INTEGRATIONS
HOME ASSISTANT (CONFIGURATION.YAML + APEXCHARTS)
rest:
- resource: "https://spotpuls.app/api/v1/ha/FI.json?window=3&transfer=6.80"
scan_interval: 300
sensor:
- name: "Spotpuls Spot Price"
value_template: "{{ value_json.state }}"
unit_of_measurement: "snt/kWh"
json_attributes:
- total_price
- today_min
- today_max
- raw_today
- raw_tomorrow
- forecast_7d
binary_sensor:
- name: "Spotpuls Cheapest 3h Window Active"
value_template: "{{ value_json.run_contiguous_now }}"
SHELLY PLUS / GEN2 / GEN3 / PRO LOCAL RELAY SCRIPT (< 500 B)
// Runs on Shelly Plus 1PM / Pro 3EM — switches relay ON during cheapest 3h window
const URL = "https://spotpuls.app/api/v1/shelly/FI.json?window=3";
function pollSpotpuls() {
Shelly.call("HTTP.GET", { url: URL, timeout: 10 }, function (res, err) {
if (err || !res || res.code !== 200) return;
const d = JSON.parse(res.body);
const shouldRun = d.runContig === 1; // or d.runCheap === 1
Shelly.call("Switch.Set", { id: 0, on: shouldRun });
});
}
pollSpotpuls();
Timer.set(300000, true, pollSpotpuls);
EVCC.IO DYNAMIC EV & BATTERY CHARGING TARIFF (EVCC.YAML)
tariffs:
currency: EUR
grid:
type: custom
forecast:
source: http
uri: https://spotpuls.app/api/v1/evcc/DE-LU.json?vat=1
jq: .
cache: 15m
ESPHOME / ESP32 / APPLE SHORTCUTS / CURL / PLC
# Single numeric value (current spot price):
curl -s "https://spotpuls.app/api/v1/plain/FI?field=spot"
# Binary 1 / 0 relay trigger (1 if inside cheapest 4h block):
curl -s "https://spotpuls.app/api/v1/plain/FI?field=run_now&window=4"
# Google Sheets live 192-hour table:
=IMPORTDATA("https://spotpuls.app/api/v1/prices?zone=FI&vat=1&format=csv")
# Apple / Google / Outlook Calendar live subscription URL:
https://spotpuls.app/api/v1/ical/FI.ics?window=3
JAVASCRIPT / TYPESCRIPT SDK-FREE FETCH
const res = await fetch("https://spotpuls.app/api/v1/prices?zone=SE3&vat=1&window=4");
const data = await res.json();
console.log(data.current.spotPrice, data.meta.unit);
console.log("Cheapest 4h:", data.automation.cheapestContiguousWindow);
PYTHON / PANDAS & PROMETHEUS / GRAFANA
import pandas as pd
df = pd.read_csv("https://spotpuls.app/api/v1/prices?zone=FI&vat=1&format=csv", comment="#")
print(df.head())
# Prometheus scrape config (prometheus.yml):
# metrics_path: /api/v1/metrics
# params: { zone: ["FI"] }
ALL 40 SUPPORTED EUROPEAN BIDDING ZONES & REGIONAL FORECAST MODELS
| Zone Code | Region / Bidding Zone | Power Exchange | IANA Timezone | Wind / Solar Cap. | Live API & Integration Feeds |
|---|---|---|---|---|---|
FI |
Suomi / Finland (FI) | Nord Pool | Europe/Helsinki |
8450 MW / 1250 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
SE1 |
SE1 — Luleå / Norra Norrland | Nord Pool | Europe/Stockholm |
3400 MW / 120 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
SE2 |
SE2 — Sundsvall / Södra Norrland | Nord Pool | Europe/Stockholm |
6100 MW / 260 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
SE3 |
SE3 — Stockholm / Mellansverige | Nord Pool | Europe/Stockholm |
4800 MW / 2400 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
SE4 |
SE4 — Malmö / Södra Sverige | Nord Pool | Europe/Stockholm |
3300 MW / 1450 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
NO1 |
NO1 — Oslo / Øst-Norge | Nord Pool | Europe/Oslo |
950 MW / 350 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
NO2 |
NO2 — Kristiansand / Sør-Norge | Nord Pool | Europe/Oslo |
1750 MW / 250 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
NO3 |
NO3 — Trondheim / Midt-Norge | Nord Pool | Europe/Oslo |
2050 MW / 80 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
NO4 |
NO4 — Tromsø / Nord-Norge (0 % MVA) | Nord Pool | Europe/Oslo |
980 MW / 20 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
NO5 |
NO5 — Bergen / Vest-Norge | Nord Pool | Europe/Oslo |
520 MW / 90 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
DK1 |
DK1 — Vestdanmark (Jylland & Fyn) | Nord Pool | Europe/Copenhagen |
5400 MW / 2900 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
DK2 |
DK2 — Østdanmark (Sjælland & Bornholm) | Nord Pool | Europe/Copenhagen |
2300 MW / 1250 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
EE |
Eesti / Estonia (EE) | Nord Pool | Europe/Tallinn |
780 MW / 960 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
LV |
Latvija / Latvia (LV) | Nord Pool | Europe/Riga |
180 MW / 620 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
LT |
Lietuva / Lithuania (LT) | Nord Pool | Europe/Vilnius |
1520 MW / 1650 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
DE-LU |
Deutschland & Luxemburg (DE-LU) | EPEX Spot | Europe/Berlin |
72500 MW / 96000 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
AT |
Österreich / Austria (AT) | EPEX Spot / EXAA | Europe/Vienna |
4050 MW / 7800 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
NL |
Nederland / Netherlands (NL) | EPEX Spot | Europe/Amsterdam |
11500 MW / 24500 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
BE |
België / Belgique (BE) | EPEX Spot | Europe/Brussels |
5600 MW / 10200 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
FR |
France (FR) | EPEX Spot | Europe/Paris |
23500 MW / 22500 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
CH |
Schweiz / Suisse / Svizzera (CH) | EPEX Spot CH | Europe/Zurich |
100 MW / 6800 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
ES |
España / Spain (ES — OMIE) | OMIE (PVPC) | Europe/Madrid |
31200 MW / 32500 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
PT |
Portugal (PT — OMIE) | OMIE | Europe/Lisbon |
5900 MW / 4600 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
GB |
Great Britain (GB) | EPEX / Nord Pool UK | Europe/London |
30200 MW / 17200 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
IE-SEM |
Ireland Single Electricity Market (IE-SEM) | SEMOpx | Europe/Dublin |
6100 MW / 1200 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
IT-North |
Italia Nord (Milano / Torino / Venezia) | GME | Europe/Rome |
600 MW / 14500 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
IT-Centre-North |
Italia Centro-Nord (Firenze / Toscana / Marche) | GME | Europe/Rome |
450 MW / 4200 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
IT-Centre-South |
Italia Centro-Sud (Roma / Napoli / Lazio) | GME | Europe/Rome |
2400 MW / 5800 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
IT-South |
Italia Sud (Puglia / Calabria / Basilicata) | GME | Europe/Rome |
5600 MW / 6200 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
IT-Sicily |
Italia Sicilia (Palermo / Catania) | GME | Europe/Rome |
2300 MW / 2900 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
IT-Sardinia |
Italia Sardegna (Cagliari / Sassari) | GME | Europe/Rome |
1250 MW / 1650 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
PL |
Polska / Poland (PL — TGE) | TGE (RDN) | Europe/Warsaw |
10200 MW / 19500 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
CZ |
Česko / Czechia (CZ — OTE) | OTE | Europe/Prague |
360 MW / 4100 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
SK |
Slovensko / Slovakia (SK — OKTE) | OKTE | Europe/Bratislava |
50 MW / 1150 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
HU |
Magyarország / Hungary (HU — HUPX) | HUPX | Europe/Budapest |
330 MW / 7100 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
RO |
România / Romania (RO — OPCOM) | OPCOM | Europe/Bucharest |
3150 MW / 4200 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
BG |
България / Bulgaria (BG — IBEX) | IBEX | Europe/Sofia |
720 MW / 4100 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
SI |
Slovenija / Slovenia (SI — BSP) | BSP SouthPool | Europe/Ljubljana |
20 MW / 1350 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
HR |
Hrvatska / Croatia (HR — CROPEX) | CROPEX | Europe/Zagreb |
1280 MW / 850 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |
GR |
Ελλάδα / Greece (GR — HEnEx) | HEnEx | Europe/Athens |
5350 MW / 8200 MW | JSON · HA · Shelly · EVCC · CSV · iCal · Widget · Badge |