DUET PlatformDocs
API referenceRead APIPerformance

Get availability

planned

Planned

This endpoint isn't available yet. Until it is, it answers 501 Not Implemented.
GET
/platform/v1/availability

Returns IEC TS 63019 time-based capacity availability for each bucket, at site, block, or inverter level, as set by group_by. Derates and DC-side outages count as available, because the equipment keeps part of its capability. The response format follows the Accept header, as on /platform/v1/performance-v2.

Authorization

Bearer
headerAuthorizationBearer <token>

Query Parameters

project_ids*array<string>

One or more DUET project IDs. Repeat the parameter for each ID, for example ?project_ids=a&project_ids=b. You must have access to every project, and all of them must belong to the same organization.

dt_start*string

The first date to include, in ISO 8601 format, for example 2026-05-25. DUET uses the start of that day.

dt_end*string

The last date to include, in ISO 8601 format, for example 2026-05-31. DUET uses the end of that day.

sentinel_tag?string

The deployment tag. Most projects have one deployment, default. A project with several data streams can name a specific deployment.

Default"default"
hierarchy_ids?array<string>

Return only these hierarchy IDs, which identify sensors. Repeat the parameter for each ID. Omit it to return all sensors.

block_ids?array<string>

Return only these blocks. Repeat the parameter for each block ID. Omit it to return all blocks.

group_by?array<>

The dimensions to group by: any combination of project_id, block_id, and hierarchy_id. Repeat the parameter for each dimension. DUET rolls up each dimension that you leave out and returns it as null on every row. For example, omit hierarchy_id to get block-level rows. The default is all three, which returns one row for each sensor.

Items1 <= items
time_interval?string

The bucket size. DUET computes each bucket from native 15-minute buckets. Full returns the whole range as one bucket.

Default"OneDay"
Value in"OneDay""OneWeek""OneMonth""Full"
definition?"iec_time_based"

The availability definition to compute. iec_time_based is IEC TS 63019 time-based capacity availability. Contractual definitions are added for each contract.

Default"iec_time_based"
Value in"iec_time_based"

Header Parameters

Accept?string

The response format: Arrow stream, Parquet, or JSON sequence. The default is Arrow stream.

Default"application/vnd.apache.arrow.stream"
Value in"application/vnd.apache.arrow.stream""application/vnd.apache.parquet""application/json-seq"

Response Body

The availability rows, in the format that the Accept header asks for.

  1. response
bucket_start*string

The start of the bucket as a plant-local day in YYYY-MM-DD format, as on /platform/v1/performance-v2.

project_id*|

The ID of the project. Null when group_by doesn't include project_id.

duet_block_id*|

The ID of the block. Null when group_by doesn't include block_id.

hierarchy_id*|

The hierarchy ID of the inverter. Null when group_by doesn't include hierarchy_id.

sentinel_tag*string

The data stream of the row.

capacity_hours*number

The capacity-hours, in kW·h, that the bucket could have been available: daylight hours multiplied by capacity. The value is additive, so you can sum it across buckets or groups.

unavailable_capacity_hours*number

The capacity-hours lost to unavailability, such as an outage, a trip, or a fault. The value is additive, like capacity_hours.

availability*|

The availability ratio, 1 - unavailable_capacity_hours / capacity_hours, clamped to the range 0 to 1. Null, not 0, when there is no basis for the figure.

inverter_count*integer

The number of inverters in the row.

capacity_known_inverter_count*integer

The number of inverters with a known capacity. Only these inverters count toward the figure.

is_partial*boolean

Whether some inverters have no known capacity.

Example Request
curl -X GET 'https://api.enurgen.com/platform/v1/availability?project_ids=string&dt_start=string&dt_end=string'
Example Response
{  "bucket_start": "string",  "project_id": "string",  "duet_block_id": "string",  "hierarchy_id": "string",  "sentinel_tag": "string",  "capacity_hours": 0,  "unavailable_capacity_hours": 0,  "availability": 0,  "inverter_count": 0,  "capacity_known_inverter_count": 0,  "is_partial": true}