curl --request POST \
--url https://api.engrate.io/portfolio-forecasts/v1alpha1/submissions \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"delivery_day": "2026-09-01",
"unit": "MW",
"series": [
{
"kind": "production",
"control_area": "TenneT",
"values": [
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.6,
0.7,
0.8,
0.9,
1,
1.1,
1.2,
1.3,
1.4,
1.5,
1.6,
1.7,
1.8,
1.9,
2,
2.1,
2.2,
2.3,
2.4,
2.5,
2.6,
2.7,
2.8,
2.9,
3,
3.1,
3.2,
3.3,
3.2,
3.1,
3,
2.9,
2.8,
2.7,
2.6,
2.5,
2.4,
2.3,
2.2,
2.1,
2,
1.9,
1.8,
1.7,
1.6,
1.5,
1.4,
1.3,
1.2,
1.1,
1,
0.9,
0.8,
0.7,
0.6,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5
]
},
{
"kind": "consumption",
"control_area": "TenneT",
"values": [
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.23,
1.26,
1.29,
1.32,
1.35,
1.38,
1.41,
1.44,
1.47,
1.5,
1.53,
1.56,
1.59,
1.62,
1.65,
1.68,
1.71,
1.74,
1.77,
1.8,
1.77,
1.74,
1.71,
1.68,
1.65,
1.62,
1.59,
1.56,
1.53,
1.5,
1.47,
1.44,
1.41,
1.38,
1.35,
1.32,
1.29,
1.26,
1.23,
1.2,
1.2,
1.2,
1.2
]
}
],
"validate_only": false
}
'import requests
url = "https://api.engrate.io/portfolio-forecasts/v1alpha1/submissions"
payload = {
"delivery_day": "2026-09-01",
"unit": "MW",
"series": [
{
"kind": "production",
"control_area": "TenneT",
"values": [0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3, 3.1, 3.2, 3.3, 3.2, 3.1, 3, 2.9, 2.8, 2.7, 2.6, 2.5, 2.4, 2.3, 2.2, 2.1, 2, 1.9, 1.8, 1.7, 1.6, 1.5, 1.4, 1.3, 1.2, 1.1, 1, 0.9, 0.8, 0.7, 0.6, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5]
},
{
"kind": "consumption",
"control_area": "TenneT",
"values": [1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.23, 1.26, 1.29, 1.32, 1.35, 1.38, 1.41, 1.44, 1.47, 1.5, 1.53, 1.56, 1.59, 1.62, 1.65, 1.68, 1.71, 1.74, 1.77, 1.8, 1.77, 1.74, 1.71, 1.68, 1.65, 1.62, 1.59, 1.56, 1.53, 1.5, 1.47, 1.44, 1.41, 1.38, 1.35, 1.32, 1.29, 1.26, 1.23, 1.2, 1.2, 1.2, 1.2]
}
],
"validate_only": False
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
delivery_day: '2026-09-01',
unit: 'MW',
series: [
{
kind: 'production',
control_area: 'TenneT',
values: [
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.6,
0.7,
0.8,
0.9,
1,
1.1,
1.2,
1.3,
1.4,
1.5,
1.6,
1.7,
1.8,
1.9,
2,
2.1,
2.2,
2.3,
2.4,
2.5,
2.6,
2.7,
2.8,
2.9,
3,
3.1,
3.2,
3.3,
3.2,
3.1,
3,
2.9,
2.8,
2.7,
2.6,
2.5,
2.4,
2.3,
2.2,
2.1,
2,
1.9,
1.8,
1.7,
1.6,
1.5,
1.4,
1.3,
1.2,
1.1,
1,
0.9,
0.8,
0.7,
0.6,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5
]
},
{
kind: 'consumption',
control_area: 'TenneT',
values: [
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.23,
1.26,
1.29,
1.32,
1.35,
1.38,
1.41,
1.44,
1.47,
1.5,
1.53,
1.56,
1.59,
1.62,
1.65,
1.68,
1.71,
1.74,
1.77,
1.8,
1.77,
1.74,
1.71,
1.68,
1.65,
1.62,
1.59,
1.56,
1.53,
1.5,
1.47,
1.44,
1.41,
1.38,
1.35,
1.32,
1.29,
1.26,
1.23,
1.2,
1.2,
1.2,
1.2
]
}
],
validate_only: false
})
};
fetch('https://api.engrate.io/portfolio-forecasts/v1alpha1/submissions', 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.engrate.io/portfolio-forecasts/v1alpha1/submissions",
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([
'delivery_day' => '2026-09-01',
'unit' => 'MW',
'series' => [
[
'kind' => 'production',
'control_area' => 'TenneT',
'values' => [
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.6,
0.7,
0.8,
0.9,
1,
1.1,
1.2,
1.3,
1.4,
1.5,
1.6,
1.7,
1.8,
1.9,
2,
2.1,
2.2,
2.3,
2.4,
2.5,
2.6,
2.7,
2.8,
2.9,
3,
3.1,
3.2,
3.3,
3.2,
3.1,
3,
2.9,
2.8,
2.7,
2.6,
2.5,
2.4,
2.3,
2.2,
2.1,
2,
1.9,
1.8,
1.7,
1.6,
1.5,
1.4,
1.3,
1.2,
1.1,
1,
0.9,
0.8,
0.7,
0.6,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5
]
],
[
'kind' => 'consumption',
'control_area' => 'TenneT',
'values' => [
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.23,
1.26,
1.29,
1.32,
1.35,
1.38,
1.41,
1.44,
1.47,
1.5,
1.53,
1.56,
1.59,
1.62,
1.65,
1.68,
1.71,
1.74,
1.77,
1.8,
1.77,
1.74,
1.71,
1.68,
1.65,
1.62,
1.59,
1.56,
1.53,
1.5,
1.47,
1.44,
1.41,
1.38,
1.35,
1.32,
1.29,
1.26,
1.23,
1.2,
1.2,
1.2,
1.2
]
]
],
'validate_only' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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.engrate.io/portfolio-forecasts/v1alpha1/submissions"
payload := strings.NewReader("{\n \"delivery_day\": \"2026-09-01\",\n \"unit\": \"MW\",\n \"series\": [\n {\n \"kind\": \"production\",\n \"control_area\": \"TenneT\",\n \"values\": [\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.6,\n 0.7,\n 0.8,\n 0.9,\n 1,\n 1.1,\n 1.2,\n 1.3,\n 1.4,\n 1.5,\n 1.6,\n 1.7,\n 1.8,\n 1.9,\n 2,\n 2.1,\n 2.2,\n 2.3,\n 2.4,\n 2.5,\n 2.6,\n 2.7,\n 2.8,\n 2.9,\n 3,\n 3.1,\n 3.2,\n 3.3,\n 3.2,\n 3.1,\n 3,\n 2.9,\n 2.8,\n 2.7,\n 2.6,\n 2.5,\n 2.4,\n 2.3,\n 2.2,\n 2.1,\n 2,\n 1.9,\n 1.8,\n 1.7,\n 1.6,\n 1.5,\n 1.4,\n 1.3,\n 1.2,\n 1.1,\n 1,\n 0.9,\n 0.8,\n 0.7,\n 0.6,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5\n ]\n },\n {\n \"kind\": \"consumption\",\n \"control_area\": \"TenneT\",\n \"values\": [\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.23,\n 1.26,\n 1.29,\n 1.32,\n 1.35,\n 1.38,\n 1.41,\n 1.44,\n 1.47,\n 1.5,\n 1.53,\n 1.56,\n 1.59,\n 1.62,\n 1.65,\n 1.68,\n 1.71,\n 1.74,\n 1.77,\n 1.8,\n 1.77,\n 1.74,\n 1.71,\n 1.68,\n 1.65,\n 1.62,\n 1.59,\n 1.56,\n 1.53,\n 1.5,\n 1.47,\n 1.44,\n 1.41,\n 1.38,\n 1.35,\n 1.32,\n 1.29,\n 1.26,\n 1.23,\n 1.2,\n 1.2,\n 1.2,\n 1.2\n ]\n }\n ],\n \"validate_only\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
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.engrate.io/portfolio-forecasts/v1alpha1/submissions")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"delivery_day\": \"2026-09-01\",\n \"unit\": \"MW\",\n \"series\": [\n {\n \"kind\": \"production\",\n \"control_area\": \"TenneT\",\n \"values\": [\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.6,\n 0.7,\n 0.8,\n 0.9,\n 1,\n 1.1,\n 1.2,\n 1.3,\n 1.4,\n 1.5,\n 1.6,\n 1.7,\n 1.8,\n 1.9,\n 2,\n 2.1,\n 2.2,\n 2.3,\n 2.4,\n 2.5,\n 2.6,\n 2.7,\n 2.8,\n 2.9,\n 3,\n 3.1,\n 3.2,\n 3.3,\n 3.2,\n 3.1,\n 3,\n 2.9,\n 2.8,\n 2.7,\n 2.6,\n 2.5,\n 2.4,\n 2.3,\n 2.2,\n 2.1,\n 2,\n 1.9,\n 1.8,\n 1.7,\n 1.6,\n 1.5,\n 1.4,\n 1.3,\n 1.2,\n 1.1,\n 1,\n 0.9,\n 0.8,\n 0.7,\n 0.6,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5\n ]\n },\n {\n \"kind\": \"consumption\",\n \"control_area\": \"TenneT\",\n \"values\": [\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.23,\n 1.26,\n 1.29,\n 1.32,\n 1.35,\n 1.38,\n 1.41,\n 1.44,\n 1.47,\n 1.5,\n 1.53,\n 1.56,\n 1.59,\n 1.62,\n 1.65,\n 1.68,\n 1.71,\n 1.74,\n 1.77,\n 1.8,\n 1.77,\n 1.74,\n 1.71,\n 1.68,\n 1.65,\n 1.62,\n 1.59,\n 1.56,\n 1.53,\n 1.5,\n 1.47,\n 1.44,\n 1.41,\n 1.38,\n 1.35,\n 1.32,\n 1.29,\n 1.26,\n 1.23,\n 1.2,\n 1.2,\n 1.2,\n 1.2\n ]\n }\n ],\n \"validate_only\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.engrate.io/portfolio-forecasts/v1alpha1/submissions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"delivery_day\": \"2026-09-01\",\n \"unit\": \"MW\",\n \"series\": [\n {\n \"kind\": \"production\",\n \"control_area\": \"TenneT\",\n \"values\": [\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.6,\n 0.7,\n 0.8,\n 0.9,\n 1,\n 1.1,\n 1.2,\n 1.3,\n 1.4,\n 1.5,\n 1.6,\n 1.7,\n 1.8,\n 1.9,\n 2,\n 2.1,\n 2.2,\n 2.3,\n 2.4,\n 2.5,\n 2.6,\n 2.7,\n 2.8,\n 2.9,\n 3,\n 3.1,\n 3.2,\n 3.3,\n 3.2,\n 3.1,\n 3,\n 2.9,\n 2.8,\n 2.7,\n 2.6,\n 2.5,\n 2.4,\n 2.3,\n 2.2,\n 2.1,\n 2,\n 1.9,\n 1.8,\n 1.7,\n 1.6,\n 1.5,\n 1.4,\n 1.3,\n 1.2,\n 1.1,\n 1,\n 0.9,\n 0.8,\n 0.7,\n 0.6,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5\n ]\n },\n {\n \"kind\": \"consumption\",\n \"control_area\": \"TenneT\",\n \"values\": [\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.23,\n 1.26,\n 1.29,\n 1.32,\n 1.35,\n 1.38,\n 1.41,\n 1.44,\n 1.47,\n 1.5,\n 1.53,\n 1.56,\n 1.59,\n 1.62,\n 1.65,\n 1.68,\n 1.71,\n 1.74,\n 1.77,\n 1.8,\n 1.77,\n 1.74,\n 1.71,\n 1.68,\n 1.65,\n 1.62,\n 1.59,\n 1.56,\n 1.53,\n 1.5,\n 1.47,\n 1.44,\n 1.41,\n 1.38,\n 1.35,\n 1.32,\n 1.29,\n 1.26,\n 1.23,\n 1.2,\n 1.2,\n 1.2,\n 1.2\n ]\n }\n ],\n \"validate_only\": false\n}"
response = http.request(request)
puts response.read_body{
"delivery_day": "2026-09-01",
"interval_count": 96,
"series_received": 2,
"total_production_mwh": 31.6,
"total_consumption_mwh": 31.8,
"input_hash": "eb50caedb5b4ccb0ca4c86cda9546f966cabac1d7daedf59e5260dd4b01197f2",
"status": "received"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}{
"detail": "Forecast service unavailable"
}{
"detail": "Forecast service timed out"
}Submit portfolio forecast
Submit a portfolio forecast for one delivery day. Re-submitting for the same delivery day replaces the previous submission. Submitting an identical payload changes nothing, so retries are safe.
Set validate_only to run the full validation without storing the forecast. The acknowledgment then carries status: validated.
curl --request POST \
--url https://api.engrate.io/portfolio-forecasts/v1alpha1/submissions \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"delivery_day": "2026-09-01",
"unit": "MW",
"series": [
{
"kind": "production",
"control_area": "TenneT",
"values": [
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.6,
0.7,
0.8,
0.9,
1,
1.1,
1.2,
1.3,
1.4,
1.5,
1.6,
1.7,
1.8,
1.9,
2,
2.1,
2.2,
2.3,
2.4,
2.5,
2.6,
2.7,
2.8,
2.9,
3,
3.1,
3.2,
3.3,
3.2,
3.1,
3,
2.9,
2.8,
2.7,
2.6,
2.5,
2.4,
2.3,
2.2,
2.1,
2,
1.9,
1.8,
1.7,
1.6,
1.5,
1.4,
1.3,
1.2,
1.1,
1,
0.9,
0.8,
0.7,
0.6,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5
]
},
{
"kind": "consumption",
"control_area": "TenneT",
"values": [
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.23,
1.26,
1.29,
1.32,
1.35,
1.38,
1.41,
1.44,
1.47,
1.5,
1.53,
1.56,
1.59,
1.62,
1.65,
1.68,
1.71,
1.74,
1.77,
1.8,
1.77,
1.74,
1.71,
1.68,
1.65,
1.62,
1.59,
1.56,
1.53,
1.5,
1.47,
1.44,
1.41,
1.38,
1.35,
1.32,
1.29,
1.26,
1.23,
1.2,
1.2,
1.2,
1.2
]
}
],
"validate_only": false
}
'import requests
url = "https://api.engrate.io/portfolio-forecasts/v1alpha1/submissions"
payload = {
"delivery_day": "2026-09-01",
"unit": "MW",
"series": [
{
"kind": "production",
"control_area": "TenneT",
"values": [0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3, 3.1, 3.2, 3.3, 3.2, 3.1, 3, 2.9, 2.8, 2.7, 2.6, 2.5, 2.4, 2.3, 2.2, 2.1, 2, 1.9, 1.8, 1.7, 1.6, 1.5, 1.4, 1.3, 1.2, 1.1, 1, 0.9, 0.8, 0.7, 0.6, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5]
},
{
"kind": "consumption",
"control_area": "TenneT",
"values": [1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.23, 1.26, 1.29, 1.32, 1.35, 1.38, 1.41, 1.44, 1.47, 1.5, 1.53, 1.56, 1.59, 1.62, 1.65, 1.68, 1.71, 1.74, 1.77, 1.8, 1.77, 1.74, 1.71, 1.68, 1.65, 1.62, 1.59, 1.56, 1.53, 1.5, 1.47, 1.44, 1.41, 1.38, 1.35, 1.32, 1.29, 1.26, 1.23, 1.2, 1.2, 1.2, 1.2]
}
],
"validate_only": False
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
delivery_day: '2026-09-01',
unit: 'MW',
series: [
{
kind: 'production',
control_area: 'TenneT',
values: [
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.6,
0.7,
0.8,
0.9,
1,
1.1,
1.2,
1.3,
1.4,
1.5,
1.6,
1.7,
1.8,
1.9,
2,
2.1,
2.2,
2.3,
2.4,
2.5,
2.6,
2.7,
2.8,
2.9,
3,
3.1,
3.2,
3.3,
3.2,
3.1,
3,
2.9,
2.8,
2.7,
2.6,
2.5,
2.4,
2.3,
2.2,
2.1,
2,
1.9,
1.8,
1.7,
1.6,
1.5,
1.4,
1.3,
1.2,
1.1,
1,
0.9,
0.8,
0.7,
0.6,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5
]
},
{
kind: 'consumption',
control_area: 'TenneT',
values: [
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.23,
1.26,
1.29,
1.32,
1.35,
1.38,
1.41,
1.44,
1.47,
1.5,
1.53,
1.56,
1.59,
1.62,
1.65,
1.68,
1.71,
1.74,
1.77,
1.8,
1.77,
1.74,
1.71,
1.68,
1.65,
1.62,
1.59,
1.56,
1.53,
1.5,
1.47,
1.44,
1.41,
1.38,
1.35,
1.32,
1.29,
1.26,
1.23,
1.2,
1.2,
1.2,
1.2
]
}
],
validate_only: false
})
};
fetch('https://api.engrate.io/portfolio-forecasts/v1alpha1/submissions', 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.engrate.io/portfolio-forecasts/v1alpha1/submissions",
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([
'delivery_day' => '2026-09-01',
'unit' => 'MW',
'series' => [
[
'kind' => 'production',
'control_area' => 'TenneT',
'values' => [
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.6,
0.7,
0.8,
0.9,
1,
1.1,
1.2,
1.3,
1.4,
1.5,
1.6,
1.7,
1.8,
1.9,
2,
2.1,
2.2,
2.3,
2.4,
2.5,
2.6,
2.7,
2.8,
2.9,
3,
3.1,
3.2,
3.3,
3.2,
3.1,
3,
2.9,
2.8,
2.7,
2.6,
2.5,
2.4,
2.3,
2.2,
2.1,
2,
1.9,
1.8,
1.7,
1.6,
1.5,
1.4,
1.3,
1.2,
1.1,
1,
0.9,
0.8,
0.7,
0.6,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5,
0.5
]
],
[
'kind' => 'consumption',
'control_area' => 'TenneT',
'values' => [
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.2,
1.23,
1.26,
1.29,
1.32,
1.35,
1.38,
1.41,
1.44,
1.47,
1.5,
1.53,
1.56,
1.59,
1.62,
1.65,
1.68,
1.71,
1.74,
1.77,
1.8,
1.77,
1.74,
1.71,
1.68,
1.65,
1.62,
1.59,
1.56,
1.53,
1.5,
1.47,
1.44,
1.41,
1.38,
1.35,
1.32,
1.29,
1.26,
1.23,
1.2,
1.2,
1.2,
1.2
]
]
],
'validate_only' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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.engrate.io/portfolio-forecasts/v1alpha1/submissions"
payload := strings.NewReader("{\n \"delivery_day\": \"2026-09-01\",\n \"unit\": \"MW\",\n \"series\": [\n {\n \"kind\": \"production\",\n \"control_area\": \"TenneT\",\n \"values\": [\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.6,\n 0.7,\n 0.8,\n 0.9,\n 1,\n 1.1,\n 1.2,\n 1.3,\n 1.4,\n 1.5,\n 1.6,\n 1.7,\n 1.8,\n 1.9,\n 2,\n 2.1,\n 2.2,\n 2.3,\n 2.4,\n 2.5,\n 2.6,\n 2.7,\n 2.8,\n 2.9,\n 3,\n 3.1,\n 3.2,\n 3.3,\n 3.2,\n 3.1,\n 3,\n 2.9,\n 2.8,\n 2.7,\n 2.6,\n 2.5,\n 2.4,\n 2.3,\n 2.2,\n 2.1,\n 2,\n 1.9,\n 1.8,\n 1.7,\n 1.6,\n 1.5,\n 1.4,\n 1.3,\n 1.2,\n 1.1,\n 1,\n 0.9,\n 0.8,\n 0.7,\n 0.6,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5\n ]\n },\n {\n \"kind\": \"consumption\",\n \"control_area\": \"TenneT\",\n \"values\": [\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.23,\n 1.26,\n 1.29,\n 1.32,\n 1.35,\n 1.38,\n 1.41,\n 1.44,\n 1.47,\n 1.5,\n 1.53,\n 1.56,\n 1.59,\n 1.62,\n 1.65,\n 1.68,\n 1.71,\n 1.74,\n 1.77,\n 1.8,\n 1.77,\n 1.74,\n 1.71,\n 1.68,\n 1.65,\n 1.62,\n 1.59,\n 1.56,\n 1.53,\n 1.5,\n 1.47,\n 1.44,\n 1.41,\n 1.38,\n 1.35,\n 1.32,\n 1.29,\n 1.26,\n 1.23,\n 1.2,\n 1.2,\n 1.2,\n 1.2\n ]\n }\n ],\n \"validate_only\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
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.engrate.io/portfolio-forecasts/v1alpha1/submissions")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"delivery_day\": \"2026-09-01\",\n \"unit\": \"MW\",\n \"series\": [\n {\n \"kind\": \"production\",\n \"control_area\": \"TenneT\",\n \"values\": [\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.6,\n 0.7,\n 0.8,\n 0.9,\n 1,\n 1.1,\n 1.2,\n 1.3,\n 1.4,\n 1.5,\n 1.6,\n 1.7,\n 1.8,\n 1.9,\n 2,\n 2.1,\n 2.2,\n 2.3,\n 2.4,\n 2.5,\n 2.6,\n 2.7,\n 2.8,\n 2.9,\n 3,\n 3.1,\n 3.2,\n 3.3,\n 3.2,\n 3.1,\n 3,\n 2.9,\n 2.8,\n 2.7,\n 2.6,\n 2.5,\n 2.4,\n 2.3,\n 2.2,\n 2.1,\n 2,\n 1.9,\n 1.8,\n 1.7,\n 1.6,\n 1.5,\n 1.4,\n 1.3,\n 1.2,\n 1.1,\n 1,\n 0.9,\n 0.8,\n 0.7,\n 0.6,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5\n ]\n },\n {\n \"kind\": \"consumption\",\n \"control_area\": \"TenneT\",\n \"values\": [\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.23,\n 1.26,\n 1.29,\n 1.32,\n 1.35,\n 1.38,\n 1.41,\n 1.44,\n 1.47,\n 1.5,\n 1.53,\n 1.56,\n 1.59,\n 1.62,\n 1.65,\n 1.68,\n 1.71,\n 1.74,\n 1.77,\n 1.8,\n 1.77,\n 1.74,\n 1.71,\n 1.68,\n 1.65,\n 1.62,\n 1.59,\n 1.56,\n 1.53,\n 1.5,\n 1.47,\n 1.44,\n 1.41,\n 1.38,\n 1.35,\n 1.32,\n 1.29,\n 1.26,\n 1.23,\n 1.2,\n 1.2,\n 1.2,\n 1.2\n ]\n }\n ],\n \"validate_only\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.engrate.io/portfolio-forecasts/v1alpha1/submissions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"delivery_day\": \"2026-09-01\",\n \"unit\": \"MW\",\n \"series\": [\n {\n \"kind\": \"production\",\n \"control_area\": \"TenneT\",\n \"values\": [\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.6,\n 0.7,\n 0.8,\n 0.9,\n 1,\n 1.1,\n 1.2,\n 1.3,\n 1.4,\n 1.5,\n 1.6,\n 1.7,\n 1.8,\n 1.9,\n 2,\n 2.1,\n 2.2,\n 2.3,\n 2.4,\n 2.5,\n 2.6,\n 2.7,\n 2.8,\n 2.9,\n 3,\n 3.1,\n 3.2,\n 3.3,\n 3.2,\n 3.1,\n 3,\n 2.9,\n 2.8,\n 2.7,\n 2.6,\n 2.5,\n 2.4,\n 2.3,\n 2.2,\n 2.1,\n 2,\n 1.9,\n 1.8,\n 1.7,\n 1.6,\n 1.5,\n 1.4,\n 1.3,\n 1.2,\n 1.1,\n 1,\n 0.9,\n 0.8,\n 0.7,\n 0.6,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5,\n 0.5\n ]\n },\n {\n \"kind\": \"consumption\",\n \"control_area\": \"TenneT\",\n \"values\": [\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.2,\n 1.23,\n 1.26,\n 1.29,\n 1.32,\n 1.35,\n 1.38,\n 1.41,\n 1.44,\n 1.47,\n 1.5,\n 1.53,\n 1.56,\n 1.59,\n 1.62,\n 1.65,\n 1.68,\n 1.71,\n 1.74,\n 1.77,\n 1.8,\n 1.77,\n 1.74,\n 1.71,\n 1.68,\n 1.65,\n 1.62,\n 1.59,\n 1.56,\n 1.53,\n 1.5,\n 1.47,\n 1.44,\n 1.41,\n 1.38,\n 1.35,\n 1.32,\n 1.29,\n 1.26,\n 1.23,\n 1.2,\n 1.2,\n 1.2,\n 1.2\n ]\n }\n ],\n \"validate_only\": false\n}"
response = http.request(request)
puts response.read_body{
"delivery_day": "2026-09-01",
"interval_count": 96,
"series_received": 2,
"total_production_mwh": 31.6,
"total_consumption_mwh": 31.8,
"input_hash": "eb50caedb5b4ccb0ca4c86cda9546f966cabac1d7daedf59e5260dd4b01197f2",
"status": "received"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}{
"detail": "Forecast service unavailable"
}{
"detail": "Forecast service timed out"
}Authorizations
Body
Portfolio production and consumption forecasts for one delivery day.
The day the energy is delivered, as a Europe/Berlin calendar day.
The day's series. Several series per control area and kind are allowed and summed. Omitted control areas count as zero.
1Show child attributes
Show child attributes
MW: average power per quarter-hour. MWH: energy per quarter-hour.
MW, MWH MaLo-to-control-area mapping, required when a series is tagged by MaLo.
Run the full validation and return the acknowledgment without storing the forecast. The input_hash matches the one a stored submission of the same payload gets.
Response
Forecast accepted
Acknowledgment of an accepted forecast submission.
Quarter-hours in the delivery day: 96 on a normal day, 92 on the spring-forward day, 100 on the fall-back day.
Total production energy received for the delivery day, in MWh.
Total consumption energy received for the delivery day, in MWh.
Content hash of the submission. Identical payloads produce identical hashes.
received: the forecast is stored and picked up for processing. validated: the payload passed every check and nothing was stored, because validate_only was set.
received, validated Was this page helpful?