Reposit Power Market API API Reference

Documentation for the Reposit Power Market API. Used by fleet.repositpower.com and related services. Please review our versioning and support policy before using the API.

API Endpoint
https://marketapi.repositpower.com/
Contact: api@repositpower.com
Schemes: https
Version: 1.0.0

Authentication

AccessToken

name
Bearer
in
header
description

To authenticate you need to generate and API Key using Reposit Fleet. API Keys can be limited to whitelisted origin IP addresses for secruity and do not expire making them more suitable to server-to-server comms. API keys may also be revoked via Reposit Fleet.

Creating an API Key

API keys for the Reposit Market API can be generated by first logging in to Reposit Fleet. Once you have logged in click your username at the top right and then select " User Settings"

Within the section labelled "API Keys" click the "Add API Key" button.

Within the dialog that appears you will be able to name the key you are generating and specify a whitelist of IP addresses that this token is valid for. You will also need to confirm your password. When you have configured your keys settings click "Add" and your newly created key will be displayed - the key itself is not stored by Reposit and therefore this is your only opportunity to save the key securely.

Note: The generated key authenticates as the account that you are currently logged in to R eposit Fleet for and as such will carry the same permissions. If you require a locked down account it is recommend that you create a new account for Reposit Fleet and generate the API Key for this account.

Using an API Key

Simply add Bearer followed by the API key in the Authorization header of any request to Market API.

e.g.:

Authorization: Bearer A2YWQiLCJpc3...

Revoking an API Key

If an API Key becomes lost or is no longer required then the API Key can be revoked.

Login to Reposit Fleet as the user for which you wish to revoke the API Key and proceed to User Settings.

From within the "API Keys" you will be able to see a table of all issued API Keys, find the API Key you wish to revoke and select the "Remove" link in the table.

Once an API Key is removed it will cease to work immedately and can not be recovered or reinstated.

Node

API end-points related to deployments.

All Nodes

GET /api/nodes

Return basic information and URLs on how to obtain more information about nodes. Each URL can also be expanded in place using the expand URL parameter

expand

Any property that contains a URL path rather than data can be expanded in place using the expand query string parameter. This is a CSV list of each property name which should be expanded. e.g. ?expand=network,address

type
string
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
Default response
{
  "data": [
    {
      "address": "/api/nodes/bdeea25eb01b460da11e9208007ec2e5/address",
      "id": "bdeea25eb01b460da11e9208007ec2e5",
      "network": "/api/nodes/bdeea25eb01b460da11e9208007ec2e5/network",
      "status": "/api/nodes/bdeea25eb01b460da11e9208007ec2e5/status",
      "namePlate": "/api/nodes/bdeea25eb01b460da11e9208007ec2e5/namePlate"
    },
    {
      "address\"": "/api/nodes/521444180bee43bda8e51ffe8a64c9bc/address",
      "id": "521444180bee43bda8e51ffe8a64c9bc",
      "network": "/api/nodes/521444180bee43bda8e51ffe8a64c9bc/network",
      "status": "/api/nodes/521444180bee43bda8e51ffe8a64c9bc/status",
      "namePlate": "/api/nodes/521444180bee43bda8e51ffe8a64c9bc/namePlate"
    }
  ],
  "status": "OK"
}
Fully Expanded Response (?expand=address,network,status,system)
{
  "data": [
    {
      "address": {
        "city": "Canberra",
        "country": "Australia",
        "lat": -35.333502,
        "lng": 149.170508,
        "postcode": "2609",
        "state": "ACT",
        "street": "Yallourn Street",
        "street_number": "17/2"
      },
      "id": "bdeea25eb01b460da11e9208007ec2e5",
      "network": {
        "nmi": "10000200030"
      },
      "status": {
        "operationalStatus": {
          "lastTimestamp": 1505695466,
          "lastValue": 0
        },
        "ping": {
          "lastTimestamp": 1505695468
        }
      },
      "namePlate": {
        "batteryCapacity": 6.4,
        "inverterPower": 3,
        "batteryPower": 2
      }
    }
  ],
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Address/Location Info

GET /api/nodes/{nodeId}/address

Return full address and lat/long information of a node.

nodeId

The ID of the node.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "city": "Turner",
    "country": "Australia",
    "lat": -35.26671,
    "lng": 149.12879,
    "postcode": "2612",
    "state": "ACT",
    "street": "Macleay St",
    "street_number": "52"
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Network Info

GET /api/nodes/{nodeId}/network

Returns the NMI for this node.

nodeId

The ID of the node.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "nmi": 4102000000
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Operational Status

GET /api/nodes/{nodeId}/status

Returns the latest operational status information for this node.

nodeId

The ID of the node.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "operationalStatus": {
      "lastTimestamp": 1505189841,
      "lastValue": 0
    },
    "ping": {
      "lastTimestamp": 1505189845
    }
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Name Plate

GET /api/nodes/{nodeId}/namePlate

Returns information about the energy system attached to this node.

nodeId

The ID of the node.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "batteryCapacity": 6.4,
    "inverterPower": 3,
    "batteryPower": 2
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Name Plate

GET /api/nodes/{nodeId}/events

Returns events and changes in state to this node sorted by time descending. This will only return the first 100 results by default, as the number of results can be quite large. Therefore you must use the limit and offset parameters as specified below to retrieve either all results, or a page at a time. This endpoint only returns basic information; more details can be retrieved from the endpoint specific to that event type, e.g. from /api/dispatches

nodeId

The ID of the node.

type
string
in
path
offset

An integer to offset the results by - to use for paging through the total results. If limit is specified, this is set to 0 by default.

type
number
in
query
limit

An integer to limit the results by - to use for paging through the total results. By default this is 100, or the maximum number of results (whichever is lower).

type
number
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": [
    {
      "description": "Network Support",
      "duration": 3600,
      "eventType": "DISPATCH",
      "id": "b02067ae-d274-4d75-a00b-81a78184e987",
      "ts": 1523430000
    },
    {
      "description": "Network Support",
      "duration": 3600,
      "eventType": "DISPATCH",
      "id": "64948b88-7af5-49a7-9b04-e0055419eaf8",
      "ts": 1517547600
    },
    {
      "description": "The Reposit System was commissioned.",
      "eventType": "COMMISSIONED",
      "ts": 1511204358
    }
  ],
  "meta": {
    "count": 6,
    "next": null,
    "previous": "https://marketapi.repositpower.com/api/nodes/5b0a63855f2f4f819ccda226ca9d14e8/events?limit=3&offset=0"
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Power Station

API end-points related to powerstations.

All Power Stations

GET /api/powerstations

Returns a list of power stations associated with the currently authenticated user's organisation.

includePredictions

Optional. Set to true to include powerstation predictions in the response.

type
string , x ∈ { true }
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": [
    {
      "description": null,
      "id": "e7430ccb21644d7b9e0a443933f25c7f",
      "name": "New Powerstation on dmarket",
      "namePlate": {
        "capacity": 17.1,
        "power": 13
      },
      "nodes": [
        "d4c58e243e694bba9e57cbdf42970faf",
        "5320123eac5e4fd5baaea0bf442659bb"
      ]
    },
    {
      "description": "A sample powerstation for dispatches",
      "id": "3561817084be49c0b77d7d65903792ff",
      "name": "Sample One",
      "namePlate": {
        "batteryCapacity": 29,
        "batteryPower": 16.3,
        "inverterPower": 18.5
      },
      "nodes": [
        "5320123eac5e4fd5baaea0bf442659bb",
        "e720e221204149ec9fa172583bcf4258",
        "d4c58e243e694bba9e57cbdf42970faf"
      ]
    }
  ],
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Create Power Station

POST /api/powerstations

Creates a new powerstation and returns its details.

The powerstation to create.

name: string

A recognisable name to give this powerstation.

description: string

An option description of this powerstation

type: string , x ∈ { STATIC (default) , DYNAMIC }

The type of powerstation, either STATIC for a specified list of node IDs or DYNAMIC to suply a filter. When using DYNAMIC ans supplying a filter the powerstation will automatically add any nodes that match the filter criteria.

nodes: string[]

An array of node IDs that belong to this powerstation if the powerstation type is STATIC. Otherwise this must be null

string
filters: object

When specifying a DYNAMIC powerstation type you must also supply the filters that this powerstation is built from.

postcodes: string[]

An array of postcodes that a node can be in for it to be included in this powerstation.

string
state: string , x ∈ { ACT , NSW , NT , QLD , SA , TAS , VIC , WA }

The state or territory that a node must be in for it to be included in this powerstation.

Request Example
{
  "name": "My First Powerstation",
  "nodes": [
    "f7b05c5632334403ac0895959f8d00e7",
    "4f0cf230c728478da0822aa7f2d1f9ef",
    "56af6a12ae9049298aaa38cde5781145"
  ]
}
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "description": null,
    "id": "e7430ccb21644d7b9e0a443933f25c7f",
    "name": "My First Powerstation",
    "namePlate": {
      "batteryCapacity": 17.1,
      "batteryPower": 11,
      "inverterPower": 13
    },
    "nodes": [
      "f7b05c5632334403ac0895959f8d00e7",
      "4f0cf230c728478da0822aa7f2d1f9ef",
      "56af6a12ae9049298aaa38cde5781145"
    ]
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Get Single Power Station

GET /api/powerstations/{powerstationId}

Returns the details of the power station with the supplied UID.

powerstationId

The ID of the power station.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

404 Not Found

Invalid powerstation UID specified.

