Lunar Energy website screenshot

Lunar Energy

Lunar Energy is a Mountain View, California-based residential clean-energy company founded in August 2020 by former Tesla Energy executive Kunal Girotra. The company designs and manufactures the Lunar System — a modular home battery (15–30 kWh, 9.6 kW continuous / 15 kW peak), Lunar Inverter, Lunar Maximizers (module-level power optimizers), Lunar Bridge meter socket adapter, and Eaton AbleEdge smart-breaker integration — controlled by the Lunar App with Lunar AI optimization. Its Gridshare platform is a grid-edge DERMS (Distributed Energy Resource Management System) and virtual power plant engine that manages 130,000+ residential distributed energy resources representing 1.2 GWh of connected storage across multiple manufacturers and third-party operators. Gridshare powers utility demand response and VPP programs through flex groups, flex dispatches, prognoses, dynamic and periodical tariffs, and per-device remote operation-mode control. Lunar Energy is backed by SunPower and Sunrun partnerships; SoftBank Energy is a major investor. The Gridshare Partner API and Customer API are gated behind business onboarding — credentials are issued by Lunar Energy after contacting developers@gridshare.com.

3 APIs 24 Features
EnergyHome BatterySolarVirtual Power PlantDERMSDistributed Energy ResourcesGrid ServicesDemand ResponseStorageInverterSmart HomeEnergy ManagementTariffsTelemetryVPPFlex Events

APIs

Gridshare Partner API

The Gridshare Partner API is the operator-facing surface for utilities, DER aggregators, and energy retailers to manage residential distributed energy resources at fleet scale. ...

Gridshare Customer API

The Gridshare Customer API is the homeowner-delegated surface for partners that need to read or control devices on behalf of a specific Lunar Energy customer. It implements OAut...

Gridshare Remote MCP Server

Gridshare publishes a remote Model Context Protocol (MCP) server that exposes the Customer API as MCP tools for AI agents. Authenticated with the same Cognito-issued bearer toke...

Collections

Pricing Plans

Rate Limits

Lunar Energy Rate Limits

3 limits

RATE LIMITS

FinOps

Features

Lunar System home battery — 15–30 kWh modular wall-mounted tower
9.6 kW continuous / 15 kW peak (5s) per battery; 12.5-year warranty
Lunar Inverter and Lunar Maximizers (650 W module-level power optimizers)
Lunar Bridge (200 A meter socket adapter) connects the home to the grid
Eaton AbleEdge smart breakers for automatic load-shedding during outages
Lunar App for real-time monitoring and control
Lunar AI generates daily energy plans from utility rates, weather, and home patterns
Solar-ready — Maximizers attach to existing panels without relocation
Virtual Power Plant participation — earn revenue by sharing storage with the grid
Gridshare DERMS manages 130,000+ residential DERs and 1.2 GWh of storage
Multi-vendor support — Gridshare manages devices from different manufacturers and 3rd-party operators
Partner API for fleet operators (utilities, retailers, DER aggregators)
Customer API for app developers acting on behalf of homeowners
OAuth 2.0 — client-credentials for Partner, Authorization Code for Customer
Per-device Operation Mode — Simple, Schedule, Smart (AI-optimized), Unknown
Overlay Plans for short-term device dispatch
Periodical Tariffs and Dynamic Tariffs (7-day pagination windows)
Flex Groups, Flex Events, Flex Dispatches, and Flex Dispatch opt-outs
Prognoses, Prognosis Diff Requests, and Diff Orders for coordinated network flex
Counterfactual telemetry — what the device would have done un-managed
WebSocket telemetry streams
Remote MCP server exposes the Customer API as agent tools
Octopus Energy partnership — battery electricity plans in Texas
Sunrun and SunPower installer Okta SSO

Semantic Vocabularies

Lunar Energy Context

0 classes · 8 properties

JSON-LD

API Governance Rules

Lunar Energy API Rules

8 rules · 4 errors 4 warnings

SPECTRAL

Resources

