Files
solaredge-optimizers/packages/solaredgeapi/docs/monitoring-api.md
T

15 KiB

SolarEdge Monitoring API reference

Local working reference for the SolarEdge Monitoring API. This file summarizes the official March 2026 documentation in a compact, implementation-oriented form. The official PDF remains the authoritative source.

Base URL and authentication

https://monitoringapi.solaredge.com

All requests use GET over HTTPS and pass the API key as the api_key query parameter:

GET /site/{siteId}/overview?api_key={apiKey}
Accept: application/json

Only JSON is supported. CSV and XML support were removed in March 2026.

The local server-side configuration is:

SOLAREDGE_API_KEY=...
SOLAREDGE_SITE_ID=...

Never expose the API key in browser code, an EXPO_PUBLIC_ variable, logs, or a repository. SolarEdge recommends using a site-level key where possible and rotating keys periodically.

Dates, time zones, encoding, and units

  • Date: YYYY-MM-DD
  • Date and time: YYYY-MM-DD hh:mm:ss
  • All dates and times use the site's local time zone.
  • URL query values, including spaces in date-times, must be URL encoded.
  • Text is UTF-8.
  • Physical measurements use metric units; temperatures are Celsius.
  • Common time units are QUARTER_OF_AN_HOUR, HOUR, DAY, WEEK, MONTH, and YEAR. Each endpoint defines which values it accepts.
  • A time-series value can be null or entirely absent when no measurement is available.

Limits and errors

SolarEdge uses standard HTTP status codes.

Status Meaning
403 Invalid parameter range, endpoint-specific limit exceeded, or access to a requested site is forbidden.
404 Resource does not exist.
429 Daily request quota or concurrency limit exceeded.

Global limits from the March 2026 documentation:

  • 300 requests per account token.
  • 300 requests per specific site ID and source IP.
  • At most 3 concurrent API calls from the same source IP.
  • Bulk endpoints accept at most 100 comma-separated site IDs.
  • A bulk call consumes one quota unit for every site included in the call.

The package client automatically limits itself to three concurrent requests. It does not track daily quotas or split date ranges automatically.

Endpoint index

{siteIds} means a comma-separated list of at most 100 site IDs.

Area Endpoint Typed client method
Sites GET /sites/list listSites()
Sites GET /site/{siteId}/details getSiteDetails()
Sites GET /site/{siteId}/dataPeriod getSiteDataPeriod()
Sites GET /sites/{siteIds}/dataPeriod Use get<T>()
Energy GET /site/{siteId}/energy getSiteEnergy()
Energy GET /sites/{siteIds}/energy Use get<T>()
Energy GET /site/{siteId}/timeFrameEnergy Use get<T>()
Energy GET /sites/{siteIds}/timeFrameEnergy Use get<T>()
Power GET /site/{siteId}/power getSitePower()
Power GET /sites/{siteIds}/power Use get<T>()
Overview GET /site/{siteId}/overview getSiteOverview()
Overview GET /sites/{siteIds}/overview Use get<T>()
Meters GET /site/{siteId}/powerDetails getSitePowerDetails()
Meters GET /site/{siteId}/energyDetails getSiteEnergyDetails()
Flow GET /site/{siteId}/currentPowerFlow getCurrentPowerFlow()
Storage GET /site/{siteId}/storageData Use get<T>()
Environment GET /site/{siteId}/envBenefits Use get<T>()
Equipment GET /equipment/{siteId}/list listSiteEquipment()
Equipment GET /site/{siteId}/inventory getSiteInventory()
Equipment GET /equipment/{siteId}/{serialNumber}/data Use get<T>()
Meters GET /site/{siteId}/meters Use get<T>()

Site endpoints

List sites

GET /sites/list

Returns sites available to an account-level key. A site-level key may not be able to use this endpoint meaningfully.

Parameter Required Default Description
size No 100 Page size, maximum 100.
startIndex No 0 Zero-based first result.
searchText No - Searches name, notes, address, city, zip, and country. Full-address search is no longer supported.
sortProperty No - name, country, state, city, address, zip, status, peakPower, installationDate, amount, or maxSeverity.
sortOrder No ASC ASC or DESC.
Status No Active,Pending Active, Pending, Disabled, or All. The parameter name begins with uppercase S.

Site objects can contain:

  • id, accountId, name, status, type, and notes
  • peakPower, currency, installationDate, and ptoDate
  • location with country, state, city, address, address2, zip, and time zone
  • alertQuantity and alertSeverity for account-level keys
  • publicSettings with public name and visibility
  • API-specific uris

The PDF examples use Sites.list, while the live JSON API currently returns sites.site. The package follows the live response and exposes { count, site }.

Site details

GET /site/{siteId}/details