Response Example (200 OK)
{
  "data": {
    "description": null,
    "id": "e7430ccb21644d7b9e0a443933f25c7f",
    "name": "New Powerstation on dmarket",
    "namePlate": {
      "capacity": 17.1,
      "power": 13
    },
    "nodes": [
      "d4c58e243e694bba9e57cbdf42970faf",
      "5320123eac5e4fd5baaea0bf442659bb"
    ]
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}
Response Example (404 Not Found)
{
  "error": "Powerstation e7430ccb21644d7b9e0a443933f25c7f not found",
  "status": "ERROR"
}

Update Power Station

PUT /api/powerstations/{powerstationId}

Updates an existing powerstation specified by its id and returns its details.

The powerstation to update.

name: string
description: string

An option description of this powerstation

nodes: string[]

A list of nodes IDs that make up this powerstation.

string
powerstationId

The ID of the power station.

type
string
in
path
Request Example
{
  "name": "My First Powerstation",
  "nodes": [
    "f7b05c5632334403ac0895959f8d00e7",
    "4f0cf230c728478da0822aa7f2d1f9ef",
    "56af6a12ae9049298aaa38cde5781145"
  ]
}
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

404 Not Found

Invalid powerstation ID specified.

Response Example (200 OK)
{
  "data": {
    "description": null,
    "id": "e7430ccb21644d7b9e0a443933f25c7f",
    "name": "My First Powerstation",
    "namePlate": {
      "capacity": 17.1,
      "power": 13
    },
    "nodes": [
      "f7b05c5632334403ac0895959f8d00e7",
      "4f0cf230c728478da0822aa7f2d1f9ef",
      "56af6a12ae9049298aaa38cde5781145"
    ]
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}
Response Example (404 Not Found)
{
  "error": "Powerstation e7430ccb21644d7b9e0a443933f25c7f not found",
  "status": "ERROR"
}

Delete Power Station

DELETE /api/powerstations/{powerstationId}

Deletes a powerstation with with the supplied ID.

powerstationId

The ID of the power station.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

404 Not Found

Invalid powerstation ID specified.

Response Example (200 OK)
{
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}
Response Example (404 Not Found)
{
  "error": "Powerstation e7430ccb21644d7b9e0a443933f25c7f not found",
  "status": "ERROR"
}

Data - Downsampled

GET /api/powerstations/{powerstationId}/data

Return stored metrics for this powerstation or its nodes by downsampling.

powerstationId

The ID of the power station.

type
string
in
path
metrics

This returns downsampled data of metrics for this powerstation.

Timestamps in the response refer to the start of the period.

The metrics to retreive as a comma separated list of any combination of the following:

  • meterVoltage - The average voltage (V) across all phases as measured at the meter/grid
  • meterFrequence - The average frequency (Hz) across all phases as measured at the meter/grid
  • meterPower - The total (sum) real power (kW) across all phases as measured at the meter/grid
  • meterReactivePower - The total (sum) reactive power (var) across all phases as measure at the meter/grid
  • solarPower - The total (sum) real power (kW) across all solar phases being generated by the PV array
  • solarReactivePower - The total (sum) reactive power (var) across all solar phases being generated by the PV array
  • remainingCharge - The total (sum) remaining charge (W) of the all batteries attached to this system
  • batteryPower - The total (sum) real power (kW) measured at the battery of all batteries attached to this system
  • inverterReactivePower - The total (sum) reactive power (var) measured at the inverter
  • inverterApparentPower - The total (sum) apparent power (kW) measured at the inverter
  • meterCurrent - The total (sum) current (Amp) measured at the meter/grid

All real power measurements follow a sink convention, while all reactive power measurements follow a source convention. Apparent power is always positive.

If ?format=nodes is specified then you may also request the data to be split by phases by adding a phase letter after the metric name, for example meterVoltage{a}. These can be combined to request multiple phases, for example meterVoltage{a|b}. Or you can request all phases with an asterix, for example meterVoltage{*}. Note that meterVoltage{*} is equivalent to meterVoltage{a|b|c}. If a phase is specified the above average/sum aggregation will not be applied and instead you will get back the value for just the specified phase(s).

Phase suffixes may be used on the following metrics: meterVoltage, meterFrequency, meterPower, meterReactivePower, solarPower, solarReactivePower.

Please note that phases are currently arbitrary - we cannot determine which phase is red/white/blue. For all single phase installations the data will be available on phase a.

type
string
in
query
start

The start timestamp of the period of data you wish to retreive

type
integer now - 1hour
in
query
end

The end timestamp of the period of data you wish to retreive

type
integer now
in
query
interval

The downsampling interval in seconds

type
integer 3600 (1 hour)
in
query
format

The format you which to retreive the results, either powerstation or nodes

type
string , x ∈ { powerstation (default) , nodes }
in
query
fill

The fill policy to use for empty values. By default any empty values for a deployment (i.e. a missing chuck of data) are ommitted. Specify fill=null to return all times with null values if the data is missing. Only null is supported.

type
string , x ∈ { [object Object] }
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
By powerstation
{
  "data": [
    {
      "meterPower{a}": {
        "1505109600": 0.3857383972607584,
        "1505111400": 0.3806250010513597
      }
    },
    {
      "meterPower{b}": {
        "1505109600": 0.3849693243306107,
        "1505111400": 0.3857383972607584
      }
    },
    {
      "meterVoltage": {
        "1505109600": 244.3849693243306,
        "1505111400": 245.38573839726075
      }
    }
  ],
  "status": "OK"
}
By nodes
{
  "data": [
    {
      "meterPower{a}": {
        "d4c58e243e694bba9e57cbdf42970faf": {
          "1505109600": 0.3857383972607584,
          "1505111400": 0.3806250010513597
        },
        "e720e221204149ec9fa172583bcf4258": {
          "1505109600": 0.3849693243306107,
          "1505111400": 0.3580208346247673
        }
      }
    },
    {
      "meterPower{b}": {
        "d4c58e243e694bba9e57cbdf42970faf": {
          "1505109600": 0.3857383972607584,
          "1505111400": 0.3806250010513597
        },
        "e720e221204149ec9fa172583bcf4258": {
          "1505109600": 0.3849693243306107,
          "1505111400": 0.3580208346247673
        }
      }
    },
    {
      "meterVoltage": {
        "d4c58e243e694bba9e57cbdf42970faf": {
          "1505109600": 244.38573839726075,
          "1505111400": 244.38062500105136
        },
        "e720e221204149ec9fa172583bcf4258": {
          "1505109600": 245.3849693243306,
          "1505111400": 245.35802083462477
        }
      }
    }
  ],
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Data - Raw

GET /api/powerstations/{powerstationId}/data/raw

Return stored metrics for this powerstation or its nodes without applying any downsampling.

powerstationId

The ID of the power station.

type
string
in
path
metrics

This returns raw data of metrics for this powerstation as collected by each device.

Timestamps in the response refer to the time at which the data was sampled.

No guarantees can be made about aligned data. e.g. meterPower may be collected at slightly different times per phases, and meterPower might be collected at a different time than meterVoltage.

The metrics to retreive as a comma separated list of any combination of the following:

  • meterVoltage - The average voltage (V) across all phases as measured at the meter/grid
  • meterFrequence - The average frequency (Hz) across all phases as measured at the meter/grid
  • meterPower - The total (sum) real power (kW) across all phases as measured at the meter/grid
  • meterReactivePower - The total (sum) reactive power (var) across all phases as measure at the meter/grid
  • solarPower - The total (sum) real power (kW) across all solar phases being generated by the PV array
  • solarReactivePower - The total (sum) reactive power (var) across all solar phases being generated by the PV array
  • remainingCharge - The total (sum) remaining charge (W) of the all batteries attached to this system
  • batteryPower - The total (sum) real power (kW) measured at the battery of all batteries attached to this system
  • inverterReactivePower - The total (sum) reactive power (var) measured at the inverter
  • inverterApparentPower - The total (sum) apparent power (kW) measured at the inverter
  • meterCurrent - The total (sum) current (Amp) measured at the meter/grid

All real power measurements follow a sink convention, while all reactive power measurements follow a source convention. Apparent power is always positive.

If ?format=nodes is specified then you may also request the data to be split by phases by adding a phase letter after the metric name, for example meterVoltage{a}. These can be combined to request multiple phases, for example meterVoltage{a|b}. Or you can request all phases with an asterix, for example meterVoltage{*}. Note that meterVoltage{*} is equivalent to meterVoltage{a|b|c}. If a phase is specified the above average/sum aggregation will not be applied and instead you will get back the value for just the specified phase(s).

Phase suffixes may be used on the following metrics: meterVoltage, meterFrequency, meterPower, meterReactivePower, solarPower, solarReactivePower.

Please note that phases are currently arbitrary - we cannot determine which phase is red/white/blue. For all single phase installations the data will be available on phase a.

type
string
in
query
start

The start timestamp of the period of data you wish to retreive

type
integer now - 1hour
in
query
end

The end timestamp of the period of data you wish to retreive

type
integer now
in
query
format

The format you which to retreive the results, either powerstation or nodes

type
string , x ∈ { powerstation (default) , nodes }
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
By powerstation
{
  "data": [
    {
      "meterPower{a}": {
        "1505108933": 0.3857383972607584,
        "1505108937": 0.3806250010513597
      }
    },
    {
      "meterPower{b}": {
        "1505108944": 0.3849693243306107
      }
    },
    {
      "meterVoltage": {
        "1505108933": 243.3849693243306,
        "1505108937": 244.3849693243306,
        "1505108941": 245.38573839726075
      }
    }
  ],
  "status": "OK"
}
By nodes
{
  "data": [
    {
      "meterPower{a}": {
        "d4c58e243e694bba9e57cbdf42970faf": {
          "1505108933": 0.3857383972607584,
          "1505108937": 0.3806250010513597
        },
        "e720e221204149ec9fa172583bcf4258": {
          "1505108934": 0.3849693243306107,
          "1505108938": 0.3580208346247673
        }
      }
    },
    {
      "meterPower{b}": {
        "d4c58e243e694bba9e57cbdf42970faf": {
          "1505108933": 0.3857383972607584,
          "1505108937": 0.3806250010513597,
          "1505108941": 0.3806250010513597,
          "1505108943": 0.3806250010513597
        },
        "e720e221204149ec9fa172583bcf4258": {
          "1505108934": 0.3849693243306107,
          "1505108936": 0.3580208346247673,
          "1505108939": 0.3580208346247673
        }
      }
    },
    {
      "meterVoltage": {
        "d4c58e243e694bba9e57cbdf42970faf": {
          "1505108937": 244.38573839726075,
          "1505108940": 244.38062500105136
        },
        "e720e221204149ec9fa172583bcf4258": {
          "1505108937": 245.3849693243306
        }
      }
    }
  ],
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Data - Latest

GET /api/powerstations/{powerstationId}/data/latest

Returns the latest value of the metrics for the powerstation or nodes up to a maximum age of data.

powerstationId

The ID of the power station.

type
string
in
path
metrics

This returns the single, most recent (up to a given max age) data point we have for each metric.

No timestamps are given for this data but you can be sure that no data point will be older than the maxAge query parameter. If you require specific timestamps please consider using the /data or /data/raw end points.

The metrics to retreive as a comma separated list of any combination of the following:

  • meterVoltage - The average voltage (V) across all phases as measured at the meter/grid
  • meterFrequence - The average frequency (Hz) across all phases as measured at the meter/grid
  • meterPower - The total (sum) real power (kW) across all phases as measured at the meter/grid
  • meterReactivePower - The total (sum) reactive power (var) across all phases as measure at the meter/grid
  • solarPower - The total (sum) real power (kW) across all solar phases being generated by the PV array
  • solarReactivePower - The total (sum) reactive power (var) across all solar phases being generated by the PV array
  • remainingCharge - The total (sum) remaining charge (W) of the all batteries attached to this system
  • batteryPower - The total (sum) real power (kW) measured at the battery of all batteries attached to this system
  • inverterReactivePower - The total (sum) reactive power (var) measured at the inverter
  • inverterApparentPower - The total (sum) apparent power (kW) measured at the inverter
  • meterCurrent - The total (sum) current (Amp) measured at the meter/grid

All real power measurements follow a sink convention, while all reactive power measurements follow a source convention. Apparent power is always positive.

If ?format=nodes is specified then you may also request the data to be split by phases by adding a phase letter after the metric name, for example meterVoltage{a}. These can be combined to request multiple phases, for example meterVoltage{a|b}. Or you can request all phases with an asterix, for example meterVoltage{*}. Note that meterVoltage{*} is equivalent to meterVoltage{a|b|c}. If a phase is specified the above average/sum aggregation will not be applied and instead you will get back the value for just the specified phase(s).

Phase suffixes may be used on the following metrics: meterVoltage, meterFrequency, meterPower, meterReactivePower, solarPower, solarReactivePower.

Please note that phases are currently arbitrary - we cannot determine which phase is red/white/blue. For all single phase installations the data will be available on phase a.

type
string
in
query
maxAge

The maximum age of the data that should be considered "latest" in seconds

type
integer 30
in
query
format

The format you which to retreive the results, either powerstation or nodes

type
string , x ∈ { powerstation (default) , nodes }
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
By powerstation
{
  "data": [
    {
      "meterPower{a}": 0.3806250010513597
    },
    {
      "meterPower{b}": 0.3849693243306107
    },
    {
      "meterVoltage": 245.38573839726075
    }
  ],
  "status": "OK"
}
By nodes
{
  "data": [
    {
      "meterPower{a}": {
        "d4c58e243e694bba9e57cbdf42970faf": 0.3857383972607584,
        "e720e221204149ec9fa172583bcf4258": 0.3580208346247673
      }
    },
    {
      "meterPower{b}": {
        "d4c58e243e694bba9e57cbdf42970faf": 0.3806250010513597,
        "e720e221204149ec9fa172583bcf4258": 0.3580208346247673
      }
    },
    {
      "meterVoltage": {
        "d4c58e243e694bba9e57cbdf42970faf": 244.38062500105136,
        "e720e221204149ec9fa172583bcf4258": 245.3849693243306
      }
    }
  ],
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Installer

All Nodes

GET /api/nodes

Return basic information and URLs on how to obtain more information about nodes. Each URL can also be expanded in place using the expand URL parameter

expand

Any property that contains a URL path rather than data can be expanded in place using the expand query string parameter. This is a CSV list of each property name which should be expanded. e.g. ?expand=network,address

type
string
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
Default response
{
  "data": [
    {
      "address": "/api/nodes/bdeea25eb01b460da11e9208007ec2e5/address",
      "id": "bdeea25eb01b460da11e9208007ec2e5",
      "network": "/api/nodes/bdeea25eb01b460da11e9208007ec2e5/network",
      "status": "/api/nodes/bdeea25eb01b460da11e9208007ec2e5/status",
      "namePlate": "/api/nodes/bdeea25eb01b460da11e9208007ec2e5/namePlate"
    },
    {
      "address\"": "/api/nodes/521444180bee43bda8e51ffe8a64c9bc/address",
      "id": "521444180bee43bda8e51ffe8a64c9bc",
      "network": "/api/nodes/521444180bee43bda8e51ffe8a64c9bc/network",
      "status": "/api/nodes/521444180bee43bda8e51ffe8a64c9bc/status",
      "namePlate": "/api/nodes/521444180bee43bda8e51ffe8a64c9bc/namePlate"
    }
  ],
  "status": "OK"
}
Fully Expanded Response (?expand=address,network,status,system)
{
  "data": [
    {
      "address": {
        "city": "Canberra",
        "country": "Australia",
        "lat": -35.333502,
        "lng": 149.170508,
        "postcode": "2609",
        "state": "ACT",
        "street": "Yallourn Street",
        "street_number": "17/2"
      },
      "id": "bdeea25eb01b460da11e9208007ec2e5",
      "network": {
        "nmi": "10000200030"
      },
      "status": {
        "operationalStatus": {
          "lastTimestamp": 1505695466,
          "lastValue": 0
        },
        "ping": {
          "lastTimestamp": 1505695468
        }
      },
      "namePlate": {
        "batteryCapacity": 6.4,
        "inverterPower": 3,
        "batteryPower": 2
      }
    }
  ],
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Address/Location Info

GET /api/nodes/{nodeId}/address

Return full address and lat/long information of a node.

nodeId

The ID of the node.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "city": "Turner",
    "country": "Australia",
    "lat": -35.26671,
    "lng": 149.12879,
    "postcode": "2612",
    "state": "ACT",
    "street": "Macleay St",
    "street_number": "52"
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Network Info

GET /api/nodes/{nodeId}/network

Returns the NMI for this node.

nodeId

The ID of the node.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "nmi": 4102000000
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Operational Status

GET /api/nodes/{nodeId}/status

Returns the latest operational status information for this node.

nodeId

The ID of the node.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "operationalStatus": {
      "lastTimestamp": 1505189841,
      "lastValue": 0
    },
    "ping": {
      "lastTimestamp": 1505189845
    }
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Name Plate

GET /api/nodes/{nodeId}/namePlate

Returns information about the energy system attached to this node.

nodeId

The ID of the node.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "batteryCapacity": 6.4,
    "inverterPower": 3,
    "batteryPower": 2
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Name Plate

GET /api/nodes/{nodeId}/events

Returns events and changes in state to this node sorted by time descending. This will only return the first 100 results by default, as the number of results can be quite large. Therefore you must use the limit and offset parameters as specified below to retrieve either all results, or a page at a time. This endpoint only returns basic information; more details can be retrieved from the endpoint specific to that event type, e.g. from /api/dispatches

nodeId

The ID of the node.

type
string
in
path
offset

An integer to offset the results by - to use for paging through the total results. If limit is specified, this is set to 0 by default.

type
number
in
query
limit

An integer to limit the results by - to use for paging through the total results. By default this is 100, or the maximum number of results (whichever is lower).

type
number
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": [
    {
      "description": "Network Support",
      "duration": 3600,
      "eventType": "DISPATCH",
      "id": "b02067ae-d274-4d75-a00b-81a78184e987",
      "ts": 1523430000
    },
    {
      "description": "Network Support",
      "duration": 3600,
      "eventType": "DISPATCH",
      "id": "64948b88-7af5-49a7-9b04-e0055419eaf8",
      "ts": 1517547600
    },
    {
      "description": "The Reposit System was commissioned.",
      "eventType": "COMMISSIONED",
      "ts": 1511204358
    }
  ],
  "meta": {
    "count": 6,
    "next": null,
    "previous": "https://marketapi.repositpower.com/api/nodes/5b0a63855f2f4f819ccda226ca9d14e8/events?limit=3&offset=0"
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Fleet Data - Downsampled

GET /api/data

Return stored metrics for the entire fleet by downsampling.

metrics

This returns downsampled data of metrics for this powerstation.

Timestamps in the response refer to the start of the period.

The metrics to retreive as a comma separated list of any combination of the following:

  • meterVoltage - The average voltage (V) across all phases as measured at the meter/grid
  • meterFrequence - The average frequency (Hz) across all phases as measured at the meter/grid
  • meterPower - The total (sum) real power (kW) across all phases as measured at the meter/grid
  • meterReactivePower - The total (sum) reactive power (var) across all phases as measure at the meter/grid
  • solarPower - The total (sum) real power (kW) across all solar phases being generated by the PV array
  • solarReactivePower - The total (sum) reactive power (var) across all solar phases being generated by the PV array
  • remainingCharge - The total (sum) remaining charge (W) of the all batteries attached to this system
  • batteryPower - The total (sum) real power (kW) measured at the battery of all batteries attached to this system
  • inverterReactivePower - The total (sum) reactive power (var) measured at the inverter
  • inverterApparentPower - The total (sum) apparent power (kW) measured at the inverter
  • meterCurrent - The total (sum) current (Amp) measured at the meter/grid

All real power measurements follow a sink convention, while all reactive power measurements follow a source convention. Apparent power is always positive.

Phase suffixes may be used on the following metrics: meterVoltage, meterFrequency, meterPower, meterReactivePower, solarPower, solarReactivePower.

Please note that phases are currently arbitrary - we cannot determine which phase is red/white/blue. For all single phase installations the data will be available on phase a.

type
string
in
query
start

The start timestamp of the period of data you wish to retreive

type
integer now - 1hour
in
query
end

The end timestamp of the period of data you wish to retreive

type
integer now
in
query
interval

The downsampling interval in seconds

type
integer 3600 (1 hour)
in
query
fill

The fill policy to use for empty values. By default any empty values for a deployment (i.e. a missing chuck of data) are ommitted. Specify fill=null to return all times with null values if the data is missing. Only null is supported.

type
string , x ∈ { [object Object] }
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
data
[
  {
    "meterPower": {
      "d4c58e243e694bba9e57cbdf42970faf": {
        "1505109600": 0.3857383972607584,
        "1505111400": 0.3806250010513597
      },
      "e720e221204149ec9fa172583bcf4258": {
        "1505109600": 0.3849693243306107,
        "1505111400": 0.3580208346247673
      }
    }
  },
  {
    "meterVoltage": {
      "d4c58e243e694bba9e57cbdf42970faf": {
        "1505109600": 244.38573839726075,
        "1505111400": 244.38062500105136
      },
      "e720e221204149ec9fa172583bcf4258": {
        "1505109600": 245.3849693243306,
        "1505111400": 245.35802083462477
      }
    }
  }
]
status
"OK"
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Customer

Assign customers to a capability

POST /api/capabilities

Takes a list of customers and assigns them to a capability. Returns a list of changes that have been applied and/or a list or errors.

Request Example
[
  {
    "customers": [
      {
        "nmi": "11000000001",
        "capabilities": [
          {
            "name": "Hoodwink Network Support",
            "startDate": "2018-01-01"
          }
        ],
        "tariff": [
          {
            "code": "HOODWINK_PLAN",
            "startDate": "2018-01-01",
            "discount": 0
          }
        ]
      },
      {
        "nmi": "10000000001",
        "capabilities": [
          {
            "name": "Jensen Network Support",
            "startDate": "2017-01-01"
          }
        ]
      }
    ]
  }
]
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": [
    {
      "errors": [
        {
          "message": "Effective start date must be on or after the starting date of the capability - 2018-01-01",
          "errorCode": "invalid_capability",
          "customers": [
            "12345123451",
            "110000012",
            "1000000001"
          ]
        },
        {
          "message": "Customer already assigned to another retailer",
          "customers": [
            "12345123451"
          ]
        },
        {
          "message": "Must have a capability code",
          "customers": [
            "12345123451"
          ]
        }
      ]
    },
    {
      "warnings": [
        {
          "message": "Customer is not yet commissioned",
          "errorCode": "not_commissioned_customer",
          "customers": [
            "1100000006"
          ]
        }
      ],
      "success": [
        "1100000001",
        "1100000002",
        "1100000003",
        "1100000004",
        "1100000005",
        "1100000006"
      ]
    }
  ]
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Register a new customer with Reposit prior to installation of the Reposit Controller

POST /api/registrations

Registers a new customer with Reposit so that the on-boarding process can be initiated. This helps streamline the installation process.

The powerstation to create.

nmi: string

The NMI of the customer if known. Please include the checksum where possible.

name: string

The full name of the customer - please include both first and last names.

phone: string

Customers best contact number

addressLine1: string

The first line of the customers address

city: string

The suburb of the customer

state: string , x ∈ { ACT , NSW , NT , QLD , SA , TAS , VIC , WA }

The state of the customer

country: string

The country of the customer. e.g. Australia.

postcode: string

The postcode of the customer.

Request Example
{
  "nmi": "11004628573",
  "name": "Joe Bloggs",
  "phone": "0402 123 456",
  "addressLine1": "17/2 Yallourn St",
  "city": "Fyshwick",
  "state": "ACT",
  "country": "Australia",
  "postcode": "2609"
}
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "nmi": "11004628573",
    "name": "Joe Bloggs",
    "phone": "0402 123 456",
    "addressLine1": "17/2 Yallourn St",
    "city": "Fyshwick",
    "state": "ACT",
    "country": "Australia",
    "postcode": "2609"
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Data

API end-points related to obtaining metric data.

Data - Downsampled

GET /api/powerstations/{powerstationId}/data

Return stored metrics for this powerstation or its nodes by downsampling.

powerstationId

The ID of the power station.

type
string
in
path
metrics

This returns downsampled data of metrics for this powerstation.

Timestamps in the response refer to the start of the period.

The metrics to retreive as a comma separated list of any combination of the following:

  • meterVoltage - The average voltage (V) across all phases as measured at the meter/grid
  • meterFrequence - The average frequency (Hz) across all phases as measured at the meter/grid
  • meterPower - The total (sum) real power (kW) across all phases as measured at the meter/grid
  • meterReactivePower - The total (sum) reactive power (var) across all phases as measure at the meter/grid
  • solarPower - The total (sum) real power (kW) across all solar phases being generated by the PV array
  • solarReactivePower - The total (sum) reactive power (var) across all solar phases being generated by the PV array
  • remainingCharge - The total (sum) remaining charge (W) of the all batteries attached to this system
  • batteryPower - The total (sum) real power (kW) measured at the battery of all batteries attached to this system
  • inverterReactivePower - The total (sum) reactive power (var) measured at the inverter
  • inverterApparentPower - The total (sum) apparent power (kW) measured at the inverter
  • meterCurrent - The total (sum) current (Amp) measured at the meter/grid

All real power measurements follow a sink convention, while all reactive power measurements follow a source convention. Apparent power is always positive.

If ?format=nodes is specified then you may also request the data to be split by phases by adding a phase letter after the metric name, for example meterVoltage{a}. These can be combined to request multiple phases, for example meterVoltage{a|b}. Or you can request all phases with an asterix, for example meterVoltage{*}. Note that meterVoltage{*} is equivalent to meterVoltage{a|b|c}. If a phase is specified the above average/sum aggregation will not be applied and instead you will get back the value for just the specified phase(s).

Phase suffixes may be used on the following metrics: meterVoltage, meterFrequency, meterPower, meterReactivePower, solarPower, solarReactivePower.

Please note that phases are currently arbitrary - we cannot determine which phase is red/white/blue. For all single phase installations the data will be available on phase a.

type
string
in
query
start

The start timestamp of the period of data you wish to retreive

type
integer now - 1hour
in
query
end

The end timestamp of the period of data you wish to retreive

type
integer now
in
query
interval

The downsampling interval in seconds

type
integer 3600 (1 hour)
in
query
format

The format you which to retreive the results, either powerstation or nodes

type
string , x ∈ { powerstation (default) , nodes }
in
query
fill

The fill policy to use for empty values. By default any empty values for a deployment (i.e. a missing chuck of data) are ommitted. Specify fill=null to return all times with null values if the data is missing. Only null is supported.

type
string , x ∈ { [object Object] }
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
By powerstation
{
  "data": [
    {
      "meterPower{a}": {
        "1505109600": 0.3857383972607584,
        "1505111400": 0.3806250010513597
      }
    },
    {
      "meterPower{b}": {
        "1505109600": 0.3849693243306107,
        "1505111400": 0.3857383972607584
      }
    },
    {
      "meterVoltage": {
        "1505109600": 244.3849693243306,
        "1505111400": 245.38573839726075
      }
    }
  ],
  "status": "OK"
}
By nodes
{
  "data": [
    {
      "meterPower{a}": {
        "d4c58e243e694bba9e57cbdf42970faf": {
          "1505109600": 0.3857383972607584,
          "1505111400": 0.3806250010513597
        },
        "e720e221204149ec9fa172583bcf4258": {
          "1505109600": 0.3849693243306107,
          "1505111400": 0.3580208346247673
        }
      }
    },
    {
      "meterPower{b}": {
        "d4c58e243e694bba9e57cbdf42970faf": {
          "1505109600": 0.3857383972607584,
          "1505111400": 0.3806250010513597
        },
        "e720e221204149ec9fa172583bcf4258": {
          "1505109600": 0.3849693243306107,
          "1505111400": 0.3580208346247673
        }
      }
    },
    {
      "meterVoltage": {
        "d4c58e243e694bba9e57cbdf42970faf": {
          "1505109600": 244.38573839726075,
          "1505111400": 244.38062500105136
        },
        "e720e221204149ec9fa172583bcf4258": {
          "1505109600": 245.3849693243306,
          "1505111400": 245.35802083462477
        }
      }
    }
  ],
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Data - Raw

GET /api/powerstations/{powerstationId}/data/raw

Return stored metrics for this powerstation or its nodes without applying any downsampling.

powerstationId

The ID of the power station.

type
string
in
path
metrics

This returns raw data of metrics for this powerstation as collected by each device.

Timestamps in the response refer to the time at which the data was sampled.

No guarantees can be made about aligned data. e.g. meterPower may be collected at slightly different times per phases, and meterPower might be collected at a different time than meterVoltage.

The metrics to retreive as a comma separated list of any combination of the following:

  • meterVoltage - The average voltage (V) across all phases as measured at the meter/grid
  • meterFrequence - The average frequency (Hz) across all phases as measured at the meter/grid
  • meterPower - The total (sum) real power (kW) across all phases as measured at the meter/grid
  • meterReactivePower - The total (sum) reactive power (var) across all phases as measure at the meter/grid
  • solarPower - The total (sum) real power (kW) across all solar phases being generated by the PV array
  • solarReactivePower - The total (sum) reactive power (var) across all solar phases being generated by the PV array
  • remainingCharge - The total (sum) remaining charge (W) of the all batteries attached to this system
  • batteryPower - The total (sum) real power (kW) measured at the battery of all batteries attached to this system
  • inverterReactivePower - The total (sum) reactive power (var) measured at the inverter
  • inverterApparentPower - The total (sum) apparent power (kW) measured at the inverter
  • meterCurrent - The total (sum) current (Amp) measured at the meter/grid

All real power measurements follow a sink convention, while all reactive power measurements follow a source convention. Apparent power is always positive.

If ?format=nodes is specified then you may also request the data to be split by phases by adding a phase letter after the metric name, for example meterVoltage{a}. These can be combined to request multiple phases, for example meterVoltage{a|b}. Or you can request all phases with an asterix, for example meterVoltage{*}. Note that meterVoltage{*} is equivalent to meterVoltage{a|b|c}. If a phase is specified the above average/sum aggregation will not be applied and instead you will get back the value for just the specified phase(s).

Phase suffixes may be used on the following metrics: meterVoltage, meterFrequency, meterPower, meterReactivePower, solarPower, solarReactivePower.

Please note that phases are currently arbitrary - we cannot determine which phase is red/white/blue. For all single phase installations the data will be available on phase a.

type
string
in
query
start

The start timestamp of the period of data you wish to retreive

type
integer now - 1hour
in
query
end

The end timestamp of the period of data you wish to retreive

type
integer now
in
query
format

The format you which to retreive the results, either powerstation or nodes

type
string , x ∈ { powerstation (default) , nodes }
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
By powerstation
{
  "data": [
    {
      "meterPower{a}": {
        "1505108933": 0.3857383972607584,
        "1505108937": 0.3806250010513597
      }
    },
    {
      "meterPower{b}": {
        "1505108944": 0.3849693243306107
      }
    },
    {
      "meterVoltage": {
        "1505108933": 243.3849693243306,
        "1505108937": 244.3849693243306,
        "1505108941": 245.38573839726075
      }
    }
  ],
  "status": "OK"
}
By nodes
{
  "data": [
    {
      "meterPower{a}": {
        "d4c58e243e694bba9e57cbdf42970faf": {
          "1505108933": 0.3857383972607584,
          "1505108937": 0.3806250010513597
        },
        "e720e221204149ec9fa172583bcf4258": {
          "1505108934": 0.3849693243306107,
          "1505108938": 0.3580208346247673
        }
      }
    },
    {
      "meterPower{b}": {
        "d4c58e243e694bba9e57cbdf42970faf": {
          "1505108933": 0.3857383972607584,
          "1505108937": 0.3806250010513597,
          "1505108941": 0.3806250010513597,
          "1505108943": 0.3806250010513597
        },
        "e720e221204149ec9fa172583bcf4258": {
          "1505108934": 0.3849693243306107,
          "1505108936": 0.3580208346247673,
          "1505108939": 0.3580208346247673
        }
      }
    },
    {
      "meterVoltage": {
        "d4c58e243e694bba9e57cbdf42970faf": {
          "1505108937": 244.38573839726075,
          "1505108940": 244.38062500105136
        },
        "e720e221204149ec9fa172583bcf4258": {
          "1505108937": 245.3849693243306
        }
      }
    }
  ],
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Data - Latest

GET /api/powerstations/{powerstationId}/data/latest

Returns the latest value of the metrics for the powerstation or nodes up to a maximum age of data.

powerstationId

The ID of the power station.

type
string
in
path
metrics

This returns the single, most recent (up to a given max age) data point we have for each metric.

No timestamps are given for this data but you can be sure that no data point will be older than the maxAge query parameter. If you require specific timestamps please consider using the /data or /data/raw end points.

The metrics to retreive as a comma separated list of any combination of the following:

  • meterVoltage - The average voltage (V) across all phases as measured at the meter/grid
  • meterFrequence - The average frequency (Hz) across all phases as measured at the meter/grid
  • meterPower - The total (sum) real power (kW) across all phases as measured at the meter/grid
  • meterReactivePower - The total (sum) reactive power (var) across all phases as measure at the meter/grid
  • solarPower - The total (sum) real power (kW) across all solar phases being generated by the PV array
  • solarReactivePower - The total (sum) reactive power (var) across all solar phases being generated by the PV array
  • remainingCharge - The total (sum) remaining charge (W) of the all batteries attached to this system
  • batteryPower - The total (sum) real power (kW) measured at the battery of all batteries attached to this system
  • inverterReactivePower - The total (sum) reactive power (var) measured at the inverter
  • inverterApparentPower - The total (sum) apparent power (kW) measured at the inverter
  • meterCurrent - The total (sum) current (Amp) measured at the meter/grid

All real power measurements follow a sink convention, while all reactive power measurements follow a source convention. Apparent power is always positive.

If ?format=nodes is specified then you may also request the data to be split by phases by adding a phase letter after the metric name, for example meterVoltage{a}. These can be combined to request multiple phases, for example meterVoltage{a|b}. Or you can request all phases with an asterix, for example meterVoltage{*}. Note that meterVoltage{*} is equivalent to meterVoltage{a|b|c}. If a phase is specified the above average/sum aggregation will not be applied and instead you will get back the value for just the specified phase(s).

Phase suffixes may be used on the following metrics: meterVoltage, meterFrequency, meterPower, meterReactivePower, solarPower, solarReactivePower.

Please note that phases are currently arbitrary - we cannot determine which phase is red/white/blue. For all single phase installations the data will be available on phase a.

type
string
in
query
maxAge

The maximum age of the data that should be considered "latest" in seconds

type
integer 30
in
query
format

The format you which to retreive the results, either powerstation or nodes

type
string , x ∈ { powerstation (default) , nodes }
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
By powerstation
{
  "data": [
    {
      "meterPower{a}": 0.3806250010513597
    },
    {
      "meterPower{b}": 0.3849693243306107
    },
    {
      "meterVoltage": 245.38573839726075
    }
  ],
  "status": "OK"
}
By nodes
{
  "data": [
    {
      "meterPower{a}": {
        "d4c58e243e694bba9e57cbdf42970faf": 0.3857383972607584,
        "e720e221204149ec9fa172583bcf4258": 0.3580208346247673
      }
    },
    {
      "meterPower{b}": {
        "d4c58e243e694bba9e57cbdf42970faf": 0.3806250010513597,
        "e720e221204149ec9fa172583bcf4258": 0.3580208346247673
      }
    },
    {
      "meterVoltage": {
        "d4c58e243e694bba9e57cbdf42970faf": 244.38062500105136,
        "e720e221204149ec9fa172583bcf4258": 245.3849693243306
      }
    }
  ],
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Fleet Data - Downsampled

GET /api/data

Return stored metrics for the entire fleet by downsampling.

metrics

This returns downsampled data of metrics for this powerstation.

Timestamps in the response refer to the start of the period.

The metrics to retreive as a comma separated list of any combination of the following:

  • meterVoltage - The average voltage (V) across all phases as measured at the meter/grid
  • meterFrequence - The average frequency (Hz) across all phases as measured at the meter/grid
  • meterPower - The total (sum) real power (kW) across all phases as measured at the meter/grid
  • meterReactivePower - The total (sum) reactive power (var) across all phases as measure at the meter/grid
  • solarPower - The total (sum) real power (kW) across all solar phases being generated by the PV array
  • solarReactivePower - The total (sum) reactive power (var) across all solar phases being generated by the PV array
  • remainingCharge - The total (sum) remaining charge (W) of the all batteries attached to this system
  • batteryPower - The total (sum) real power (kW) measured at the battery of all batteries attached to this system
  • inverterReactivePower - The total (sum) reactive power (var) measured at the inverter
  • inverterApparentPower - The total (sum) apparent power (kW) measured at the inverter
  • meterCurrent - The total (sum) current (Amp) measured at the meter/grid

All real power measurements follow a sink convention, while all reactive power measurements follow a source convention. Apparent power is always positive.

Phase suffixes may be used on the following metrics: meterVoltage, meterFrequency, meterPower, meterReactivePower, solarPower, solarReactivePower.

Please note that phases are currently arbitrary - we cannot determine which phase is red/white/blue. For all single phase installations the data will be available on phase a.

type
string
in
query
start

The start timestamp of the period of data you wish to retreive

type
integer now - 1hour
in
query
end

The end timestamp of the period of data you wish to retreive

type
integer now
in
query
interval

The downsampling interval in seconds

type
integer 3600 (1 hour)
in
query
fill

The fill policy to use for empty values. By default any empty values for a deployment (i.e. a missing chuck of data) are ommitted. Specify fill=null to return all times with null values if the data is missing. Only null is supported.

type
string , x ∈ { [object Object] }
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
data
[
  {
    "meterPower": {
      "d4c58e243e694bba9e57cbdf42970faf": {
        "1505109600": 0.3857383972607584,
        "1505111400": 0.3806250010513597
      },
      "e720e221204149ec9fa172583bcf4258": {
        "1505109600": 0.3849693243306107,
        "1505111400": 0.3580208346247673
      }
    }
  },
  {
    "meterVoltage": {
      "d4c58e243e694bba9e57cbdf42970faf": {
        "1505109600": 244.38573839726075,
        "1505111400": 244.38062500105136
      },
      "e720e221204149ec9fa172583bcf4258": {
        "1505109600": 245.3849693243306,
        "1505111400": 245.35802083462477
      }
    }
  }
]
status
"OK"
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Data - Downsampled

GET /api/assets/{assetId}/data

Return stored metrics for this asset by downsampling.

assetId

The ID of the asset.

type
string
in
path
metrics

This returns downsampled data of metrics for this asset.

Timestamps in the response refer to the start of the period.

The metrics to retreive as a comma separated list of any combination of the following:

  • current
  • incomingVoltage
  • upstreamVoltage
  • downstreamVoltage
  • tapPosition
  • apparentPower
  • activePower
  • mainsVoltage
  • counter

You may also request the data to be split by phases by adding the phase letter after the metric name, for example current{r} (for phase=red). These can be combined to request multiple phases, for example current{r|w} (both red and white). Phase pairs can also be specified, for example mainsVoltage{br} or mainsVoltage{br|wb}. Or you can request all phases with an asterix, for example current{*}. If a phase is specified the above average/sum aggregation will not be applied and instead you will get back the value for just the specified phase(s).

The counter metric has two types - counter{increment} and counter{decrement}. These values represent the change increment or decrement respectively to the overall count, but when this type is omitted it will return the net change for the time period. For instance, if at timestamp 1512080248 the value was 4, and at 1512080276 the value was -2 then the data returned over this period will be the sum - in this case, 2.

Phase suffixes may be used on the following metrics: current, incomingVoltage, mainsVoltage

type
string
in
query
start

The start timestamp of the period of data you wish to retreive

type
integer now - 1hour
in
query
end

The end timestamp of the period of data you wish to retreive

type
integer now
in
query
interval

The downsampling interval in seconds

type
integer 3600 (1 hour)
in
query
fill

The fill policy to use for empty values. By default any empty values for an asset (i.e. a missing chuck of data) are ommitted. Specify fill=null to return all times with null values if the data is missing. Only null is supported.

type
string , x ∈ { [object Object] }
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
data
[
  {
    "current{r}": {
      "1505109600": 0.3857383972607584,
      "1505111400": 0.3806250010513597
    }
  },
  {
    "current{w}": {
      "1505109600": 0.3849693243306107,
      "1505111400": 0.3857383972607584
    }
  },
  {
    "current{b}": {
      "1505109600": 244.3849693243306,
      "1505111400": 245.38573839726075
    }
  },
  {
    "mainsVoltage{br|rw}": {
      "1505109600": 244.3849693243306,
      "1505111400": 245.38573839726075
    }
  }
]
status
"OK"
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Data - Raw

GET /api/assets/{assetId}/data/raw

Return stored metrics for this asset without applying any downsampling.

assetId

The ID of the asset.

type
string
in
path
metrics

This returns raw data of metrics for this asset as collected by each device.

Timestamps in the response refer to the time at which the data was sampled.

No guarantees can be made about aligned data. e.g. current may be collected at slightly different times per phases, and upstreamVoltage might be collected at a different time than downstreamVoltage.

The metrics to retreive as a comma separated list of any combination of the following:

  • current
  • incomingVoltage
  • upstreamVoltage
  • downstreamVoltage
  • tapPosition
  • apparentPower
  • activePower
  • mainsVoltage
  • counter

You may also request the data to be split by phases by adding the phase letter after the metric name, for example current{r} (for phase=red). These can be combined to request multiple phases, for example current{r|w} (both red and white). Phase pairs can also be specified, for example mainsVoltage{br} or mainsVoltage{br|wb}. Or you can request all phases with an asterix, for example current{*}. If a phase is specified the above average/sum aggregation will not be applied and instead you will get back the value for just the specified phase(s).

The counter metric has two types - counter{increment} and counter{decrement}. These values represent the change increment or decrement respectively to the overall count, but when this type is omitted it will return the net change for the time period. For instance, if at timestamp 1512080248 the value was 4, and at 1512080276 the value was -2 then the data returned over this period will be the sum - in this case, 2.

Phase suffixes may be used on the following metrics: current, incomingVoltage, mainsVoltage

type
string
in
query
start

The start timestamp of the period of data you wish to retreive

type
integer now - 1hour
in
query
end

The end timestamp of the period of data you wish to retreive

type
integer now
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
data
[
  {
    "current{r}": {
      "1505108933": 0.3857383972607584,
      "1505108937": 0.3806250010513597
    }
  },
  {
    "current{b}": {
      "1505108944": 0.3849693243306107
    }
  },
  {
    "apparentPower": {
      "1505108933": 243.3849693243306,
      "1505108937": 244.3849693243306,
      "1505108941": 245.38573839726075
    }
  }
]
status
"OK"
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Create Asset Data

POST /api/assets/{assetId}/data/raw

Provide data pertaining to a particular asset.

The data to provide. If existing timestamps are specified then the data will be overwritten. if data is posted for the counter{decrement} metric then this value will be saved as a negative number, regardless of sign provided.

data: object

The data to be provided for an asset, including metric name, timestamp and value.

assetId

The ID of the asset.

type
string
in
path
Request Example
{
  "data": [
    {
      "current": {
        "1511752328": 200,
        "1511752335": 205,
        "1511752360": 203
      }
    },
    {
      "mainsVoltage": {
        "1511752328": 240,
        "1511752330": 241
      }
    }
  ]
}
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
data
[
  {
    "current": {
      "1511752328": 200,
      "1511752335": 205,
      "1511752360": 203
    }
  },
  {
    "mainsVoltage": {
      "1511752328": 240,
      "1511752330": 241
    }
  }
]
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Data - Latest

GET /api/assets/{assetId}/data/latest

Returns the latest value of the metrics for the asset up to a maximum age of data.

assetId

The ID of the asset.

type
string
in
path
metrics

This returns the single, most recent (up to a given max age) data point we have for each metric.

No timestamps are given for this data but you can be sure that no data point will be older than the maxAge query parameter. If you require specific timestamps please consider using the /data or /data/raw end points.

The metrics to retreive as a comma separated list of any combination of the following:

  • current
  • incomingVoltage
  • upstreamVoltage
  • downstreamVoltage
  • tapPosition
  • apparentPower
  • activePower
  • mainsVoltage
  • counter

You may also request the data to be split by phases by adding the phase letter after the metric name, for example current{r} (for phase=red). These can be combined to request multiple phases, for example current{r|w} (both red and white). Phase pairs can also be specified, for example mainsVoltage{br} or mainsVoltage{br|wb}. Or you can request all phases with an asterix, for example current{*}. If a phase is specified the above average/sum aggregation will not be applied and instead you will get back the value for just the specified phase(s).

Phase suffixes may be used on the following metrics: current, incomingVoltage, mainsVoltage

type
string
in
query
maxAge

The maximum age of the data that should be considered "latest" in seconds

type
integer 30
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
data
[
  {
    "current{r}": 0.3806250010513597
  },
  {
    "current{b}": 0.3849693243306107
  },
  {
    "upstreamVolts": 245.38573839726075
  }
]
status
"OK"
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Asset

API end-points related to assets.

All Assets

GET /api/assets

Returns a list of assets associated with the currently authenticated user's organisation.

200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": [
    {
      "id": "599ce96fceba40bba8afc36f177c1e98",
      "name": "First Asset Example"
    },
    {
      "id": "0796a71c54524c05b7af503196994c34",
      "name": "Second Asset Example"
    }
  ]
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Get Single Asset

GET /api/assets/{assetId}

Returns the details of the asset with the supplied UID.

assetId

The ID of the asset.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": [
    {
      "id": "599ce96fceba40bba8afc36f177c1e98",
      "name": "First Asset Example"
    }
  ]
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Data - Downsampled

GET /api/assets/{assetId}/data

Return stored metrics for this asset by downsampling.

assetId

The ID of the asset.

type
string
in
path
metrics

This returns downsampled data of metrics for this asset.

Timestamps in the response refer to the start of the period.

The metrics to retreive as a comma separated list of any combination of the following:

  • current
  • incomingVoltage
  • upstreamVoltage
  • downstreamVoltage
  • tapPosition
  • apparentPower
  • activePower
  • mainsVoltage
  • counter

You may also request the data to be split by phases by adding the phase letter after the metric name, for example current{r} (for phase=red). These can be combined to request multiple phases, for example current{r|w} (both red and white). Phase pairs can also be specified, for example mainsVoltage{br} or mainsVoltage{br|wb}. Or you can request all phases with an asterix, for example current{*}. If a phase is specified the above average/sum aggregation will not be applied and instead you will get back the value for just the specified phase(s).

The counter metric has two types - counter{increment} and counter{decrement}. These values represent the change increment or decrement respectively to the overall count, but when this type is omitted it will return the net change for the time period. For instance, if at timestamp 1512080248 the value was 4, and at 1512080276 the value was -2 then the data returned over this period will be the sum - in this case, 2.

Phase suffixes may be used on the following metrics: current, incomingVoltage, mainsVoltage

type
string
in
query
start

The start timestamp of the period of data you wish to retreive

type
integer now - 1hour
in
query
end

The end timestamp of the period of data you wish to retreive

type
integer now
in
query
interval

The downsampling interval in seconds

type
integer 3600 (1 hour)
in
query
fill

The fill policy to use for empty values. By default any empty values for an asset (i.e. a missing chuck of data) are ommitted. Specify fill=null to return all times with null values if the data is missing. Only null is supported.

type
string , x ∈ { [object Object] }
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
data
[
  {
    "current{r}": {
      "1505109600": 0.3857383972607584,
      "1505111400": 0.3806250010513597
    }
  },
  {
    "current{w}": {
      "1505109600": 0.3849693243306107,
      "1505111400": 0.3857383972607584
    }
  },
  {
    "current{b}": {
      "1505109600": 244.3849693243306,
      "1505111400": 245.38573839726075
    }
  },
  {
    "mainsVoltage{br|rw}": {
      "1505109600": 244.3849693243306,
      "1505111400": 245.38573839726075
    }
  }
]
status
"OK"
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Data - Raw

GET /api/assets/{assetId}/data/raw

Return stored metrics for this asset without applying any downsampling.

assetId

The ID of the asset.

type
string
in
path
metrics

This returns raw data of metrics for this asset as collected by each device.

Timestamps in the response refer to the time at which the data was sampled.

No guarantees can be made about aligned data. e.g. current may be collected at slightly different times per phases, and upstreamVoltage might be collected at a different time than downstreamVoltage.

The metrics to retreive as a comma separated list of any combination of the following:

  • current
  • incomingVoltage
  • upstreamVoltage
  • downstreamVoltage
  • tapPosition
  • apparentPower
  • activePower
  • mainsVoltage
  • counter

You may also request the data to be split by phases by adding the phase letter after the metric name, for example current{r} (for phase=red). These can be combined to request multiple phases, for example current{r|w} (both red and white). Phase pairs can also be specified, for example mainsVoltage{br} or mainsVoltage{br|wb}. Or you can request all phases with an asterix, for example current{*}. If a phase is specified the above average/sum aggregation will not be applied and instead you will get back the value for just the specified phase(s).

The counter metric has two types - counter{increment} and counter{decrement}. These values represent the change increment or decrement respectively to the overall count, but when this type is omitted it will return the net change for the time period. For instance, if at timestamp 1512080248 the value was 4, and at 1512080276 the value was -2 then the data returned over this period will be the sum - in this case, 2.

Phase suffixes may be used on the following metrics: current, incomingVoltage, mainsVoltage

type
string
in
query
start

The start timestamp of the period of data you wish to retreive

type
integer now - 1hour
in
query
end

The end timestamp of the period of data you wish to retreive

type
integer now
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
data
[
  {
    "current{r}": {
      "1505108933": 0.3857383972607584,
      "1505108937": 0.3806250010513597
    }
  },
  {
    "current{b}": {
      "1505108944": 0.3849693243306107
    }
  },
  {
    "apparentPower": {
      "1505108933": 243.3849693243306,
      "1505108937": 244.3849693243306,
      "1505108941": 245.38573839726075
    }
  }
]
status
"OK"
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Create Asset Data

POST /api/assets/{assetId}/data/raw

Provide data pertaining to a particular asset.

The data to provide. If existing timestamps are specified then the data will be overwritten. if data is posted for the counter{decrement} metric then this value will be saved as a negative number, regardless of sign provided.

data: object

The data to be provided for an asset, including metric name, timestamp and value.

assetId

The ID of the asset.

type
string
in
path
Request Example
{
  "data": [
    {
      "current": {
        "1511752328": 200,
        "1511752335": 205,
        "1511752360": 203
      }
    },
    {
      "mainsVoltage": {
        "1511752328": 240,
        "1511752330": 241
      }
    }
  ]
}
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
data
[
  {
    "current": {
      "1511752328": 200,
      "1511752335": 205,
      "1511752360": 203
    }
  },
  {
    "mainsVoltage": {
      "1511752328": 240,
      "1511752330": 241
    }
  }
]
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Data - Latest

GET /api/assets/{assetId}/data/latest

Returns the latest value of the metrics for the asset up to a maximum age of data.

assetId

The ID of the asset.

type
string
in
path
metrics

This returns the single, most recent (up to a given max age) data point we have for each metric.

No timestamps are given for this data but you can be sure that no data point will be older than the maxAge query parameter. If you require specific timestamps please consider using the /data or /data/raw end points.

The metrics to retreive as a comma separated list of any combination of the following:

  • current
  • incomingVoltage
  • upstreamVoltage
  • downstreamVoltage
  • tapPosition
  • apparentPower
  • activePower
  • mainsVoltage
  • counter

You may also request the data to be split by phases by adding the phase letter after the metric name, for example current{r} (for phase=red). These can be combined to request multiple phases, for example current{r|w} (both red and white). Phase pairs can also be specified, for example mainsVoltage{br} or mainsVoltage{br|wb}. Or you can request all phases with an asterix, for example current{*}. If a phase is specified the above average/sum aggregation will not be applied and instead you will get back the value for just the specified phase(s).

Phase suffixes may be used on the following metrics: current, incomingVoltage, mainsVoltage

type
string
in
query
maxAge

The maximum age of the data that should be considered "latest" in seconds

type
integer 30
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
data
[
  {
    "current{r}": 0.3806250010513597
  },
  {
    "current{b}": 0.3849693243306107
  },
  {
    "upstreamVolts": 245.38573839726075
  }
]
status
"OK"
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Curtailment

API end-points related to export curtailments.

Get curtailment constraints

GET /api/constraints/curtailments

Return the constraints of a Virtual Power Plant given a set of query parameters. The parameters correspond to fields to specify when creating a curtailment. This route should be used before executing a curtailment in order to determine the capabilities of that particular Virtual Power Plant.

powerstation

The ID of the power station being curtailed.

type
string
in
query
duration

The duration of the curtailment in seconds.

type
number
in
query
200 OK

OK

Response Example (200 OK)
{
  "data": {
    "realPowerP": 55
  }
}

All Curtailments

GET /api/curtailments

Returns a list of export curtailments. Use of this route without limit/offset parameters is deprecated.

filter

A filter to apply to the returned export curtailments. One of UPCOMING, COMPLETED, INPROGRESS, CANCELLED. Leave empty to view all.

type
string , x ∈ { UPCOMING , COMPLETED , INPROGRESS }
in
query
offset

An integer to offset the results by - to use for paging through the total results. If limit is specified, this is 0 by default.

type
number
in
query
limit

An integer to limit the results by - to use for paging through the total results. By default this is 100.

type
number
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": [
    {
      "component": "solar",
      "id": "8380ecf0-e8b9-42c7-8bb5-2e75d13bf484",
      "powerstation": "05bf160741c343ce869d0e9ec7b2ad88",
      "request": {
        "duration": 1800,
        "realPowerP": -1.4,
        "startTime": 1503026870
      },
      "state": "COMPLETED"
    },
    {
      "component": "solar",
      "id": "b2588e2c-5675-48aa-a835-9c887b52b16a",
      "powerstation": null,
      "request": {
        "duration": 600,
        "realPowerP": -1.4,
        "startTime": 1503452085
      },
      "state": "COMPLETED"
    }
  ]
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Create Curtailment

POST /api/curtailments

Create an export curtailment request.

The curtailment to create.

component: string , x ∈ { grid , solar }

The component that is being curtailed.

powerstation: string

The ID of the power station being curtailed.

realPowerP: number

The real power limit to which the aggregated components are being curtailed (kW). This value must always be negative.

startTime: number

A unix timestamp of the start time of the curtailment.

duration: number

The duration of the curtailment in seconds.

Request Example
{
  "component": "grid",
  "powerstation": "cd0412cbc2e444d7a170520ba284091a",
  "realPowerP": -1,
  "startTime": 1504549112,
  "duration": 21600
}
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "component": "grid",
  "powerstation": "cd0412cbc2e444d7a170520ba284091a",
  "realPowerP": -1,
  "startTime": 1504549112,
  "duration": 1505549112
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Get Single Curtailment

GET /api/curtailments/{curtailmentId}

Returns detailed data about the export curtailment with the supplied curtailment ID.

curtailmentId

The ID of the export curtailment.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "component": "grid",
    "createdAt": 1504140351,
    "currentResponse": {
      "deploymentsAccepted": 1
    },
    "id": "aa2df12e-d628-45d6-8a90-2d9b6d6137aa",
    "powerstation": "05bf160741c343ce869d0e9ec7b2ad88",
    "request": {
      "deploymentsRequested": 1,
      "duration": 21600,
      "realPowerP": -1,
      "startTime": 1504549112
    },
    "nodes": [
      "d4c58e243e694bba9e57cbdf42970faf",
      "e720e221204149ec9fa172583bcf4258"
    ],
    "state": "UPCOMING"
  }
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Cancel Curtailment

POST /api/curtailments/{curtailmentId}/cancel

Cancels a scheduled curtailment

curtailmentId

The ID of the export curtailment.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "status": "OK"
  }
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Get Curtailment Setpoint

GET /api/curtailments/setpoint

Get the current setpoint for default curtailment behaviour.

powerstationId

The ID of the powerstation to query.

type
string
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

404 Not Found

A curtailment setpoint for the requested powerstation cannot be found. Either the powerstation has not been created or it is has not yet received a valid setpoint.

Response Example (200 OK)
{
  "data": {
    "powerstation": "eb014defdded417e8b6a9d7ed078cedf",
    "meterRealPowerP": 0,
    "inverterRealPowerP": -24
  }
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}
Response Example (404 Not Found)
{
  "message": "No setpoint for powerstation '6442adf69e004405808542b687bcf494' found.",
  "status": "NOT FOUND"
}

Change Curtailment Setpoint

POST /api/curtailments/setpoint

Change the setpoint for default curtailment behaviour.

The updated curtailment setpoint.

powerstation: string

The ID of the power station being updated.

meterRealPowerP: number

The real power limit to which the aggregated grid output is being curtailed by default (kW). A null entry removes any constraint from the component. Other values must always be negative.

inverterRealPowerP: number

The real power limit to which the aggregated inverter output is being curtailed by default (kW). A null entry removes any constraint from the component. Other values must always be negative.

Request Example
{
  "powerstation": "cd0412cbc2e444d7a170520ba284091a",
  "meterRealPowerP": 0,
  "inverterRealPowerP": -1.3
}
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "status": "OK"
  }
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Curtailment Heartbeat

POST /api/curtailments/heartbeat

Send a curtailment heartbeat to a powerstation. Nodes receiving a heartbeat will return to their default curtailment behaviour if the heartbeat is lost.

The updated curtailment setpoint.

powerstation: string

The ID of the power station being heartbeated.

Request Example
{
  "powerstation": "cd0412cbc2e444d7a170520ba284091a"
}
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "status": "OK"
  }
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Dispatch

API end-points related to export dispatches.

All Dispatches

GET /api/dispatches

Return all dispatches/support requests with their basic details. Use of this route without offset/limit parameters is deprecated.

filter

A filter to apply to the returned dispatches/support requests. One of UPCOMING, COMPLETED, INPROGRESS or left empty to view all.

type
string , x ∈ { UPCOMING , COMPLETED , INPROGRESS }
in
query
offset

An integer to offset the results by - to use for paging through the total results. By default this is 0

type
number
in
query
limit

An integer to limit the results by - to use for paging through the total results. By default this is 100.

type
number
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": [
    {
      "component": "battery",
      "id": "bf6e5c09-9e25-4ff0-a2af-d81185e4abc4",
      "powerstation": "05bf160741c343ce869d0e9ec7b2ad88",
      "request": {
        "duration": 3600,
        "powerFactor": 0.7,
        "powerFactorLeadLag": "LEADING",
        "realPowerP": 38.2,
        "startTime": 1497336240
      },
      "state": "COMPLETED"
    }
  ]
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Create Dispatch

