Powernaut (1.0.0)
Download OpenAPI specification:Download
Welcome to the Powernaut API Reference!
Our API offers a robust and secure way to connect your flexible resources to flexibility buyers such as energy utilities/suppliers and system operators.
This OpenAPI documentation is designed to provide a comprehensive and easy-to-understand guide for developers who are integrating their systems with Powernaut’s platform.
By leveraging our API, you can seamlessly offer flexibility in several electricity markets, opening up additional revenue streams for your resources while contributing to a greener and more efficient electricity grid.
Get a token
Gets an authentication access token, to be used to authenticate calls to all other endpoints.
Include this token in the headers of all other endpoint calls:
Authorization: Bearer <token>
Authorizations:
header Parameters
authorization required | string Header value for HTTP Basic authentication. To encode the credentials:
Example:
|
Responses
Request samples
- Python
- JavaScript
- Java
- Go
- C#
- cURL
import requests url = "https://api.powernaut.io/v1/auth/token" payload = {} headers = { 'Accept': 'application/json' } response = requests.request("POST", url, headers=headers, data=payload) print(response.text)
Response samples
- 200
- 400
{- "access_token": "string",
- "expires_in": 3600,
- "token_type": "Bearer"
}
Register, modify or delete sites.
Sites are the start of everything, they are required to uniquely identify the end consumer's connection to the grid. They define the meter point(s) for which flexibility is activated.
⚠️ The /v1/connect/connection-points
endpoints have moved to /v1/connect/sites
. The original paths have been deprecated.
Create a connection point Deprecated
Create a new connection point.
The credentials returned can be used for edge-cloud authentication, if needed.
Authorizations:
Request Body schema: application/jsonrequired
grid_identifier | string Deprecated The grid identifier for this site (e.g. EAN/MPAN/...). Common prefixes will be stripped. |
required | AddressLocationDto (object) or GeoLocationDto (object) Location of the site, can either be coordinates or a full-text address (incl. country). |
required | Array of objects (CreateSupplyPointDto) List of supply points linked to this site. This is the prefered way of passing the grid identifier(s) of a site. |
Responses
Request samples
- Payload
- Python
- JavaScript
- Java
- Go
- C#
- cURL
{- "grid_identifier": "00000000",
- "location": {
- "address": "Full-text address, including country"
}, - "supply_points": [
- {
- "grid_identifier": "00000000",
- "direction": "bidirectional"
}
]
}
Response samples
- 201
- 400
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "location": {
- "address": "Full-text address, including country"
}, - "supply_points": [
- {
- "grid_identifier": "00000000",
- "direction": "bidirectional"
}
], - "created_at": "string",
- "modified_at": "string",
- "last_seen_at": "2025-01-07T15:08:22Z",
- "credentials": {
- "key": "4adfe27e-63d3-45b9-8238-62b6ed6fdb5e",
- "secret": "secret"
}
}
Get all connection points Deprecated
Gets all connection points available to your current authorised scope. Results are ordered based on creation date (most recent first).
Authorizations:
query Parameters
page | number >= 1 Default: 1 Page number |
page_size | number >= 1 Default: 10 Page size |
Responses
Request samples
- Python
- JavaScript
- Java
- Go
- C#
- cURL
import requests url = "https://api.powernaut.io/v1/connect/connection-points?page=1&page_size=10" payload = {} headers = { 'Accept': 'application/json', 'Authorization': 'Bearer <token>' } response = requests.request("GET", url, headers=headers, data=payload) print(response.text)
Response samples
- 200
- 400
{- "total": 0,
- "items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "location": {
- "address": "Full-text address, including country"
}, - "supply_points": [
- {
- "grid_identifier": "00000000",
- "direction": "bidirectional"
}
], - "created_at": "string",
- "modified_at": "string",
- "last_seen_at": "2025-01-07T15:08:22Z"
}
]
}
Get a connection point Deprecated
Gets a connection point by its unique ID.
Authorizations:
path Parameters
id required | string <uuid> Identifier of the connection point. |
Responses
Response samples
- 200
- 400
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "location": {
- "address": "Full-text address, including country"
}, - "supply_points": [
- {
- "grid_identifier": "00000000",
- "direction": "bidirectional"
}
], - "created_at": "string",
- "modified_at": "string",
- "last_seen_at": "2025-01-07T15:08:22Z"
}
Update a connection point Deprecated
Update a connection point by its unique ID.
Only the properties you provide will be updated. Use null
to unset a property.
Authorizations:
path Parameters
id required | string <uuid> Identifier of the connection point you want to update. |
Request Body schema: application/jsonrequired
grid_identifier | string Deprecated The grid identifier for this site (e.g. EAN/MPAN/...). Common prefixes will be stripped. |
AddressLocationDto (object) or GeoLocationDto (object) Location of the site, can either be coordinates or a full-text address (incl. country). | |
Array of objects (CreateSupplyPointDto) List of supply points linked to this site. This is the prefered way of passing the grid identifier(s) of a site. |
Responses
Request samples
- Payload
{- "grid_identifier": "00000000",
- "location": {
- "address": "Full-text address, including country"
}, - "supply_points": [
- {
- "grid_identifier": "00000000",
- "direction": "bidirectional"
}
]
}
Response samples
- 202
- 400
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "location": {
- "address": "Full-text address, including country"
}, - "supply_points": [
- {
- "grid_identifier": "00000000",
- "direction": "bidirectional"
}
], - "created_at": "string",
- "modified_at": "string",
- "last_seen_at": "2025-01-07T15:08:22Z"
}
Delete a connection point Deprecated
Delete a connection point
Imporant: This action is irreversible and will remove all associated resources and bids.
Authorizations:
path Parameters
id required | string <uuid> Identifier of the connection point you want to delete. |
Responses
Response samples
- 400
{- "message": [
- "Invalid date"
], - "error": "Bad Request",
- "status_code": 400
}
Rotate credentials Deprecated
Creates new credentials and marks the old ones for rotation.
Both sets of credentials remain valid until the rotation is either completed or canceled. This allows for a seamless transition between the old and new credentials, ensuring that there is no downtime or disruption in service during the rotation process.
Authorizations:
path Parameters
id required | string <uuid> Connection point ID |
Responses
Response samples
- 200
- 400
{- "key": "4adfe27e-63d3-45b9-8238-62b6ed6fdb5e",
- "secret": "secret"
}
Complete credential rotation Deprecated
Completes the credential rotation process by permanently removing the old credentials from the system. Once this operation is performed, the old credentials will no longer be valid and this action cannot be undone.
Authorizations:
path Parameters
id required | string <uuid> Connection point ID |
Responses
Response samples
- 400
{- "message": [
- "Invalid date"
], - "error": "Bad Request",
- "status_code": 400
}
Cancel credential rotation Deprecated
Cancels the credential rotation process. This action will remove the newly generated credentials and retain the old credentials, keeping them active and valid.
Authorizations:
path Parameters
id required | string <uuid> Connection point ID |
Responses
Response samples
- 400
{- "message": [
- "Invalid date"
], - "error": "Bad Request",
- "status_code": 400
}
Create a site
Create a new site.
The credentials returned can be used for edge-cloud authentication, if needed.
Authorizations:
Request Body schema: application/jsonrequired
grid_identifier | string Deprecated The grid identifier for this site (e.g. EAN/MPAN/...). Common prefixes will be stripped. |
required | AddressLocationDto (object) or GeoLocationDto (object) Location of the site, can either be coordinates or a full-text address (incl. country). |
required | Array of objects (CreateSupplyPointDto) List of supply points linked to this site. This is the prefered way of passing the grid identifier(s) of a site. |
Responses
Request samples
- Payload
- Python
- JavaScript
- Java
- Go
- C#
- cURL
{- "grid_identifier": "00000000",
- "location": {
- "address": "Full-text address, including country"
}, - "supply_points": [
- {
- "grid_identifier": "00000000",
- "direction": "bidirectional"
}
]
}
Response samples
- 201
- 400
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "location": {
- "address": "Full-text address, including country"
}, - "supply_points": [
- {
- "grid_identifier": "00000000",
- "direction": "bidirectional"
}
], - "created_at": "string",
- "modified_at": "string",
- "last_seen_at": "2025-01-07T15:08:22Z",
- "credentials": {
- "key": "4adfe27e-63d3-45b9-8238-62b6ed6fdb5e",
- "secret": "secret"
}
}
Get all sites
Gets all sites available to your current authorised scope. Results are ordered based on creation date (most recent first).
Authorizations:
query Parameters
page | number >= 1 Default: 1 Page number |
page_size | number >= 1 Default: 10 Page size |
Responses
Request samples
- Python
- JavaScript
- Java
- Go
- C#
- cURL
import requests url = "https://api.powernaut.io/v1/connect/sites?page=1&page_size=10" payload = {} headers = { 'Accept': 'application/json', 'Authorization': 'Bearer <token>' } response = requests.request("GET", url, headers=headers, data=payload) print(response.text)
Response samples
- 200
- 400
{- "total": 0,
- "items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "location": {
- "address": "Full-text address, including country"
}, - "supply_points": [
- {
- "grid_identifier": "00000000",
- "direction": "bidirectional"
}
], - "created_at": "string",
- "modified_at": "string",
- "last_seen_at": "2025-01-07T15:08:22Z"
}
]
}
Get a site
Gets a site by its unique ID.
Authorizations:
path Parameters
id required | string <uuid> Identifier of the site. |
Responses
Response samples
- 200
- 400
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "location": {
- "address": "Full-text address, including country"
}, - "supply_points": [
- {
- "grid_identifier": "00000000",
- "direction": "bidirectional"
}
], - "created_at": "string",
- "modified_at": "string",
- "last_seen_at": "2025-01-07T15:08:22Z"
}
Update a site
Update a site by its unique ID.
Only the properties you provide will be updated. Use null
to unset a property.
Authorizations:
path Parameters
id required | string <uuid> Identifier of the site you want to update. |
Request Body schema: application/jsonrequired
grid_identifier | string Deprecated The grid identifier for this site (e.g. EAN/MPAN/...). Common prefixes will be stripped. |
AddressLocationDto (object) or GeoLocationDto (object) Location of the site, can either be coordinates or a full-text address (incl. country). | |
Array of objects (CreateSupplyPointDto) List of supply points linked to this site. This is the prefered way of passing the grid identifier(s) of a site. |
Responses
Request samples
- Payload
{- "grid_identifier": "00000000",
- "location": {
- "address": "Full-text address, including country"
}, - "supply_points": [
- {
- "grid_identifier": "00000000",
- "direction": "bidirectional"
}
]
}
Response samples
- 202
- 400
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "location": {
- "address": "Full-text address, including country"
}, - "supply_points": [
- {
- "grid_identifier": "00000000",
- "direction": "bidirectional"
}
], - "created_at": "string",
- "modified_at": "string",
- "last_seen_at": "2025-01-07T15:08:22Z"
}
Delete a site
Delete a site
Imporant: This action is irreversible and will remove all associated resources and bids.
Authorizations:
path Parameters
id required | string <uuid> Identifier of the site you want to delete. |
Responses
Response samples
- 400
{- "message": [
- "Invalid date"
], - "error": "Bad Request",
- "status_code": 400
}
Rotate credentials
Creates new credentials and marks the old ones for rotation.
Both sets of credentials remain valid until the rotation is either completed or canceled. This allows for a seamless transition between the old and new credentials, ensuring that there is no downtime or disruption in service during the rotation process.
Authorizations:
path Parameters
id required | string <uuid> Site ID |
Responses
Response samples
- 200
- 400
{- "key": "4adfe27e-63d3-45b9-8238-62b6ed6fdb5e",
- "secret": "secret"
}
Complete credential rotation
Completes the credential rotation process by permanently removing the old credentials from the system. Once this operation is performed, the old credentials will no longer be valid and this action cannot be undone.
Authorizations:
path Parameters
id required | string <uuid> Site ID |
Responses
Response samples
- 400
{- "message": [
- "Invalid date"
], - "error": "Bad Request",
- "status_code": 400
}
Cancel credential rotation
Cancels the credential rotation process. This action will remove the newly generated credentials and retain the old credentials, keeping them active and valid.
Authorizations:
path Parameters
id required | string <uuid> Site ID |
Responses
Response samples
- 400
{- "message": [
- "Invalid date"
], - "error": "Bad Request",
- "status_code": 400
}
Register, modify or delete flexible resources.
You can add flexible resources to each site, such as batteries, heat pumps, electric vehicles, ... They are the physical resource that can offer flexibility.
Each resource has an enrollment status for the markets it can participate in, which you can query.
Create a resource
Create a new resource.
A maximum of 10 resources can be created per connection point.
Authorizations:
Request Body schema: application/jsonrequired
name | string non-empty Human-readable name for this resource. Useful for reporting, but not required. |
type required | string Enum: "static_battery" "heat_pump" "electric_vehicle" "electric_vehicle_charging_point" "photovoltaic" "wind" "other" Type of energy resource (battery, heat pump, solar, etc.). |
required | object Power constraints for this resource. |
object Capacity constraints for this resource (in kWh). This property is currently only required for battery resources. | |
connection_point_id required | string <uuid> Deprecated Identifier for the connection point that this resource is part of. Replaced by |
site_id required | string <uuid> Identifier for the site that this resource is part of. |
object Webhooks related to this resource, for example to be notified about the acceptance of a bid for this resource. |
Responses
Request samples
- Payload
- Python
- JavaScript
- Java
- Go
- C#
- cURL
{- "name": "Home Battery",
- "type": "static_battery",
- "power": {
- "active": {
- "minimum": "5.1",
- "maximum": "5.1"
}, - "reactive": {
- "minimum": "5.1",
- "maximum": "5.1"
}
}, - "capacity": {
- "minimum": "5.1",
- "maximum": "5.1"
}, - "connection_point_id": "ae944f51-5a77-4711-9dcc-c522537596d9",
- "site_id": "72771e6a-6f5e-4de4-a5b9-1266c4197811",
}
Response samples
- 201
- 400
{- "name": "Home Battery",
- "type": "static_battery",
- "capacity": {
- "minimum": "5.1",
- "maximum": "5.1"
}, - "connection_point_id": "ae944f51-5a77-4711-9dcc-c522537596d9",
- "site_id": "72771e6a-6f5e-4de4-a5b9-1266c4197811",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "power": {
- "active": {
- "minimum": "5.1",
- "maximum": "5.1"
}, - "reactive": {
- "minimum": "5.1",
- "maximum": "5.1"
}
}, - "created_at": "string",
- "modified_at": "string",
- "last_seen_at": "2025-01-07T15:08:22Z"
}
Get all resources
Gets all resources available to your current authorised scope, or for a connection point specifically.
Authorizations:
query Parameters
site_id | string <uuid> Identifier of the site to fetch resources for. |
connection_point_id | string <uuid> Deprecated Identifier of the connection point to fetch resources for. |
Responses
Request samples
- Python
- JavaScript
- Java
- Go
- C#
- cURL
import requests url = "https://api.powernaut.io/v1/connect/resources?site_id=<uuid>&connection_point_id=<uuid>" payload = {} headers = { 'Accept': 'application/json', 'Authorization': 'Bearer <token>' } response = requests.request("GET", url, headers=headers, data=payload) print(response.text)
Response samples
- 200
- 400
{- "total": 0,
- "items": [
- {
- "name": "Home Battery",
- "type": "static_battery",
- "capacity": {
- "minimum": "5.1",
- "maximum": "5.1"
}, - "connection_point_id": "ae944f51-5a77-4711-9dcc-c522537596d9",
- "site_id": "72771e6a-6f5e-4de4-a5b9-1266c4197811",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "power": {
- "active": {
- "minimum": "5.1",
- "maximum": "5.1"
}, - "reactive": {
- "minimum": "5.1",
- "maximum": "5.1"
}
}, - "created_at": "string",
- "modified_at": "string",
- "last_seen_at": "2025-01-07T15:08:22Z"
}
]
}
Get a resource
Gets a resource by its unique ID.
Authorizations:
path Parameters
id required | string <uuid> Identifier of the resource. |
Responses
Response samples
- 200
- 400
{- "name": "Home Battery",
- "type": "static_battery",
- "capacity": {
- "minimum": "5.1",
- "maximum": "5.1"
}, - "connection_point_id": "ae944f51-5a77-4711-9dcc-c522537596d9",
- "site_id": "72771e6a-6f5e-4de4-a5b9-1266c4197811",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "power": {
- "active": {
- "minimum": "5.1",
- "maximum": "5.1"
}, - "reactive": {
- "minimum": "5.1",
- "maximum": "5.1"
}
}, - "created_at": "string",
- "modified_at": "string",
- "last_seen_at": "2025-01-07T15:08:22Z"
}
Update a resource
Update a resource by its unique ID.
Only the properties you provide will be updated. Use null
to unset a property.
Authorizations:
path Parameters
id required | string <uuid> Identifier of the resource you want to update. |
Request Body schema: application/jsonrequired
name | string non-empty Human-readable name for this resource. Useful for reporting, but not required. |
type | string Enum: "static_battery" "heat_pump" "electric_vehicle" "electric_vehicle_charging_point" "photovoltaic" "wind" "other" Type of energy resource (battery, heat pump, solar, etc.). |
object Power constraints for this resource. | |
object Capacity constraints for this resource (in kWh). This property is currently only required for battery resources. | |
object Webhooks related to this resource, for example to be notified about the acceptance of a bid for this resource. |
Responses
Request samples
- Payload
{- "name": "Home Battery",
- "type": "static_battery",
- "power": {
- "active": {
- "minimum": "5.1",
- "maximum": "5.1"
}, - "reactive": {
- "minimum": "5.1",
- "maximum": "5.1"
}
}, - "capacity": {
- "minimum": "5.1",
- "maximum": "5.1"
},
}
Response samples
- 202
- 400
{- "name": "Home Battery",
- "type": "static_battery",
- "capacity": {
- "minimum": "5.1",
- "maximum": "5.1"
}, - "connection_point_id": "ae944f51-5a77-4711-9dcc-c522537596d9",
- "site_id": "72771e6a-6f5e-4de4-a5b9-1266c4197811",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "power": {
- "active": {
- "minimum": "5.1",
- "maximum": "5.1"
}, - "reactive": {
- "minimum": "5.1",
- "maximum": "5.1"
}
}, - "created_at": "string",
- "modified_at": "string",
- "last_seen_at": "2025-01-07T15:08:22Z"
}
Delete a resource
Delete a resource
Imporant: This action is irreversible and will remove all associated bids.
Authorizations:
path Parameters
id required | string <uuid> Identifier of the resource you want to delete. |
Responses
Response samples
- 400
{- "message": [
- "Invalid date"
], - "error": "Bad Request",
- "status_code": 400
}
Markets are the electricity markets in which you can participate. Each market has a set of eligibility criteria, which you can query to see if you can participate in a certain market.
Read our guide for more information.
Connection point markets Deprecated
Retrieves the markets a connection point can have access to.
Whether a market is available or not depends on the combination of a few factors:
Whether or not the owner of the connection point is contractually connected to the market via its supplier
Whether or not the connection point is located in the market's service area (geographically)
Whether or not the connection point and its resources meet the market's eligibility criteria (technical requirements)
The result contains all contractually available markets, with a status
property indicating whether or not the connection point can access the market.
The different values of the market status of a connection point are:
active
- The connection point is active on this market.ineligible
- The connection point is not eligible for this market (for example due to technical, or geographical reasons).action_required
- Further action is required from the site to activate this market.
When the status is action_required
, further action is required to activate the market. Look at the action
property for more information.
Authorizations:
path Parameters
id required | string <uuid> Identifier of the connection point you want to get markets for. |
Responses
Response samples
- 200
- 400
[- {
- "name": "string",
- "status": "active"
}
]
Site markets
Retrieves the markets a site can have access to.
Whether a market is available or not depends on the combination of a few factors:
Whether or not the owner of the site is contractually connected to the market via its supplier
Whether or not the site is located in the market's service area (geographically)
Whether or not the site and its resources meet the market's eligibility criteria (technical requirements)
The result contains all contractually available markets, with a status
property indicating whether or not the site can access the market.
The different values of the market status of a site are:
active
- The site is active on this market.ineligible
- The site is not eligible for this market (for example due to technical, or geographical reasons).action_required
- Further action is required from the site to activate this market.
When the status is action_required
, further action is required to activate the market. Look at the action
property for more information.
Authorizations:
path Parameters
id required | string <uuid> Identifier of the site you want to get markets for. |
Responses
Response samples
- 200
- 400
[- {
- "name": "string",
- "status": "active"
}
]
With baselining, you indicate your normal consumption/production behaviour.
This baseline is essential to provide flexibility, which is then defined as a deviation from this baseline. You can provide a baseline either for a site, or a resource.
See the guide for more information.
Connection point baseline Deprecated
Retrieve baseline data for the connection point.
Authorizations:
path Parameters
id required | string <uuid> Identifier of the connection point you want to retrieve the baseline data for. |
query Parameters
amount required | number [ 1 .. 48 ] Number of timesteps to be included in the time window. |
start required | string Start of window (ISO 8601). Must be a perfect minute without seconds or milliseconds precision. Note: To avoid timezone issues, we perform an additional check for the presence of timezone information. You should always include either UTC with |
granularity required | string The granularity to fetch the state for, i.e. the time length of each element. It cannot be smaller than 1 minute, and cannot contain sub-minute precision. The expected format is ISO8601. |
Responses
Response samples
- 400
{- "message": [
- "Invalid date"
], - "error": "Bad Request",
- "status_code": 400
}
Connection point Deprecated
Add a baseline for a connection point.
This operation will override any existing baseline values that might overlap.
Authorizations:
path Parameters
id required | string <uuid> Identifier of the connection point you want to add a baseline for. |
Request Body schema: application/jsonrequired
start required | string Start of window (ISO 8601). Must be a perfect quarter-hour. Constraints: This must be at least the current quarter-hour, and cannot be more than 96 quarter-hours in the future. Length: Each baseline value is for a period of a quarter-hour, so the length of this period is defined by the amount of elements in Note: To avoid timezone issues, we perform an additional check for the presence of timezone information. You should always include either UTC with |
type | string Enum: "active" "reactive" Type of power for this baseline (active vs. reactive). Defaults to |
values required | Array of strings [ 1 .. 96 ] items The baseline values, starting from timestamp This is the active/reactive power that will be imported/exported (in Supports up to 96 elements. |
Responses
Request samples
- Payload
{- "start": "2024-07-01T14:00:00Z",
- "type": "active",
- "values": [
- "string"
]
}
Response samples
- 400
{- "message": [
- "Invalid date"
], - "error": "Bad Request",
- "status_code": 400
}
Site baseline
Retrieve baseline data for the site.
Authorizations:
path Parameters
id required | string <uuid> Identifier of the site you want to retrieve the baseline data for. |
query Parameters
amount required | number [ 1 .. 48 ] Number of timesteps to be included in the time window. |
start required | string Start of window (ISO 8601). Must be a perfect minute without seconds or milliseconds precision. Note: To avoid timezone issues, we perform an additional check for the presence of timezone information. You should always include either UTC with |
granularity required | string The granularity to fetch the state for, i.e. the time length of each element. It cannot be smaller than 1 minute, and cannot contain sub-minute precision. The expected format is ISO8601. |
Responses
Response samples
- 400
{- "message": [
- "Invalid date"
], - "error": "Bad Request",
- "status_code": 400
}
Site
Add a baseline for a site.
This operation will override any existing baseline values that might overlap.
Authorizations:
path Parameters
id required | string <uuid> Identifier of the site you want to add a baseline for. |
Request Body schema: application/jsonrequired
start required | string Start of window (ISO 8601). Must be a perfect quarter-hour. Constraints: This must be at least the current quarter-hour, and cannot be more than 96 quarter-hours in the future. Length: Each baseline value is for a period of a quarter-hour, so the length of this period is defined by the amount of elements in Note: To avoid timezone issues, we perform an additional check for the presence of timezone information. You should always include either UTC with |
type | string Enum: "active" "reactive" Type of power for this baseline (active vs. reactive). Defaults to |
values required | Array of strings [ 1 .. 96 ] items The baseline values, starting from timestamp This is the active/reactive power that will be imported/exported (in Supports up to 96 elements. |
Responses
Request samples
- Payload
{- "start": "2024-07-01T14:00:00Z",
- "type": "active",
- "values": [
- "string"
]
}
Response samples
- 400
{- "message": [
- "Invalid date"
], - "error": "Bad Request",
- "status_code": 400
}
Resource
Add a baseline for a resource.
This operation will override any existing baseline values that might overlap.
Authorizations:
path Parameters
id required | string <uuid> Identifier of the resource you want to add a baseline for. |
Request Body schema: application/jsonrequired
start required | string Start of window (ISO 8601). Must be a perfect quarter-hour. Constraints: This must be at least the current quarter-hour, and cannot be more than 96 quarter-hours in the future. Length: Each baseline value is for a period of a quarter-hour, so the length of this period is defined by the amount of elements in Note: To avoid timezone issues, we perform an additional check for the presence of timezone information. You should always include either UTC with |
type | string Enum: "active" "reactive" Type of power for this baseline (active vs. reactive). Defaults to |
values required | Array of strings [ 1 .. 96 ] items The baseline values, starting from timestamp This is the active/reactive power that will be imported/exported (in Supports up to 96 elements. |
Responses
Request samples
- Payload
{- "start": "2024-07-01T14:00:00Z",
- "type": "active",
- "values": [
- "string"
]
}
Response samples
- 400
{- "message": [
- "Invalid date"
], - "error": "Bad Request",
- "status_code": 400
}
Bid a resource
Add a bid for a resource.
Authorizations:
path Parameters
id required | string <uuid> Identifier of the resource you want to add a bid for. |
Request Body schema: application/jsonrequired
required | object Time window when the power is available (e.g., 18:00-18:15). This must be a perfect quarter-hour in length. Only one bid per resource is allowed per time window. |
type | string Enum: "active" "reactive" Type of power for this bid (active vs. reactive). Defaults to |
required | Array of objects (PricePointDto) [ 1 .. 100 ] items The bid curve, see the guide for more information. |
expires_at | string When this bid should expire (ISO 8601). This can be used to automatically expire bids at a certain time, e.g. when you need enough time to react on its acceptance. Note: To avoid timezone issues, we perform an additional check for the presence of timezone information. You should always include either UTC with |
object Webhooks related to this bid, for example to be notified about a bid's acceptance. |
Responses
Request samples
- Payload
{- "timing": {
- "start": "2024-07-01T14:00:00Z",
- "end": "2024-07-01T14:15:00Z"
}, - "type": "active",
- "curve": [
- {
- "value": "5.1",
- "price": "5.1"
}
], - "expires_at": "string",
}
Response samples
- 201
- 400
{- "timing": {
- "start": "2024-07-01T14:00:00Z",
- "end": "2024-07-01T14:15:00Z"
}, - "type": "active",
- "curve": [
- {
- "value": "5.1",
- "price": "5.1"
}
], - "expires_at": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
- "status": "open",
- "activation": {
- "value": "5.1",
- "price": "5.1",
- "created_at": "2024-07-01T14:00:00Z"
}, - "created_at": "string",
- "modified_at": "string"
}
Real-time data Deprecated
Retrieves the actual real-time data for this connection point
Authorizations:
path Parameters
id required | string <uuid> Identifier of the connection point you want to get real-time data for. |
query Parameters
start required | string Start of window (ISO 8601). Must be a perfect minute without seconds or milliseconds precision. Note: To avoid timezone issues, we perform an additional check for the presence of timezone information. You should always include either UTC with |
amount required | number [ 1 .. 48 ] Number of timesteps to be included in the time window. |
granularity required | string The granularity to fetch the state for, i.e. the time length of each element. It cannot be smaller than 1 minute, and cannot contain sub-minute precision. The expected format is ISO8601. |
Responses
Response samples
- 200
- 400
{- "items": [
- "5100",
- "5200",
- "5300"
]
}
Real-time data
Retrieves the actual real-time data for this site
Authorizations:
path Parameters
id required | string <uuid> Identifier of the site you want to get real-time data for. |
query Parameters
start required | string Start of window (ISO 8601). Must be a perfect minute without seconds or milliseconds precision. Note: To avoid timezone issues, we perform an additional check for the presence of timezone information. You should always include either UTC with |
amount required | number [ 1 .. 48 ] Number of timesteps to be included in the time window. |
granularity required | string The granularity to fetch the state for, i.e. the time length of each element. It cannot be smaller than 1 minute, and cannot contain sub-minute precision. The expected format is ISO8601. |
Responses
Response samples
- 200
- 400
{- "items": [
- "5100",
- "5200",
- "5300"
]
}
Bids get accepted when there's a need for them. You need to activate when they get accepted, i.e. act on the requested flexibility.
Receive an accepted bid Webhook | POST
During bidding, you can set a webhook to receive activation events on.
Fetching details
To make webhooks easy to implement, while also being secure, a webhook contains only a single reference to the bid that was accepted. You should use this reference to fetch the activation details by looking up the accepted bid.
See this endpoint for details on how to look up activation details.
Retries
You should reply with a 2XX
status code, indicating you have successfully activated the asset.
You can also reply with a 406
status code if you notice that the activation cannot be delivered upon for some reason (e.g. a suddenly disconnected car).
We will retry your webhook up to 3 times in case you:
- Do not reply with a
2XX
or406
status code or, - We do not get a successful reply within 5 seconds
Our portal shows a log of both successful and failed webhook calls.
header Parameters
X-Powernaut-Webhook-Version | string Example: v1 A version indicator for this webhook, used to track changes to the webhook implementation. At the moment, this is always |
Request Body schema: application/jsonrequired
id required | string <uuid> Identifier for the bid that has been accepted. You can use this to look up the details of the activation. |
Responses
Request samples
- Payload
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
Manage your bids. You can update, cancel and receive notifications about bids.
When a bid is accepted, you either get notified or you poll for status updates.
Read more here
Get all bids
Gets all accepted or open bids available to your current authorised scope.
Accepted bids need to be acted upon and the requested flexibility should be provided.
Authorizations:
query Parameters
page | number >= 1 Default: 1 Page number |
page_size | number >= 1 Default: 10 Page size |
status | string Enum: "open" "accepted" Example: status=accepted Status of the bids (accepted or open). If not provided, all open & accepted bids will be returned. |
Responses
Request samples
- Python
- JavaScript
- Java
- Go
- C#
- cURL
import requests url = "https://api.powernaut.io/v1/connect/bids?page=1&page_size=10&status=<string>" payload = {} headers = { 'Accept': 'application/json', 'Authorization': 'Bearer <token>' } response = requests.request("GET", url, headers=headers, data=payload) print(response.text)
Response samples
- 200
- 400
{- "total": 0,
- "items": [
- {
- "timing": {
- "start": "2024-07-01T14:00:00Z",
- "end": "2024-07-01T14:15:00Z"
}, - "type": "active",
- "curve": [
- {
- "value": "5.1",
- "price": "5.1"
}
], - "expires_at": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
- "status": "open",
- "activation": {
- "value": "5.1",
- "price": "5.1",
- "created_at": "2024-07-01T14:00:00Z"
}, - "created_at": "string",
- "modified_at": "string"
}
]
}
Get a bid
Gets a bid by its unique ID.
Can be used to look up a bid, and its activation after you've received a notification that it was accepted, see the activation
property in the response of this endpoint.
Authorizations:
path Parameters
id required | string <uuid> Identifier of the bid. |
Responses
Response samples
- 200
- 400
{- "timing": {
- "start": "2024-07-01T14:00:00Z",
- "end": "2024-07-01T14:15:00Z"
}, - "type": "active",
- "curve": [
- {
- "value": "5.1",
- "price": "5.1"
}
], - "expires_at": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
- "status": "open",
- "activation": {
- "value": "5.1",
- "price": "5.1",
- "created_at": "2024-07-01T14:00:00Z"
}, - "created_at": "string",
- "modified_at": "string"
}
Update a bid
Update a bid by its unique ID.
Only open bids can be updated.
Only the properties you provide will be updated. Use null
to unset a property.
Authorizations:
path Parameters
id required | string <uuid> Identifier of the bid you want to update. |
Request Body schema: application/jsonrequired
object Time window when the power is available (e.g., 18:00-18:15). This must be a perfect quarter-hour in length. Only one bid per resource is allowed per time window. | |
type | string Enum: "active" "reactive" Type of power for this bid (active vs. reactive). Defaults to |
Array of objects (PricePointDto) [ 1 .. 100 ] items The bid curve, see the guide for more information. | |
expires_at | string When this bid should expire (ISO 8601). This can be used to automatically expire bids at a certain time, e.g. when you need enough time to react on its acceptance. Note: To avoid timezone issues, we perform an additional check for the presence of timezone information. You should always include either UTC with |
object Webhooks related to this bid, for example to be notified about a bid's acceptance. |
Responses
Request samples
- Payload
{- "timing": {
- "start": "2024-07-01T14:00:00Z",
- "end": "2024-07-01T14:15:00Z"
}, - "type": "active",
- "curve": [
- {
- "value": "5.1",
- "price": "5.1"
}
], - "expires_at": "string",
}
Response samples
- 202
- 400
{- "timing": {
- "start": "2024-07-01T14:00:00Z",
- "end": "2024-07-01T14:15:00Z"
}, - "type": "active",
- "curve": [
- {
- "value": "5.1",
- "price": "5.1"
}
], - "expires_at": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
- "status": "open",
- "activation": {
- "value": "5.1",
- "price": "5.1",
- "created_at": "2024-07-01T14:00:00Z"
}, - "created_at": "string",
- "modified_at": "string"
}
Cancel a bid
Cancels a bid by its unique ID.
Only open bids can be canceled.
Authorizations:
path Parameters
id required | string <uuid> Identifier of the bid you want to cancel. |
Responses
Response samples
- 400
{- "message": [
- "Invalid date"
], - "error": "Bad Request",
- "status_code": 400
}