Returns one site object with the same core metadata as the site list. Response root: details.

Site data period

GET /site/{siteId}/dataPeriod
GET /sites/{siteIds}/dataPeriod

Returns the first and last available production timestamps. For a site that is not transmitting, startDate and endDate can be null.

Single-site response root:

{
  "dataPeriod": {
    "startDate": "YYYY-MM-DD hh:mm:ss",
    "endDate": "YYYY-MM-DD hh:mm:ss"
  }
}

The bulk response adds count and a list whose entries include id.

Energy endpoints

Energy time series

GET /site/{siteId}/energy
GET /sites/{siteIds}/energy
Parameter Required Description
startDate Yes Start date in YYYY-MM-DD.
endDate Yes End date in YYYY-MM-DD.
timeUnit No Defaults to DAY; accepts QUARTER_OF_AN_HOUR, HOUR, DAY, WEEK, MONTH, or YEAR.

Limits:

  • DAY: at most one year.
  • QUARTER_OF_AN_HOUR or HOUR: at most one month.
  • The PDF does not state an additional range limit for week, month, or year.

Response root energy contains timeUnit, unit, and values. Each value has date and a numeric or null value. The regular energy endpoint matches the Site Dashboard calculation.

The bulk response adds count and a list of { id, values }.

Total energy for a date range

GET /site/{siteId}/timeFrameEnergy
GET /sites/{siteIds}/timeFrameEnergy
Parameter Required Description
startDate Yes Start date in YYYY-MM-DD.
endDate Yes End date in YYYY-MM-DD.

Maximum range: one year.

Response root timeFrameEnergy contains energy and unit. The bulk response contains unit, count, and { id, energy } entries.

This endpoint reports on-grid energy. On storage or backup sites it may differ from the Site Dashboard; use /energy when dashboard-equivalent values are required.

Detailed energy by meter

GET /site/{siteId}/energyDetails
Parameter Required Description
startTime Yes Start in site-local YYYY-MM-DD hh:mm:ss.
endTime Yes End in site-local YYYY-MM-DD hh:mm:ss.
timeUnit No Defaults to DAY; accepts all six common time units.
meters No Comma-separated PRODUCTION, CONSUMPTION, SELFCONSUMPTION, FEEDIN, and/or PURCHASED.

Limits:

  • QUARTER_OF_AN_HOUR or HOUR: at most one month.
  • DAY: at most one year.
  • WEEK, MONTH, or YEAR: no documented period limit.

Response root energyDetails contains timeUnit, unit, and meters. Each meter has type and values; a missing measurement may omit value entirely.

Power endpoints

Site power

GET /site/{siteId}/power
GET /sites/{siteIds}/power
Parameter Required Description
startTime Yes Start in site-local YYYY-MM-DD hh:mm:ss.
endTime Yes End in site-local YYYY-MM-DD hh:mm:ss.

Maximum range: one month. Resolution is 15 minutes. Response root power contains timeUnit, unit, and values. Missing values can be null.

The bulk response adds count and a list of { id, values }.

Detailed power by meter

GET /site/{siteId}/powerDetails
Parameter Required Description
startTime Yes Start in site-local YYYY-MM-DD hh:mm:ss.
endTime Yes End in site-local YYYY-MM-DD hh:mm:ss.
meters No Comma-separated PRODUCTION, CONSUMPTION, SELFCONSUMPTION, FEEDIN, and/or PURCHASED.

Maximum range: one month. Response root powerDetails contains a fixed QUARTER_OF_AN_HOUR time unit, the measurement unit, and per-meter series. A missing measurement may omit value entirely.

Overview and live power flow

Site overview

GET /site/{siteId}/overview
GET /sites/{siteIds}/overview

Response root overview contains:

  • lastUpdateTime
  • currentPower.power
  • lastDayData.energy
  • lastMonthData.energy
  • lastYearData.energy
  • lifeTimeData.energy and lifetime revenue
  • Revenue fields can also appear in the period summaries.

The bulk response contains count and a list with id on every overview.

Current power flow

GET /site/{siteId}/currentPowerFlow

If unsupported, the API may return an empty power-flow object. Otherwise, siteCurrentPowerFlow contains:

  • unit
  • connections entries with from and to
  • GRID and LOAD
  • Optional PV
  • Optional STORAGE

Every component provides status (Active, Idle, or Disabled) and a positive currentPower. Direction comes from connections, not the sign. Storage can additionally provide chargeLevel, critical, and timeLeft.

Storage data

GET /site/{siteId}/storageData
Parameter Required Description
startTime Yes Start in site-local YYYY-MM-DD hh:mm:ss.
endTime Yes End in site-local YYYY-MM-DD hh:mm:ss.
serials No Comma-separated battery serial numbers. Defaults to every battery at the site.