POST /api/dispatches

Creates a new dispatch with the specified details

The dispatch to create.

powerstation: string

The id of the powerstation to dispatch

startTime: integer

The unix timestamp at which this dispatch should start.

duration: integer

The duration of the request in seconds.

realPowerP: number

The amount of real power to be dispatched in kW

powerFactor: number

The requested power factor for this dispatch/support request. This is only accepted if your account has been enabled for power factor/voltage control.

powerFactorLeadLag: string , x ∈ { LEADING , LAGGING }

Used only when power_factor is also present and indicates if the specified power factor is LEADING or LAGGING. This is only accepted if your account has been enabled for power factor/voltage control.

Request Example
{
  "powerstation": "57dfc43d3b9a4c99b05c7794f5d6abb3",
  "startTime": 1505214000,
  "duration": 28800,
  "realPowerP": 2.6,
  "powerFactor": 0.7,
  "powerFactorLeadLag": "LAGGING"
}
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "id": "0c127211-bc31-4d11-8f32-19008c75cf80",
    "status": "OK"
  }
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Get Single Dispatch

GET /api/dispatches/{dispatchId}

Return detailed data about a specific dispatch/support request as specified by the dispatchId in the URL.

dispatchId

The ID of the dispatch/support request for which to fetch details.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": [
    {
      "component": "battery",
      "createdAt": 1497336240,
      "currentResponse": {
        "deploymentsAccepted": 0,
        "deploymentsResponded": 0,
        "powerFactor": 0.7,
        "powerFactorLeadLag": "LEADING",
        "realPowerP": 38.2,
        "rejectedRealPowerP": 0.21
      },
      "id": "bf6e5c09-9e25-4ff0-a2af-d81185e4abc4",
      "powerstation": "05bf160741c343ce869d0e9ec7b2ad88",
      "prediction": {
        "data": [
          -5.960000001858923e-8,
          -5.960000001858923e-8,
          -5.960000001858923e-8,
          -5.960000001858923e-8,
          -2.97999999121501e-8,
          -8.94000000695172e-8,
          -1.49000000115862e-7,
          -2.98000000231724e-8,
          -1.489999998938174e-7,
          -2.98000000231724e-8,
          -8.93999999584949e-8,
          -2.9700000014898364e-8,
          -8.940000001400605e-8
        ],
        "deltaSeconds": 1800,
        "startTime": 1505181600
      },
      "request": {
        "deploymentsRequested": 6,
        "duration": 3600,
        "powerFactor": 0.7,
        "powerFactorLeadLag": "LEADING",
        "realPowerP": 38.2,
        "startTime": 1497336240
      },
      "nodes": [
        "f7b05c5632334403ac0895959f8d00e7",
        "4f0cf230c728478da0822aa7f2d1f9ef",
        "56af6a12ae9049298aaa38cde5781145",
        "3b904d6c1a8549f3adc0b0dd4a7e9fc6",
        "50cafb993f54499cb03396f236dfee6d",
        "f93c98b6df01472283bc9fbb5d7a6d8d",
        "4858794e8ab3410cb523fcf03e4cc573"
      ],
      "state": "COMPLETED"
    }
  ]
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Network

