curl --request GET \
--url https://energy-api.flatpeak.com/devices/{device_id}/settings \
--header 'Authorization: Bearer <token>'import requests
url = "https://energy-api.flatpeak.com/devices/{device_id}/settings"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://energy-api.flatpeak.com/devices/{device_id}/settings', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://energy-api.flatpeak.com/devices/{device_id}/settings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://energy-api.flatpeak.com/devices/{device_id}/settings"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://energy-api.flatpeak.com/devices/{device_id}/settings")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://energy-api.flatpeak.com/devices/{device_id}/settings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"object": "device_settings",
"device_id": "dev_63a6087272941ef077a8fd3e",
"supported": [
"battery.backup_reserve_percent",
"battery.strategy",
"battery.storm_mode_enabled",
"battery.export_rule",
"battery.charge_from_grid_enabled",
"battery.one_off_charge"
],
"battery": {
"backup_reserve_percent": 20,
"strategy": "SELF_POWER",
"storm_mode_enabled": true,
"export_rule": "BATTERY_OK",
"charge_from_grid_enabled": true,
"one_off_charge": false
},
"sync_status": "IN_SYNC",
"updated_by": "OEM",
"time_updated": "2026-08-31T09:12:44Z",
"account_id": "acc_661677911f2197045e6cf1b1"
}{
"object": "error",
"type": "invalid_request",
"code": "not_found",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}{
"object": "error",
"type": "invalid_request",
"code": "not_found",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}{
"object": "error",
"type": "invalid_request",
"code": "not_found",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}{
"object": "error",
"type": "invalid_request",
"code": "not_found",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}{
"object": "error",
"type": "invalid_request",
"code": "not_found",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}{
"object": "error",
"type": "invalid_request",
"code": "not_found",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}{
"object": "error",
"type": "invalid_request",
"code": "not_found",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}Retrieve device settings
Retrieves the device’s desired operating settings, including supported, the field paths that can be written for this device, and sync_status, whether the device has applied them.
curl --request GET \
--url https://energy-api.flatpeak.com/devices/{device_id}/settings \
--header 'Authorization: Bearer <token>'import requests
url = "https://energy-api.flatpeak.com/devices/{device_id}/settings"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://energy-api.flatpeak.com/devices/{device_id}/settings', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://energy-api.flatpeak.com/devices/{device_id}/settings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://energy-api.flatpeak.com/devices/{device_id}/settings"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://energy-api.flatpeak.com/devices/{device_id}/settings")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://energy-api.flatpeak.com/devices/{device_id}/settings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"object": "device_settings",
"device_id": "dev_63a6087272941ef077a8fd3e",
"supported": [
"battery.backup_reserve_percent",
"battery.strategy",
"battery.storm_mode_enabled",
"battery.export_rule",
"battery.charge_from_grid_enabled",
"battery.one_off_charge"
],
"battery": {
"backup_reserve_percent": 20,
"strategy": "SELF_POWER",
"storm_mode_enabled": true,
"export_rule": "BATTERY_OK",
"charge_from_grid_enabled": true,
"one_off_charge": false
},
"sync_status": "IN_SYNC",
"updated_by": "OEM",
"time_updated": "2026-08-31T09:12:44Z",
"account_id": "acc_661677911f2197045e6cf1b1"
}{
"object": "error",
"type": "invalid_request",
"code": "not_found",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}{
"object": "error",
"type": "invalid_request",
"code": "not_found",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}{
"object": "error",
"type": "invalid_request",
"code": "not_found",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}{
"object": "error",
"type": "invalid_request",
"code": "not_found",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}{
"object": "error",
"type": "invalid_request",
"code": "not_found",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}{
"object": "error",
"type": "invalid_request",
"code": "not_found",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}{
"object": "error",
"type": "invalid_request",
"code": "not_found",
"message": "The requested resource could not be found.",
"context": "api.price_get",
"live_mode": true,
"time_created": "2026-01-01T00:00:00Z"
}Response
Device settings record.
The device's desired settings, one record shared between you and its VPP operator. Device-local changes are reconciled in from your state submissions. supported lists the writable field paths; writes outside it return 422. Only the blocks for subsystems the device has are returned.
The field paths that can be written for this device, derived from its type and capabilities. Recomputed on a capabilities update. Empty for device types without settings.
[
"battery.backup_reserve_percent",
"battery.strategy",
"battery.storm_mode_enabled",
"battery.export_rule",
"battery.charge_from_grid_enabled",
"battery.one_off_charge"
]
Whether the device has applied the desired settings, from comparing this record with reported state. Numeric fields compare within a tolerance. A null desired value is in sync only with a null reported value. one_off_charge is not compared, because device state does not report it. FAILED fires device.settings.sync_failed.
IN_SYNC, PENDING, FAILED "IN_SYNC"
Was this page helpful?