Maximum range: seven days.

Response root storageData contains batteryCount and batteries. A battery contains serialNumber, nameplate, modelNumber, telemetryCount, and telemetries. Telemetry can include:

  • timeStamp
  • power (positive means charging, negative means discharging)
  • batteryState: 0 invalid, 1 standby, 2 thermal management, 3 enabled, 4 fault
  • Lifetime energy charged and discharged
  • Full-pack energy available
  • Internal temperature
  • AC grid charging energy
  • State of charge from 0 to 100 percent

The documentation warns that some lifetime battery energy values are aggregated and can be incomplete when telemetry is missing. They are not revenue-grade.

Environmental benefits

GET /site/{siteId}/envBenefits
Parameter Required Description
systemUnits No Case-sensitive Metrics or Imperial.

Response root envBenefits contains gasEmissionSaved (units, co2, so2, and nox), treesPlanted, and lightBulbs.

Equipment endpoints

Components list

GET /equipment/{siteId}/list

Returns inverters and SMIs with name, manufacturer, model, and serialNumber.

The PDF example shows a top-level list; the live API currently wraps the result in reporters with count and list. The package follows the live response.

Inventory

GET /site/{siteId}/inventory

Response root Inventory can contain arrays for:

  • inverters
  • thirdPartyInverters
  • smiList
  • meters
  • sensors
  • gateways
  • batteries

Fields vary by device type. Common fields include names, manufacturer, model, serial number (SN or serialNumber), firmware versions, communication method, connected device serials, connected optimizer count, and battery nameplate capacity.

Inverter technical data

GET /equipment/{siteId}/{serialNumber}/data
Parameter Required Description
startTime Yes Start in site-local YYYY-MM-DD hh:mm:ss.
endTime Yes End in site-local YYYY-MM-DD hh:mm:ss.

Maximum range: seven days.

Response root data contains count and inverter telemetry. Unsupported fields are omitted. Depending on inverter type and firmware, telemetry can contain:

  • Timestamp, inverter mode, and operation mode
  • Total active power, DC voltage, power limit, total energy, temperature, and ground-fault resistance
  • Per-phase current, voltage, frequency, apparent power, active power, reactive power, and power factor
  • Phase-to-neutral and phase-to-phase voltages where applicable

Inverter modes include normal states such as off, sleeping, starting, MPPT, throttled, shutdown, fault, and standby, plus several locked states. Operation mode 0 is on-grid, 1 is off-grid using PV or battery, and 2 is off-grid with a generator present.

Meter lifetime data

GET /site/{siteId}/meters
Parameter Required Description
startTime Yes Start in site-local YYYY-MM-DD hh:mm:ss.
endTime Yes End in site-local YYYY-MM-DD hh:mm:ss.
timeUnit No Defaults to DAY; accepts all six common time units.
meters No Comma-separated Production, Consumption, FeedIn, and/or Purchased.

Response root meterEnergyDetails contains timeUnit, unit, and meters. Each meter includes meterSerialNumber, connectedSolaredgeDeviceSN, model, meterType, and lifetime-energy values by timestamp.

Bulk endpoint behavior

Bulk endpoints use comma-separated IDs directly in the path:

GET /sites/1,4,8/overview
  • Maximum 100 site IDs.
  • Responses normally contain count and list inside the endpoint root.
  • Each list item includes the site id.
  • If the key lacks permission for any requested site, the entire request can fail with 403.
  • Dates are interpreted in each site's own time zone.

March 2026 removals and changes

Do not build new integrations against these removed endpoints or capabilities:

  • Site Image
  • Installer Logo Image
  • Equipment Change Log
  • Account List
  • Sensor List and Sensor Data
  • API Versions: Current and Supported
  • CSV and XML response formats
  • CreationTime site-list sorting
  • Full-address matching in searchText

Package usage

import { createSolarEdgeClientFromEnv } from "@solar-dash/solaredgeapi";

const client = createSolarEdgeClientFromEnv();

const [overview, powerFlow] = await Promise.all([
  client.getSiteOverview(),
  client.getCurrentPowerFlow(),
]);

For an endpoint without a typed method, use the authenticated generic reader:

type EnvironmentalBenefitsResponse = {
  envBenefits: {
    gasEmissionSaved: {
      units: string;
      co2: number;
      so2: number;
      nox: number;
    };
    treesPlanted: number;
    lightBulbs: number;
  };
};

const siteId = process.env.SOLAREDGE_SITE_ID;
if (!siteId) {
  throw new Error("Missing SOLAREDGE_SITE_ID");
}

const response = await client.get<EnvironmentalBenefitsResponse>(
  `/site/${siteId}/envBenefits`,
  { systemUnits: "Metrics" },
);