Indicates this API end-point is available to network organisations.

All Nodes

GET /api/nodes

Return basic information and URLs on how to obtain more information about nodes. Each URL can also be expanded in place using the expand URL parameter

expand

Any property that contains a URL path rather than data can be expanded in place using the expand query string parameter. This is a CSV list of each property name which should be expanded. e.g. ?expand=network,address

type
string
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
Default response
{
  "data": [
    {
      "address": "/api/nodes/bdeea25eb01b460da11e9208007ec2e5/address",
      "id": "bdeea25eb01b460da11e9208007ec2e5",
      "network": "/api/nodes/bdeea25eb01b460da11e9208007ec2e5/network",
      "status": "/api/nodes/bdeea25eb01b460da11e9208007ec2e5/status",
      "namePlate": "/api/nodes/bdeea25eb01b460da11e9208007ec2e5/namePlate"
    },
    {
      "address\"": "/api/nodes/521444180bee43bda8e51ffe8a64c9bc/address",
      "id": "521444180bee43bda8e51ffe8a64c9bc",
      "network": "/api/nodes/521444180bee43bda8e51ffe8a64c9bc/network",
      "status": "/api/nodes/521444180bee43bda8e51ffe8a64c9bc/status",
      "namePlate": "/api/nodes/521444180bee43bda8e51ffe8a64c9bc/namePlate"
    }
  ],
  "status": "OK"
}
Fully Expanded Response (?expand=address,network,status,system)
{
  "data": [
    {
      "address": {
        "city": "Canberra",
        "country": "Australia",
        "lat": -35.333502,
        "lng": 149.170508,
        "postcode": "2609",
        "state": "ACT",
        "street": "Yallourn Street",
        "street_number": "17/2"
      },
      "id": "bdeea25eb01b460da11e9208007ec2e5",
      "network": {
        "nmi": "10000200030"
      },
      "status": {
        "operationalStatus": {
          "lastTimestamp": 1505695466,
          "lastValue": 0
        },
        "ping": {
          "lastTimestamp": 1505695468
        }
      },
      "namePlate": {
        "batteryCapacity": 6.4,
        "inverterPower": 3,
        "batteryPower": 2
      }
    }
  ],
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Address/Location Info

GET /api/nodes/{nodeId}/address

Return full address and lat/long information of a node.

nodeId

The ID of the node.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "city": "Turner",
    "country": "Australia",
    "lat": -35.26671,
    "lng": 149.12879,
    "postcode": "2612",
    "state": "ACT",
    "street": "Macleay St",
    "street_number": "52"
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Network Info

GET /api/nodes/{nodeId}/network

Returns the NMI for this node.

nodeId

The ID of the node.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "nmi": 4102000000
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Operational Status

GET /api/nodes/{nodeId}/status

Returns the latest operational status information for this node.

nodeId

The ID of the node.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "operationalStatus": {
      "lastTimestamp": 1505189841,
      "lastValue": 0
    },
    "ping": {
      "lastTimestamp": 1505189845
    }
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Name Plate

GET /api/nodes/{nodeId}/namePlate

Returns information about the energy system attached to this node.

nodeId

The ID of the node.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "batteryCapacity": 6.4,
    "inverterPower": 3,
    "batteryPower": 2
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Name Plate

GET /api/nodes/{nodeId}/events

Returns events and changes in state to this node sorted by time descending. This will only return the first 100 results by default, as the number of results can be quite large. Therefore you must use the limit and offset parameters as specified below to retrieve either all results, or a page at a time. This endpoint only returns basic information; more details can be retrieved from the endpoint specific to that event type, e.g. from /api/dispatches

nodeId

The ID of the node.

type
string
in
path
offset

An integer to offset the results by - to use for paging through the total results. If limit is specified, this is set to 0 by default.

type
number
in
query
limit

An integer to limit the results by - to use for paging through the total results. By default this is 100, or the maximum number of results (whichever is lower).

type
number
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": [
    {
      "description": "Network Support",
      "duration": 3600,
      "eventType": "DISPATCH",
      "id": "b02067ae-d274-4d75-a00b-81a78184e987",
      "ts": 1523430000
    },
    {
      "description": "Network Support",
      "duration": 3600,
      "eventType": "DISPATCH",
      "id": "64948b88-7af5-49a7-9b04-e0055419eaf8",
      "ts": 1517547600
    },
    {
      "description": "The Reposit System was commissioned.",
      "eventType": "COMMISSIONED",
      "ts": 1511204358
    }
  ],
  "meta": {
    "count": 6,
    "next": null,
    "previous": "https://marketapi.repositpower.com/api/nodes/5b0a63855f2f4f819ccda226ca9d14e8/events?limit=3&offset=0"
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

All Power Stations

GET /api/powerstations

Returns a list of power stations associated with the currently authenticated user's organisation.

includePredictions

Optional. Set to true to include powerstation predictions in the response.

type
string , x ∈ { true }
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": [
    {
      "description": null,
      "id": "e7430ccb21644d7b9e0a443933f25c7f",
      "name": "New Powerstation on dmarket",
      "namePlate": {
        "capacity": 17.1,
        "power": 13
      },
      "nodes": [
        "d4c58e243e694bba9e57cbdf42970faf",
        "5320123eac5e4fd5baaea0bf442659bb"
      ]
    },
    {
      "description": "A sample powerstation for dispatches",
      "id": "3561817084be49c0b77d7d65903792ff",
      "name": "Sample One",
      "namePlate": {
        "batteryCapacity": 29,
        "batteryPower": 16.3,
        "inverterPower": 18.5
      },
      "nodes": [
        "5320123eac5e4fd5baaea0bf442659bb",
        "e720e221204149ec9fa172583bcf4258",
        "d4c58e243e694bba9e57cbdf42970faf"
      ]
    }
  ],
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Create Power Station