🔗
Website
Website
🌐
Portal
Portal
🌐
Portal
Portal
🔗
Documentation
Documentation
🚀
GettingStarted
GettingStarted
🔗
Product
Product
🔗
Product
Product
🔗
Documentation
Documentation
🔗
Documentation
Documentation
🔗
Documentation
Documentation
🔗
Documentation
Documentation
🔗
Documentation
Documentation
🔗
Documentation
Documentation
🔗
Documentation
Documentation
🔗
Documentation
Documentation
💬
Support
Support
💬
Support
Support
🔗
Contact
Contact
🔗
Careers
Careers
🔗
LinkedIn
LinkedIn
🔗
Twitter
Twitter
👥
YouTube
YouTube
👥
GitHubOrganization
GitHubOrganization
🔗
Plans
Plans
🔗
RateLimits
RateLimits
🔗
FinOps
FinOps

Sources

Raw ↑
opencollection: 1.0.0
info:
  name: Gridshare Partner API
  version: v1.0
request:
  auth:
    type: bearer
    token: '{{bearerToken}}'
items:
- info:
    name: Sites
    type: folder
  items:
  - info:
      name: List Sites
      type: http
    http:
      method: GET
      url: https://developer-api.partner.us.mygridshare.com/api/v1/sites
    docs: List all sites the authenticated partner can access.
  - info:
      name: Create Site
      type: http
    http:
      method: POST
      url: https://developer-api.partner.us.mygridshare.com/api/v1/sites
      body:
        type: json
        data: '{}'
    docs: Create a new site in the partner fleet.
  - info:
      name: Get Site
      type: http
    http:
      method: GET
      url: https://developer-api.partner.us.mygridshare.com/api/v1/sites/:siteId
      params:
      - name: siteId
        value: ''
        type: path
    docs: Get a site by ID.
  - info:
      name: Replace Site
      type: http
    http:
      method: PUT
      url: https://developer-api.partner.us.mygridshare.com/api/v1/sites/:siteId
      params:
      - name: siteId
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Override a site with new attributes.
  - info:
      name: Get Site Topology
      type: http
    http:
      method: GET
      url: https://developer-api.partner.us.mygridshare.com/api/v1/sites/:siteId/topology
      params:
      - name: siteId
        value: ''
        type: path
    docs: '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.

      '
- info:
    name: Devices
    type: folder
  items:
  - info:
      name: List Devices
      type: http
    http:
      method: GET
      url: https://developer-api.partner.us.mygridshare.com/api/v1/devices
    docs: List all devices in the partner fleet.
  - info:
      name: Create Device
      type: http
    http:
      method: POST
      url: https://developer-api.partner.us.mygridshare.com/api/v1/devices
      body:
        type: json
        data: '{}'
    docs: Create a new device.
  - info:
      name: Get Device
      type: http
    http:
      method: GET
      url: https://developer-api.partner.us.mygridshare.com/api/v1/devices/:synthId
      params:
      - name: synthId
        value: ''
        type: path
        description: A device ID or a sensor ID from the site topology.
    docs: Get a device by ID with its static properties.
  - info:
      name: Replace Or Create Device
      type: http
    http:
      method: PUT
      url: https://developer-api.partner.us.mygridshare.com/api/v1/devices/:synthId
      params:
      - name: synthId
        value: ''
        type: path
        description: A device ID or a sensor ID from the site topology.
      body:
        type: json
        data: '{}'
    docs: Override an existing device with new properties or create one if it does not yet exist.
- info:
    name: Telemetry
    type: folder
  items:
  - info:
      name: Get Device Telemetry
      type: http
    http:
      method: GET
      url: https://developer-api.partner.us.mygridshare.com/api/v1/devices/:synthId/telemetry
      params:
      - name: synthId
        value: ''
        type: path
        description: A device ID or a sensor ID from the site topology.
      - name: include
        value: ''
        type: query
        description: Comma-separated set of telemetry fields. `energy` is opt-in.
      - name: start
        value: ''
        type: query
      - name: end
        value: ''
        type: query
      - name: bucket
        value: ''
        type: query
        description: Time-bucket size (e.g. `PT1H`).
    docs: 'Get time-bucketed telemetry for a device or sensor. `synthId` can be

      a device ID or a sensor ID from the site topology. Supported device

      kinds: `inverter`, `battery_pack`, `PV`, `EV`, `meter`,

      `load_control_relay`. Include `energy_Wh_increment` and

      `energy_Wh_decrement` by passing `include=default,energy`.

      '
  - info:
      name: Get Counterfactual Telemetry
      type: http
    http:
      method: GET
      url: https://developer-api.partner.us.mygridshare.com/api/v1/counterfactuals/:counterfactualName/devices/:deviceId/telemetry
      params:
      - name: counterfactualName
        value: ''
        type: path
      - name: deviceId
        value: ''
        type: path
    docs: 'Counterfactual telemetry — what the device would have done if it had

      not been smartly controlled. Availability depends on the

      counterfactuals enabled for your partner account.

      '
