Lunar Energy Sites API

List sites and read site topology

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/lunar-energy-sites-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 email required.

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

OpenAPI Specification

lunar-energy-sites-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Gridshare Customer Devices Sites API
  description: 'The Gridshare Customer API is the homeowner-delegated surface of

    Lunar Energy''s Gridshare DERMS platform. It allows partners — apps,

    installers, retailers — to read or control devices on behalf of a

    specific Lunar Energy customer once that customer has granted

    consent via OAuth 2.0 Authorization Code flow against the

    lunar-customer Amazon Cognito user pool.


    Four scopes are available: `lunar/device.read`, `lunar/device.write`,

    `lunar/plan.read`, `lunar/plan.write`.

    '
  version: v1.0
  contact:
    name: Lunar Energy
    url: https://www.gridshare.com
    email: developers@gridshare.com
  x-logo:
    url: https://www.lunarenergy.com/favicon.ico
servers:
- url: https://developer-api.customer.mygridshare.com
  description: Production server
- url: https://developer-api.customer.dev0.mygridshare.com
  description: Development server
security:
- bearerAuth: []
tags:
- name: Sites
  description: List sites and read site topology
paths:
  /api/v2/sites:
    get:
      operationId: listSites
      summary: List Sites
      description: 'List the siteIds the authenticated customer has access to. v2 is

        the lightweight external endpoint — pair it with

        `GET /api/v2/sites/{siteId}/topology` and `GET /api/v2/devices` to

        drill into a site''s structure or devices.

        '
      tags:
      - Sites
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SiteList'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /api/v2/sites/{siteId}/topology:
    parameters:
    - $ref: '#/components/parameters/SiteId'
    get:
      operationId: getSiteTopology
      summary: Get Site Topology
      description: 'Return the electrical topology of a site the authenticated customer

        has access to. Nodes with `"kind": "sensor"` expose an `id` that may

        be passed to `GET /api/v2/devices/{synthId}/telemetry` and a

        `channels` array listing available streams. See the Topology key

        concepts page for worked examples.

        '
      tags:
      - Sites
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Topology'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /api/v1/sites:
    get:
      operationId: listSites
      summary: List Sites
      description: List all sites the authenticated partner can access.
      tags:
      - Sites
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SiteList'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      operationId: createSite
      summary: Create Site
      description: Create a new site in the partner fleet.
      tags:
      - Sites
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Site'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Site'
  /api/v1/sites/{siteId}:
    parameters:
    - $ref: '#/components/parameters/SiteId'
    get:
      operationId: getSite
      summary: Get Site
      description: Get a site by ID.
      tags:
      - Sites
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Site'
    put:
      operationId: replaceSite
      summary: Replace Site
      description: Override a site with new attributes.
      tags:
      - Sites
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Site'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Site'
  /api/v1/sites/{siteId}/topology:
    parameters:
    - $ref: '#/components/parameters/SiteId'
    get:
      operationId: getSiteTopology
      summary: Get Site Topology
      description: 'Return the electrical topology tree of a site. Nodes with

        `"kind": "sensor"` expose an `id` that may be passed to the

        device telemetry endpoint and a `channels` array of available

        data streams.

        '
      tags:
      - Sites
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Topology'
components:
  schemas:
    Site:
      type: object
      required:
      - siteId
      properties:
        siteId:
          type: string
        name:
          type: string
        timezone:
          type: string
        address:
          type: object
          properties:
            country:
              type: string
            region:
              type: string
            city:
              type: string
            postalCode:
              type: string
            line1:
              type: string
    SiteList:
      type: object
      required:
      - entries
      properties:
        entries:
          type: array
          items:
            $ref: '#/components/schemas/SiteListItem'
    Topology:
      type: object
      properties:
        root:
          $ref: '#/components/schemas/TopologyNode'
    ForbiddenResponse:
      type: object
      properties:
        message:
          type: string
        code:
          type: string
    SiteListItem:
      type: object
      required:
      - siteId
      properties:
        siteId:
          type: string
    TopologyNode:
      type: object
      properties:
        id:
          type: string
        kind:
          type: string
          enum:
          - site
          - device
          - sensor
        channels:
          type: array
          items:
            type: string
        children:
          type: array
          items:
            $ref: '#/components/schemas/TopologyNode'
    UnauthorizedResponse:
      type: object
      properties:
        message:
          type: string
        code:
          type: string
  responses:
    Forbidden:
      description: 403 Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ForbiddenResponse'
    Unauthorized:
      description: 401 Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/UnauthorizedResponse'
  parameters:
    SiteId:
      in: path
      name: siteId
      required: true
      schema:
        type: string
  securitySchemes:
    bearerAuth:
      type: oauth2
      description: 'OAuth 2.0 Authorization Code flow against the lunar-customer

        Amazon Cognito user pool.

        '
      flows:
        authorizationCode:
          authorizationUrl: https://lunar-customer-prod-us-west-1.auth.us-west-1.amazoncognito.com/oauth2/authorize
          tokenUrl: https://lunar-customer-prod-us-west-1.auth.us-west-1.amazoncognito.com/oauth2/token
          refreshUrl: https://lunar-customer-prod-us-west-1.auth.us-west-1.amazoncognito.com/oauth2/token
          scopes:
            lunar/device.read: Read device metadata and telemetry (excluding plans)
            lunar/device.write: Modify devices including operation mode
            lunar/plan.read: Read existing device plans
            lunar/plan.write: Send plans to a device