Virtual Peaker Group Management API

Virtual Peaker supports managing groups of devices, in addition to individual device control. Grouping enables utilities to target clusters of devices together in demand response events.While device telemetry and configuration data is still reported on a per-device level, groups allow a single command to be broadcast to multiple enrolled devices simultaneously. To utilize grouping, the Device Partner integration must support both individual and group commands concurrently. The same device could receive an individual command, while also belonging to a group receiving a separate directive. Group commands have additional considerations: 1. Devices can opt out of group events individually, while the overall group command remains active. 2. Group command statuses reflect execution at the scheduling engine level rather than device state. 3. The Device Partner must reconcile group vs. individual state to ensure consistency in reporting. When not specified, all other workflows behave identically between individual and grouped devices - enrollment, data publishing, cancellations, etc.

Business capability
Distributed Energy Resource Management BC-3840

Operations 6

POST /group Create group #
GET /group/{GROUP_ID} Read group details #
PUT /group/{GROUP_ID} Update group details #
DELETE /group/{GROUP_ID} Delete group #
POST /group/{GROUP_ID}/devices Manage group devices #
POST /command/{COMMAND_REFERENCE_ID}/opt-out Command Opt-Out #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/virtual-peaker-group-management-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

virtual-peaker-group-management-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: '# Introduction

    Welcome to the Gravity Connect API documentation for Device Partners (typically Device OEMs).'
  x-logo:
    url: ./assets/vp_logo.png
    backgroundColor: '#FFFFFF'
    altText: Virtual Peaker Logo
  version: 2.0.6
  title: Gravity Connect API (Device Partner) Group Management API
  license:
    name: BSD
servers:
- url: https://example.com
security:
- device_partner_api_auth:
  - device_partner_basic_auth
- device_partner_user_auth:
  - user_read
tags:
- name: Group Management
  description: Virtual Peaker supports managing groups of devices, in addition to individual device control.