POST /api/powerstations

Creates a new powerstation and returns its details.

The powerstation to create.

name: string

A recognisable name to give this powerstation.

description: string

An option description of this powerstation

type: string , x ∈ { STATIC (default) , DYNAMIC }

The type of powerstation, either STATIC for a specified list of node IDs or DYNAMIC to suply a filter. When using DYNAMIC ans supplying a filter the powerstation will automatically add any nodes that match the filter criteria.

nodes: string[]

An array of node IDs that belong to this powerstation if the powerstation type is STATIC. Otherwise this must be null

string
filters: object

When specifying a DYNAMIC powerstation type you must also supply the filters that this powerstation is built from.

postcodes: string[]

An array of postcodes that a node can be in for it to be included in this powerstation.

string
state: string , x ∈ { ACT , NSW , NT , QLD , SA , TAS , VIC , WA }

The state or territory that a node must be in for it to be included in this powerstation.

Request Example
{
  "name": "My First Powerstation",
  "nodes": [
    "f7b05c5632334403ac0895959f8d00e7",
    "4f0cf230c728478da0822aa7f2d1f9ef",
    "56af6a12ae9049298aaa38cde5781145"
  ]
}
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "description": null,
    "id": "e7430ccb21644d7b9e0a443933f25c7f",
    "name": "My First Powerstation",
    "namePlate": {
      "batteryCapacity": 17.1,
      "batteryPower": 11,
      "inverterPower": 13
    },
    "nodes": [
      "f7b05c5632334403ac0895959f8d00e7",
      "4f0cf230c728478da0822aa7f2d1f9ef",
      "56af6a12ae9049298aaa38cde5781145"
    ]
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Get Single Power Station

GET /api/powerstations/{powerstationId}

Returns the details of the power station with the supplied UID.

powerstationId

The ID of the power station.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

404 Not Found

Invalid powerstation UID specified.

Response Example (200 OK)
{
  "data": {
    "description": null,
    "id": "e7430ccb21644d7b9e0a443933f25c7f",
    "name": "New Powerstation on dmarket",
    "namePlate": {
      "capacity": 17.1,
      "power": 13
    },
    "nodes": [
      "d4c58e243e694bba9e57cbdf42970faf",
      "5320123eac5e4fd5baaea0bf442659bb"
    ]
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}
Response Example (404 Not Found)
{
  "error": "Powerstation e7430ccb21644d7b9e0a443933f25c7f not found",
  "status": "ERROR"
}

Update Power Station

PUT /api/powerstations/{powerstationId}

Updates an existing powerstation specified by its id and returns its details.

The powerstation to update.

name: string
description: string

An option description of this powerstation

nodes: string[]

A list of nodes IDs that make up this powerstation.

string
powerstationId

The ID of the power station.

type
string
in
path
Request Example
{
  "name": "My First Powerstation",
  "nodes": [
    "f7b05c5632334403ac0895959f8d00e7",
    "4f0cf230c728478da0822aa7f2d1f9ef",
    "56af6a12ae9049298aaa38cde5781145"
  ]
}
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

404 Not Found

Invalid powerstation ID specified.

Response Example (200 OK)
{
  "data": {
    "description": null,
    "id": "e7430ccb21644d7b9e0a443933f25c7f",
    "name": "My First Powerstation",
    "namePlate": {
      "capacity": 17.1,
      "power": 13
    },
    "nodes": [
      "f7b05c5632334403ac0895959f8d00e7",
      "4f0cf230c728478da0822aa7f2d1f9ef",
      "56af6a12ae9049298aaa38cde5781145"
    ]
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}
Response Example (404 Not Found)
{
  "error": "Powerstation e7430ccb21644d7b9e0a443933f25c7f not found",
  "status": "ERROR"
}

Delete Power Station

DELETE /api/powerstations/{powerstationId}

Deletes a powerstation with with the supplied ID.

powerstationId

The ID of the power station.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

404 Not Found

Invalid powerstation ID specified.

Response Example (200 OK)
{
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}
Response Example (404 Not Found)
{
  "error": "Powerstation e7430ccb21644d7b9e0a443933f25c7f not found",
  "status": "ERROR"
}

Data - Downsampled

GET /api/powerstations/{powerstationId}/data

Return stored metrics for this powerstation or its nodes by downsampling.

powerstationId

The ID of the power station.

type
string
in
path
metrics

This returns downsampled data of metrics for this powerstation.

Timestamps in the response refer to the start of the period.

The metrics to retreive as a comma separated list of any combination of the following:

  • meterVoltage - The average voltage (V) across all phases as measured at the meter/grid
  • meterFrequence - The average frequency (Hz) across all phases as measured at the meter/grid
  • meterPower - The total (sum) real power (kW) across all phases as measured at the meter/grid
  • meterReactivePower - The total (sum) reactive power (var) across all phases as measure at the meter/grid
  • solarPower - The total (sum) real power (kW) across all solar phases being generated by the PV array
  • solarReactivePower - The total (sum) reactive power (var) across all solar phases being generated by the PV array
  • remainingCharge - The total (sum) remaining charge (W) of the all batteries attached to this system
  • batteryPower - The total (sum) real power (kW) measured at the battery of all batteries attached to this system
  • inverterReactivePower - The total (sum) reactive power (var) measured at the inverter
  • inverterApparentPower - The total (sum) apparent power (kW) measured at the inverter
  • meterCurrent - The total (sum) current (Amp) measured at the meter/grid

All real power measurements follow a sink convention, while all reactive power measurements follow a source convention. Apparent power is always positive.

If ?format=nodes is specified then you may also request the data to be split by phases by adding a phase letter after the metric name, for example meterVoltage{a}. These can be combined to request multiple phases, for example meterVoltage{a|b}. Or you can request all phases with an asterix, for example meterVoltage{*}. Note that meterVoltage{*} is equivalent to meterVoltage{a|b|c}. If a phase is specified the above average/sum aggregation will not be applied and instead you will get back the value for just the specified phase(s).

Phase suffixes may be used on the following metrics: meterVoltage, meterFrequency, meterPower, meterReactivePower, solarPower, solarReactivePower.

Please note that phases are currently arbitrary - we cannot determine which phase is red/white/blue. For all single phase installations the data will be available on phase a.

type
string
in
query
start

The start timestamp of the period of data you wish to retreive

type
integer now - 1hour
in
query
end

The end timestamp of the period of data you wish to retreive

type
integer now
in
query
interval

The downsampling interval in seconds

type
integer 3600 (1 hour)
in
query
format

The format you which to retreive the results, either powerstation or nodes

type
string , x ∈ { powerstation (default) , nodes }
in
query
fill

The fill policy to use for empty values. By default any empty values for a deployment (i.e. a missing chuck of data) are ommitted. Specify fill=null to return all times with null values if the data is missing. Only null is supported.

type
string , x ∈ { [object Object] }
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
By powerstation
{
  "data": [
    {
      "meterPower{a}": {
        "1505109600": 0.3857383972607584,
        "1505111400": 0.3806250010513597
      }
    },
    {
      "meterPower{b}": {
        "1505109600": 0.3849693243306107,
        "1505111400": 0.3857383972607584
      }
    },
    {
      "meterVoltage": {
        "1505109600": 244.3849693243306,
        "1505111400": 245.38573839726075
      }
    }
  ],
  "status": "OK"
}
By nodes
{
  "data": [
    {
      "meterPower{a}": {
        "d4c58e243e694bba9e57cbdf42970faf": {
          "1505109600": 0.3857383972607584,
          "1505111400": 0.3806250010513597
        },
        "e720e221204149ec9fa172583bcf4258": {
          "1505109600": 0.3849693243306107,
          "1505111400": 0.3580208346247673
        }
      }
    },
    {
      "meterPower{b}": {
        "d4c58e243e694bba9e57cbdf42970faf": {
          "1505109600": 0.3857383972607584,
          "1505111400": 0.3806250010513597
        },
        "e720e221204149ec9fa172583bcf4258": {
          "1505109600": 0.3849693243306107,
          "1505111400": 0.3580208346247673
        }
      }
    },
    {
      "meterVoltage": {
        "d4c58e243e694bba9e57cbdf42970faf": {
          "1505109600": 244.38573839726075,
          "1505111400": 244.38062500105136
        },
        "e720e221204149ec9fa172583bcf4258": {
          "1505109600": 245.3849693243306,
          "1505111400": 245.35802083462477
        }
      }
    }
  ],
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Data - Raw

GET /api/powerstations/{powerstationId}/data/raw

Return stored metrics for this powerstation or its nodes without applying any downsampling.

powerstationId

The ID of the power station.

type
string
in
path
metrics

This returns raw data of metrics for this powerstation as collected by each device.

Timestamps in the response refer to the time at which the data was sampled.

No guarantees can be made about aligned data. e.g. meterPower may be collected at slightly different times per phases, and meterPower might be collected at a different time than meterVoltage.

The metrics to retreive as a comma separated list of any combination of the following:

  • meterVoltage - The average voltage (V) across all phases as measured at the meter/grid
  • meterFrequence - The average frequency (Hz) across all phases as measured at the meter/grid
  • meterPower - The total (sum) real power (kW) across all phases as measured at the meter/grid
  • meterReactivePower - The total (sum) reactive power (var) across all phases as measure at the meter/grid
  • solarPower - The total (sum) real power (kW) across all solar phases being generated by the PV array
  • solarReactivePower - The total (sum) reactive power (var) across all solar phases being generated by the PV array
  • remainingCharge - The total (sum) remaining charge (W) of the all batteries attached to this system
  • batteryPower - The total (sum) real power (kW) measured at the battery of all batteries attached to this system
  • inverterReactivePower - The total (sum) reactive power (var) measured at the inverter
  • inverterApparentPower - The total (sum) apparent power (kW) measured at the inverter
  • meterCurrent - The total (sum) current (Amp) measured at the meter/grid

All real power measurements follow a sink convention, while all reactive power measurements follow a source convention. Apparent power is always positive.

If ?format=nodes is specified then you may also request the data to be split by phases by adding a phase letter after the metric name, for example meterVoltage{a}. These can be combined to request multiple phases, for example meterVoltage{a|b}. Or you can request all phases with an asterix, for example meterVoltage{*}. Note that meterVoltage{*} is equivalent to meterVoltage{a|b|c}. If a phase is specified the above average/sum aggregation will not be applied and instead you will get back the value for just the specified phase(s).

Phase suffixes may be used on the following metrics: meterVoltage, meterFrequency, meterPower, meterReactivePower, solarPower, solarReactivePower.

Please note that phases are currently arbitrary - we cannot determine which phase is red/white/blue. For all single phase installations the data will be available on phase a.

type
string
in
query
start

The start timestamp of the period of data you wish to retreive

type
integer now - 1hour
in
query
end

The end timestamp of the period of data you wish to retreive

type
integer now
in
query
format

The format you which to retreive the results, either powerstation or nodes

type
string , x ∈ { powerstation (default) , nodes }
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
By powerstation
{
  "data": [
    {
      "meterPower{a}": {
        "1505108933": 0.3857383972607584,
        "1505108937": 0.3806250010513597
      }
    },
    {
      "meterPower{b}": {
        "1505108944": 0.3849693243306107
      }
    },
    {
      "meterVoltage": {
        "1505108933": 243.3849693243306,
        "1505108937": 244.3849693243306,
        "1505108941": 245.38573839726075
      }
    }
  ],
  "status": "OK"
}
By nodes
{
  "data": [
    {
      "meterPower{a}": {
        "d4c58e243e694bba9e57cbdf42970faf": {
          "1505108933": 0.3857383972607584,
          "1505108937": 0.3806250010513597
        },
        "e720e221204149ec9fa172583bcf4258": {
          "1505108934": 0.3849693243306107,
          "1505108938": 0.3580208346247673
        }
      }
    },
    {
      "meterPower{b}": {
        "d4c58e243e694bba9e57cbdf42970faf": {
          "1505108933": 0.3857383972607584,
          "1505108937": 0.3806250010513597,
          "1505108941": 0.3806250010513597,
          "1505108943": 0.3806250010513597
        },
        "e720e221204149ec9fa172583bcf4258": {
          "1505108934": 0.3849693243306107,
          "1505108936": 0.3580208346247673,
          "1505108939": 0.3580208346247673
        }
      }
    },
    {
      "meterVoltage": {
        "d4c58e243e694bba9e57cbdf42970faf": {
          "1505108937": 244.38573839726075,
          "1505108940": 244.38062500105136
        },
        "e720e221204149ec9fa172583bcf4258": {
          "1505108937": 245.3849693243306
        }
      }
    }
  ],
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Data - Latest

GET /api/powerstations/{powerstationId}/data/latest

Returns the latest value of the metrics for the powerstation or nodes up to a maximum age of data.

powerstationId

The ID of the power station.

type
string
in
path
metrics

This returns the single, most recent (up to a given max age) data point we have for each metric.

No timestamps are given for this data but you can be sure that no data point will be older than the maxAge query parameter. If you require specific timestamps please consider using the /data or /data/raw end points.

The metrics to retreive as a comma separated list of any combination of the following:

  • meterVoltage - The average voltage (V) across all phases as measured at the meter/grid
  • meterFrequence - The average frequency (Hz) across all phases as measured at the meter/grid
  • meterPower - The total (sum) real power (kW) across all phases as measured at the meter/grid
  • meterReactivePower - The total (sum) reactive power (var) across all phases as measure at the meter/grid
  • solarPower - The total (sum) real power (kW) across all solar phases being generated by the PV array
  • solarReactivePower - The total (sum) reactive power (var) across all solar phases being generated by the PV array
  • remainingCharge - The total (sum) remaining charge (W) of the all batteries attached to this system
  • batteryPower - The total (sum) real power (kW) measured at the battery of all batteries attached to this system
  • inverterReactivePower - The total (sum) reactive power (var) measured at the inverter
  • inverterApparentPower - The total (sum) apparent power (kW) measured at the inverter
  • meterCurrent - The total (sum) current (Amp) measured at the meter/grid

All real power measurements follow a sink convention, while all reactive power measurements follow a source convention. Apparent power is always positive.

If ?format=nodes is specified then you may also request the data to be split by phases by adding a phase letter after the metric name, for example meterVoltage{a}. These can be combined to request multiple phases, for example meterVoltage{a|b}. Or you can request all phases with an asterix, for example meterVoltage{*}. Note that meterVoltage{*} is equivalent to meterVoltage{a|b|c}. If a phase is specified the above average/sum aggregation will not be applied and instead you will get back the value for just the specified phase(s).

Phase suffixes may be used on the following metrics: meterVoltage, meterFrequency, meterPower, meterReactivePower, solarPower, solarReactivePower.

Please note that phases are currently arbitrary - we cannot determine which phase is red/white/blue. For all single phase installations the data will be available on phase a.

type
string
in
query
maxAge

The maximum age of the data that should be considered "latest" in seconds

type
integer 30
in
query
format

The format you which to retreive the results, either powerstation or nodes

type
string , x ∈ { powerstation (default) , nodes }
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
By powerstation
{
  "data": [
    {
      "meterPower{a}": 0.3806250010513597
    },
    {
      "meterPower{b}": 0.3849693243306107
    },
    {
      "meterVoltage": 245.38573839726075
    }
  ],
  "status": "OK"
}
By nodes
{
  "data": [
    {
      "meterPower{a}": {
        "d4c58e243e694bba9e57cbdf42970faf": 0.3857383972607584,
        "e720e221204149ec9fa172583bcf4258": 0.3580208346247673
      }
    },
    {
      "meterPower{b}": {
        "d4c58e243e694bba9e57cbdf42970faf": 0.3806250010513597,
        "e720e221204149ec9fa172583bcf4258": 0.3580208346247673
      }
    },
    {
      "meterVoltage": {
        "d4c58e243e694bba9e57cbdf42970faf": 244.38062500105136,
        "e720e221204149ec9fa172583bcf4258": 245.3849693243306
      }
    }
  ],
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Fleet Data - Downsampled

GET /api/data

Return stored metrics for the entire fleet by downsampling.

metrics

This returns downsampled data of metrics for this powerstation.

Timestamps in the response refer to the start of the period.

The metrics to retreive as a comma separated list of any combination of the following:

  • meterVoltage - The average voltage (V) across all phases as measured at the meter/grid
  • meterFrequence - The average frequency (Hz) across all phases as measured at the meter/grid
  • meterPower - The total (sum) real power (kW) across all phases as measured at the meter/grid
  • meterReactivePower - The total (sum) reactive power (var) across all phases as measure at the meter/grid
  • solarPower - The total (sum) real power (kW) across all solar phases being generated by the PV array
  • solarReactivePower - The total (sum) reactive power (var) across all solar phases being generated by the PV array
  • remainingCharge - The total (sum) remaining charge (W) of the all batteries attached to this system
  • batteryPower - The total (sum) real power (kW) measured at the battery of all batteries attached to this system
  • inverterReactivePower - The total (sum) reactive power (var) measured at the inverter
  • inverterApparentPower - The total (sum) apparent power (kW) measured at the inverter
  • meterCurrent - The total (sum) current (Amp) measured at the meter/grid

All real power measurements follow a sink convention, while all reactive power measurements follow a source convention. Apparent power is always positive.

Phase suffixes may be used on the following metrics: meterVoltage, meterFrequency, meterPower, meterReactivePower, solarPower, solarReactivePower.

Please note that phases are currently arbitrary - we cannot determine which phase is red/white/blue. For all single phase installations the data will be available on phase a.

type
string
in
query
start

The start timestamp of the period of data you wish to retreive

type
integer now - 1hour
in
query
end

The end timestamp of the period of data you wish to retreive

type
integer now
in
query
interval

The downsampling interval in seconds

type
integer 3600 (1 hour)
in
query
fill

The fill policy to use for empty values. By default any empty values for a deployment (i.e. a missing chuck of data) are ommitted. Specify fill=null to return all times with null values if the data is missing. Only null is supported.

type
string , x ∈ { [object Object] }
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
data
[
  {
    "meterPower": {
      "d4c58e243e694bba9e57cbdf42970faf": {
        "1505109600": 0.3857383972607584,
        "1505111400": 0.3806250010513597
      },
      "e720e221204149ec9fa172583bcf4258": {
        "1505109600": 0.3849693243306107,
        "1505111400": 0.3580208346247673
      }
    }
  },
  {
    "meterVoltage": {
      "d4c58e243e694bba9e57cbdf42970faf": {
        "1505109600": 244.38573839726075,
        "1505111400": 244.38062500105136
      },
      "e720e221204149ec9fa172583bcf4258": {
        "1505109600": 245.3849693243306,
        "1505111400": 245.35802083462477
      }
    }
  }
]
status
"OK"
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

All Assets

GET /api/assets

Returns a list of assets associated with the currently authenticated user's organisation.

200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": [
    {
      "id": "599ce96fceba40bba8afc36f177c1e98",
      "name": "First Asset Example"
    },
    {
      "id": "0796a71c54524c05b7af503196994c34",
      "name": "Second Asset Example"
    }
  ]
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Get Single Asset

GET /api/assets/{assetId}

Returns the details of the asset with the supplied UID.

assetId

The ID of the asset.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": [
    {
      "id": "599ce96fceba40bba8afc36f177c1e98",
      "name": "First Asset Example"
    }
  ]
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Data - Downsampled

GET /api/assets/{assetId}/data

Return stored metrics for this asset by downsampling.

assetId

The ID of the asset.

type
string
in
path
metrics

This returns downsampled data of metrics for this asset.

Timestamps in the response refer to the start of the period.

The metrics to retreive as a comma separated list of any combination of the following:

  • current
  • incomingVoltage
  • upstreamVoltage
  • downstreamVoltage
  • tapPosition
  • apparentPower
  • activePower
  • mainsVoltage
  • counter

You may also request the data to be split by phases by adding the phase letter after the metric name, for example current{r} (for phase=red). These can be combined to request multiple phases, for example current{r|w} (both red and white). Phase pairs can also be specified, for example mainsVoltage{br} or mainsVoltage{br|wb}. Or you can request all phases with an asterix, for example current{*}. If a phase is specified the above average/sum aggregation will not be applied and instead you will get back the value for just the specified phase(s).

The counter metric has two types - counter{increment} and counter{decrement}. These values represent the change increment or decrement respectively to the overall count, but when this type is omitted it will return the net change for the time period. For instance, if at timestamp 1512080248 the value was 4, and at 1512080276 the value was -2 then the data returned over this period will be the sum - in this case, 2.

Phase suffixes may be used on the following metrics: current, incomingVoltage, mainsVoltage

type
string
in
query
start

The start timestamp of the period of data you wish to retreive

type
integer now - 1hour
in
query
end

The end timestamp of the period of data you wish to retreive

type
integer now
in
query
interval

The downsampling interval in seconds

type
integer 3600 (1 hour)
in
query
fill

The fill policy to use for empty values. By default any empty values for an asset (i.e. a missing chuck of data) are ommitted. Specify fill=null to return all times with null values if the data is missing. Only null is supported.

type
string , x ∈ { [object Object] }
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
data
[
  {
    "current{r}": {
      "1505109600": 0.3857383972607584,
      "1505111400": 0.3806250010513597
    }
  },
  {
    "current{w}": {
      "1505109600": 0.3849693243306107,
      "1505111400": 0.3857383972607584
    }
  },
  {
    "current{b}": {
      "1505109600": 244.3849693243306,
      "1505111400": 245.38573839726075
    }
  },
  {
    "mainsVoltage{br|rw}": {
      "1505109600": 244.3849693243306,
      "1505111400": 245.38573839726075
    }
  }
]
status
"OK"
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Data - Raw

GET /api/assets/{assetId}/data/raw

Return stored metrics for this asset without applying any downsampling.

assetId

The ID of the asset.

type
string
in
path
metrics

This returns raw data of metrics for this asset as collected by each device.

Timestamps in the response refer to the time at which the data was sampled.

No guarantees can be made about aligned data. e.g. current may be collected at slightly different times per phases, and upstreamVoltage might be collected at a different time than downstreamVoltage.

The metrics to retreive as a comma separated list of any combination of the following:

  • current
  • incomingVoltage
  • upstreamVoltage
  • downstreamVoltage
  • tapPosition
  • apparentPower
  • activePower
  • mainsVoltage
  • counter

You may also request the data to be split by phases by adding the phase letter after the metric name, for example current{r} (for phase=red). These can be combined to request multiple phases, for example current{r|w} (both red and white). Phase pairs can also be specified, for example mainsVoltage{br} or mainsVoltage{br|wb}. Or you can request all phases with an asterix, for example current{*}. If a phase is specified the above average/sum aggregation will not be applied and instead you will get back the value for just the specified phase(s).

The counter metric has two types - counter{increment} and counter{decrement}. These values represent the change increment or decrement respectively to the overall count, but when this type is omitted it will return the net change for the time period. For instance, if at timestamp 1512080248 the value was 4, and at 1512080276 the value was -2 then the data returned over this period will be the sum - in this case, 2.

Phase suffixes may be used on the following metrics: current, incomingVoltage, mainsVoltage

type
string
in
query
start

The start timestamp of the period of data you wish to retreive

type
integer now - 1hour
in
query
end

The end timestamp of the period of data you wish to retreive

type
integer now
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
data
[
  {
    "current{r}": {
      "1505108933": 0.3857383972607584,
      "1505108937": 0.3806250010513597
    }
  },
  {
    "current{b}": {
      "1505108944": 0.3849693243306107
    }
  },
  {
    "apparentPower": {
      "1505108933": 243.3849693243306,
      "1505108937": 244.3849693243306,
      "1505108941": 245.38573839726075
    }
  }
]
status
"OK"
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Create Asset Data

POST /api/assets/{assetId}/data/raw

Provide data pertaining to a particular asset.

The data to provide. If existing timestamps are specified then the data will be overwritten. if data is posted for the counter{decrement} metric then this value will be saved as a negative number, regardless of sign provided.

data: object

The data to be provided for an asset, including metric name, timestamp and value.

assetId

The ID of the asset.

type
string
in
path
Request Example
{
  "data": [
    {
      "current": {
        "1511752328": 200,
        "1511752335": 205,
        "1511752360": 203
      }
    },
    {
      "mainsVoltage": {
        "1511752328": 240,
        "1511752330": 241
      }
    }
  ]
}
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
data
[
  {
    "current": {
      "1511752328": 200,
      "1511752335": 205,
      "1511752360": 203
    }
  },
  {
    "mainsVoltage": {
      "1511752328": 240,
      "1511752330": 241
    }
  }
]
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Data - Latest

GET /api/assets/{assetId}/data/latest

Returns the latest value of the metrics for the asset up to a maximum age of data.

assetId

The ID of the asset.

type
string
in
path
metrics

This returns the single, most recent (up to a given max age) data point we have for each metric.

No timestamps are given for this data but you can be sure that no data point will be older than the maxAge query parameter. If you require specific timestamps please consider using the /data or /data/raw end points.

The metrics to retreive as a comma separated list of any combination of the following:

  • current
  • incomingVoltage
  • upstreamVoltage
  • downstreamVoltage
  • tapPosition
  • apparentPower
  • activePower
  • mainsVoltage
  • counter

You may also request the data to be split by phases by adding the phase letter after the metric name, for example current{r} (for phase=red). These can be combined to request multiple phases, for example current{r|w} (both red and white). Phase pairs can also be specified, for example mainsVoltage{br} or mainsVoltage{br|wb}. Or you can request all phases with an asterix, for example current{*}. If a phase is specified the above average/sum aggregation will not be applied and instead you will get back the value for just the specified phase(s).

Phase suffixes may be used on the following metrics: current, incomingVoltage, mainsVoltage

type
string
in
query
maxAge

The maximum age of the data that should be considered "latest" in seconds

type
integer 30
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
data
[
  {
    "current{r}": 0.3806250010513597
  },
  {
    "current{b}": 0.3849693243306107
  },
  {
    "upstreamVolts": 245.38573839726075
  }
]
status
"OK"
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Get curtailment constraints

GET /api/constraints/curtailments

Return the constraints of a Virtual Power Plant given a set of query parameters. The parameters correspond to fields to specify when creating a curtailment. This route should be used before executing a curtailment in order to determine the capabilities of that particular Virtual Power Plant.

powerstation

The ID of the power station being curtailed.

type
string
in
query
duration

The duration of the curtailment in seconds.

type
number
in
query
200 OK

OK

Response Example (200 OK)
{
  "data": {
    "realPowerP": 55
  }
}

All Curtailments

GET /api/curtailments

Returns a list of export curtailments. Use of this route without limit/offset parameters is deprecated.

filter

A filter to apply to the returned export curtailments. One of UPCOMING, COMPLETED, INPROGRESS, CANCELLED. Leave empty to view all.

type
string , x ∈ { UPCOMING , COMPLETED , INPROGRESS }
in
query
offset

An integer to offset the results by - to use for paging through the total results. If limit is specified, this is 0 by default.

type
number
in
query
limit

An integer to limit the results by - to use for paging through the total results. By default this is 100.

type
number
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": [
    {
      "component": "solar",
      "id": "8380ecf0-e8b9-42c7-8bb5-2e75d13bf484",
      "powerstation": "05bf160741c343ce869d0e9ec7b2ad88",
      "request": {
        "duration": 1800,
        "realPowerP": -1.4,
        "startTime": 1503026870
      },
      "state": "COMPLETED"
    },
    {
      "component": "solar",
      "id": "b2588e2c-5675-48aa-a835-9c887b52b16a",
      "powerstation": null,
      "request": {
        "duration": 600,
        "realPowerP": -1.4,
        "startTime": 1503452085
      },
      "state": "COMPLETED"
    }
  ]
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Create Curtailment

POST /api/curtailments

Create an export curtailment request.

The curtailment to create.

component: string , x ∈ { grid , solar }

The component that is being curtailed.

powerstation: string

The ID of the power station being curtailed.

realPowerP: number

The real power limit to which the aggregated components are being curtailed (kW). This value must always be negative.

startTime: number

A unix timestamp of the start time of the curtailment.

duration: number

The duration of the curtailment in seconds.

Request Example
{
  "component": "grid",
  "powerstation": "cd0412cbc2e444d7a170520ba284091a",
  "realPowerP": -1,
  "startTime": 1504549112,
  "duration": 21600
}
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "component": "grid",
  "powerstation": "cd0412cbc2e444d7a170520ba284091a",
  "realPowerP": -1,
  "startTime": 1504549112,
  "duration": 1505549112
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Get Single Curtailment

GET /api/curtailments/{curtailmentId}

Returns detailed data about the export curtailment with the supplied curtailment ID.

curtailmentId

The ID of the export curtailment.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "component": "grid",
    "createdAt": 1504140351,
    "currentResponse": {
      "deploymentsAccepted": 1
    },
    "id": "aa2df12e-d628-45d6-8a90-2d9b6d6137aa",
    "powerstation": "05bf160741c343ce869d0e9ec7b2ad88",
    "request": {
      "deploymentsRequested": 1,
      "duration": 21600,
      "realPowerP": -1,
      "startTime": 1504549112
    },
    "nodes": [
      "d4c58e243e694bba9e57cbdf42970faf",
      "e720e221204149ec9fa172583bcf4258"
    ],
    "state": "UPCOMING"
  }
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Cancel Curtailment

POST /api/curtailments/{curtailmentId}/cancel

Cancels a scheduled curtailment

curtailmentId

The ID of the export curtailment.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "status": "OK"
  }
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Get Curtailment Setpoint