- info:
    name: Operation Mode
    type: folder
  items:
  - info:
      name: Get Device Operation Mode
      type: http
    http:
      method: GET
      url: https://developer-api.partner.us.mygridshare.com/api/v1/devices/:synthId/operationmode
      params:
      - name: synthId
        value: ''
        type: path
        description: A device ID or a sensor ID from the site topology.
    docs: 'Get the current Gridshare operation mode of a device. Valid modes:

      - `Simple` — follow the simplest plan possible for the device kind

      - `Schedule` — follow a periodical plan

      - `Smart` — AI-optimized smart plan

      - `Unknown` — operation mode cannot be determined

      '
  - info:
      name: Change Device Operation Mode
      type: http
    http:
      method: PUT
      url: https://developer-api.partner.us.mygridshare.com/api/v1/devices/:synthId/operationmode
      params:
      - name: synthId
        value: ''
        type: path
        description: A device ID or a sensor ID from the site topology.
      body:
        type: json
        data: '{}'
    docs: Set the Gridshare operation mode for a device.
- info:
    name: Plans
    type: folder
  items:
  - info:
      name: Get Device Overlay Plan
      type: http
    http:
      method: GET
      url: https://developer-api.partner.us.mygridshare.com/api/v1/devices/:synthId/plans/overlay
      params:
      - name: synthId
        value: ''
        type: path
        description: A device ID or a sensor ID from the site topology.
    docs: Get the current overlay plan for the device.
  - info:
      name: Set Device Overlay Plan
      type: http
    http:
      method: PUT
      url: https://developer-api.partner.us.mygridshare.com/api/v1/devices/:synthId/plans/overlay
      params:
      - name: synthId
        value: ''
        type: path
        description: A device ID or a sensor ID from the site topology.
      body:
        type: json
        data: '{}'
    docs: 'Set an overlay plan for the device. To delete an overlay plan,

      send an empty `commands` array in the request body.

      '
- info:
    name: Periodical Tariffs
    type: folder
  items:
  - info:
      name: List Periodical Tariffs
      type: http
    http:
      method: GET
      url: https://developer-api.partner.us.mygridshare.com/api/v1/periodicaltariffs
    docs: List all periodical tariffs.
  - info:
      name: Create Periodical Tariff
      type: http
    http:
      method: POST
      url: https://developer-api.partner.us.mygridshare.com/api/v1/periodicaltariffs
      body:
        type: json
        data: '{}'
    docs: Create Periodical Tariff
  - info:
      name: Get Periodical Tariff
      type: http
    http:
      method: GET
      url: https://developer-api.partner.us.mygridshare.com/api/v1/periodicaltariffs/:tariffId
      params:
      - name: tariffId
        value: ''
        type: path
    docs: Get Periodical Tariff
  - info:
      name: Update Periodical Tariff
      type: http
    http:
      method: PATCH
      url: https://developer-api.partner.us.mygridshare.com/api/v1/periodicaltariffs/:tariffId
      params:
      - name: tariffId
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: 'Update properties of an existing periodical tariff. Append or

      rewrite pricing periods. Tariffs may have an open-ended latest

      period; PATCH-ing in a later period closes it automatically.

      '
