Välkommen till utvecklardokumentationen för Spotprisoptimering. Här hittar du allt du behöver för att integrera våra tjänster i dina egna applikationer, oavsett om du använder PHP, Python, JavaScript eller Shelly-skript.
https://www.spotprisoptimering.se/api/
HTTPS krävs
Analyserar 24h prisprognos och rekommenderar optimala tider för att ladda och sälja från batteriet – precis som Tibber, men med din egen hårdvara!
Analyserar 24h prisprognos och schemalägger laddning till billigaste timmarna. Hanterar akutladdning, tidskritisk laddning och optimerar för din avfärdstid.
Huvud-API för värmepumpsstyrning. Returnerar signal baserad på aktuellt elpris och användarens tröskelvärden.
| Parameter | Typ | Beskrivning |
|---|---|---|
api_key |
string | Din API-nyckel |
area |
string | Elområde (SE1, SE2, SE3, SE4). Default: användarens inställning |
curl "https://www.spotprisoptimering.se/api/signal.php?api_key=DIN_API_NYCKEL"
{
"success": true,
"timestamp": "2026-03-05T22:05:05+01:00",
"api_version": "2.0.0",
"signal": "SAVE",
"message": "Högt pris - sänk temperaturen temporärt",
"price": {
"current": 1.346,
"area": "SE4",
"unit": "SEK\/kWh",
"source": "cache"
},
"thresholds": {
"low": 0.5,
"high": 1.1
},
"level": "HIGH",
"recommendation": {
"short": "Spara!",
"action": "Sänk 2-3°C eller aktivera nattsänkning",
"duration": "nästa timme"
}
}
Avancerat API för elbilsladdning med prediktiv logik. Analyserar 24h prisprognos och schemalägger laddning till billigaste timmarna. Hanterar akutladdning, tidskritisk laddning och optimerar för avfärdstid.
| Parameter | Typ | Beskrivning |
|---|---|---|
api_key |
string | Din API-nyckel |
area |
string | Elområde (SE1-SE4). Default: användarens inställning |
hours |
integer | Antal timmar prognos (max 72). Default: 48 |
action |
string | Välj "signal" för enkel signal |
curl "https://www.spotprisoptimering.se/api/car.php?api_key=DIN_API_NYCKEL&hours=24"
{
"success": true,
"timestamp": "2026-03-05T22:05:05+01:00",
"api_version": "2.2.0",
"vehicle": {
"name": "Min elbil",
"brand": null,
"model": null,
"battery_capacity": 60,
"current_charge": 30,
"target_charge": 80,
"min_charge": 50,
"charger_power": 11,
"departure_time": "07:30:00",
"smart_charging": true,
"is_active": false
},
"price_forecast": {
"area": "SE4",
"hours": 48,
"current_price": 1.346,
"min_price_24h": 0.638,
"max_price_24h": 2.429,
"avg_price_24h": 1.283,
"forecast": [],
"source": "database"
},
"charging": {
"can_achieve_target": true,
"hours_to_departure": 10,
"hours_needed": 3,
"current_kwh": 18,
"needed_kwh": 30,
"schedule": [],
"total_energy": 33,
"total_cost": 37.48,
"avg_price": 1.136,
"final_charge": 85,
"alerts": [
{
"level": "critical",
"message": "Batteriet är under 50% - AKUTLADDNING!"
}
],
"recommendations": []
},
"predictive": {
"best_charge_hour": 4,
"best_charge_price": 0.638,
"min_price_24h": 0.638,
"max_price_24h": 2.429,
"cheapest_windows": []
},
"chargers": [],
"recommendations": [],
"alerts": [
{
"level": "critical",
"message": "Batteriet är under 50% - AKUTLADDNING!"
}
],
"signal": "CHARGE"
}
Enkelt textbaserat API för Shelly-reläer och enkla IoT-enheter. Returnerar bara en textsträng baserat på samma prediktiva logik som car.php.
| Parameter | Typ | Beskrivning |
|---|---|---|
api_key |
string | Din API-nyckel |
curl "https://www.spotprisoptimering.se/api/car_signal.php?api_key=DIN_API_NYCKEL"
"CHARGE"
API för varmvattenstyrning. Returnerar enkel text eller JSON beroende på format-parameter.
| Parameter | Typ | Beskrivning |
|---|---|---|
api_key |
string | Din API-nyckel |
format |
string | Välj "json" för JSON-svar, annars text |
curl "https://www.spotprisoptimering.se/api/water.php?api_key=DIN_API_NYCKEL"
null
NORMAL
API för solcells- och batteristyrning med prediktiv laddning. Analyserar 24h prognos och planerar optimal laddning/sälj.
| Parameter | Typ | Beskrivning |
|---|---|---|
api_key |
string | Din API-nyckel |
action |
string | Välj "status", "optimize" eller "signal" |
format |
string | Välj "json" (default) eller "text" för enkel signal |
curl "https://www.spotprisoptimering.se/api/solar.php?api_key=DIN_API_NYCKEL"
{
"success": true,
"timestamp": "2026-03-07T14:30:00+01:00",
"api_version": "2.0.0",
"user_id": 1,
"area": "SE3",
"settings": {
"has_solar": true,
"has_battery": true,
"solar_capacity": 10,
"solar_orientation": "south",
"solar_tilt": 35,
"battery_capacity": 13.5,
"battery_power": 5,
"battery_efficiency": 0.95,
"current_soc": 45,
"strategy": "trading",
"is_active": true
},
"current": {
"price": 0.52,
"hour": 14,
"price_level": "LOW"
},
"forecast": {
"min_price_24h": 0.45,
"max_price_24h": 1.85,
"best_charge_hour": 4,
"best_charge_price": 0.45,
"best_discharge_hour": 19,
"best_discharge_price": 1.85,
"potential_profit": 1.33,
"next_24h": []
},
"recommendation": {
"action": "prepare_for_sale",
"message": "Ladda nu för att sälja kl 19:00 (pris 1.85 kr)",
"priority": "high",
"suggested_power": 5
},
"solar": {
"estimated_today": 45.5,
"self_consumption_rate": "high"
}
}
Öppet API för elpriser. Kräver ingen API-nyckel. Returnerar priser för valt datum och område.
| Parameter | Typ | Beskrivning |
|---|---|---|
area |
string | Elområde (SE1, SE2, SE3, SE4). Default: SE3 |
date |
string | Datum (YYYY-MM-DD). Default: idag |
days |
integer | Antal dagar (max 7). Default: 1 |
curl "https://www.spotprisoptimering.se/api/prices.php?area=SE4&days=2"
{
"success": true,
"area": "SE4",
"currency": "SEK",
"data": [
{
"date": "2026-03-05",
"prices": [
{
"hour": 0,
"price": 1.137,
"level": "NORMAL"
},
{
"hour": 1,
"price": 1.135,
"level": "NORMAL"
},
{
"hour": 2,
"price": 1.135,
"level": "NORMAL"
},
{
"hour": 3,
"price": 1.138,
"level": "NORMAL"
},
{
"hour": 4,
"price": 1.198,
"level": "NORMAL"
},
{
"hour": 5,
"price": 1.477,
"level": "HIGH"
},
{
"hour": 6,
"price": 1.728,
"level": "HIGH"
},
{
"hour": 7,
"price": 1.554,
"level": "HIGH"
},
{
"hour": 8,
"price": 1.078,
"level": "NORMAL"
},
{
"hour": 9,
"price": 0.746,
"level": "NORMAL"
},
{
"hour": 10,
"price": 0.638,
"level": "LOW"
},
{
"hour": 11,
"price": 0.638,
"level": "LOW"
},
{
"hour": 12,
"price": 0.64,
"level": "LOW"
},
{
"hour": 13,
"price": 0.663,
"level": "NORMAL"
},
{
"hour": 14,
"price": 0.767,
"level": "NORMAL"
},
{
"hour": 15,
"price": 1.248,
"level": "NORMAL"
},
{
"hour": 16,
"price": 1.572,
"level": "HIGH"
},
{
"hour": 17,
"price": 2.429,
"level": "HIGH"
},
{
"hour": 18,
"price": 1.685,
"level": "HIGH"
},
{
"hour": 19,
"price": 1.527,
"level": "HIGH"
},
{
"hour": 20,
"price": 1.35,
"level": "HIGH"
},
{
"hour": 21,
"price": 1.196,
"level": "NORMAL"
},
{
"hour": 22,
"price": 1.346,
"level": "NORMAL"
},
{
"hour": 23,
"price": 1.178,
"level": "NORMAL"
}
],
"statistics": {
"min": 0.638,
"max": 2.429,
"avg": 1.217
}
}
]
}
curl "https://www.spotprisoptimering.se/api/signal.php?api_key=DIN_API_NYCKEL"
curl -H "Authorization: Bearer DIN_API_NYCKEL" https://www.spotprisoptimering.se/api/signal.php
curl "https://www.spotprisoptimering.se/api/prices.php?area=SE3"
curl "https://www.spotprisoptimering.se/api/solar.php?api_key=DIN_API_NYCKEL&action=optimize"
curl "https://www.spotprisoptimering.se/api/car.php?api_key=DIN_API_NYCKEL&hours=24"
curl "https://www.spotprisoptimering.se/api/car_signal.php?api_key=DIN_API_NYCKEL"
<?php $api_key = "DIN_API_NYCKEL"; $url = "https://www.spotprisoptimering.se/api/signal.php?api_key=" . $api_key; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); echo "Signal: " . $data["signal"];
<?php
$api_key = "DIN_API_NYCKEL";
$url = "https://www.spotprisoptimering.se/api/car.php";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer " . $api_key
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
echo "Laddningsbehov: " . ($data["signal"] ?? "okänt");
<?php
$api_key = "DIN_API_NYCKEL";
$url = "https://www.spotprisoptimering.se/api/solar.php?api_key=" . $api_key;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$data = json_decode($response, true);
if ($data["recommendation"]["action"] === "prepare_for_sale") {
echo "⚡ Ladda nu inför toppris kl " . $data["forecast"]["best_discharge_hour"] . ":00";
echo "💰 Potentiell vinst: " . $data["forecast"]["potential_profit"] . " kr/kWh";
}
<?php
$api_key = "DIN_API_NYCKEL";
$url = "https://www.spotprisoptimering.se/api/car.php?api_key=" . $api_key;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$data = json_decode($response, true);
echo "Nuvarande laddning: " . $data["vehicle"]["current_charge"] . "%\n";
echo "Behöver: " . $data["charging"]["needed_kwh"] . " kWh\n";
echo "Kostnad: " . $data["charging"]["total_cost"] . " kr\n";
if (!empty($data["predictive"]["best_charge_hour"])) {
echo "Bästa laddningstid: " . $data["predictive"]["best_charge_hour"] . ":00 (pris " . $data["predictive"]["best_charge_price"] . " kr)";
}
import requests
api_key = "DIN_API_NYCKEL"
url = f"https://www.spotprisoptimering.se/api/signal.php?api_key={api_key}"
response = requests.get(url)
data = response.json()
print(f"Signal: {data["signal"]}")
print(f"Pris: {data["price"]["current"]} kr")
import requests
api_key = "DIN_API_NYCKEL"
url = "https://www.spotprisoptimering.se/api/car.php"
headers = {"Authorization": f"Bearer {api_key}"}
response = requests.get(url, headers=headers)
data = response.json()
print(f"Laddning: {data["signal"]}")
import requests
import json
api_key = "DIN_API_NYCKEL"
url = f"https://www.spotprisoptimering.se/api/solar.php?api_key={api_key}"
response = requests.get(url)
data = response.json()
print(f"🎯 Rekommendation: {data["recommendation"]["message"]}")
print(f"⚡ Ladda kl: {data["forecast"]["best_charge_hour"]}:00")
print(f"💰 Sälj kl: {data["forecast"]["best_discharge_hour"]}:00")
print(f"📈 Potential: {data["forecast"]["potential_profit"]} kr/kWh")
import requests
api_key = "DIN_API_NYCKEL"
url = f"https://www.spotprisoptimering.se/api/car.php?api_key={api_key}&hours=24"
response = requests.get(url)
data = response.json()
print(f"🚗 {data["vehicle"]["name"]}")
print(f"🔋 Laddning: {data["vehicle"]["current_charge"]}% → {data["charging"]["final_charge"]}%")
print(f"💰 Kostnad: {data["charging"]["total_cost"]} kr")
if data["predictive"]["best_charge_hour"]:
print(f"⏰ Bäst att ladda kl {data["predictive"]["best_charge_hour"]}:00")
const apiKey = "DIN_API_NYCKEL";
fetch(`https://www.spotprisoptimering.se/api/signal.php?api_key=${apiKey}`)
.then(response => response.json())
.then(data => {
console.log("Signal:", data.signal);
console.log("Pris:", data.price.current, "kr");
console.log("Rekommendation:", data.recommendation.action);
})
.catch(error => console.error("Fel:", error));
fetch("https://www.spotprisoptimering.se/api/car.php", {
headers: {
"Authorization": `Bearer ${apiKey}`
}
})
.then(response => response.json())
.then(data => {
if (data.alerts.length > 0) {
console.log("Varning:", data.alerts[0].message);
}
});
async function getBatteryStrategy() {
const apiKey = "DIN_API_NYCKEL";
try {
const response = await fetch(`https://www.spotprisoptimering.se/api/solar.php?api_key=${apiKey}`);
const data = await response.json();
document.getElementById("battery-status").innerHTML = `
<div style="background: ${data.recommendation.priority === "high" ? "#10b981" : "#f59e0b"}; padding: 1rem; border-radius: 0.5rem;">
<strong>${data.recommendation.message}</strong><br>
<small>Ladda vid ${data.forecast.best_charge_hour}:00, sälj vid ${data.forecast.best_discharge_hour}:00</small>
</div>
`;
} catch (error) {
console.error("Fel vid API-anrop:", error);
}
}
async function getCarCharging() {
const apiKey = "DIN_API_NYCKEL";
try {
const response = await fetch(`https://www.spotprisoptimering.se/api/car.php?api_key=${apiKey}`);
const data = await response.json();
if (data.alerts.length > 0) {
document.getElementById("car-alert").innerHTML = `
<div style="background: #fee2e2; color: #991b1b; padding: 1rem; border-radius: 0.5rem;">
⚠️ ${data.alerts[0].message}
</div>
`;
}
document.getElementById("car-info").innerHTML = `
<div>🔋 Nu: ${data.vehicle.current_charge}% → Mål: ${data.vehicle.target_charge}%</div>
<div>💰 Kostnad: ${data.charging.total_cost} kr</div>
<div>⏰ Bäst laddning: ${data.predictive.best_charge_hour}:00</div>
`;
} catch (error) {
console.error("Fel:", error);
}
}
const axios = require("axios");
const apiKey = "DIN_API_NYCKEL";
axios.get(`https://www.spotprisoptimering.se/api/signal.php?api_key=${apiKey}`)
.then(response => {
console.log("Signal:", response.data.signal);
console.log("Pris:", response.data.price.current);
})
.catch(error => {
console.error("API-fel:", error.message);
});
const express = require("express");
const axios = require("axios");
const app = express();
app.get("/styr-varmepump", async (req, res) => {
try {
const apiKey = process.env.API_KEY;
const response = await axios.get(
`https://www.spotprisoptimering.se/api/signal.php?api_key=${apiKey}`
);
const signal = response.data.signal;
// Styr värmepumpen baserat på signal
if (signal === "HEAT") {
// Slå på pumpen
await styrPump(true);
} else if (signal === "SAVE") {
// Sänk temperaturen
await sänkTemperatur(2);
}
res.json({ success: true, signal });
} catch (error) {
res.status(500).json({ error: error.message });
}
});
# configuration.yaml
rest_command:
spotpris_signal:
url: "https://www.spotprisoptimering.se/api/signal.php?api_key=API_NYCKEL"
automation:
- alias: "Styr värmepump efter pris"
trigger:
platform: time_pattern
minutes: "/5"
action:
- service: rest_command.spotpris_signal
# configuration.yaml
sensor:
- platform: rest
name: "Spotpris Signal"
resource: "https://www.spotprisoptimering.se/api/signal.php?api_key=API_NYCKEL"
value_template: "{{ value_json.signal }}"
json_attributes:
- price
- level
- recommendation
scan_interval: 300
- platform: template
sensors:
spotpris_action:
value_template: "{{ state_attr('sensor.spotpris_signal', 'recommendation').action }}"
friendly_name: "Rekommendation"
# configuration.yaml
rest_command:
spotpris_car:
url: "https://www.spotprisoptimering.se/api/car_signal.php?api_key=API_NYCKEL"
automation:
- alias: "Ladda bil vid lågt pris"
trigger:
platform: time_pattern
minutes: "/10"
condition:
condition: template
value_template: "{{ states('sensor.spotpris_car') == 'CHARGE' }}"
action:
- service: switch.turn_on
entity_id: switch.charger
// Shelly script för värmepumpsstyrning
function checkPrice() {
Shelly.call("HTTP.GET", {
url: "https://www.spotprisoptimering.se/api/signal.php?api_key=API_NYCKEL"
}, function(response) {
try {
let data = JSON.parse(response.body);
let signal = data.signal;
if (signal === "HEAT") {
// Slå på relä (starta pump)
Shelly.call("Switch.Set", { id: 0, on: true });
console.log("Lågt pris - startar pump");
} else if (signal === "SAVE") {
// Stäng av relä (stoppa pump)
Shelly.call("Switch.Set", { id: 0, on: false });
console.log("Högt pris - stoppar pump");
}
} catch (e) {
console.log("Fel vid parsning:", e);
}
});
}
// Kör var 15:e minut
Timer.set(900000, true, checkPrice);
// Shelly script för bil-laddning (prediktiv)
function checkCarSignal() {
Shelly.call("HTTP.GET", {
url: "https://www.spotprisoptimering.se/api/car_signal.php?api_key=API_NYCKEL"
}, function(response) {
let signal = response.body; // Ren text
if (signal === "CHARGE" || signal === "CHARGE_NOW") {
// Slå på relä (starta laddning)
Shelly.call("Switch.Set", { id: 0, on: true });
console.log("Laddar bil -", signal);
} else {
// Stäng av relä
Shelly.call("Switch.Set", { id: 0, on: false });
console.log("Väntar med laddning -", signal);
}
});
}
// Kör var 10:e minut
Timer.set(600000, true, checkCarSignal);
// Shelly script för varmvatten
function checkWaterHeater() {
Shelly.call("HTTP.GET", {
url: "https://www.spotprisoptimering.se/api/water.php?api_key=API_NYCKEL"
}, function(response) {
let signal = response.body;
if (signal === "START") {
Shelly.call("Switch.Set", { id: 0, on: true });
Shelly.call("Notify", { message: "Värmer vatten - lågt pris" });
} else if (signal === "STOPP") {
Shelly.call("Switch.Set", { id: 0, on: false });
}
});
}
// Kör var 30:e minut
Timer.set(1800000, true, checkWaterHeater);
| HTTP Status | Felkod | Beskrivning | Lösning |
|---|---|---|---|
| 401 | MISSING_API_KEY |
Ingen API-nyckel skickades med | Lägg till ?api_key=DIN_NYCKEL i URL:en eller Authorization: Bearer header |
| 401 | INVALID_API_KEY |
Ogiltig eller inaktiv API-nyckel | Kontrollera att nyckeln är rätt och aktiv i dashboarden |
| 402 | SUBSCRIPTION_INACTIVE |
Prenumerationen är inte aktiv | Förnya din prenumeration i dashboarden |
| 404 | NOT_FOUND |
Endpoint hittades inte | Kontrollera att URL:en är korrekt |
| 405 | METHOD_NOT_ALLOWED |
Fel HTTP-metod användes | Använd GET (endast GET stöds) |
| 429 | RATE_LIMIT_EXCEEDED |
För många anrop | Max 100 anrop per minut. Vänta en stund. |
| 500 | SERVER_ERROR |
Internt serverfel | Försök igen om några sekunder. Kontakta support om problemet kvarstår. |
| 503 | DB_ERROR |
Tillfälligt databasfel | Försök igen om några sekunder |
| "Ingen API-nyckel" | Du har glömt att skicka med ?api_key= i URL:en |
| "Ogiltig API-nyckel" | Kontrollera att du kopierat rätt nyckel från dashboarden |
| "Prenumeration ej aktiv" | Förnya din prenumeration i dashboarden |
| Tomt svar eller HTML | Du anropar troligen fel URL - kontrollera att du använder /api/... |
Standardvärdena är:
Dessa värden kan justeras av varje användare i dashboarden under "Inställningar". API:et använder alltid användarens egna tröskelvärden.
När priset är högt rekommenderar vi att du:
När priset är lågt rekommenderar vi att du:
Har du fler frågor? Kontakta oss på support@spotprisoptimering.se
Här hittar du färdiga konfigurationsfiler för Home Assistant. Ladda ner, kopiera till din server, ändra API-nyckel – klart!
Välj en fil och kopiera innehållet direkt:
Glöm inte att byta ut DIN_API_NYCKEL mot din faktiska API-nyckel i alla filer! Du hittar din nyckel i dashboarden.
Få din API-nyckel direkt i dashboarden och börja integrera på 5 minuter. Första månaden gratis! Med vår nya prediktiva batteriladdning och billaddning kan du maximera din solel och spara ännu mer.