GET /api/curtailments/setpoint

Get the current setpoint for default curtailment behaviour.

powerstationId

The ID of the powerstation to query.

type
string
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

404 Not Found

A curtailment setpoint for the requested powerstation cannot be found. Either the powerstation has not been created or it is has not yet received a valid setpoint.

Response Example (200 OK)
{
  "data": {
    "powerstation": "eb014defdded417e8b6a9d7ed078cedf",
    "meterRealPowerP": 0,
    "inverterRealPowerP": -24
  }
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}
Response Example (404 Not Found)
{
  "message": "No setpoint for powerstation '6442adf69e004405808542b687bcf494' found.",
  "status": "NOT FOUND"
}

Change Curtailment Setpoint

POST /api/curtailments/setpoint

Change the setpoint for default curtailment behaviour.

The updated curtailment setpoint.

powerstation: string

The ID of the power station being updated.

meterRealPowerP: number

The real power limit to which the aggregated grid output is being curtailed by default (kW). A null entry removes any constraint from the component. Other values must always be negative.

inverterRealPowerP: number

The real power limit to which the aggregated inverter output is being curtailed by default (kW). A null entry removes any constraint from the component. Other values must always be negative.

Request Example
{
  "powerstation": "cd0412cbc2e444d7a170520ba284091a",
  "meterRealPowerP": 0,
  "inverterRealPowerP": -1.3
}
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "status": "OK"
  }
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Curtailment Heartbeat

POST /api/curtailments/heartbeat

Send a curtailment heartbeat to a powerstation. Nodes receiving a heartbeat will return to their default curtailment behaviour if the heartbeat is lost.

The updated curtailment setpoint.

powerstation: string

The ID of the power station being heartbeated.

Request Example
{
  "powerstation": "cd0412cbc2e444d7a170520ba284091a"
}
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "status": "OK"
  }
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

All Dispatches

GET /api/dispatches

Return all dispatches/support requests with their basic details. Use of this route without offset/limit parameters is deprecated.

filter

A filter to apply to the returned dispatches/support requests. One of UPCOMING, COMPLETED, INPROGRESS or left empty to view all.

type
string , x ∈ { UPCOMING , COMPLETED , INPROGRESS }
in
query
offset

An integer to offset the results by - to use for paging through the total results. By default this is 0

type
number
in
query
limit

An integer to limit the results by - to use for paging through the total results. By default this is 100.

type
number
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": [
    {
      "component": "battery",
      "id": "bf6e5c09-9e25-4ff0-a2af-d81185e4abc4",
      "powerstation": "05bf160741c343ce869d0e9ec7b2ad88",
      "request": {
        "duration": 3600,
        "powerFactor": 0.7,
        "powerFactorLeadLag": "LEADING",
        "realPowerP": 38.2,
        "startTime": 1497336240
      },
      "state": "COMPLETED"
    }
  ]
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Create Dispatch

POST /api/dispatches

Creates a new dispatch with the specified details

The dispatch to create.

powerstation: string

The id of the powerstation to dispatch

startTime: integer

The unix timestamp at which this dispatch should start.

duration: integer

The duration of the request in seconds.

realPowerP: number

The amount of real power to be dispatched in kW

powerFactor: number

The requested power factor for this dispatch/support request. This is only accepted if your account has been enabled for power factor/voltage control.

powerFactorLeadLag: string , x ∈ { LEADING , LAGGING }

Used only when power_factor is also present and indicates if the specified power factor is LEADING or LAGGING. This is only accepted if your account has been enabled for power factor/voltage control.

Request Example
{
  "powerstation": "57dfc43d3b9a4c99b05c7794f5d6abb3",
  "startTime": 1505214000,
  "duration": 28800,
  "realPowerP": 2.6,
  "powerFactor": 0.7,
  "powerFactorLeadLag": "LAGGING"
}
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "id": "0c127211-bc31-4d11-8f32-19008c75cf80",
    "status": "OK"
  }
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Get Single Dispatch

GET /api/dispatches/{dispatchId}

Return detailed data about a specific dispatch/support request as specified by the dispatchId in the URL.

dispatchId

The ID of the dispatch/support request for which to fetch details.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": [
    {
      "component": "battery",
      "createdAt": 1497336240,
      "currentResponse": {
        "deploymentsAccepted": 0,
        "deploymentsResponded": 0,
        "powerFactor": 0.7,
        "powerFactorLeadLag": "LEADING",
        "realPowerP": 38.2,
        "rejectedRealPowerP": 0.21
      },
      "id": "bf6e5c09-9e25-4ff0-a2af-d81185e4abc4",
      "powerstation": "05bf160741c343ce869d0e9ec7b2ad88",
      "prediction": {
        "data": [
          -5.960000001858923e-8,
          -5.960000001858923e-8,
          -5.960000001858923e-8,
          -5.960000001858923e-8,
          -2.97999999121501e-8,
          -8.94000000695172e-8,
          -1.49000000115862e-7,
          -2.98000000231724e-8,
          -1.489999998938174e-7,
          -2.98000000231724e-8,
          -8.93999999584949e-8,
          -2.9700000014898364e-8,
          -8.940000001400605e-8
        ],
        "deltaSeconds": 1800,
        "startTime": 1505181600
      },
      "request": {
        "deploymentsRequested": 6,
        "duration": 3600,
        "powerFactor": 0.7,
        "powerFactorLeadLag": "LEADING",
        "realPowerP": 38.2,
        "startTime": 1497336240
      },
      "nodes": [
        "f7b05c5632334403ac0895959f8d00e7",
        "4f0cf230c728478da0822aa7f2d1f9ef",
        "56af6a12ae9049298aaa38cde5781145",
        "3b904d6c1a8549f3adc0b0dd4a7e9fc6",
        "50cafb993f54499cb03396f236dfee6d",
        "f93c98b6df01472283bc9fbb5d7a6d8d",
        "4858794e8ab3410cb523fcf03e4cc573"
      ],
      "state": "COMPLETED"
    }
  ]
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Assign customers to a capability

