curl --request POST \
--url https://api.nomos.energy/assets/{id}/schedule \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"resolution": "15min",
"items": [
{
"timestamp": "2026-10-07T10:00:00.000Z",
"mode": "setpoint",
"power_kw": 3,
"max_in_kw": null,
"max_out_kw": null,
"min_soc": 0.1,
"max_soc": 0.9,
"expected_power_kw": null
}
]
}
'import requests
url = "https://api.nomos.energy/assets/{id}/schedule"
payload = {
"resolution": "15min",
"items": [
{
"timestamp": "2026-10-07T10:00:00.000Z",
"mode": "setpoint",
"power_kw": 3,
"max_in_kw": None,
"max_out_kw": None,
"min_soc": 0.1,
"max_soc": 0.9,
"expected_power_kw": None
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
resolution: '15min',
items: [
{
timestamp: '2026-10-07T10:00:00.000Z',
mode: 'setpoint',
power_kw: 3,
max_in_kw: null,
max_out_kw: null,
min_soc: 0.1,
max_soc: 0.9,
expected_power_kw: null
}
]
})
};
fetch('https://api.nomos.energy/assets/{id}/schedule', 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://api.nomos.energy/assets/{id}/schedule",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'resolution' => '15min',
'items' => [
[
'timestamp' => '2026-10-07T10:00:00.000Z',
'mode' => 'setpoint',
'power_kw' => 3,
'max_in_kw' => null,
'max_out_kw' => null,
'min_soc' => 0.1,
'max_soc' => 0.9,
'expected_power_kw' => null
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.nomos.energy/assets/{id}/schedule"
payload := strings.NewReader("{\n \"resolution\": \"15min\",\n \"items\": [\n {\n \"timestamp\": \"2026-10-07T10:00:00.000Z\",\n \"mode\": \"setpoint\",\n \"power_kw\": 3,\n \"max_in_kw\": null,\n \"max_out_kw\": null,\n \"min_soc\": 0.1,\n \"max_soc\": 0.9,\n \"expected_power_kw\": null\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.nomos.energy/assets/{id}/schedule")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"resolution\": \"15min\",\n \"items\": [\n {\n \"timestamp\": \"2026-10-07T10:00:00.000Z\",\n \"mode\": \"setpoint\",\n \"power_kw\": 3,\n \"max_in_kw\": null,\n \"max_out_kw\": null,\n \"min_soc\": 0.1,\n \"max_soc\": 0.9,\n \"expected_power_kw\": null\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nomos.energy/assets/{id}/schedule")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"resolution\": \"15min\",\n \"items\": [\n {\n \"timestamp\": \"2026-10-07T10:00:00.000Z\",\n \"mode\": \"setpoint\",\n \"power_kw\": 3,\n \"max_in_kw\": null,\n \"max_out_kw\": null,\n \"min_soc\": 0.1,\n \"max_soc\": 0.9,\n \"expected_power_kw\": null\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"object": "asset_schedule",
"asset": "ha_b7q2m1k8v4n0x3c9l5p2r7td",
"period": {
"start": "2026-10-07T00:00:00.000+02:00",
"end": "2026-10-08T00:00:00.000+02:00"
},
"resolution": "15min",
"items": [
{
"timestamp": "2026-10-07T10:00:00.000Z",
"mode": "setpoint",
"power_kw": 3,
"max_in_kw": null,
"max_out_kw": null,
"min_soc": 0.1,
"max_soc": 0.9,
"expected_power_kw": null,
"author": "partner"
}
]
}Send an asset schedule
Plan consecutive quarter hours of a steerable asset. A partner token sends author: partner, a Nomos token publishes author: nomos. The schedule replaces the sender’s plan for every quarter hour from its first slot to its last, and is stored as a whole or not at all: any invalid slot rejects it, with every problem listed in errors by its path. While Nomos optimises the household, Nomos’s plan wins wherever it has a slot, so a partner schedule is stored but only in force where Nomos planned nothing.
curl --request POST \
--url https://api.nomos.energy/assets/{id}/schedule \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"resolution": "15min",
"items": [
{
"timestamp": "2026-10-07T10:00:00.000Z",
"mode": "setpoint",
"power_kw": 3,
"max_in_kw": null,
"max_out_kw": null,
"min_soc": 0.1,
"max_soc": 0.9,
"expected_power_kw": null
}
]
}
'import requests
url = "https://api.nomos.energy/assets/{id}/schedule"
payload = {
"resolution": "15min",
"items": [
{
"timestamp": "2026-10-07T10:00:00.000Z",
"mode": "setpoint",
"power_kw": 3,
"max_in_kw": None,
"max_out_kw": None,
"min_soc": 0.1,
"max_soc": 0.9,
"expected_power_kw": None
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
resolution: '15min',
items: [
{
timestamp: '2026-10-07T10:00:00.000Z',
mode: 'setpoint',
power_kw: 3,
max_in_kw: null,
max_out_kw: null,
min_soc: 0.1,
max_soc: 0.9,
expected_power_kw: null
}
]
})
};
fetch('https://api.nomos.energy/assets/{id}/schedule', 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://api.nomos.energy/assets/{id}/schedule",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'resolution' => '15min',
'items' => [
[
'timestamp' => '2026-10-07T10:00:00.000Z',
'mode' => 'setpoint',
'power_kw' => 3,
'max_in_kw' => null,
'max_out_kw' => null,
'min_soc' => 0.1,
'max_soc' => 0.9,
'expected_power_kw' => null
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.nomos.energy/assets/{id}/schedule"
payload := strings.NewReader("{\n \"resolution\": \"15min\",\n \"items\": [\n {\n \"timestamp\": \"2026-10-07T10:00:00.000Z\",\n \"mode\": \"setpoint\",\n \"power_kw\": 3,\n \"max_in_kw\": null,\n \"max_out_kw\": null,\n \"min_soc\": 0.1,\n \"max_soc\": 0.9,\n \"expected_power_kw\": null\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.nomos.energy/assets/{id}/schedule")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"resolution\": \"15min\",\n \"items\": [\n {\n \"timestamp\": \"2026-10-07T10:00:00.000Z\",\n \"mode\": \"setpoint\",\n \"power_kw\": 3,\n \"max_in_kw\": null,\n \"max_out_kw\": null,\n \"min_soc\": 0.1,\n \"max_soc\": 0.9,\n \"expected_power_kw\": null\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nomos.energy/assets/{id}/schedule")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"resolution\": \"15min\",\n \"items\": [\n {\n \"timestamp\": \"2026-10-07T10:00:00.000Z\",\n \"mode\": \"setpoint\",\n \"power_kw\": 3,\n \"max_in_kw\": null,\n \"max_out_kw\": null,\n \"min_soc\": 0.1,\n \"max_soc\": 0.9,\n \"expected_power_kw\": null\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"object": "asset_schedule",
"asset": "ha_b7q2m1k8v4n0x3c9l5p2r7td",
"period": {
"start": "2026-10-07T00:00:00.000+02:00",
"end": "2026-10-08T00:00:00.000+02:00"
},
"resolution": "15min",
"items": [
{
"timestamp": "2026-10-07T10:00:00.000Z",
"mode": "setpoint",
"power_kw": 3,
"max_in_kw": null,
"max_out_kw": null,
"min_soc": 0.1,
"max_soc": 0.9,
"expected_power_kw": null,
"author": "partner"
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
"ha_b7q2m1k8v4n0x3c9l5p2r7td"
Body
The length of every slot.
15min "15min"
Consecutive quarter hours, in any order and with none left out between the first and the last. They replace the sender's plan for that whole window, so send local for a quarter hour where nothing is planned. Quarter hours outside the window keep their plan.
1 - 300 elementsShow child attributes
Show child attributes
Response
The stored slots
asset_schedule "ha_b7q2m1k8v4n0x3c9l5p2r7td"
Show child attributes
Show child attributes
15min Sorted by time. On a POST, the stored slots. On a GET, the plan in force: one slot per planned quarter hour. A quarter hour without one runs the device's own logic.
Show child attributes
Show child attributes
Was this page helpful?