- info:
    name: Dynamic Tariffs
    type: folder
  items:
  - info:
      name: List Dynamic Tariffs
      type: http
    http:
      method: GET
      url: https://developer-api.partner.us.mygridshare.com/api/v1/dynamictariffs
    docs: List all dynamic tariffs for the calling partner account.
  - info:
      name: Create Dynamic Tariff
      type: http
    http:
      method: POST
      url: https://developer-api.partner.us.mygridshare.com/api/v1/dynamictariffs
      body:
        type: json
        data: '{}'
    docs: Create a dynamic tariff with an optional initial set of timeseries values.
  - info:
      name: Get Dynamic Tariff
      type: http
    http:
      method: GET
      url: https://developer-api.partner.us.mygridshare.com/api/v1/dynamictariffs/:tariffId
      params:
      - name: tariffId
        value: ''
        type: path
      - name: interval
        value: ''
        type: query
      - name: nextToken
        value: ''
        type: query
    docs: 'Return metadata for a dynamic tariff together with a single page of

      timeseries values covering a 7-day window. Paginate via `nextToken`.

      '
  - info:
      name: Update Dynamic Tariff
      type: http
    http:
      method: PATCH
      url: https://developer-api.partner.us.mygridshare.com/api/v1/dynamictariffs/:tariffId
      params:
      - name: tariffId
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Append or override periods of a dynamic tariff. Existing values are not deleted.
- info:
    name: Flex Groups
    type: folder
  items:
  - info:
      name: List Flex Groups
      type: http
    http:
      method: GET
      url: https://developer-api.partner.us.mygridshare.com/api/v1/flexgroups
    docs: List Flex Groups
  - info:
      name: Create Flex Group
      type: http
    http:
      method: POST
      url: https://developer-api.partner.us.mygridshare.com/api/v1/flexgroups
      body:
        type: json
        data: '{}'
    docs: Create Flex Group
  - info:
      name: Get Flex Group
      type: http
    http:
      method: GET
      url: https://developer-api.partner.us.mygridshare.com/api/v1/flexgroups/:flexGroupId
      params:
      - name: flexGroupId
        value: ''
        type: path
    docs: Get Flex Group
  - info:
      name: List Flex Group Participants
      type: http
    http:
      method: GET
      url: https://developer-api.partner.us.mygridshare.com/api/v1/flexgroups/:flexGroupId/participants
      params:
      - name: flexGroupId
        value: ''
        type: path
    docs: List Flex Group Participants
  - info:
      name: Add Flex Group Participant
      type: http
    http:
      method: POST
      url: https://developer-api.partner.us.mygridshare.com/api/v1/flexgroups/:flexGroupId/participants
      params:
      - name: flexGroupId
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Add Flex Group Participant
  - info:
      name: Get Flex Group Participant
      type: http
    http:
      method: GET
      url: https://developer-api.partner.us.mygridshare.com/api/v1/flexgroups/:flexGroupId/participants/:participantId
      params:
      - name: flexGroupId
        value: ''
        type: path
      - name: participantId
        value: ''
        type: path
    docs: Get Flex Group Participant
  - info:
      name: Delete Flex Group Participant
      type: http
    http:
      method: DELETE
      url: https://developer-api.partner.us.mygridshare.com/api/v1/flexgroups/:flexGroupId/participants/:participantId
      params:
      - name: flexGroupId
        value: ''
        type: path
      - name: participantId
        value: ''
        type: path
    docs: Delete Flex Group Participant
  - info:
      name: Create Bulk Participants Action
      type: http
    http:
      method: POST
      url: https://developer-api.partner.us.mygridshare.com/api/v1/flexgroups/:flexGroupId/participants/bulk
      params:
      - name: flexGroupId
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: 'Overwrite the participants of a flex group by sending a full

      replacement list. This action is irreversible.

      '
  - info:
      name: Get Bulk Participants Action
      type: http
    http:
      method: GET
      url: https://developer-api.partner.us.mygridshare.com/api/v1/flexgroups/:flexGroupId/participants/bulk/:bulkId
      params:
      - name: flexGroupId
        value: ''
        type: path
      - name: bulkId
        value: ''
        type: path
    docs: Retrieve the status of a bulk participants update.