POST /api/capabilities

Takes a list of customers and assigns them to a capability. Returns a list of changes that have been applied and/or a list or errors.

Request Example
[
  {
    "customers": [
      {
        "nmi": "11000000001",
        "capabilities": [
          {
            "name": "Hoodwink Network Support",
            "startDate": "2018-01-01"
          }
        ],
        "tariff": [
          {
            "code": "HOODWINK_PLAN",
            "startDate": "2018-01-01",
            "discount": 0
          }
        ]
      },
      {
        "nmi": "10000000001",
        "capabilities": [
          {
            "name": "Jensen Network Support",
            "startDate": "2017-01-01"
          }
        ]
      }
    ]
  }
]
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": [
    {
      "errors": [
        {
          "message": "Effective start date must be on or after the starting date of the capability - 2018-01-01",
          "errorCode": "invalid_capability",
          "customers": [
            "12345123451",
            "110000012",
            "1000000001"
          ]
        },
        {
          "message": "Customer already assigned to another retailer",
          "customers": [
            "12345123451"
          ]
        },
        {
          "message": "Must have a capability code",
          "customers": [
            "12345123451"
          ]
        }
      ]
    },
    {
      "warnings": [
        {
          "message": "Customer is not yet commissioned",
          "errorCode": "not_commissioned_customer",
          "customers": [
            "1100000006"
          ]
        }
      ],
      "success": [
        "1100000001",
        "1100000002",
        "1100000003",
        "1100000004",
        "1100000005",
        "1100000006"
      ]
    }
  ]
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Retailer

Indicates this API end-point is available to retailer organisations.

All Nodes

GET /api/nodes

Return basic information and URLs on how to obtain more information about nodes. Each URL can also be expanded in place using the expand URL parameter

expand

Any property that contains a URL path rather than data can be expanded in place using the expand query string parameter. This is a CSV list of each property name which should be expanded. e.g. ?expand=network,address

type
string
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
Default response
{
  "data": [
    {
      "address": "/api/nodes/bdeea25eb01b460da11e9208007ec2e5/address",
      "id": "bdeea25eb01b460da11e9208007ec2e5",
      "network": "/api/nodes/bdeea25eb01b460da11e9208007ec2e5/network",
      "status": "/api/nodes/bdeea25eb01b460da11e9208007ec2e5/status",
      "namePlate": "/api/nodes/bdeea25eb01b460da11e9208007ec2e5/namePlate"
    },
    {
      "address\"": "/api/nodes/521444180bee43bda8e51ffe8a64c9bc/address",
      "id": "521444180bee43bda8e51ffe8a64c9bc",
      "network": "/api/nodes/521444180bee43bda8e51ffe8a64c9bc/network",
      "status": "/api/nodes/521444180bee43bda8e51ffe8a64c9bc/status",
      "namePlate": "/api/nodes/521444180bee43bda8e51ffe8a64c9bc/namePlate"
    }
  ],
  "status": "OK"
}
Fully Expanded Response (?expand=address,network,status,system)
{
  "data": [
    {
      "address": {
        "city": "Canberra",
        "country": "Australia",
        "lat": -35.333502,
        "lng": 149.170508,
        "postcode": "2609",
        "state": "ACT",
        "street": "Yallourn Street",
        "street_number": "17/2"
      },
      "id": "bdeea25eb01b460da11e9208007ec2e5",
      "network": {
        "nmi": "10000200030"
      },
      "status": {
        "operationalStatus": {
          "lastTimestamp": 1505695466,
          "lastValue": 0
        },
        "ping": {
          "lastTimestamp": 1505695468
        }
      },
      "namePlate": {
        "batteryCapacity": 6.4,
        "inverterPower": 3,
        "batteryPower": 2
      }
    }
  ],
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Address/Location Info

GET /api/nodes/{nodeId}/address

Return full address and lat/long information of a node.

nodeId

The ID of the node.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "city": "Turner",
    "country": "Australia",
    "lat": -35.26671,
    "lng": 149.12879,
    "postcode": "2612",
    "state": "ACT",
    "street": "Macleay St",
    "street_number": "52"
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Network Info

GET /api/nodes/{nodeId}/network

Returns the NMI for this node.

nodeId

The ID of the node.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "nmi": 4102000000
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Operational Status

GET /api/nodes/{nodeId}/status

Returns the latest operational status information for this node.

nodeId

The ID of the node.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "operationalStatus": {
      "lastTimestamp": 1505189841,
      "lastValue": 0
    },
    "ping": {
      "lastTimestamp": 1505189845
    }
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Name Plate

GET /api/nodes/{nodeId}/namePlate

Returns information about the energy system attached to this node.

nodeId

The ID of the node.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "batteryCapacity": 6.4,
    "inverterPower": 3,
    "batteryPower": 2
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Name Plate

GET /api/nodes/{nodeId}/events

Returns events and changes in state to this node sorted by time descending. This will only return the first 100 results by default, as the number of results can be quite large. Therefore you must use the limit and offset parameters as specified below to retrieve either all results, or a page at a time. This endpoint only returns basic information; more details can be retrieved from the endpoint specific to that event type, e.g. from /api/dispatches

nodeId

The ID of the node.

type
string
in
path
offset

An integer to offset the results by - to use for paging through the total results. If limit is specified, this is set to 0 by default.

type
number
in
query
limit

An integer to limit the results by - to use for paging through the total results. By default this is 100, or the maximum number of results (whichever is lower).

type
number
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": [
    {
      "description": "Network Support",
      "duration": 3600,
      "eventType": "DISPATCH",
      "id": "b02067ae-d274-4d75-a00b-81a78184e987",
      "ts": 1523430000
    },
    {
      "description": "Network Support",
      "duration": 3600,
      "eventType": "DISPATCH",
      "id": "64948b88-7af5-49a7-9b04-e0055419eaf8",
      "ts": 1517547600
    },
    {
      "description": "The Reposit System was commissioned.",
      "eventType": "COMMISSIONED",
      "ts": 1511204358
    }
  ],
  "meta": {
    "count": 6,
    "next": null,
    "previous": "https://marketapi.repositpower.com/api/nodes/5b0a63855f2f4f819ccda226ca9d14e8/events?limit=3&offset=0"
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

All Power Stations

GET /api/powerstations

Returns a list of power stations associated with the currently authenticated user's organisation.

includePredictions

Optional. Set to true to include powerstation predictions in the response.

type
string , x ∈ { true }
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": [
    {
      "description": null,
      "id": "e7430ccb21644d7b9e0a443933f25c7f",
      "name": "New Powerstation on dmarket",
      "namePlate": {
        "capacity": 17.1,
        "power": 13
      },
      "nodes": [
        "d4c58e243e694bba9e57cbdf42970faf",
        "5320123eac5e4fd5baaea0bf442659bb"
      ]
    },
    {
      "description": "A sample powerstation for dispatches",
      "id": "3561817084be49c0b77d7d65903792ff",
      "name": "Sample One",
      "namePlate": {
        "batteryCapacity": 29,
        "batteryPower": 16.3,
        "inverterPower": 18.5
      },
      "nodes": [
        "5320123eac5e4fd5baaea0bf442659bb",
        "e720e221204149ec9fa172583bcf4258",
        "d4c58e243e694bba9e57cbdf42970faf"
      ]
    }
  ],
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Create Power Station

POST /api/powerstations

Creates a new powerstation and returns its details.

The powerstation to create.

name: string

A recognisable name to give this powerstation.

description: string

An option description of this powerstation

type: string , x ∈ { STATIC (default) , DYNAMIC }

The type of powerstation, either STATIC for a specified list of node IDs or DYNAMIC to suply a filter. When using DYNAMIC ans supplying a filter the powerstation will automatically add any nodes that match the filter criteria.

nodes: string[]

An array of node IDs that belong to this powerstation if the powerstation type is STATIC. Otherwise this must be null

string
filters: object

When specifying a DYNAMIC powerstation type you must also supply the filters that this powerstation is built from.

postcodes: string[]

An array of postcodes that a node can be in for it to be included in this powerstation.

string
state: string , x ∈ { ACT , NSW , NT , QLD , SA , TAS , VIC , WA }

The state or territory that a node must be in for it to be included in this powerstation.

Request Example
{
  "name": "My First Powerstation",
  "nodes": [
    "f7b05c5632334403ac0895959f8d00e7",
    "4f0cf230c728478da0822aa7f2d1f9ef",
    "56af6a12ae9049298aaa38cde5781145"
  ]
}
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "description": null,
    "id": "e7430ccb21644d7b9e0a443933f25c7f",
    "name": "My First Powerstation",
    "namePlate": {
      "batteryCapacity": 17.1,
      "batteryPower": 11,
      "inverterPower": 13
    },
    "nodes": [
      "f7b05c5632334403ac0895959f8d00e7",
      "4f0cf230c728478da0822aa7f2d1f9ef",
      "56af6a12ae9049298aaa38cde5781145"
    ]
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Get Single Power Station

GET /api/powerstations/{powerstationId}

Returns the details of the power station with the supplied UID.

powerstationId

The ID of the power station.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

404 Not Found

Invalid powerstation UID specified.

