Reposit Power Market API

The larger of Reposit's two published contracts, and the one that actually controls hardware. A verbatim OpenAPI 3.0.1 document served anonymously at https://marketapi.repositpower.com/docs/spec/ (filename public-fleet-api.yaml, last-modified 2025-06-24) and rendered in Swagger UI at https://marketapi.repositpower.com/docs/ under the title "Reposit Power Fleet API". The spec describes itself as the API "used by fleet.repositpower.com and related services". Twenty-eight operations across twenty-two paths, tagged by the audience allowed to call them — Network, Retailer, Installer, Customer — and by subject: Node (list deployments and read their address, network NMI, operational status, name plate and events), Power Station (full CRUD over aggregations of nodes, plus downsampled, raw and latest telemetry), Data (fleet-wide downsampled metrics), Curtailment (read constraints, create, list, cancel, get and change an export setpoint, and post a heartbeat), Dispatch (create, list and get export dispatches), Capabilities (assign customers to a capability) and Users. This is the virtual-power-plant control plane: a network or retailer partner can curtail or dispatch the exports of real Australian households through it. Authentication is a bearer API key (components.securitySchemes.AccessToken, type apiKey, in header, name Bearer) that cannot be self-served — the spec's own description states the key is generated inside the logged-in Reposit Fleet web app at https://fleet.repositpower.com/user/settings, inherits that account's permissions, never expires, may be pinned to whitelisted origin IP addresses, and is revocable from the same screen. Fleet accounts are issued to partner organisations, so the real gate is a commercial relationship with Reposit. Confirmed on 2026-07-27 that GET /api/nodes, /api/powerstations, /api/data, /api/curtailments, /api/dispatches and /api/users all return HTTP 401 {"error":"unauthorized"} anonymously.

OpenAPI Specification

