Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: Powernaut authentication Resources API
description: '
# 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.
'
version: 1.0.0
contact:
name: Powernaut Support
url: https://powernaut.io
email: support@powernaut.io
license:
name: Creative Commons Attribution-ShareAlike 4.0 International
url: https://creativecommons.org/licenses/by-sa/4.0/
servers:
- url: https://api.sandbox.powernaut.io
description: Sandbox
- url: https://api.powernaut.io
description: Production
tags:
- name: resources
description: '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 enrolment status for the markets it can participate in, which you can query.'
x-displayName: Resources
paths:
/v1/connect/resources:
post:
description: 'Create a new resource.
A maximum of 10 resources can be created per site.'
operationId: CreateResource
parameters: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateResourceDto'
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/ResourceDto'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequestExceptionDto'
'401':
description: Not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/UnauthorizedExceptionDto'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ForbiddenExceptionDto'
security:
- edge-cloud: []
- cloud-cloud: []
summary: Create a resource
tags:
- resources
x-codeSamples:
- source: "import requests\nimport json\n\nurl = \"https://api.powernaut.io/v1/connect/resources\"\n\npayload = json.dumps({\n \"type\": \"<string>\",\n \"power\": {\n \"active\": {\n \"minimum\": \"<decimal>\",\n \"maximum\": \"<decimal>\"\n },\n \"reactive\": {\n \"minimum\": \"<decimal>\",\n \"maximum\": \"<decimal>\"\n }\n },\n \"site_id\": \"<uuid>\",\n \"name\": \"<string>\",\n \"external_id\": \"<string>\",\n \"capacity\": {\n \"minimum\": \"<decimal>\",\n \"maximum\": \"<decimal>\"\n },\n \"group_id\": \"<uuid>\",\n \"parent_id\": \"<uuid>\",\n \"webhooks\": {\n \"accepted\": \"<uri>\"\n }\n})\nheaders = {\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n 'Authorization': 'Bearer <token>'\n}\n\nresponse = requests.request(\"POST\", url, headers=headers, data=payload)\n\nprint(response.text)\n"
lang: python
label: Python
- source: "const myHeaders = new Headers();\nmyHeaders.append(\"Content-Type\", \"application/json\");\nmyHeaders.append(\"Accept\", \"application/json\");\nmyHeaders.append(\"Authorization\", \"Bearer <token>\");\n\nconst raw = JSON.stringify({\n \"type\": \"<string>\",\n \"power\": {\n \"active\": {\n \"minimum\": \"<decimal>\",\n \"maximum\": \"<decimal>\"\n },\n \"reactive\": {\n \"minimum\": \"<decimal>\",\n \"maximum\": \"<decimal>\"\n }\n },\n \"site_id\": \"<uuid>\",\n \"name\": \"<string>\",\n \"external_id\": \"<string>\",\n \"capacity\": {\n \"minimum\": \"<decimal>\",\n \"maximum\": \"<decimal>\"\n },\n \"group_id\": \"<uuid>\",\n \"parent_id\": \"<uuid>\",\n \"webhooks\": {\n \"accepted\": \"<uri>\"\n }\n});\n\nconst requestOptions = {\n method: \"POST\",\n headers: myHeaders,\n body: raw,\n redirect: \"follow\"\n};\n\nfetch(\"https://api.powernaut.io/v1/connect/resources\", requestOptions)\n .then((response) => response.text())\n .then((result) => console.log(result))\n .catch((error) => console.error(error));"
lang: javascript
label: JavaScript
- source: "OkHttpClient client = new OkHttpClient().newBuilder()\n .build();\nMediaType mediaType = MediaType.parse(\"application/json\");\nRequestBody body = RequestBody.create(mediaType, \"{\\n \\\"type\\\": \\\"<string>\\\",\\n \\\"power\\\": {\\n \\\"active\\\": {\\n \\\"minimum\\\": \\\"<decimal>\\\",\\n \\\"maximum\\\": \\\"<decimal>\\\"\\n },\\n \\\"reactive\\\": {\\n \\\"minimum\\\": \\\"<decimal>\\\",\\n \\\"maximum\\\": \\\"<decimal>\\\"\\n }\\n },\\n \\\"site_id\\\": \\\"<uuid>\\\",\\n \\\"name\\\": \\\"<string>\\\",\\n \\\"external_id\\\": \\\"<string>\\\",\\n \\\"capacity\\\": {\\n \\\"minimum\\\": \\\"<decimal>\\\",\\n \\\"maximum\\\": \\\"<decimal>\\\"\\n },\\n \\\"group_id\\\": \\\"<uuid>\\\",\\n \\\"parent_id\\\": \\\"<uuid>\\\",\\n \\\"webhooks\\\": {\\n \\\"accepted\\\": \\\"<uri>\\\"\\n }\\n}\");\nRequest request = new Request.Builder()\n .url(\"https://api.powernaut.io/v1/connect/resources\")\n .method(\"POST\", body)\n .addHeader(\"Content-Type\", \"application/json\")\n .addHeader(\"Accept\", \"application/json\")\n .addHeader(\"Authorization\", \"Bearer <token>\")\n .build();\nResponse response = client.newCall(request).execute();"
lang: java
label: Java
- source: "package main\n\nimport (\n \"fmt\"\n \"strings\"\n \"net/http\"\n \"io/ioutil\"\n)\n\nfunc main() {\n\n url := \"https://api.powernaut.io/v1/connect/resources\"\n method := \"POST\"\n\n payload := strings.NewReader(`{\n \"type\": \"<string>\",\n \"power\": {\n \"active\": {\n \"minimum\": \"<decimal>\",\n \"maximum\": \"<decimal>\"\n },\n \"reactive\": {\n \"minimum\": \"<decimal>\",\n \"maximum\": \"<decimal>\"\n }\n },\n \"site_id\": \"<uuid>\",\n \"name\": \"<string>\",\n \"external_id\": \"<string>\",\n \"capacity\": {\n \"minimum\": \"<decimal>\",\n \"maximum\": \"<decimal>\"\n },\n \"group_id\": \"<uuid>\",\n \"parent_id\": \"<uuid>\",\n \"webhooks\": {\n \"accepted\": \"<uri>\"\n }\n}`)\n\n client := &http.Client {\n }\n req, err := http.NewRequest(method, url, payload)\n\n if err != nil {\n fmt.Println(err)\n return\n }\n req.Header.Add(\"Content-Type\", \"application/json\")\n req.Header.Add(\"Accept\", \"application/json\")\n req.Header.Add(\"Authorization\", \"Bearer <token>\")\n\n res, err := client.Do(req)\n if err != nil {\n fmt.Println(err)\n return\n }\n defer res.Body.Close()\n\n body, err := ioutil.ReadAll(res.Body)\n if err != nil {\n fmt.Println(err)\n return\n }\n fmt.Println(string(body))\n}"
lang: go
label: Go
- source: 'var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https://api.powernaut.io/v1/connect/resources");
request.Headers.Add("Accept", "application/json");
request.Headers.Add("Authorization", "Bearer <token>");
var content = new StringContent("{\n \"type\": \"<string>\",\n \"power\": {\n \"active\": {\n \"minimum\": \"<decimal>\",\n \"maximum\": \"<decimal>\"\n },\n \"reactive\": {\n \"minimum\": \"<decimal>\",\n \"maximum\": \"<decimal>\"\n }\n },\n \"site_id\": \"<uuid>\",\n \"name\": \"<string>\",\n \"external_id\": \"<string>\",\n \"capacity\": {\n \"minimum\": \"<decimal>\",\n \"maximum\": \"<decimal>\"\n },\n \"group_id\": \"<uuid>\",\n \"parent_id\": \"<uuid>\",\n \"webhooks\": {\n \"accepted\": \"<uri>\"\n }\n}", null, "application/json");
request.Content = content;
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());
'
lang: csharp
label: C#
- source: "curl --location 'https://api.powernaut.io/v1/connect/resources' \\\n--header 'Content-Type: application/json' \\\n--header 'Accept: application/json' \\\n--header 'Authorization: Bearer <token>' \\\n--data '{\n \"type\": \"<string>\",\n \"power\": {\n \"active\": {\n \"minimum\": \"<decimal>\",\n \"maximum\": \"<decimal>\"\n },\n \"reactive\": {\n \"minimum\": \"<decimal>\",\n \"maximum\": \"<decimal>\"\n }\n },\n \"site_id\": \"<uuid>\",\n \"name\": \"<string>\",\n \"external_id\": \"<string>\",\n \"capacity\": {\n \"minimum\": \"<decimal>\",\n \"maximum\": \"<decimal>\"\n },\n \"group_id\": \"<uuid>\",\n \"parent_id\": \"<uuid>\",\n \"webhooks\": {\n \"accepted\": \"<uri>\"\n }\n}'"
lang: curl
label: cURL
get:
description: Gets all resources available to your current authorised scope, or for a site specifically.
operationId: FindAllResources
parameters:
- name: site_id
required: false
in: query
description: Identifier of the site to fetch resources for.
schema:
type: string
format: uuid
- name: connection_point_id
required: false
in: query
description: 'Identifier of the site to fetch resources for.
**Note**: This is deprecated, use `site_id` instead.'
deprecated: true
schema:
type: string
format: uuid
responses:
'200':
description: All resources
content:
application/json:
schema:
$ref: '#/components/schemas/ConnectionPointResourcesListDto'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequestExceptionDto'
'401':
description: Not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/UnauthorizedExceptionDto'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ForbiddenExceptionDto'
security:
- edge-cloud: []
- cloud-cloud: []
summary: Get all resources
tags:
- resources
x-codeSamples:
- source: "import requests\n\nurl = \"https://api.powernaut.io/v1/connect/resources\"\n\npayload = {}\nheaders = {\n 'Accept': 'application/json',\n 'Authorization': 'Bearer <token>'\n}\n\nresponse = requests.request(\"GET\", url, headers=headers, data=payload)\n\nprint(response.text)\n"
lang: python
label: Python
- source: "const myHeaders = new Headers();\nmyHeaders.append(\"Accept\", \"application/json\");\nmyHeaders.append(\"Authorization\", \"Bearer <token>\");\n\nconst requestOptions = {\n method: \"GET\",\n headers: myHeaders,\n redirect: \"follow\"\n};\n\nfetch(\"https://api.powernaut.io/v1/connect/resources\", requestOptions)\n .then((response) => response.text())\n .then((result) => console.log(result))\n .catch((error) => console.error(error));"
lang: javascript
label: JavaScript
- source: "OkHttpClient client = new OkHttpClient().newBuilder()\n .build();\nMediaType mediaType = MediaType.parse(\"text/plain\");\nRequestBody body = RequestBody.create(mediaType, \"\");\nRequest request = new Request.Builder()\n .url(\"https://api.powernaut.io/v1/connect/resources\")\n .method(\"GET\", body)\n .addHeader(\"Accept\", \"application/json\")\n .addHeader(\"Authorization\", \"Bearer <token>\")\n .build();\nResponse response = client.newCall(request).execute();"
lang: java
label: Java
- source: "package main\n\nimport (\n \"fmt\"\n \"net/http\"\n \"io/ioutil\"\n)\n\nfunc main() {\n\n url := \"https://api.powernaut.io/v1/connect/resources\"\n method := \"GET\"\n\n client := &http.Client {\n }\n req, err := http.NewRequest(method, url, nil)\n\n if err != nil {\n fmt.Println(err)\n return\n }\n req.Header.Add(\"Accept\", \"application/json\")\n req.Header.Add(\"Authorization\", \"Bearer <token>\")\n\n res, err := client.Do(req)\n if err != nil {\n fmt.Println(err)\n return\n }\n defer res.Body.Close()\n\n body, err := ioutil.ReadAll(res.Body)\n if err != nil {\n fmt.Println(err)\n return\n }\n fmt.Println(string(body))\n}"
lang: go
label: Go
- source: 'var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://api.powernaut.io/v1/connect/resources");
request.Headers.Add("Accept", "application/json");
request.Headers.Add("Authorization", "Bearer <token>");
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());
'
lang: csharp
label: C#
- source: 'curl --location ''https://api.powernaut.io/v1/connect/resources'' \
--header ''Accept: application/json'' \
--header ''Authorization: Bearer <token>'''
lang: curl
label: cURL
/v1/connect/resources/{id}:
get:
description: Gets a resource by its unique ID.
operationId: GetResource
parameters:
- name: id
required: true
in: path
description: Identifier of the resource.
schema:
type: string
format: uuid
responses:
'200':
description: The resource
content:
application/json:
schema:
$ref: '#/components/schemas/ResourceDto'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequestExceptionDto'
'401':
description: Not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/UnauthorizedExceptionDto'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ForbiddenExceptionDto'
'404':
description: Resource does not exist
content:
application/json:
schema:
$ref: '#/components/schemas/NotFoundDto_UmVzb3VyY2UgZG9lcyBub3QgZXhpc3Q'
security:
- edge-cloud: []
- cloud-cloud: []
summary: Get a resource
tags:
- resources
patch:
description: 'Update a resource by its unique ID.
Only the properties you provide will be updated. Use `null` to unset a property.'
operationId: UpdateResource
parameters:
- name: id
required: true
in: path
description: Identifier of the resource you want to update.
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateResourceDto'
responses:
'202':
description: Accepted
content:
application/json:
schema:
$ref: '#/components/schemas/ResourceDto'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequestExceptionDto'
'401':
description: Not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/UnauthorizedExceptionDto'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ForbiddenExceptionDto'
'404':
description: Resource does not exist
content:
application/json:
schema:
$ref: '#/components/schemas/NotFoundDto_UmVzb3VyY2UgZG9lcyBub3QgZXhpc3Q'
security:
- edge-cloud: []
- cloud-cloud: []
summary: Update a resource
tags:
- resources
delete:
description: 'Delete a resource
**Important**: This action is irreversible and will remove all associated future bids and baselines.'
operationId: RemoveResource
parameters:
- name: id
required: true
in: path
description: Identifier of the resource you want to delete.
schema:
type: string
format: uuid
responses:
'204':
description: Deleted
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequestExceptionDto'
'401':
description: Not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/UnauthorizedExceptionDto'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ForbiddenExceptionDto'
'404':
description: Resource does not exist
content:
application/json:
schema:
$ref: '#/components/schemas/NotFoundDto_UmVzb3VyY2UgZG9lcyBub3QgZXhpc3Q'
security:
- edge-cloud: []
- cloud-cloud: []
summary: Delete a resource
tags:
- resources
/v1/connect/resources/{id}/activations:
get:
description: Gets the activations for a resource.
operationId: GetActivationsForResource
parameters:
- name: id
required: true
in: path
description: Identifier of the resource you want to get activations for.
schema:
type: string
format: uuid
- name: page
required: false
in: query
description: Page number
schema:
type: number
- name: page_size
required: false
in: query
description: Page size
schema:
type: number
- name: start
required: false
in: query
description: An optional date from which to start filtering activations (ISO 8601)
schema:
type: string
- name: end
required: false
in: query
description: An optional date until which to filter activations (ISO 8601)
schema:
type: string
responses:
'200':
description: A paginated list of activations
content:
application/json:
schema:
$ref: '#/components/schemas/ProviderActivationSummaryListDto'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/BadRequestExceptionDto'
'401':
description: Not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/UnauthorizedExceptionDto'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ForbiddenExceptionDto'
'404':
description: Resource does not exist
content:
application/json:
schema:
$ref: '#/components/schemas/NotFoundDto_UmVzb3VyY2UgZG9lcyBub3QgZXhpc3Q'
security:
- edge-cloud: []
- cloud-cloud: []
summary: Get activations
tags:
- resources
components:
schemas:
UnauthorizedExceptionDto:
type: object
properties:
message:
description: One or more specific error messages
oneOf:
- type: string
- type: array
items:
type: string
example: Unauthorized
error:
type: string
description: Unauthorized
example: Unauthorized
status_code:
type: number
description: '401'
example: 401
required:
- message
- error
- status_code
BadRequestExceptionDto:
type: object
properties:
message:
description: One or more specific error messages
oneOf:
- type: string
- type: array
items:
type: string
example:
- Invalid datetime
- Invalid page size
error:
type: string
description: Bad Request
example: Bad Request
status_code:
type: number
description: '400'
example: 400
required:
- message
- error
- status_code
ResourcePowerConstraints:
type: object
properties:
minimum:
type: string
description: Minimum level
example: '-5.1'
format: decimal
pattern: ^-?[0-9]{1,15}(.[0-9]{1,6}?)$
maximum:
type: string
description: Maximum level
example: '5.1'
format: decimal
pattern: ^-?[0-9]{1,15}(.[0-9]{1,6}?)$
required:
- minimum
- maximum
ForbiddenExceptionDto:
type: object
properties:
message:
description: One or more specific error messages
oneOf:
- type: string
- type: array
items:
type: string
example: Insufficient permissions
error:
type: string
description: Forbidden
example: Forbidden
status_code:
type: number
description: '403'
example: 403
required:
- message
- error
- status_code
ProviderActivationSummaryListDto:
type: object
properties:
total:
type: integer
description: Total amount of results that match the query
minimum: 0
items:
description: Activations for the current page
type: array
items:
$ref: '#/components/schemas/ProviderActivationSummaryDto'
required:
- total
- items
EnergyDto:
type: object
properties:
delivered:
type:
- string
- 'null'
description: 'The actual energy delivered by the resource, in `kWh` or `kVARh`, verified by real-time metering.
It can be negative if, for example, a resources increases its consumption when a decrease was requested.
This is only available after the activation has been verified, which happens a few minutes after the activation''s time window.'
format: decimal
example: '5.1'
pattern: ^-?[0-9]{1,15}(.[0-9]{1,6}?)$
requested:
type: string
description: The energy requested by the activation, in `kWh` or `kVARh`, based on an initial estimate of available flexibility.
format: decimal
example: '5.1'
pattern: ^-?[0-9]{1,15}(.[0-9]{1,6}?)$
extra_delivered:
type:
- string
- 'null'
description: Extra energy delivered beyond the requested amount for procurements without a delivery limit (in `kWh` or `kVARh`). `null` before verification or for procurements with a fixed delivery limit (where overdelivery is not tracked).
format: decimal
example: '1.2'
pattern: ^-?[0-9]{1,15}(.[0-9]{1,6}?)$
required:
- delivered
- requested
- extra_delivered
CreateResourceDto:
type: object
properties:
name:
type: string
description: Human-readable name for this resource. Useful for reporting, but not required.
example: Home Battery
minLength: 1
external_id:
type:
- string
- 'null'
description: Reference of the resource in external system (gateway, API, ...), used for mapping identifiers.
example: NCC-1701
minLength: 1
type:
type: string
description: Type of energy resource (battery, heat pump, solar, etc.).
enum:
- static_battery
- heat_pump
- electric_vehicle
- electric_vehicle_charging_point
- photovoltaic
- wind
- group
- other
- meter
example: static_battery
power:
description: Power constraints for this resource.
allOf:
- $ref: '#/components/schemas/ResourcePowerDto'
capacity:
description: 'Capacity constraints for this resource (in kWh).
This property is currently only required for battery resources.'
allOf:
- $ref: '#/components/schemas/ResourcePowerConstraints'
site_id:
type: string
description: Identifier for the site that this resource is part of.
format: uuid
group_id:
type: string
description: 'Identifier of the resource group that this resource should belong to.
Only provide this when you want to immediately associate the resource with an existing group on the same site.'
format: uuid
parent_id:
type:
- string
- 'null'
description: 'Identifier of the physical parent resource in the site topology.
Constraints:
- Parent must exist and belong to the same site
- Only meter-type resources can be parents
- Group resources cannot have a parent
- Hierarchy is limited to 10 levels deep'
format: uuid
webhooks:
description: Webhooks related to this resource, for example to be notified about the acceptance of a bid for this resource.
allOf:
- $ref: '#/components/schemas/ResourceWebhooksDto'
required:
- type
- power
- site_id
ResourceDto:
type: object
properties:
name:
type: string
description: Human-readable name for this resource. Useful for reporting, but not required.
example: Home Battery
minLength: 1
type:
type: string
description: Type of energy resource (battery, heat pump, solar, etc.).
enum:
- static_battery
- heat_pump
- electric_vehicle
- electric_vehicle_charging_point
- photovoltaic
- wind
- group
- other
- meter
example: static_battery
capacity:
description: 'Capacity constraints for this resource (in kWh).
This property is currently only required for battery resources.'
allOf:
- $ref: '#/components/schemas/ResourcePowerConstraints'
site_id:
type: string
description: Identifier for the site that this resource is part of.
format: uuid
parent_id:
type:
- string
- 'null'
description: 'Identifier of the physical parent resource in the site topology.
Used to model hierarchical resource relationships (up to 10 levels deep).'
format: uuid
webhooks:
description: Webhooks related to this resource, for example to be notified about the acceptance of a bid for this resource.
allOf:
- $ref: '#/components/schemas/ResourceWebhooksDto'
id:
type: string
description: Unique identifier for the resource
format: uuid
external_id:
type:
- string
- 'null'
description: Reference of the resource in external system (gateway, API, ...), used for mapping identifiers.
example: NCC-1701
group_id:
type:
- string
- 'null'
description: Identifier of the group this resource belongs to.
format: uuid
power:
description: Power constraints for this resource.
allOf:
- $ref: '#/components/schemas/ResourcePowerDto'
created_at:
type: string
description: Timestamp for creation of the resource (ISO 8601)
format: date-time
example: '2024-01-05T11:30:15Z'
modified_at:
type: string
description: Timestamp for last modification of the resource (ISO 8601)
format: date-time
example: '2024-01-05T11:30:15Z'
last_seen_at:
type:
- string
- 'null'
description: Timestamp for last metric received from the resource (ISO 8601)
format: date-time
example: '2025-01-07T15:08:22Z'
required:
- type
- site_id
- id
- power
- created_at
- modified_at
- last_seen_at
UpdateResourceDto:
type: object
properties:
name:
type: string
description: Human-readable name for this resource. Useful for reporting, but not required.
example: Home Battery
minLength: 1
external_id:
type:
- string
- 'null'
description: Reference of the resource in external system (gateway, API, ...), used for mapping identifiers.
example: NCC-1701
minLength: 1
type:
type: string
description: Type of energy resource (battery, heat pump, solar, etc.).
enum:
- static_battery
- heat_pump
- electric_vehicle
- electric_vehicle_charging_point
- photovoltaic
- wind
- group
- other
- meter
example: static_battery
power:
description: Power constraints for this resource.
allOf:
- $ref: '#/components/schemas/ResourcePowerDto'
capacity:
description: 'Capacity constraints for this resource (in kWh).
This property is currently only required for battery resources.'
allOf:
- $ref: '#/components/schemas/ResourcePowerConstraints'
parent_id:
type:
- string
- 'null'
description: 'Identifier of the physical parent resource in the site topology.
Set this field to `null` to remove the parent relationship.
Constraints:
- Parent must exist and belong to the same site
- Only meter-type resources can be parents
- Group resources cannot have a parent
- Hierarchy is limited to 10 levels deep'
format: uuid
webhooks:
description: Webhooks related to this resource, for example to be notified about the acceptance of a bid for this resource.
allOf:
- $ref: '#/components/schemas/ResourceWebhooksDto'
group_id:
type:
- string
- 'null'
description: 'Identifier of the resource group that this resource should belong to.
Set this field to `null` to remove a resource from its existing group.'
format: uuid
ConnectionPointResourcesListDto:
type: object
properties:
total:
type: integer
description: Total amount of results that match the query
minimum: 0
items:
description: Paginated items
type: array
items:
$ref: '#/components/schemas/ResourceDto'
required:
- total
- items
ResourcePowerDto:
type: object
properties:
# --- truncated at 32 KB (36 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/powernaut/refs/heads/main/openapi/powernaut-resources-api-openapi.yml