Response Example (200 OK)
{
  "data": {
    "description": null,
    "id": "e7430ccb21644d7b9e0a443933f25c7f",
    "name": "New Powerstation on dmarket",
    "namePlate": {
      "capacity": 17.1,
      "power": 13
    },
    "nodes": [
      "d4c58e243e694bba9e57cbdf42970faf",
      "5320123eac5e4fd5baaea0bf442659bb"
    ]
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}
Response Example (404 Not Found)
{
  "error": "Powerstation e7430ccb21644d7b9e0a443933f25c7f not found",
  "status": "ERROR"
}

Update Power Station

PUT /api/powerstations/{powerstationId}

Updates an existing powerstation specified by its id and returns its details.

The powerstation to update.

name: string
description: string

An option description of this powerstation

nodes: string[]

A list of nodes IDs that make up this powerstation.

string
powerstationId

The ID of the power station.

type
string
in
path
Request Example
{
  "name": "My First Powerstation",
  "nodes": [
    "f7b05c5632334403ac0895959f8d00e7",
    "4f0cf230c728478da0822aa7f2d1f9ef",
    "56af6a12ae9049298aaa38cde5781145"
  ]
}
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

404 Not Found

Invalid powerstation ID specified.

Response Example (200 OK)
{
  "data": {
    "description": null,
    "id": "e7430ccb21644d7b9e0a443933f25c7f",
    "name": "My First Powerstation",
    "namePlate": {
      "capacity": 17.1,
      "power": 13
    },
    "nodes": [
      "f7b05c5632334403ac0895959f8d00e7",
      "4f0cf230c728478da0822aa7f2d1f9ef",
      "56af6a12ae9049298aaa38cde5781145"
    ]
  },
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}
Response Example (404 Not Found)
{
  "error": "Powerstation e7430ccb21644d7b9e0a443933f25c7f not found",
  "status": "ERROR"
}

Delete Power Station

DELETE /api/powerstations/{powerstationId}

Deletes a powerstation with with the supplied ID.

powerstationId

The ID of the power station.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

404 Not Found

Invalid powerstation ID specified.

Response Example (200 OK)
{
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}
Response Example (404 Not Found)
{
  "error": "Powerstation e7430ccb21644d7b9e0a443933f25c7f not found",
  "status": "ERROR"
}

Data - Downsampled

GET /api/powerstations/{powerstationId}/data

Return stored metrics for this powerstation or its nodes by downsampling.

powerstationId

The ID of the power station.

type
string
in
path
metrics

This returns downsampled data of metrics for this powerstation.

Timestamps in the response refer to the start of the period.

The metrics to retreive as a comma separated list of any combination of the following:

  • meterVoltage - The average voltage (V) across all phases as measured at the meter/grid
  • meterFrequence - The average frequency (Hz) across all phases as measured at the meter/grid
  • meterPower - The total (sum) real power (kW) across all phases as measured at the meter/grid
  • meterReactivePower - The total (sum) reactive power (var) across all phases as measure at the meter/grid
  • solarPower - The total (sum) real power (kW) across all solar phases being generated by the PV array
  • solarReactivePower - The total (sum) reactive power (var) across all solar phases being generated by the PV array
  • remainingCharge - The total (sum) remaining charge (W) of the all batteries attached to this system
  • batteryPower - The total (sum) real power (kW) measured at the battery of all batteries attached to this system
  • inverterReactivePower - The total (sum) reactive power (var) measured at the inverter
  • inverterApparentPower - The total (sum) apparent power (kW) measured at the inverter
  • meterCurrent - The total (sum) current (Amp) measured at the meter/grid

All real power measurements follow a sink convention, while all reactive power measurements follow a source convention. Apparent power is always positive.

If ?format=nodes is specified then you may also request the data to be split by phases by adding a phase letter after the metric name, for example meterVoltage{a}. These can be combined to request multiple phases, for example meterVoltage{a|b}. Or you can request all phases with an asterix, for example meterVoltage{*}. Note that meterVoltage{*} is equivalent to meterVoltage{a|b|c}. If a phase is specified the above average/sum aggregation will not be applied and instead you will get back the value for just the specified phase(s).

Phase suffixes may be used on the following metrics: meterVoltage, meterFrequency, meterPower, meterReactivePower, solarPower, solarReactivePower.

Please note that phases are currently arbitrary - we cannot determine which phase is red/white/blue. For all single phase installations the data will be available on phase a.

type
string
in
query
start

The start timestamp of the period of data you wish to retreive

type
integer now - 1hour
in
query
end

The end timestamp of the period of data you wish to retreive

type
integer now
in
query
interval

The downsampling interval in seconds

type
integer 3600 (1 hour)
in
query
format

The format you which to retreive the results, either powerstation or nodes

type
string , x ∈ { powerstation (default) , nodes }
in
query
fill

The fill policy to use for empty values. By default any empty values for a deployment (i.e. a missing chuck of data) are ommitted. Specify fill=null to return all times with null values if the data is missing. Only null is supported.

type
string , x ∈ { [object Object] }
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
By powerstation
{
  "data": [
    {
      "meterPower{a}": {
        "1505109600": 0.3857383972607584,
        "1505111400": 0.3806250010513597
      }
    },
    {
      "meterPower{b}": {
        "1505109600": 0.3849693243306107,
        "1505111400": 0.3857383972607584
      }
    },
    {
      "meterVoltage": {
        "1505109600": 244.3849693243306,
        "1505111400": 245.38573839726075
      }
    }
  ],
  "status": "OK"
}
By nodes
{
  "data": [
    {
      "meterPower{a}": {
        "d4c58e243e694bba9e57cbdf42970faf": {
          "1505109600": 0.3857383972607584,
          "1505111400": 0.3806250010513597
        },
        "e720e221204149ec9fa172583bcf4258": {
          "1505109600": 0.3849693243306107,
          "1505111400": 0.3580208346247673
        }
      }
    },
    {
      "meterPower{b}": {
        "d4c58e243e694bba9e57cbdf42970faf": {
          "1505109600": 0.3857383972607584,
          "1505111400": 0.3806250010513597
        },
        "e720e221204149ec9fa172583bcf4258": {
          "1505109600": 0.3849693243306107,
          "1505111400": 0.3580208346247673
        }
      }
    },
    {
      "meterVoltage": {
        "d4c58e243e694bba9e57cbdf42970faf": {
          "1505109600": 244.38573839726075,
          "1505111400": 244.38062500105136
        },
        "e720e221204149ec9fa172583bcf4258": {
          "1505109600": 245.3849693243306,
          "1505111400": 245.35802083462477
        }
      }
    }
  ],
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Data - Raw

GET /api/powerstations/{powerstationId}/data/raw

Return stored metrics for this powerstation or its nodes without applying any downsampling.

powerstationId

The ID of the power station.

type
string
in
path
metrics

This returns raw data of metrics for this powerstation as collected by each device.

Timestamps in the response refer to the time at which the data was sampled.

No guarantees can be made about aligned data. e.g. meterPower may be collected at slightly different times per phases, and meterPower might be collected at a different time than meterVoltage.

The metrics to retreive as a comma separated list of any combination of the following:

  • meterVoltage - The average voltage (V) across all phases as measured at the meter/grid
  • meterFrequence - The average frequency (Hz) across all phases as measured at the meter/grid
  • meterPower - The total (sum) real power (kW) across all phases as measured at the meter/grid
  • meterReactivePower - The total (sum) reactive power (var) across all phases as measure at the meter/grid
  • solarPower - The total (sum) real power (kW) across all solar phases being generated by the PV array
  • solarReactivePower - The total (sum) reactive power (var) across all solar phases being generated by the PV array
  • remainingCharge - The total (sum) remaining charge (W) of the all batteries attached to this system
  • batteryPower - The total (sum) real power (kW) measured at the battery of all batteries attached to this system
  • inverterReactivePower - The total (sum) reactive power (var) measured at the inverter
  • inverterApparentPower - The total (sum) apparent power (kW) measured at the inverter
  • meterCurrent - The total (sum) current (Amp) measured at the meter/grid

All real power measurements follow a sink convention, while all reactive power measurements follow a source convention. Apparent power is always positive.

If ?format=nodes is specified then you may also request the data to be split by phases by adding a phase letter after the metric name, for example meterVoltage{a}. These can be combined to request multiple phases, for example meterVoltage{a|b}. Or you can request all phases with an asterix, for example meterVoltage{*}. Note that meterVoltage{*} is equivalent to meterVoltage{a|b|c}. If a phase is specified the above average/sum aggregation will not be applied and instead you will get back the value for just the specified phase(s).

Phase suffixes may be used on the following metrics: meterVoltage, meterFrequency, meterPower, meterReactivePower, solarPower, solarReactivePower.

Please note that phases are currently arbitrary - we cannot determine which phase is red/white/blue. For all single phase installations the data will be available on phase a.

type
string
in
query
start

The start timestamp of the period of data you wish to retreive

type
integer now - 1hour
in
query
end

The end timestamp of the period of data you wish to retreive

type
integer now
in
query
format

The format you which to retreive the results, either powerstation or nodes

type
string , x ∈ { powerstation (default) , nodes }
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
By powerstation
{
  "data": [
    {
      "meterPower{a}": {
        "1505108933": 0.3857383972607584,
        "1505108937": 0.3806250010513597
      }
    },
    {
      "meterPower{b}": {
        "1505108944": 0.3849693243306107
      }
    },
    {
      "meterVoltage": {
        "1505108933": 243.3849693243306,
        "1505108937": 244.3849693243306,
        "1505108941": 245.38573839726075
      }
    }
  ],
  "status": "OK"
}
By nodes
{
  "data": [
    {
      "meterPower{a}": {
        "d4c58e243e694bba9e57cbdf42970faf": {
          "1505108933": 0.3857383972607584,
          "1505108937": 0.3806250010513597
        },
        "e720e221204149ec9fa172583bcf4258": {
          "1505108934": 0.3849693243306107,
          "1505108938": 0.3580208346247673
        }
      }
    },
    {
      "meterPower{b}": {
        "d4c58e243e694bba9e57cbdf42970faf": {
          "1505108933": 0.3857383972607584,
          "1505108937": 0.3806250010513597,
          "1505108941": 0.3806250010513597,
          "1505108943": 0.3806250010513597
        },
        "e720e221204149ec9fa172583bcf4258": {
          "1505108934": 0.3849693243306107,
          "1505108936": 0.3580208346247673,
          "1505108939": 0.3580208346247673
        }
      }
    },
    {
      "meterVoltage": {
        "d4c58e243e694bba9e57cbdf42970faf": {
          "1505108937": 244.38573839726075,
          "1505108940": 244.38062500105136
        },
        "e720e221204149ec9fa172583bcf4258": {
          "1505108937": 245.3849693243306
        }
      }
    }
  ],
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Data - Latest

GET /api/powerstations/{powerstationId}/data/latest

Returns the latest value of the metrics for the powerstation or nodes up to a maximum age of data.

powerstationId

The ID of the power station.

type
string
in
path
metrics

This returns the single, most recent (up to a given max age) data point we have for each metric.

No timestamps are given for this data but you can be sure that no data point will be older than the maxAge query parameter. If you require specific timestamps please consider using the /data or /data/raw end points.

The metrics to retreive as a comma separated list of any combination of the following:

  • meterVoltage - The average voltage (V) across all phases as measured at the meter/grid
  • meterFrequence - The average frequency (Hz) across all phases as measured at the meter/grid
  • meterPower - The total (sum) real power (kW) across all phases as measured at the meter/grid
  • meterReactivePower - The total (sum) reactive power (var) across all phases as measure at the meter/grid
  • solarPower - The total (sum) real power (kW) across all solar phases being generated by the PV array
  • solarReactivePower - The total (sum) reactive power (var) across all solar phases being generated by the PV array
  • remainingCharge - The total (sum) remaining charge (W) of the all batteries attached to this system
  • batteryPower - The total (sum) real power (kW) measured at the battery of all batteries attached to this system
  • inverterReactivePower - The total (sum) reactive power (var) measured at the inverter
  • inverterApparentPower - The total (sum) apparent power (kW) measured at the inverter
  • meterCurrent - The total (sum) current (Amp) measured at the meter/grid

All real power measurements follow a sink convention, while all reactive power measurements follow a source convention. Apparent power is always positive.

If ?format=nodes is specified then you may also request the data to be split by phases by adding a phase letter after the metric name, for example meterVoltage{a}. These can be combined to request multiple phases, for example meterVoltage{a|b}. Or you can request all phases with an asterix, for example meterVoltage{*}. Note that meterVoltage{*} is equivalent to meterVoltage{a|b|c}. If a phase is specified the above average/sum aggregation will not be applied and instead you will get back the value for just the specified phase(s).

Phase suffixes may be used on the following metrics: meterVoltage, meterFrequency, meterPower, meterReactivePower, solarPower, solarReactivePower.

Please note that phases are currently arbitrary - we cannot determine which phase is red/white/blue. For all single phase installations the data will be available on phase a.

type
string
in
query
maxAge

The maximum age of the data that should be considered "latest" in seconds

type
integer 30
in
query
format

The format you which to retreive the results, either powerstation or nodes

type
string , x ∈ { powerstation (default) , nodes }
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
By powerstation
{
  "data": [
    {
      "meterPower{a}": 0.3806250010513597
    },
    {
      "meterPower{b}": 0.3849693243306107
    },
    {
      "meterVoltage": 245.38573839726075
    }
  ],
  "status": "OK"
}
By nodes
{
  "data": [
    {
      "meterPower{a}": {
        "d4c58e243e694bba9e57cbdf42970faf": 0.3857383972607584,
        "e720e221204149ec9fa172583bcf4258": 0.3580208346247673
      }
    },
    {
      "meterPower{b}": {
        "d4c58e243e694bba9e57cbdf42970faf": 0.3806250010513597,
        "e720e221204149ec9fa172583bcf4258": 0.3580208346247673
      }
    },
    {
      "meterVoltage": {
        "d4c58e243e694bba9e57cbdf42970faf": 244.38062500105136,
        "e720e221204149ec9fa172583bcf4258": 245.3849693243306
      }
    }
  ],
  "status": "OK"
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Fleet Data - Downsampled

GET /api/data

Return stored metrics for the entire fleet by downsampling.

metrics

This returns downsampled data of metrics for this powerstation.

Timestamps in the response refer to the start of the period.

The metrics to retreive as a comma separated list of any combination of the following:

  • meterVoltage - The average voltage (V) across all phases as measured at the meter/grid
  • meterFrequence - The average frequency (Hz) across all phases as measured at the meter/grid
  • meterPower - The total (sum) real power (kW) across all phases as measured at the meter/grid
  • meterReactivePower - The total (sum) reactive power (var) across all phases as measure at the meter/grid
  • solarPower - The total (sum) real power (kW) across all solar phases being generated by the PV array
  • solarReactivePower - The total (sum) reactive power (var) across all solar phases being generated by the PV array
  • remainingCharge - The total (sum) remaining charge (W) of the all batteries attached to this system
  • batteryPower - The total (sum) real power (kW) measured at the battery of all batteries attached to this system
  • inverterReactivePower - The total (sum) reactive power (var) measured at the inverter
  • inverterApparentPower - The total (sum) apparent power (kW) measured at the inverter
  • meterCurrent - The total (sum) current (Amp) measured at the meter/grid

All real power measurements follow a sink convention, while all reactive power measurements follow a source convention. Apparent power is always positive.

Phase suffixes may be used on the following metrics: meterVoltage, meterFrequency, meterPower, meterReactivePower, solarPower, solarReactivePower.

Please note that phases are currently arbitrary - we cannot determine which phase is red/white/blue. For all single phase installations the data will be available on phase a.

type
string
in
query
start

The start timestamp of the period of data you wish to retreive

type
integer now - 1hour
in
query
end

The end timestamp of the period of data you wish to retreive

type
integer now
in
query
interval

The downsampling interval in seconds

type
integer 3600 (1 hour)
in
query
fill

The fill policy to use for empty values. By default any empty values for a deployment (i.e. a missing chuck of data) are ommitted. Specify fill=null to return all times with null values if the data is missing. Only null is supported.

type
string , x ∈ { [object Object] }
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
data
[
  {
    "meterPower": {
      "d4c58e243e694bba9e57cbdf42970faf": {
        "1505109600": 0.3857383972607584,
        "1505111400": 0.3806250010513597
      },
      "e720e221204149ec9fa172583bcf4258": {
        "1505109600": 0.3849693243306107,
        "1505111400": 0.3580208346247673
      }
    }
  },
  {
    "meterVoltage": {
      "d4c58e243e694bba9e57cbdf42970faf": {
        "1505109600": 244.38573839726075,
        "1505111400": 244.38062500105136
      },
      "e720e221204149ec9fa172583bcf4258": {
        "1505109600": 245.3849693243306,
        "1505111400": 245.35802083462477
      }
    }
  }
]
status
"OK"
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Get curtailment constraints

GET /api/constraints/curtailments

Return the constraints of a Virtual Power Plant given a set of query parameters. The parameters correspond to fields to specify when creating a curtailment. This route should be used before executing a curtailment in order to determine the capabilities of that particular Virtual Power Plant.

powerstation

The ID of the power station being curtailed.

type
string
in
query
duration

The duration of the curtailment in seconds.

type
number
in
query
200 OK

OK

Response Example (200 OK)
{
  "data": {
    "realPowerP": 55
  }
}

All Curtailments

GET /api/curtailments

Returns a list of export curtailments. Use of this route without limit/offset parameters is deprecated.

filter

A filter to apply to the returned export curtailments. One of UPCOMING, COMPLETED, INPROGRESS, CANCELLED. Leave empty to view all.

type
string , x ∈ { UPCOMING , COMPLETED , INPROGRESS }
in
query
offset

An integer to offset the results by - to use for paging through the total results. If limit is specified, this is 0 by default.

type
number
in
query
limit

An integer to limit the results by - to use for paging through the total results. By default this is 100.

type
number
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": [
    {
      "component": "solar",
      "id": "8380ecf0-e8b9-42c7-8bb5-2e75d13bf484",
      "powerstation": "05bf160741c343ce869d0e9ec7b2ad88",
      "request": {
        "duration": 1800,
        "realPowerP": -1.4,
        "startTime": 1503026870
      },
      "state": "COMPLETED"
    },
    {
      "component": "solar",
      "id": "b2588e2c-5675-48aa-a835-9c887b52b16a",
      "powerstation": null,
      "request": {
        "duration": 600,
        "realPowerP": -1.4,
        "startTime": 1503452085
      },
      "state": "COMPLETED"
    }
  ]
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Create Curtailment

POST /api/curtailments

Create an export curtailment request.

The curtailment to create.

component: string , x ∈ { grid , solar }

The component that is being curtailed.

powerstation: string

The ID of the power station being curtailed.

realPowerP: number

The real power limit to which the aggregated components are being curtailed (kW). This value must always be negative.

startTime: number

A unix timestamp of the start time of the curtailment.

duration: number

The duration of the curtailment in seconds.

Request Example
{
  "component": "grid",
  "powerstation": "cd0412cbc2e444d7a170520ba284091a",
  "realPowerP": -1,
  "startTime": 1504549112,
  "duration": 21600
}
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "component": "grid",
  "powerstation": "cd0412cbc2e444d7a170520ba284091a",
  "realPowerP": -1,
  "startTime": 1504549112,
  "duration": 1505549112
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Get Single Curtailment

GET /api/curtailments/{curtailmentId}

Returns detailed data about the export curtailment with the supplied curtailment ID.

curtailmentId

The ID of the export curtailment.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "component": "grid",
    "createdAt": 1504140351,
    "currentResponse": {
      "deploymentsAccepted": 1
    },
    "id": "aa2df12e-d628-45d6-8a90-2d9b6d6137aa",
    "powerstation": "05bf160741c343ce869d0e9ec7b2ad88",
    "request": {
      "deploymentsRequested": 1,
      "duration": 21600,
      "realPowerP": -1,
      "startTime": 1504549112
    },
    "nodes": [
      "d4c58e243e694bba9e57cbdf42970faf",
      "e720e221204149ec9fa172583bcf4258"
    ],
    "state": "UPCOMING"
  }
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Cancel Curtailment

POST /api/curtailments/{curtailmentId}/cancel

Cancels a scheduled curtailment

curtailmentId

The ID of the export curtailment.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "status": "OK"
  }
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Get Curtailment Setpoint

GET /api/curtailments/setpoint

Get the current setpoint for default curtailment behaviour.

powerstationId

The ID of the powerstation to query.

type
string
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

404 Not Found

A curtailment setpoint for the requested powerstation cannot be found. Either the powerstation has not been created or it is has not yet received a valid setpoint.

Response Example (200 OK)
{
  "data": {
    "powerstation": "eb014defdded417e8b6a9d7ed078cedf",
    "meterRealPowerP": 0,
    "inverterRealPowerP": -24
  }
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}
Response Example (404 Not Found)
{
  "message": "No setpoint for powerstation '6442adf69e004405808542b687bcf494' found.",
  "status": "NOT FOUND"
}

Change Curtailment Setpoint

POST /api/curtailments/setpoint

Change the setpoint for default curtailment behaviour.

The updated curtailment setpoint.

powerstation: string

The ID of the power station being updated.

meterRealPowerP: number

The real power limit to which the aggregated grid output is being curtailed by default (kW). A null entry removes any constraint from the component. Other values must always be negative.

inverterRealPowerP: number

The real power limit to which the aggregated inverter output is being curtailed by default (kW). A null entry removes any constraint from the component. Other values must always be negative.

Request Example
{
  "powerstation": "cd0412cbc2e444d7a170520ba284091a",
  "meterRealPowerP": 0,
  "inverterRealPowerP": -1.3
}
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "status": "OK"
  }
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Curtailment Heartbeat

POST /api/curtailments/heartbeat

Send a curtailment heartbeat to a powerstation. Nodes receiving a heartbeat will return to their default curtailment behaviour if the heartbeat is lost.

The updated curtailment setpoint.

powerstation: string

The ID of the power station being heartbeated.

Request Example
{
  "powerstation": "cd0412cbc2e444d7a170520ba284091a"
}
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "status": "OK"
  }
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

All Dispatches

GET /api/dispatches

Return all dispatches/support requests with their basic details. Use of this route without offset/limit parameters is deprecated.

filter

A filter to apply to the returned dispatches/support requests. One of UPCOMING, COMPLETED, INPROGRESS or left empty to view all.

type
string , x ∈ { UPCOMING , COMPLETED , INPROGRESS }
in
query
offset

An integer to offset the results by - to use for paging through the total results. By default this is 0

type
number
in
query
limit

An integer to limit the results by - to use for paging through the total results. By default this is 100.

type
number
in
query
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": [
    {
      "component": "battery",
      "id": "bf6e5c09-9e25-4ff0-a2af-d81185e4abc4",
      "powerstation": "05bf160741c343ce869d0e9ec7b2ad88",
      "request": {
        "duration": 3600,
        "powerFactor": 0.7,
        "powerFactorLeadLag": "LEADING",
        "realPowerP": 38.2,
        "startTime": 1497336240
      },
      "state": "COMPLETED"
    }
  ]
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Create Dispatch

POST /api/dispatches

Creates a new dispatch with the specified details

The dispatch to create.

powerstation: string

The id of the powerstation to dispatch

startTime: integer

The unix timestamp at which this dispatch should start.

duration: integer

The duration of the request in seconds.

realPowerP: number

The amount of real power to be dispatched in kW

powerFactor: number

The requested power factor for this dispatch/support request. This is only accepted if your account has been enabled for power factor/voltage control.

powerFactorLeadLag: string , x ∈ { LEADING , LAGGING }

Used only when power_factor is also present and indicates if the specified power factor is LEADING or LAGGING. This is only accepted if your account has been enabled for power factor/voltage control.

Request Example
{
  "powerstation": "57dfc43d3b9a4c99b05c7794f5d6abb3",
  "startTime": 1505214000,
  "duration": 28800,
  "realPowerP": 2.6,
  "powerFactor": 0.7,
  "powerFactorLeadLag": "LAGGING"
}
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": {
    "id": "0c127211-bc31-4d11-8f32-19008c75cf80",
    "status": "OK"
  }
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Get Single Dispatch

GET /api/dispatches/{dispatchId}

Return detailed data about a specific dispatch/support request as specified by the dispatchId in the URL.

dispatchId

The ID of the dispatch/support request for which to fetch details.

type
string
in
path
200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
{
  "data": [
    {
      "component": "battery",
      "createdAt": 1497336240,
      "currentResponse": {
        "deploymentsAccepted": 0,
        "deploymentsResponded": 0,
        "powerFactor": 0.7,
        "powerFactorLeadLag": "LEADING",
        "realPowerP": 38.2,
        "rejectedRealPowerP": 0.21
      },
      "id": "bf6e5c09-9e25-4ff0-a2af-d81185e4abc4",
      "powerstation": "05bf160741c343ce869d0e9ec7b2ad88",
      "prediction": {
        "data": [
          -5.960000001858923e-8,
          -5.960000001858923e-8,
          -5.960000001858923e-8,
          -5.960000001858923e-8,
          -2.97999999121501e-8,
          -8.94000000695172e-8,
          -1.49000000115862e-7,
          -2.98000000231724e-8,
          -1.489999998938174e-7,
          -2.98000000231724e-8,
          -8.93999999584949e-8,
          -2.9700000014898364e-8,
          -8.940000001400605e-8
        ],
        "deltaSeconds": 1800,
        "startTime": 1505181600
      },
      "request": {
        "deploymentsRequested": 6,
        "duration": 3600,
        "powerFactor": 0.7,
        "powerFactorLeadLag": "LEADING",
        "realPowerP": 38.2,
        "startTime": 1497336240
      },
      "nodes": [
        "f7b05c5632334403ac0895959f8d00e7",
        "4f0cf230c728478da0822aa7f2d1f9ef",
        "56af6a12ae9049298aaa38cde5781145",
        "3b904d6c1a8549f3adc0b0dd4a7e9fc6",
        "50cafb993f54499cb03396f236dfee6d",
        "f93c98b6df01472283bc9fbb5d7a6d8d",
        "4858794e8ab3410cb523fcf03e4cc573"
      ],
      "state": "COMPLETED"
    }
  ]
}
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Management

End-points relating to the management of your Reposit Fleet and marketapi account.

View a list of all users assigned to your marketapi account

GET /api/users

Returns a list of users that are associated with your marketapi account. This response may vary depending on the level of permissions you have. Users with the "fleet.my_reposit.users" permission will be able to see contact details for users. Other users will be able to see names and IDs only.

200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
[
  {
    "data": [
      {
        "id": "ed97b54ef14a427abe04bb01b25ffe2b",
        "givenName": "Jane",
        "surname": "Bloggs",
        "email": "janeb@email.com"
      },
      {
        "id": "fb0312c86cd04c1385f46044fee09e8d",
        "givenName": "Joe",
        "surname": "Bloggs",
        "email": "j.bloggs@email.com"
      }
    ]
  }
]
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}

Users

End-points relating to the management of your Reposit Fleet and marketapi users.

View a list of all users assigned to your marketapi account

GET /api/users

Returns a list of users that are associated with your marketapi account. This response may vary depending on the level of permissions you have. Users with the "fleet.my_reposit.users" permission will be able to see contact details for users. Other users will be able to see names and IDs only.

200 OK

OK

401 Unauthorized

Invalid access token. If the error code in the returned JSON is expired_token, it means you need to request a new access token through the /auth/login/ route using your username and password.

Response Example (200 OK)
[
  {
    "data": [
      {
        "id": "ed97b54ef14a427abe04bb01b25ffe2b",
        "givenName": "Jane",
        "surname": "Bloggs",
        "email": "janeb@email.com"
      },
      {
        "id": "fb0312c86cd04c1385f46044fee09e8d",
        "givenName": "Joe",
        "surname": "Bloggs",
        "email": "j.bloggs@email.com"
      }
    ]
  }
]
Response Example (401 Unauthorized)
{
  "error": "expired_token",
  "message": "The token you provided has expired.",
  "status": "error"
}