reposit-power-market-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Reposit Power Market API
  description: |
    Documentation for the Reposit Power Market API. Used by fleet.repositpower.com and related services.
    Please review our [versioning and support policy](https://gist.github.com/mleonard87/d5ed0a82760ceb75adc7df0d62bf9c31) before using the API.
  contact:
    url: https://www.repositpower.com/
    email: api@repositpower.com
  version: 1.0.0
servers:
- url: https://marketapi.repositpower.com/
tags:
- name: Node
  description: API end-points related to deployments.
- name: Power Station
  description: API end-points related to powerstations.
- name: Data
  description: API end-points related to obtaining metric data.
- name: Curtailment
  description: API end-points related to export curtailments.
- name: Dispatch
  description: API end-points related to export dispatches.
- name: Network
  description: Indicates this API end-point is available to network organisations.
- name: Retailer
  description: Indicates this API end-point is available to retailer organisations.
- name: Management
  description: End-points relating to the management of your Reposit Fleet and marketapi
    account.
- name: Users
  description: End-points relating to the management of your Reposit Fleet and marketapi
    users.
paths:
  /api/nodes:
    get:
      tags:
      - Node
      - Network
      - Retailer
      - Installer
      summary: All Nodes
      description: 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
      parameters:
      - name: expand
        in: query
        description: |
          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`
        schema:
          type: string
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                type: object
            Default response:
              example:
                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):
              example:
                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
        401:
          description: 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.
          content:
            application/json:
              schema:
                type: object
                example:
                  error: expired_token
                  message: The token you provided has expired.
                  status: error
      security:
      - AccessToken: []
  /api/nodes/{nodeId}/address:
    get:
      tags:
      - Node
      - Network
      - Retailer
      - Installer
      summary: Address/Location Info
      description: Return full address and lat/long information of a node.
      parameters:
      - name: nodeId
        in: path
        description: The ID of the node.
        required: true
        schema:
          type: string
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    city: Turner
                    country: Australia
                    lat: -35.26671
                    lng: 149.12879
                    postcode: "2612"
                    state: ACT
                    street: Macleay St
                    street_number: "52"
                  status: OK
        401:
          description: 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.
          content:
            application/json:
              schema:
                type: object
                example:
                  error: expired_token
                  message: The token you provided has expired.
                  status: error
      security:
      - AccessToken: []
  /api/nodes/{nodeId}/network:
    get:
      tags:
      - Node
      - Network
      - Retailer
      - Installer
      summary: Network Info
      description: Returns the NMI for this node.
      parameters:
      - name: nodeId
        in: path
        description: The ID of the node.
        required: true
        schema:
          type: string
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    nmi: 4102000000
                  status: OK
        401:
          description: 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.
          content:
            application/json:
              schema:
                type: object
                example:
                  error: expired_token
                  message: The token you provided has expired.
                  status: error
      security:
      - AccessToken: []
  /api/nodes/{nodeId}/status:
    get:
      tags:
      - Node
      - Network
      - Retailer
      - Installer
      summary: Operational Status
      description: Returns the latest operational status information for this node.
      parameters:
      - name: nodeId
        in: path
        description: The ID of the node.
        required: true
        schema:
          type: string
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    operationalStatus:
                      lastTimestamp: 1505189841
                      lastValue: 0
                    ping:
                      lastTimestamp: 1505189845
                  status: OK
        401:
          description: 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.
          content:
            application/json:
              schema:
                type: object
                example:
                  error: expired_token
                  message: The token you provided has expired.
                  status: error
      security:
      - AccessToken: []
  /api/nodes/{nodeId}/namePlate:
    get:
      tags:
      - Node
      - Network
      - Retailer
      - Installer
      summary: Name Plate
      description: Returns information about the energy system attached to this node.
      parameters:
      - name: nodeId
        in: path
        description: The ID of the node.
        required: true
        schema:
          type: string
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                    batteryCapacity: 6.4
                    inverterPower: 3
                    batteryPower: 2
                  status: OK
        401:
          description: 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.
          content:
            application/json:
              schema:
                type: object
                example:
                  error: expired_token
                  message: The token you provided has expired.
                  status: error
      security:
      - AccessToken: []
  /api/nodes/{nodeId}/events:
    get:
      tags:
      - Node
      - Network
      - Retailer
      - Installer
      summary: Name Plate
      description: 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`
      parameters:
      - name: nodeId
        in: path
        description: The ID of the node.
        required: true
        schema:
          type: string
      - name: offset
        in: query
        description: 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.
        schema:
          type: number
      - name: limit
        in: query
        description: 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).
        schema:
          type: number
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                type: object
                example:
                  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
                    previous: https://marketapi.repositpower.com/api/nodes/5b0a63855f2f4f819ccda226ca9d14e8/events?limit=3&offset=0
                  status: OK
        401:
          description: 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.
          content:
            application/json:
              schema:
                type: object
                example:
                  error: expired_token
                  message: The token you provided has expired.
                  status: error
      security:
      - AccessToken: []
  /api/powerstations:
    get:
      tags:
      - Power Station
      - Network
      - Retailer
      summary: All Power Stations
      description: Returns a list of power stations associated with the currently
        authenticated user's organisation.
      parameters:
      - name: includePredictions
        in: query
        description: Optional. Set to `true` to include powerstation predictions in
          the response.
        schema:
          type: string
          enum:
          - "true"
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                type: object
                example:
                  data:
                  - 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.0
                      batteryPower: 16.3
                      inverterPower: 18.5
                    nodes:
                    - 5320123eac5e4fd5baaea0bf442659bb
                    - e720e221204149ec9fa172583bcf4258
                    - d4c58e243e694bba9e57cbdf42970faf
                  status: OK
        401:
          description: 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.
          content:
            application/json:
              schema:
                type: object
                example:
                  error: expired_token
                  message: The token you provided has expired.
                  status: error
      security:
      - AccessToken: []
    post:
      tags:
      - Power Station
      - Network
      - Retailer
      summary: Create Power Station
      description: Creates a new powerstation and returns its details.
      requestBody:
        description: The powerstation to create.
        content:
          application/json:
            schema:
              required:
              - name
              - nodes
              type: object
              properties:
                name:
                  type: string
                  description: A recognisable name to give this powerstation.
                description:
                  type: string
                  description: An option description of this powerstation
                type:
                  type: string
                  description: 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.
                  default: STATIC
                  enum:
                  - STATIC
                  - DYNAMIC
                nodes:
                  type: array
                  description: An array of node IDs that belong to this powerstation
                    if the powerstation type is STATIC. Otherwise this must be null
                  items:
                    type: string
                filters:
                  type: object
                  properties:
                    postcodes:
                      type: array
                      description: An array of postcodes that a node can be in for
                        it to be included in this powerstation.
                      items:
                        type: string
                    state:
                      type: string
                      description: The state or territory that a node must be in for
                        it to be included in this powerstation.
                      enum:
                      - ACT
                      - NSW
                      - NT
                      - QLD
                      - SA
                      - TAS
                      - VIC
                      - WA
                  description: When specifying a DYNAMIC powerstation type you must
                    also supply the filters that this powerstation is built from.
              example:
                name: My First Powerstation
                nodes:
                - f7b05c5632334403ac0895959f8d00e7
                - 4f0cf230c728478da0822aa7f2d1f9ef
                - 56af6a12ae9049298aaa38cde5781145
        required: false
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      description:
                        type: string
                      id:
                        type: string
                      name:
                        type: string
                      namePlate:
                        type: object
                        properties:
                          batteryCapacity:
                            type: number
                          batteryPower:
                            type: number
                          inverterPower:
                            type: number
                      nodes:
                        type: array
                        description: A list of nodes IDs that make up this powerstation.
                        items:
                          type: string
                  status:
                    type: string
                example:
                  data:
                    id: e7430ccb21644d7b9e0a443933f25c7f
                    name: My First Powerstation
                    namePlate:
                      batteryCapacity: 17.1
                      batteryPower: 11
                      inverterPower: 13
                    nodes:
                    - f7b05c5632334403ac0895959f8d00e7
                    - 4f0cf230c728478da0822aa7f2d1f9ef
                    - 56af6a12ae9049298aaa38cde5781145
                  status: OK
        401:
          description: 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.
          content:
            application/json:
              schema:
                type: object
                example:
                  error: expired_token
                  message: The token you provided has expired.
                  status: error
      security:
      - AccessToken: []
      x-codegen-request-body-name: powerstation
  /api/powerstations/{powerstationId}:
    get:
      tags:
      - Power Station
      - Network
      - Retailer
      summary: Get Single Power Station
      description: Returns the details of the power station with the supplied UID.
      parameters:
      - name: powerstationId
        in: path
        description: The ID of the power station.
        required: true
        schema:
          type: string
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      description:
                        type: string
                      id:
                        type: string
                      name:
                        type: string
                      namePlate:
                        type: object
                        properties:
                          capacity:
                            type: number
                          power:
                            type: number
                      nodes:
                        type: array
                        items:
                          type: string
                  status:
                    type: string
                example:
                  data:
                    id: e7430ccb21644d7b9e0a443933f25c7f
                    name: New Powerstation on dmarket
                    namePlate:
                      capacity: 17.1
                      power: 13
                    nodes:
                    - d4c58e243e694bba9e57cbdf42970faf
                    - 5320123eac5e4fd5baaea0bf442659bb
                  status: OK
        401:
          description: 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.
          content:
            application/json:
              schema:
                type: object
                example:
                  error: expired_token
                  message: The token you provided has expired.
                  status: error
        404:
          description: Invalid powerstation UID specified.
          content:
            application/json:
              schema:
                type: object
                example:
                  error: Powerstation e7430ccb21644d7b9e0a443933f25c7f not found
                  status: ERROR
      security:
      - AccessToken: []
    put:
      tags:
      - Power Station
      - Network
      - Retailer
      summary: Update Power Station
      description: Updates an existing powerstation specified by its id and returns
        its details.
      parameters:
      - name: powerstationId
        in: path
        description: The ID of the power station.
        required: true
        schema:
          type: string
      requestBody:
        description: The powerstation to update.
        content:
          application/json:
            schema:
              required:
              - name
              - nodes
              type: object
              properties:
                name:
                  type: string
                description:
                  type: string
                  description: An option description of this powerstation
                nodes:
                  type: array
                  description: A list of nodes IDs that make up this powerstation.
                  items:
                    type: string
              example:
                name: My First Powerstation
                nodes:
                - f7b05c5632334403ac0895959f8d00e7
                - 4f0cf230c728478da0822aa7f2d1f9ef
                - 56af6a12ae9049298aaa38cde5781145
        required: false
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      description:
                        type: string
                      id:
                        type: string
                      name:
                        type: string
                      namePlate:
                        type: object
                        properties:
                          capacity:
                            type: number
                          power:
                            type: number
                      nodes:
                        type: array
                        items:
                          type: string
                  status:
                    type: string
                example:
                  data:
                    id: e7430ccb21644d7b9e0a443933f25c7f
                    name: My First Powerstation
                    namePlate:
                      capacity: 17.1
                      power: 13
                    nodes:
                    - f7b05c5632334403ac0895959f8d00e7
                    - 4f0cf230c728478da0822aa7f2d1f9ef
                    - 56af6a12ae9049298aaa38cde5781145
                  status: OK
        401:
          description: 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.
          content:
            application/json:
              schema:
                type: object
                example:
                  error: expired_token
                  message: The token you provided has expired.
                  status: error
        404:
          description: Invalid powerstation ID specified.
          content:
            application/json:
              schema:
                type: object
                example:
                  error: Powerstation e7430ccb21644d7b9e0a443933f25c7f not found
                  status: ERROR
      security:
      - AccessToken: []
      x-codegen-request-body-name: powerstation
    delete:
      tags:
      - Power Station
      - Network
      - Retailer
      summary: Delete Power Station
      description: Deletes a powerstation with with the supplied ID.
      parameters:
      - name: powerstationId
        in: path
        description: The ID of the power station.
        required: true
        schema:
          type: string
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                example:
                  status: OK
        401:
          description: 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.
          content:
            application/json:
              schema:
                type: object
                example:
                  error: expired_token
                  message: The token you provided has expired.
                  status: error
        404:
          description: Invalid powerstation ID specified.
          content:
            application/json:
              schema:
                type: object
                example:
                  error: Powerstation e7430ccb21644d7b9e0a443933f25c7f not found
                  status: ERROR
      security:
      - AccessToken: []
  /api/powerstations/{powerstationId}/data:
    get:
      tags:
      - Power Station
      - Network
      - Retailer
      - Data
      summary: Data - Downsampled
      description: Return stored metrics for this powerstation or its nodes by downsampling.
      parameters:
      - name: powerstationId
        in: path
        description: The ID of the power station.
        required: true
        schema:
          type: string
      - name: metrics
        in: query
        description: |
          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.
        required: true
        schema:
          type: string
      - name: start
        in: query
        description: The start timestamp of the period of data you wish to retreive
        schema:
          type: integer
      - name: end
        in: query
        description: The end timestamp of the period of data you wish to retreive
        schema:
          type: integer
      - name: interval
        in: query
        description: The downsampling interval in seconds
        schema:
          type: integer
      - name: format
        in: query
        description: The format you wish to retrieve the results, either `powerstation` or `nodes`.
          When using nodes, requests are limited to a 6 hour window of data; for powerstation, requests are limited to a 1 week window of data.
        schema:
          type: string
          default: powerstation
          enum:
          - powerstation
          - nodes
      - name: fill
        in: query
        description: 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.
        schema:
          type: string
          enum:
          - null
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                type: object
            By powerstation:
              example:
                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:
              example:
                data:
                - meterPower{a}:
                    d4c58e243e694bba9e57cbdf42970faf:
                      1505109600: 0.385738397260

# --- truncated at 32 KB (80 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/reposit-power/refs/heads/main/openapi/reposit-power-market-api-openapi.yml