paths:
  /group:
    post:
      summary: Create group
      operationId: createGroup
      tags:
      - Group Management
      security:
      - device_partner_api_auth:
        - basic_partner_read_write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                deviceUids:
                  type: array
                  description: Array of device uids for the Device Partner to assign to the newly created group. Can be an empty array
                  items:
                    type: string
                name:
                  type: string
                  description: Human readable name of group
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                required:
                - uid
                properties:
                  uid:
                    type: string
                    description: A unique ID for that group within the partner's system to be used when modifying or sending commands to the group
                  invalidDevices:
                    type: array
                    description: Array of device uids that couldn't be located or were otherwise not added to the group
                    items:
                      type: string
        '400':
          $ref: '#/components/responses/badRequest'
        '401':
          $ref: '#/components/responses/unauthorized'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Details'
  /group/{GROUP_ID}:
    get:
      summary: Read group details
      operationId: readGroup
      tags:
      - Group Management
      security:
      - device_partner_api_auth:
        - basic_partner_read_write
      parameters:
      - $ref: '#/components/parameters/groupID'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GroupDetails'
        '400':
          $ref: '#/components/responses/badRequest'
        '401':
          $ref: '#/components/responses/unauthorized'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Details'
    put:
      summary: Update group details
      description: Update group details, if deviceUids is passed, it will overwrite the current list of devices.
      operationId: updateGroup
      tags:
      - Group Management
      security:
      - device_partner_api_auth:
        - basic_partner_read_write
      parameters:
      - $ref: '#/components/parameters/groupID'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                deviceUids:
                  type: array
                  description: Updated array of deviceUids which will overwrite the existing array (as opposed to adding and removing a list of deviceUids)
                  items:
                    type: string
                name:
                  type: string
                  description: Human readable name of group
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/GroupDetails'
                - properties:
                    invalidDevices:
                      type: array
                      description: Array of device uids that couldn't be located or were otherwise not added to the group
                      items:
                        type: string
        '400':
          $ref: '#/components/responses/badRequest'
        '401':
          $ref: '#/components/responses/unauthorized'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Details'
    delete:
      summary: Delete group
      description: Deletes a group and returns the list of devices that were within the group when deleted
      operationId: deleteGroup
      tags:
      - Group Management
      security:
      - device_partner_api_auth:
        - basic_partner_read_write
      parameters:
      - $ref: '#/components/parameters/groupID'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GroupDetails'
        '400':
          $ref: '#/components/responses/badRequest'
        '401':
          $ref: '#/components/responses/unauthorized'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Details'
  /group/{GROUP_ID}/devices:
    post:
      summary: Manage group devices
      operationId: manageGroupDevices
      tags:
      - Group Management
      security:
      - device_partner_api_auth:
        - basic_partner_read_write
      parameters:
      - $ref: '#/components/parameters/groupID'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - deviceUids
              - action
              properties:
                deviceUids:
                  type: array
                  description: Array of device uids for the Device Partner to assign to or remove from the group
                  items:
                    type: string
                action:
                  type: string
                  enum:
                  - add
                  - remove
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/GroupDetails'
                - properties:
                    invalidDevices:
                      type: array
                      description: Array of device uids that couldn't be located or were otherwise not added to the group
                      items:
                        type: string
        '400':
          $ref: '#/components/responses/badRequest'
        '401':
          $ref: '#/components/responses/unauthorized'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Details'
  /command/{COMMAND_REFERENCE_ID}/opt-out:
    post:
      summary: Command Opt-Out
      description: To communicate that particular devices within a group have opted out. For non-group command this is achieved via canceling the entire command.
      operationId: commandOptOut
      tags:
      - Group Management
      security:
      - device_partner_api_auth:
        - basic_partner_read_write
      parameters:
      - name: COMMAND_REFERENCE_ID
        in: path
        required: true
        description: The id of the command
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - deviceUids
              properties:
                deviceUids:
                  type: array
                  description: Array of device uids for the Device Partner to opt out of the command
                  items:
                    type: string
      responses:
        '200':
          $ref: '#/components/responses/accepted'
        '400':
          $ref: '#/components/responses/badRequest'
        '401':
          $ref: '#/components/responses/unauthorized'
        default:
          description: unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Details'
components:
  schemas:
    GroupDetails:
      type: object
      required:
      - uid
      - devices
      properties:
        uid:
          type: string
          description: A unique ID for that group within the partner's system
        deviceUids:
          type: array
          description: The uids of the devices within that group
          items:
            type: string
        name:
          type: string
          description: Human readable name of group
    Details:
      type: object
      required:
      - message
      properties:
        message:
          type: string
          description: A human readable response. Because there's no standard for what is included or how information should be formatted, this should not be parsed and utilized programmatically.
  responses:
    unauthorized:
      description: The request was not properly authorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Details'
    badRequest:
      description: Request was not properly formatted
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Details'
    accepted:
      description: Message has been accepted for processing
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Details'
  parameters:
    groupID:
      name: GROUP_ID
      in: path
      required: true
      description: The id of the device being targeted
      schema:
        type: string
  securitySchemes:
    device_partner_api_auth:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://example.com/oauth/token
          scopes:
            basic_partner_read_write: conducts all actions on the partners behalf
    device_partner_user_auth:
      type: oauth2
      description: If using the OAuth onboarding method, this authentication method is used for the respective endpoints. Please the the FAQ for more details.
      flows:
        authorizationCode:
          authorizationUrl: https://example.com/oauth/authorize
          tokenUrl: https://example.com/oauth/token
          scopes:
            user_read: read details about new user
x-tagGroups:
- name: Base Implementation
  tags:
  - Devices
  - Commands
  - Energy Interval Endpoint
- name: Device Onboarding
  tags:
  - OAuth Device Discovery (Preferred)
  - Pairing Code Device Discovery - End User App
  - Pairing Code Device Discovery - Utility Commissioned Installation
  - Device Partner Driven Enrollment
- name: Group Management
  tags:
  - Group Management