Skip to main content

Powernaut (1.0.0)

Download OpenAPI specification:Download

Getting Started

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.

Authentication

Authenticating with the Powernaut platform.

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:
token
header Parameters
authorization
required
string

Header value for HTTP Basic authentication.

To encode the credentials:

  1. Concatenate the url encoded client id and secret with a colon (:) in between: clientid:client_secret
  2. Encode the result with Base64: base64(clientid:client_secret)
  3. Include the result in the Authorization header prefixed with Basic .

Example:

Authorization: Basic Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ=

Responses

Request samples

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

Content type
application/json
{
  • "access_token": "string",
  • "expires_in": 3600,
  • "token_type": "Bearer"
}

Sites

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:
cloud-cloud
Request Body schema: application/json
required
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

Content type
application/json
{
  • "grid_identifier": "00000000",
  • "location": {
    },
  • "supply_points": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "location": {
    },
  • "supply_points": [
    ],
  • "created_at": "string",
  • "modified_at": "string",
  • "last_seen_at": "2025-01-07T15:08:22Z",
  • "credentials": {
    }
}

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:
edge-cloudcloud-cloud
query Parameters
page
number >= 1
Default: 1

Page number

page_size
number >= 1
Default: 10

Page size

Responses

Request samples

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

Content type
application/json
{
  • "total": 0,
  • "items": [
    ]
}

Get a connection point Deprecated

Gets a connection point by its unique ID.

Authorizations:
edge-cloudcloud-cloud
path Parameters
id
required
string <uuid>

Identifier of the connection point.

Responses

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "location": {
    },
  • "supply_points": [
    ],
  • "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:
cloud-cloud
path Parameters
id
required
string <uuid>

Identifier of the connection point you want to update.

Request Body schema: application/json
required
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

