> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreflux.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Enphase Enlighten API v4

> Enphase Enlighten API v4

Technical Preview

## Overview

Enphase IQ microinverters, IQ Batteries, meters and EV chargers report to the Enlighten cloud. The **Enphase Monitoring API v4** (`https://api.enphaseenergy.com/api/v4`) gives read (and limited write) access to that data. It is documented on the [Enphase developer portal](https://developer-v4.enphase.com/docs) with an official Swagger 2.0 export for the Monitoring API.

The **EnphaseEnlightenApi** connector maps 28 MQTT topics onto that API: 22 Watt (free), 2 Kilowatt and 4 Megawatt events. Typical uses are putting site PV production, consumption and battery power on the broker next to plant data, turning Enphase alarms into broker alarms, and (on Megawatt) reading or changing battery mode. Each event publishes the Enphase reply on `<topic>/response`.

| Event | Topic | Request | Plan | Use |
| - | - | - | - | - |
| `ListSystems` | `energy/enphase/system/list` | `GET /api/v4/systems?key={api_key}&{query}` | Watt | Systems the token can read, e.g. query page=1\&size=100\&sort\_by=id |
| `SearchSystems` | `energy/enphase/system/search` | `POST /api/v4/systems/search?key={api_key}&{query}` | Watt | Filter systems by ids, name, reference or status; body \{"system":\{"statuses":\["comm","micro"]}}, query page=\&size=\&live\_stream= |
| `GetSystem` | `energy/enphase/system/get` | `GET /api/v4/systems/{id}?key={api_key}` | Watt | System details: name, timezone, address, connection type, status, last report |
| `GetSystemSummary` | `energy/enphase/system-summary/get` | `GET /api/v4/systems/{id}/summary?key={api_key}&{query}` | Watt | Current power (W), energy today and lifetime (Wh), size, modules, status; query summary\_date=YYYY-MM-DD or "" |
| `ListSystemDevices` | `energy/enphase/device/list` | `GET /api/v4/systems/{id}/devices?key={api_key}` | Watt | Micros, meters, gateways (Envoy), batteries (Encharge), Enpower, EVSE with serials and status |
| `RetrieveSystemId` | `energy/enphase/system-id/get` | `GET /api/v4/systems/retrieve_system_id?key={api_key}&{query}` | Watt | System id for an IQ Gateway (Envoy) serial; query serial\_num=\<envoy serial> |
| `GetLatestTelemetry` | `energy/enphase/latest-telemetry/get` | `GET /api/v4/systems/{id}/latest_telemetry?key={api_key}` | Watt | Last reported PV, consumption, battery and EVSE power (W) plus battery / heat pump / EVSE operating mode |
| `GetProductionMeterReadings` | `energy/enphase/production-meter-readings/get` | `GET /api/v4/systems/{id}/production_meter_readings?key={api_key}&{query}` | Watt | Last odometer reading of each revenue-grade production meter; query end\_at=\<epoch>\&include\_channels=true or "" |
| `GetEnergyLifetime` | `energy/enphase/energy-lifetime/get` | `GET /api/v4/systems/{id}/energy_lifetime?key={api_key}&{query}` | Watt | Daily production series (Wh); query start\_date=YYYY-MM-DD\&end\_date=YYYY-MM-DD\&production=all |
| `GetRgmStats` | `energy/enphase/rgm-stats/get` | `GET /api/v4/systems/{id}/rgm_stats?key={api_key}&{query}` | Watt | 15-minute revenue-grade meter intervals (max 1 week); query start\_at=\<epoch>\&end\_at=\<epoch> |
| `GetProductionMicroTelemetry` | `energy/enphase/production-micro-telemetry/get` | `GET /api/v4/systems/{id}/telemetry/production_micro?key={api_key}&{query}` | Watt | Production of all microinverters; query start\_at=\<epoch>\&granularity=5mins/15mins/day/week |
| `GetProductionMeterTelemetry` | `energy/enphase/production-meter-telemetry/get` | `GET /api/v4/systems/{id}/telemetry/production_meter?key={api_key}&{query}` | Watt | Production meter intervals; query start\_at=\<epoch>\&granularity=... |
| `GetConsumptionMeterTelemetry` | `energy/enphase/consumption-meter-telemetry/get` | `GET /api/v4/systems/{id}/telemetry/consumption_meter?key={api_key}&{query}` | Watt | Consumption meter intervals; query start\_at=\<epoch>\&granularity=... |
| `GetBatteryTelemetry` | `energy/enphase/battery-telemetry/get` | `GET /api/v4/systems/{id}/telemetry/battery?key={api_key}&{query}` | Watt | Battery charge / discharge and state of charge intervals; query start\_at=\<epoch>\&granularity=... |
| `GetEnergyImportTelemetry` | `energy/enphase/energy-import-telemetry/get` | `GET /api/v4/systems/{id}/energy_import_telemetry?key={api_key}&{query}` | Watt | Energy imported from the grid per interval; query start\_at=\<epoch>\&granularity=... |
| `GetEnergyExportTelemetry` | `energy/enphase/energy-export-telemetry/get` | `GET /api/v4/systems/{id}/energy_export_telemetry?key={api_key}&{query}` | Watt | Energy exported to the grid per interval; query start\_at=\<epoch>\&granularity=... |
| `GetConsumptionLifetime` | `energy/enphase/consumption-lifetime/get` | `GET /api/v4/systems/{id}/consumption_lifetime?key={api_key}&{query}` | Watt | Daily consumption series (Wh); query start\_date=\&end\_date= |
| `ListOpenAlarms` | `energy/enphase/open-alarm/list` | `GET /api/v4/systems/{id}/open_alarms?key={api_key}` | Watt | All open alarms of a site |
| `ListAlarms` | `energy/enphase/alarm/list` | `GET /api/v4/systems/{id}/alarms?key={api_key}&{query}` | Watt | Active and closed alarms; query start\_time=\<epoch> (required, max 7-day window)\&end\_time=\&cleared=true/false |
| `ListOpenEvents` | `energy/enphase/open-event/list` | `GET /api/v4/systems/{id}/open_events?key={api_key}` | Watt | All open events of a site |
| `ListEvents` | `energy/enphase/event/list` | `GET /api/v4/systems/{id}/events?key={api_key}&{query}` | Watt | Active and closed events; query start\_time=\<epoch> (required, max 1 week)\&end\_time= |
| `ListEventTypes` | `energy/enphase/event-type/list` | `GET /api/v4/systems/event_types?key={api_key}&{query}` | Watt | Static event type catalog with description and recommended action; query event\_type\_id= or "" |
| `GetMicroTelemetry` | `energy/enphase/micro-telemetry/get` | `GET /api/v4/systems/{id}/devices/micros/{serial}/telemetry?key={api_key}&{query}` | Kilowatt | Kilowatt+: one microinverter's telemetry; query start\_at=\&granularity= |
| `GetLiveData` | `energy/enphase/live-data/get` | `GET /api/v4/systems/{id}/live_data?key={api_key}` | Kilowatt | Kilowatt+ Streaming API: on-demand real-time PV, grid, load, battery, generator and EVSE power (USD 0.10 per hit; default 30 s stream) |
| `GetBatterySettings` | `energy/enphase/battery-settings/get` | `GET /api/v4/systems/config/{id}/battery_settings?key={api_key}` | Megawatt | Megawatt: battery mode, reserve SoC, energy independence, charge from grid |
| `UpdateBatterySettings` | `energy/enphase/battery-settings/update` | `PUT /api/v4/systems/config/{id}/battery_settings?key={api_key}` | Megawatt | Megawatt: change battery mode / reserve SoC; body \{"battery\_mode":"Self-consumption","reserve\_soc":30} (writes to a real home battery) |
| `GetStormGuard` | `energy/enphase/storm-guard/get` | `GET /api/v4/systems/config/{id}/storm_guard?key={api_key}` | Megawatt | Megawatt: Storm Guard state |
| `GetGridStatus` | `energy/enphase/grid-status/get` | `GET /api/v4/systems/config/{id}/grid_status?key={api_key}` | Megawatt | Megawatt: on-grid / off-grid status of the system |

`SearchSystems` is a `POST` that only filters systems. The only real write is `UpdateBatterySettings` (Megawatt): it changes a home battery's mode and reserve SoC, so gate it behind an operator action. EV charger start / stop are marked "illustrative only" in the spec and are **not** packaged.

> [!TIP]
>
> For local, sub-second inverter data without the cloud, talk to the IQ Gateway over its local LAN API or Modbus TCP instead. This connector is for Enlighten cloud fleet data.

## Prerequisites

* An **Enphase developer account** at [developer-v4.enphase.com](https://developer-v4.enphase.com). The free **Watt** plan starts with 1,000 hits per month and 10 calls per minute.
* An **application** with its API key (`key`), client id and client secret.
* At least one **system owner** who approved the app (OAuth authorization code), so you have a working access token and refresh token.
* The **system id** of each site you want to read (from `system/list`) and, for micro telemetry, the microinverter serial (from `device/list`).
* For Kilowatt / Megawatt events: the matching paid plan. Lower plans get `403`.
* Outbound HTTPS from the broker to `api.enphaseenergy.com`. TLS 1.2 or newer is required.

## Authentication

Every event sends **both**:

1. Query parameter `key={value.json.api_key}` — the application API key from the developer portal.
2. Header `Authorization: {value.json.authorization}` — the string `Bearer <access_token>`.

Store them as Hub secrets, for example `ENPHASE_API_KEY` and `ENPHASE_AUTHORIZATION`, and read them with `GET SECRET` in the action that publishes to the connector.

| Response | Meaning |
| - | - |
| `401` `{"message":"Not Authorized","details":"User is not authorized","code":401}` | No `Authorization` header |
| `401` `{"message":"Not Authorized","details":"Token is invalid","code":401}` | Bad or expired access token |
| `401` `{"type":"authentication_error",...,"message":"API Key is invalid"}` | Bad `key` on the Streaming API (`live_data`) |
| `403` | Token valid but no access to that system / plan too low |
| `429` | Rate or monthly hit limit |

### Getting tokens (outside this connector)

1. Send the system owner: `https://api.enphaseenergy.com/oauth/authorize?response_type=code&client_id=<client_id>&redirect_uri=<uri>&state=<state>`.
2. Exchange the code: `POST https://api.enphaseenergy.com/oauth/token?grant_type=authorization_code&redirect_uri=<uri>&code=<code>` with Basic auth `client_id:client_secret`.
3. Refresh before expiry: `POST .../oauth/token?grant_type=refresh_token&refresh_token=<refresh_token>` with the same Basic auth. Access tokens last **1 day**, refresh tokens **1 month** on Watt / Kilowatt / Megawatt.

Partner applications can issue tokens without a homeowner click; that flow is documented in the Quick Start and is not part of this connector.

## Plans and rate limits

| Plan | Hits / minute | Hits / month | Extra |
| - | - | - | - |
| Watt (free) | 10 | 1,000 | System details, site production / consumption, EV charger monitoring |
| Kilowatt (USD 249 / mo) | 50 | 50,000 | Device-level monitoring, Streaming API (`live_data`, USD 0.10 / hit) |
| Megawatt (USD 999 / mo) | 100 | 300,000 | System configurations (battery settings, Storm Guard, grid status) |

Over-limit responses are `429`. Telemetry arrives at 5 or 15 minute resolution, so poll every 15 minutes or slower and prefer the site-level events on the free plan.

## Payload

| Field | Type | Required | Notes |
| - | - | - | - |
| `authorization` | string | yes | `Bearer <access_token>` |
| `api_key` | string | yes | Application key, rendered into `?key=` |
| `id` | string | most events | Enphase system id |
| `serial` | string | `GetMicroTelemetry` | Microinverter serial |
| `query` | string | when the endpoint has optional query params | Pre-encoded string after `?key=`, or `""` |
| `body` | object / string | `SearchSystems`, `UpdateBatterySettings` | JSON body |

Examples:

```json theme={"theme":"css-variables","languages":{"custom":["/languages/lot.json"]}}
{"authorization":"Bearer eyJ...","api_key":"<key>","id":"698905955","query":""}
{"authorization":"Bearer eyJ...","api_key":"<key>","id":"698905955","query":"start_at=1759644000&granularity=15mins"}
{"authorization":"Bearer eyJ...","api_key":"<key>","id":"698905955","body":{"battery_mode":"Self-consumption","reserve_soc":30}}
```

## Example actions

These four actions stay inside a free Watt budget for one system (\~775 hits / month). Replace the example system id and wire the Hub secrets.

```lot theme={"theme":"css-variables","languages":{"custom":["/languages/lot.json"]}}
# Example actions for the EnphaseEnlightenApi route (docs page). Not part of the route template.
# Secrets: ENPHASE_API_KEY = the application API key from developer-v4.enphase.com (sent as ?key=);
#   ENPHASE_AUTHORIZATION = "Bearer <access_token>" (access token lives 1 day; refresh it outside these actions).
# System id 698905955 is an example id from the Enphase v4 spec. Replace it with your own (from system/list).
# Inline JSON object literals are not supported when publishing to a topic, so the request payload is a COLLAPSED
#   model sent with PUBLISH MODEL.
# Budget: the free Watt plan allows 1,000 hits / month and 10 per minute. These four actions use about
#   372 + 248 + 124 + 31 = 775 hits / month for one system.

DEFINE MODEL EnphaseRequest COLLAPSED
    ADD STRING "authorization"
    ADD STRING "api_key"
    ADD STRING "id"
    ADD STRING "query"

DEFINE ACTION EnphaseSummaryEvery2Hours
ON EVERY 2 HOURS DO
    PUBLISH MODEL EnphaseRequest TO "energy/enphase/system-summary/get" WITH
        authorization = (GET SECRET "ENPHASE_AUTHORIZATION")
        api_key = (GET SECRET "ENPHASE_API_KEY")
        id = "698905955"
        query = ""

DEFINE ACTION EnphaseLatestTelemetryEvery3Hours
ON EVERY 3 HOURS DO
    PUBLISH MODEL EnphaseRequest TO "energy/enphase/latest-telemetry/get" WITH
        authorization = (GET SECRET "ENPHASE_AUTHORIZATION")
        api_key = (GET SECRET "ENPHASE_API_KEY")
        id = "698905955"
        query = ""

DEFINE ACTION EnphaseOpenAlarmsEvery6Hours
ON EVERY 6 HOURS DO
    PUBLISH MODEL EnphaseRequest TO "energy/enphase/open-alarm/list" WITH
        authorization = (GET SECRET "ENPHASE_AUTHORIZATION")
        api_key = (GET SECRET "ENPHASE_API_KEY")
        id = "698905955"
        query = ""

DEFINE ACTION EnphaseEnergyLifetimeDaily
ON EVERY 1 DAY DO
    PUBLISH MODEL EnphaseRequest TO "energy/enphase/energy-lifetime/get" WITH
        authorization = (GET SECRET "ENPHASE_AUTHORIZATION")
        api_key = (GET SECRET "ENPHASE_API_KEY")
        id = "698905955"
        query = ""
```

## Deployable connector

```lot theme={"theme":"css-variables","languages":{"custom":["/languages/lot.json"]}}
# Coreflux REST_API template — Enphase Monitoring API v4 (Enlighten cloud: IQ microinverters, IQ Battery, meters, EVSE):
#   list and search systems, read system details and summary, device inventory, latest power snapshot, production /
#   consumption / battery / grid import-export telemetry and lifetime series, revenue-grade meter readings, open and
#   historical alarms and events; on paid plans also single-microinverter telemetry, the Streaming API live status,
#   battery settings (read and update), Storm Guard and grid status.
# Hugo catalog #177, Tier 2 (energy). Spec: official Enphase Monitoring API v4 Swagger 2.0 (System_API.json from
#   developer-v4.enphase.com/docs, fetched 2026-10-05; curated slim in openapi-cache/enphase-enlighten-api-v4.json).
#   Credentials are placeholders only.
# Docs: https://docs.coreflux.org/latest/lot-language/routes/rest-api-apps/enphase-enlighten-api-v4
#
# Auth: every call needs BOTH the application API key as query parameter ?key=<api_key> AND
#   Authorization: Bearer <access_token> (OAuth 2.0). Payload fields: api_key (from the developer portal application)
#   and authorization ("Bearer <access_token>"). Keep both in Hub secrets (suggested ENPHASE_API_KEY and
#   ENPHASE_AUTHORIZATION) and map them into the payload with GET SECRET.
#   Tokens: the system owner approves your app at https://api.enphaseenergy.com/oauth/authorize?response_type=code&
#   client_id=<client_id>&redirect_uri=<uri>; exchange the code with POST https://api.enphaseenergy.com/oauth/token?
#   grant_type=authorization_code&redirect_uri=<uri>&code=<code> and Basic auth client_id:client_secret. Access token
#   lives 1 day, refresh token 1 month (grant_type=refresh_token). Refresh outside this route (or in a companion route).
#   Missing token: 401 {"message":"Not Authorized","details":"User is not authorized","code":401}; bad token:
#   401 {"message":"Not Authorized","details":"Token is invalid","code":401}.
# Plans (per developer application): Watt (free) 10 hits / minute, 1,000 / month: system details, site-level
#   production and consumption, EV charger monitoring. Kilowatt (USD 249 / month) 50 / min, 50,000 / month: adds
#   device-level monitoring and the Streaming API (USD 0.10 per live-status hit). Megawatt (USD 999 / month) 100 / min,
#   300,000 / month: adds system configurations. Events outside your plan answer 403; over the limit answers 429.
#   Telemetry granularity is 5 / 15 minutes at best, so poll every 15 minutes or slower.
# Queries: events with a "query" field take the pre-encoded extra query string ("" for none); it is appended after
#   ?key=. Times are epoch seconds (start_at, end_at, start_time, end_time) or YYYY-MM-DD (start_date, end_date,
#   summary_date); granularity = 5mins|15mins|day|week (default day).
# Writes: only UpdateBatterySettings (PUT, Megawatt) and SearchSystems (POST, read-only filter). UpdateBatterySettings
#   changes a real home battery's mode / reserve: gate it behind an operator action. EV charger start / stop are
#   "illustrative only - access via VPP API for partners" in the spec and are not packaged.
#
# Payload fields: authorization, api_key, id (Enphase system id), serial (microinverter serial), query, body
#     GetSystemSummary            id = "698905955", query = ""
#     GetProductionMicroTelemetry id = "698905955", query = "start_at=1759644000&granularity=15mins"
#     GetEnergyLifetime           id = "698905955", query = "start_date=2026-10-01&end_date=2026-10-04"
#     ListAlarms                  id = "698905955", query = "start_time=1759100000&cleared=false"
#     UpdateBatterySettings       id = "698905955", body = {"battery_mode":"Self-consumption","reserve_soc":30}

DEFINE ROUTE EnphaseEnlightenApi WITH TYPE REST_API
    ADD REST_API_CONFIG
        WITH BASE_ADDRESS "https://api.enphaseenergy.com"
        WITH ENABLE_CLIENT "true"
        WITH USE_SSL "true"
        WITH REQUEST_TIMEOUT '30'
        WITH DEFAULT_CONTENT_TYPE "application/json"
        # Smoke: ListSystems (size=1) -> GetSystemSummary -> ListSystemDevices -> GetLatestTelemetry -> GetEnergyLifetime -> ListOpenAlarms.
    ADD EVENT ListSystems
        WITH SOURCE_TOPIC "energy/enphase/system/list"
        WITH DESTINATION_TOPIC "energy/enphase/system/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/v4/systems?key={value.json.api_key}&{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT SearchSystems
        WITH SOURCE_TOPIC "energy/enphase/system/search"
        WITH DESTINATION_TOPIC "energy/enphase/system/search/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/api/v4/systems/search?key={value.json.api_key}&{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT GetSystem
        WITH SOURCE_TOPIC "energy/enphase/system/get"
        WITH DESTINATION_TOPIC "energy/enphase/system/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/v4/systems/{value.json.id}?key={value.json.api_key}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetSystemSummary
        WITH SOURCE_TOPIC "energy/enphase/system-summary/get"
        WITH DESTINATION_TOPIC "energy/enphase/system-summary/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/v4/systems/{value.json.id}/summary?key={value.json.api_key}&{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT ListSystemDevices
        WITH SOURCE_TOPIC "energy/enphase/device/list"
        WITH DESTINATION_TOPIC "energy/enphase/device/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/v4/systems/{value.json.id}/devices?key={value.json.api_key}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT RetrieveSystemId
        WITH SOURCE_TOPIC "energy/enphase/system-id/get"
        WITH DESTINATION_TOPIC "energy/enphase/system-id/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/v4/systems/retrieve_system_id?key={value.json.api_key}&{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetLatestTelemetry
        WITH SOURCE_TOPIC "energy/enphase/latest-telemetry/get"
        WITH DESTINATION_TOPIC "energy/enphase/latest-telemetry/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/v4/systems/{value.json.id}/latest_telemetry?key={value.json.api_key}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetProductionMeterReadings
        WITH SOURCE_TOPIC "energy/enphase/production-meter-readings/get"
        WITH DESTINATION_TOPIC "energy/enphase/production-meter-readings/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/v4/systems/{value.json.id}/production_meter_readings?key={value.json.api_key}&{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetEnergyLifetime
        WITH SOURCE_TOPIC "energy/enphase/energy-lifetime/get"
        WITH DESTINATION_TOPIC "energy/enphase/energy-lifetime/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/v4/systems/{value.json.id}/energy_lifetime?key={value.json.api_key}&{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetRgmStats
        WITH SOURCE_TOPIC "energy/enphase/rgm-stats/get"
        WITH DESTINATION_TOPIC "energy/enphase/rgm-stats/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/v4/systems/{value.json.id}/rgm_stats?key={value.json.api_key}&{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetProductionMicroTelemetry
        WITH SOURCE_TOPIC "energy/enphase/production-micro-telemetry/get"
        WITH DESTINATION_TOPIC "energy/enphase/production-micro-telemetry/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/v4/systems/{value.json.id}/telemetry/production_micro?key={value.json.api_key}&{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetProductionMeterTelemetry
        WITH SOURCE_TOPIC "energy/enphase/production-meter-telemetry/get"
        WITH DESTINATION_TOPIC "energy/enphase/production-meter-telemetry/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/v4/systems/{value.json.id}/telemetry/production_meter?key={value.json.api_key}&{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetConsumptionMeterTelemetry
        WITH SOURCE_TOPIC "energy/enphase/consumption-meter-telemetry/get"
        WITH DESTINATION_TOPIC "energy/enphase/consumption-meter-telemetry/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/v4/systems/{value.json.id}/telemetry/consumption_meter?key={value.json.api_key}&{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetBatteryTelemetry
        WITH SOURCE_TOPIC "energy/enphase/battery-telemetry/get"
        WITH DESTINATION_TOPIC "energy/enphase/battery-telemetry/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/v4/systems/{value.json.id}/telemetry/battery?key={value.json.api_key}&{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetEnergyImportTelemetry
        WITH SOURCE_TOPIC "energy/enphase/energy-import-telemetry/get"
        WITH DESTINATION_TOPIC "energy/enphase/energy-import-telemetry/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/v4/systems/{value.json.id}/energy_import_telemetry?key={value.json.api_key}&{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetEnergyExportTelemetry
        WITH SOURCE_TOPIC "energy/enphase/energy-export-telemetry/get"
        WITH DESTINATION_TOPIC "energy/enphase/energy-export-telemetry/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/v4/systems/{value.json.id}/energy_export_telemetry?key={value.json.api_key}&{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetConsumptionLifetime
        WITH SOURCE_TOPIC "energy/enphase/consumption-lifetime/get"
        WITH DESTINATION_TOPIC "energy/enphase/consumption-lifetime/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/v4/systems/{value.json.id}/consumption_lifetime?key={value.json.api_key}&{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT ListOpenAlarms
        WITH SOURCE_TOPIC "energy/enphase/open-alarm/list"
        WITH DESTINATION_TOPIC "energy/enphase/open-alarm/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/v4/systems/{value.json.id}/open_alarms?key={value.json.api_key}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT ListAlarms
        WITH SOURCE_TOPIC "energy/enphase/alarm/list"
        WITH DESTINATION_TOPIC "energy/enphase/alarm/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/v4/systems/{value.json.id}/alarms?key={value.json.api_key}&{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT ListOpenEvents
        WITH SOURCE_TOPIC "energy/enphase/open-event/list"
        WITH DESTINATION_TOPIC "energy/enphase/open-event/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/v4/systems/{value.json.id}/open_events?key={value.json.api_key}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT ListEvents
        WITH SOURCE_TOPIC "energy/enphase/event/list"
        WITH DESTINATION_TOPIC "energy/enphase/event/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/v4/systems/{value.json.id}/events?key={value.json.api_key}&{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT ListEventTypes
        WITH SOURCE_TOPIC "energy/enphase/event-type/list"
        WITH DESTINATION_TOPIC "energy/enphase/event-type/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/v4/systems/event_types?key={value.json.api_key}&{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetMicroTelemetry
        WITH SOURCE_TOPIC "energy/enphase/micro-telemetry/get"
        WITH DESTINATION_TOPIC "energy/enphase/micro-telemetry/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/v4/systems/{value.json.id}/devices/micros/{value.json.serial}/telemetry?key={value.json.api_key}&{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetLiveData
        WITH SOURCE_TOPIC "energy/enphase/live-data/get"
        WITH DESTINATION_TOPIC "energy/enphase/live-data/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/v4/systems/{value.json.id}/live_data?key={value.json.api_key}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetBatterySettings
        WITH SOURCE_TOPIC "energy/enphase/battery-settings/get"
        WITH DESTINATION_TOPIC "energy/enphase/battery-settings/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/v4/systems/config/{value.json.id}/battery_settings?key={value.json.api_key}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT UpdateBatterySettings
        WITH SOURCE_TOPIC "energy/enphase/battery-settings/update"
        WITH DESTINATION_TOPIC "energy/enphase/battery-settings/update/response"
        WITH METHOD "PUT"
        WITH ENDPOINT "/api/v4/systems/config/{value.json.id}/battery_settings?key={value.json.api_key}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT GetStormGuard
        WITH SOURCE_TOPIC "energy/enphase/storm-guard/get"
        WITH DESTINATION_TOPIC "energy/enphase/storm-guard/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/v4/systems/config/{value.json.id}/storm_guard?key={value.json.api_key}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
    ADD EVENT GetGridStatus
        WITH SOURCE_TOPIC "energy/enphase/grid-status/get"
        WITH DESTINATION_TOPIC "energy/enphase/grid-status/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/v4/systems/config/{value.json.id}/grid_status?key={value.json.api_key}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "Authorization" "{value.json.authorization}"
            ADD "User-Agent" "Coreflux-Broker REST_API route (https://www.coreflux.org)"
```

## Testing

See `TEST.md` in the package. Static checks, a local mock and unauthenticated probes against `api.enphaseenergy.com` all pass. Live authenticated smoke needs `ENPHASE_API_KEY` and `ENPHASE_ACCESS_TOKEN`.

## Suggested branches

* `feat/rest-api-route-enphase-enlighten-api-v4`
* `feat/docs-rest-api-enphase-enlighten-api-v4`

Hugo owns GitHub pushes. Nothing was pushed from the factory.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.