- info:
    name: Flex Events
    type: folder
  items:
  - info:
      name: List Flex Events
      type: http
    http:
      method: GET
      url: https://developer-api.partner.us.mygridshare.com/api/v1/flexevent
      params:
      - name: start
        value: ''
        type: query
      - name: end
        value: ''
        type: query
      - name: flexGroupId
        value: ''
        type: query
    docs: List all flex events within a time range, optionally filtered by group.
  - info:
      name: Create Flex Event
      type: http
    http:
      method: POST
      url: https://developer-api.partner.us.mygridshare.com/api/v1/flexevent
      body:
        type: json
        data: '{}'
    docs: 'Create a flex event for a defined flex group. Supports flat-dispatch

      events that target a flat power profile across a specified window.

      '
  - info:
      name: Update Flex Event
      type: http
    http:
      method: PATCH
      url: https://developer-api.partner.us.mygridshare.com/api/v1/flexevents/:flexEventId
      params:
      - name: flexEventId
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: Update or cancel an existing flex event.
- info:
    name: Flex Dispatches
    type: folder
  items:
  - info:
      name: Opt Out Of Flex Dispatch
      type: http
    http:
      method: POST
      url: https://developer-api.partner.us.mygridshare.com/api/v1/flexdispatches/:flexDispatchId/optout
      params:
      - name: flexDispatchId
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: 'Opt a participant out of a flex dispatch. Participants may be

      identified by site ID or participant ID. Idempotent — repeat opt-outs

      return the original opt-out details.

      '
- info:
    name: Prognoses
    type: folder
  items:
  - info:
      name: List Prognoses
      type: http
    http:
      method: GET
      url: https://developer-api.partner.us.mygridshare.com/api/v1/flexgroups/:flexGroupId/prognoses
      params:
      - name: flexGroupId
        value: ''
        type: path
    docs: 'List prognoses for a specific flex group. A new prognosis is generated

      when the group forecast changes due to prediction updates or

      explicit flex actions.

      '
- info:
    name: Diff Requests
    type: folder
  items:
  - info:
      name: Create Prognosis Diff Request
      type: http
    http:
      method: POST
      url: https://developer-api.partner.us.mygridshare.com/api/v1/prognoses/:prognosisId/prognosisdiffrequests
      params:
      - name: prognosisId
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: 'Request a modification to a prognosis profile. Allows charging or

      discharging to the network in a coordinated manner by submitting a

      differential profile over the original prognosis. Asynchronous —

      poll the Diff Request endpoint for status.

      '
  - info:
      name: Get Prognosis Diff Request
      type: http
    http:
      method: GET
      url: https://developer-api.partner.us.mygridshare.com/api/v1/prognosisdiffrequests/:prognosisDiffRequestId
      params:
      - name: prognosisDiffRequestId
        value: ''
        type: path
    docs: Poll status and feasible offer for a prognosis diff request.
  - info:
      name: Create Prognosis Diff Order
      type: http
    http:
      method: POST
      url: https://developer-api.partner.us.mygridshare.com/api/v1/prognosisdiffrequests/:prognosisDiffRequestId/prognosisdifforders
      params:
      - name: prognosisDiffRequestId
        value: ''
        type: path
      body:
        type: json
        data: '{}'
    docs: 'Confirm and commit to the offer associated with a prognosis diff

      request. Commands are dispatched to the underlying devices.

      '
  - info:
      name: Get Prognosis Diff Order
      type: http
    http:
      method: GET
      url: https://developer-api.partner.us.mygridshare.com/api/v1/prognosisdifforders/:prognosisDiffOrderId
      params:
      - name: prognosisDiffOrderId
        value: ''
        type: path
    docs: Retrieve a committed flex offer order including price and power profile.
- info:
    name: Visits
    type: folder
  items:
  - info:
      name: List Visits
      type: http
    http:
      method: GET
      url: https://developer-api.partner.us.mygridshare.com/api/v1/visits
    docs: List Visits
  - info:
      name: Create Visit
      type: http
    http:
      method: POST
      url: https://developer-api.partner.us.mygridshare.com/api/v1/visits
      body:
        type: json
        data: '{}'
    docs: Create Visit
  - info:
      name: Get Visit
      type: http
    http:
      method: GET
      url: https://developer-api.partner.us.mygridshare.com/api/v1/visits/:visitId
      params:
      - name: visitId
        value: ''
        type: path
    docs: Get Visit
bundled: true