Content type
application/json
{
  • "grid_identifier": "00000000",
  • "location": {
    },
  • "supply_points": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "location": {
    },
  • "supply_points": [
    ],
  • "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:
cloud-cloud
path Parameters
id
required
string <uuid>

Identifier of the connection point you want to delete.

Responses

Response samples

Content type
application/json
{
  • "message": [
    ],
  • "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:
cloud-cloud
path Parameters
id
required
string <uuid>

Connection point ID

Responses

Response samples

Content type
application/json
{
  • "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:
cloud-cloud
path Parameters
id
required
string <uuid>

Connection point ID

Responses

Response samples

Content type
application/json
{
  • "message": [
    ],
  • "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:
cloud-cloud
path Parameters
id
required
string <uuid>

Connection point ID

Responses

Response samples

Content type
application/json
{
  • "message": [
    ],
  • "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:
cloud-cloud
Request Body schema: application/json
required
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

Content type
application/json
{
  • "grid_identifier": "00000000",
  • "location": {
    },
  • "supply_points": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "location": {
    },
  • "supply_points": [
    ],
  • "created_at": "string",
  • "modified_at": "string",
  • "last_seen_at": "2025-01-07T15:08:22Z",
  • "credentials": {
    }
}

Get all sites

Gets all sites available to your current authorised scope. Results are ordered based on creation date (most recent first).

Authorizations:
edge-cloudcloud-cloud
query Parameters
page
number >= 1
Default: 1

Page number

page_size
number >= 1
Default: 10

Page size

Responses

Request samples

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

Content type
application/json
{
  • "total": 0,
  • "items": [
    ]
}

Get a site

Gets a site by its unique ID.

Authorizations:
edge-cloudcloud-cloud
path Parameters
id
required
string <uuid>

Identifier of the site.

Responses

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "location": {
    },
  • "supply_points": [
    ],
  • "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:
cloud-cloud
path Parameters
id
required
string <uuid>

Identifier of the site you want to update.

Request Body schema: application/json
required
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

Content type
application/json
{
  • "grid_identifier": "00000000",
  • "location": {
    },
  • "supply_points": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "location": {
    },
  • "supply_points": [
    ],
  • "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:
cloud-cloud
path Parameters
id
required
string <uuid>

Identifier of the site you want to delete.

Responses

Response samples

Content type
application/json
{
  • "message": [
    ],
  • "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:
cloud-cloud
path Parameters
id
required
string <uuid>

Site ID

Responses

Response samples

Content type
application/json
{
  • "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:
cloud-cloud
path Parameters
id
required
string <uuid>

Site ID

Responses

Response samples

Content type
application/json
{
  • "message": [
    ],
  • "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:
cloud-cloud
path Parameters
id
required
string <uuid>

Site ID

Responses

Response samples

Content type
application/json
{
  • "message": [
    ],
  • "error": "Bad Request",
  • "status_code": 400
}

Resources

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:
edge-cloudcloud-cloud
Request Body schema: application/json
required
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.

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

Content type
application/json
{
  • "name": "Home Battery",
  • "type": "static_battery",
  • "power": {
    },
  • "capacity": {
    },
  • "connection_point_id": "ae944f51-5a77-4711-9dcc-c522537596d9",
  • "site_id": "72771e6a-6f5e-4de4-a5b9-1266c4197811",
  • "webhooks": {}
}

Response samples

Content type
application/json
{
  • "name": "Home Battery",
  • "type": "static_battery",
  • "capacity": {
    },
  • "connection_point_id": "ae944f51-5a77-4711-9dcc-c522537596d9",
  • "site_id": "72771e6a-6f5e-4de4-a5b9-1266c4197811",
  • "webhooks": {},
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "power": {
    },
  • "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:
edge-cloudcloud-cloud
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

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

Content type
application/json
{
  • "total": 0,
  • "items": [
    ]
}

Get a resource

Gets a resource by its unique ID.

Authorizations:
edge-cloudcloud-cloud
path Parameters
id
required
string <uuid>

Identifier of the resource.

Responses

Response samples

Content type
application/json
{
  • "name": "Home Battery",
  • "type": "static_battery",
  • "capacity": {
    },
  • "connection_point_id": "ae944f51-5a77-4711-9dcc-c522537596d9",
  • "site_id": "72771e6a-6f5e-4de4-a5b9-1266c4197811",
  • "webhooks": {},
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "power": {
    },
  • "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:
edge-cloudcloud-cloud
path Parameters
id
required
string <uuid>

Identifier of the resource you want to update.

Request Body schema: application/json
required
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

Content type
application/json
{
  • "name": "Home Battery",
  • "type": "static_battery",
  • "power": {
    },
  • "capacity": {
    },
  • "webhooks": {}
}

Response samples

Content type
application/json
{
  • "name": "Home Battery",
  • "type": "static_battery",
  • "capacity": {
    },
  • "connection_point_id": "ae944f51-5a77-4711-9dcc-c522537596d9",
  • "site_id": "72771e6a-6f5e-4de4-a5b9-1266c4197811",
  • "webhooks": {},
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "power": {
    },
  • "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:
edge-cloudcloud-cloud
path Parameters
id
required
string <uuid>

Identifier of the resource you want to delete.

Responses

Response samples

Content type
application/json
{
  • "message": [
    ],
  • "error": "Bad Request",
  • "status_code": 400
}

Markets

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:
cloud-cloud
path Parameters
id
required
string <uuid>

Identifier of the connection point you want to get markets for.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

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:
cloud-cloud
path Parameters
id
required
string <uuid>

Identifier of the site you want to get markets for.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Baselining

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:
edge-cloudcloud-cloud
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 Z, or an offset like +01:00.

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

Content type
application/json
{
  • "message": [
    ],
  • "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:
edge-cloudcloud-cloud
path Parameters
id
required
string <uuid>

Identifier of the connection point you want to add a baseline for.

Request Body schema: application/json
required
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 values.

Note: To avoid timezone issues, we perform an additional check for the presence of timezone information. You should always include either UTC with Z, or an offset like +01:00.

type
string
Enum: "active" "reactive"

Type of power for this baseline (active vs. reactive). Defaults to active.

values
required
Array of strings [ 1 .. 96 ] items

The baseline values, starting from timestamp start.

This is the active/reactive power that will be imported/exported (in kW or kVAR, depending on the power type). Use a positive number for grid import and negative for export to the grid.

Supports up to 96 elements.

Responses

Request samples

Content type
application/json
{
  • "start": "2024-07-01T14:00:00Z",
  • "type": "active",
  • "values": [
    ]
}

Response samples

Content type
application/json
{
  • "message": [
    ],
  • "error": "Bad Request",
  • "status_code": 400
}

Site baseline

Retrieve baseline data for the site.

Authorizations:
edge-cloudcloud-cloud
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 Z, or an offset like +01:00.

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

Content type
application/json
{
  • "message": [
    ],
  • "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:
edge-cloudcloud-cloud
path Parameters
id
required
string <uuid>

Identifier of the site you want to add a baseline for.

Request Body schema: application/json
required
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 values.

Note: To avoid timezone issues, we perform an additional check for the presence of timezone information. You should always include either UTC with Z, or an offset like +01:00.

type
string
Enum: "active" "reactive"

Type of power for this baseline (active vs. reactive). Defaults to active.

values
required
Array of strings [ 1 .. 96 ] items

The baseline values, starting from timestamp start.

This is the active/reactive power that will be imported/exported (in kW or kVAR, depending on the power type). Use a positive number for grid import and negative for export to the grid.

Supports up to 96 elements.

Responses

Request samples

Content type
application/json
{
  • "start": "2024-07-01T14:00:00Z",
  • "type": "active",
  • "values": [
    ]
}

Response samples

Content type
application/json
{
  • "message": [
    ],
  • "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:
edge-cloudcloud-cloud
path Parameters
id
required
string <uuid>

Identifier of the resource you want to add a baseline for.

Request Body schema: application/json
required
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 values.

Note: To avoid timezone issues, we perform an additional check for the presence of timezone information. You should always include either UTC with Z, or an offset like +01:00.

type
string
Enum: "active" "reactive"

Type of power for this baseline (active vs. reactive). Defaults to active.

values
required
Array of strings [ 1 .. 96 ] items

The baseline values, starting from timestamp start.

This is the active/reactive power that will be imported/exported (in kW or kVAR, depending on the power type). Use a positive number for grid import and negative for export to the grid.

Supports up to 96 elements.

Responses

Request samples

Content type
application/json
{
  • "start": "2024-07-01T14:00:00Z",
  • "type": "active",
  • "values": [
    ]
}

Response samples

Content type
application/json
{
  • "message": [
    ],
  • "error": "Bad Request",
  • "status_code": 400
}

Bidding

A bid tells us how much flexibility is available in a certain time window.

Bid a resource

Add a bid for a resource.

Authorizations:
edge-cloudcloud-cloud
path Parameters
id
required
string <uuid>

Identifier of the resource you want to add a bid for.

Request Body schema: application/json
required
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 active.

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 Z, or an offset like +01:00.

object

Webhooks related to this bid, for example to be notified about a bid's acceptance.

Responses

Request samples

Content type
application/json
{
  • "timing": {
    },
  • "type": "active",
  • "curve": [
    ],
  • "expires_at": "string",
  • "webhooks": {}
}

Response samples

Content type
application/json
{
  • "timing": {
    },
  • "type": "active",
  • "curve": [
    ],
  • "expires_at": "string",
  • "webhooks": {},
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
  • "status": "open",
  • "activation": {
    },
  • "created_at": "string",
  • "modified_at": "string"
}

Metrics

Metrics reported by resources and sites

Real-time data Deprecated

Retrieves the actual real-time data for this connection point

Authorizations:
cloud-cloud
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 Z, or an offset like +01:00.

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

Content type
application/json
{
  • "items": [
    ]
}

Real-time data

Retrieves the actual real-time data for this site

Authorizations:
cloud-cloud
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 Z, or an offset like +01:00.

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

Content type
application/json
{
  • "items": [
    ]
}

Activating

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:

  1. Do not reply with a 2XX or 406 status code or,
  2. 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 v1.

Request Body schema: application/json
required
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

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}

Bids

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:
edge-cloudcloud-cloud
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

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

Content type
application/json
{
  • "total": 0,
  • "items": [
    ]
}

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:
edge-cloudcloud-cloud
path Parameters
id
required
string <uuid>

Identifier of the bid.

Responses

Response samples

Content type
application/json
{
  • "timing": {
    },
  • "type": "active",
  • "curve": [
    ],
  • "expires_at": "string",
  • "webhooks": {},
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
  • "status": "open",
  • "activation": {
    },
  • "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:
edge-cloudcloud-cloud
path Parameters
id
required
string <uuid>

Identifier of the bid you want to update.

Request Body schema: application/json
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 active.

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 Z, or an offset like +01:00.

object

Webhooks related to this bid, for example to be notified about a bid's acceptance.

Responses

Request samples

Content type
application/json
{
  • "timing": {
    },
  • "type": "active",
  • "curve": [
    ],
  • "expires_at": "string",
  • "webhooks": {}
}

Response samples

Content type
application/json
{
  • "timing": {
    },
  • "type": "active",
  • "curve": [
    ],
  • "expires_at": "string",
  • "webhooks": {},
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
  • "status": "open",
  • "activation": {
    },
  • "created_at": "string",
  • "modified_at": "string"
}

Cancel a bid

Cancels a bid by its unique ID.

Only open bids can be canceled.

Authorizations:
edge-cloudcloud-cloud
path Parameters
id
required
string <uuid>

Identifier of the bid you want to cancel.

Responses

Response samples

Content type
application/json
{
  • "message": [
    ],
  • "error": "Bad Request",
  • "status_code": 400
}