Enphase Energy System Details And Telemetry API

System Details And Telemetry API

Operations 32

GET /api/v1/systems/{site_id}/{serial_no}/evse_telemetry Retrieves telemetry data of the EVSE charger at regular intervals #
GET /api/v1/systems/{site_id}/{serial_no}/evse_lifetime Retrieves daily time-series telemetry data of the EVSE charger #
GET /api/v1/systems/{site_id}/telemetry/production_micro Get telemetry for all production micros for a site #
GET /api/v1/systems/{site_id}/telemetry/production_meter_readings To retrieve the last known reading of each production meter on the system as of the requested time #
GET /api/v1/systems/{site_id}/telemetry/production_meter Get telemetry for all production meters for a site #
GET /api/v1/systems/{site_id}/telemetry/import Get the import telemetry data per interval for a given site #
GET /api/v1/systems/{site_id}/telemetry/export Get the export telemetry data per interval for a given site #
GET /api/v1/systems/{site_id}/telemetry/consumption_meter_readings To retrieve the last known reading of each consumption meter on the system as of the requested time #
GET /api/v1/systems/{site_id}/telemetry/consumption_meter Get telemetry for all consumption meters for a site #
GET /api/v1/systems/{site_id}/telemetry/battery Get telemetry for all batteries for a site #
GET /api/v1/systems/{site_id}/summary Get a site summary #
GET /api/v1/systems/{site_id}/storm_guard_settings Get the current storm guard settings of a site #
GET /api/v1/systems/{site_id}/storage_meter_readings To retrieve the last known reading of each storage meter on the system as of the requested time #
GET /api/v1/systems/{site_id}/site_open_events To retrieve the list of open events for a site #
GET /api/v1/systems/{site_id}/site_events To retrieve the list of events for a site #
GET /api/v1/systems/{site_id}/site_alarms To retrieve the list of alarms for a site #
GET /api/v1/systems/{site_id}/production_lifetime production_lifetime #
GET /api/v1/systems/{site_id}/pel_pcs_settings API to show the export limit, import limit, and PCS limit of a site #
GET /api/v1/systems/{site_id}/latest_telemetry Returns a system's last reported PV Power, Consumption Power and Battery Power in Watts. Returns the operational mode for Battery, HP, and EVSE. #
GET /api/v1/systems/{site_id}/import_lifetime import_lifetime #
GET /api/v1/systems/{site_id}/hp_telemetry Retrieves energy consumed by HP in regular intervals. #
GET /api/v1/systems/{site_id}/hp_lifetime Retrieves daily time-series telemetry data of the HP #
GET /api/v1/systems/{site_id}/grid_status_settings Get the current grid status settings of a site #
GET /api/v1/systems/{site_id}/export_lifetime export_lifetime #
GET /api/v1/systems/{site_id}/devices Get all devices for a system #
GET /api/v1/systems/{site_id}/devices/micros/{serial_no}/telemetry Retrieves telemetry for single micro/pcu. #
GET /api/v1/systems/{site_id}/devices/encharges/{serial_no}/telemetry Device level encharge telemetry data #
GET /api/v1/systems/{site_id}/consumption_lifetime consumption_lifetime #
GET /api/v1/systems/{site_id}/battery_settings Returns the current battery settings of a system #
GET /api/v1/systems/{site_id}/battery_lifetime battery_lifetime #
GET /api/v1/systems/search/{program_id} Get all systems enrolled into the program with details #
GET /api/v1/systems/event_types To retrieve the list of event_type_id along with event_description and recommended_action #

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/enphase-system-details-and-telemetry-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

enphase-system-details-and-telemetry-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Reference System Details And Telemetry API
  description: Integrate the VPP API into your application
  version: 1.1.0
servers:
- url: https://vpp.enphaseenergy.com
tags:
- name: System Details And Telemetry
  description: System Details And Telemetry API
paths:
  /api/v1/systems/{site_id}/{serial_no}/evse_telemetry:
    get:
      tags:
      - System Details And Telemetry
      summary: Retrieves telemetry data of the EVSE charger at regular intervals
      description: 'Retrieves telemetry data of the EVSE charger at regular intervals.

        If no start_at is specified, defaults to midnight today, in the timezone of the system. If the start_at specified is earlier than the system’s first reported date, then midnight of the system’s first reported date is considered as start_at.

        The end_at is calculated as the minimum of the time of the request and (start time + granularity).

        The meaning of granularity is as follow:

        If granularity is 15mins, maximum 1 intervals will appear in response. If granularity is day, maximum 96 intervals will appear in response where each interval is of 15 mins duration.

        The requested start date must be within 2 years from current date.

        '
      operationId: getDeviceLevelEVSETelemetry
      parameters:
      - name: site_id
        in: path
        description: Unique Id of the site
        required: true
        schema:
          type: string
      - name: serial_no
        in: path
        description: Serial Number of the EV Charger
        required: true
        schema:
          type: string
      - name: start_at
        in: query
        description: 'Start time for fetching the telemetry data in Epoch time format. Defaults to midnight

          '
        required: false
        schema:
          type: integer
          format: int64
      - name: start_date
        in: query
        description: "Start date for fetching the telemetry data in yyyy-mm-dd format\n If no start_date is specified, defaults to midnight today, in the timezone of the system.\n"
        required: false
        schema:
          type: string
      - name: interval_duration
        in: query
        description: 'Size of the interval. Can be 5mins, or 15mins. Site must be configured to 5 min telemetry for this to be supported. Defaults to 15mins

          '
        required: false
        schema:
          type: string
          default: 15mins
      - name: granularity
        in: query
        description: 'The granularity of the telemetry data. Possible values are ''week'', ''day'', ''15mins'', ''5mins''. Default is ''day''

          '
        required: false
        schema:
          type: string
          default: day
      - name: end_date
        in: query
        description: 'End Date in YYYY-MM-DD format. If granularity is not provided, then defaults to current date

          '
        required: false
        schema:
          type: string
      - name: end_at
        in: query
        description: 'End time for fetching the telemetry data in Epoch time format.

          One can also use end_date in place of end_at for passing the end date as String date format YYYY-MM-DD.

          Only one of granularity and end_at/end_date should be passed.

          If granularity is not provided, then defaults to current time.

          '
        required: false
        schema:
          type: integer
          format: int64
      - name: x-api-key
        in: header
        description: Unique API Key of your account
        required: true
        schema:
          type: string
        example: your-api-key-here
      - name: Authorization
        in: header
        description: access_token generated from auth API must be passed as Authorization header
        required: true
        schema:
          type: string
        example: Bearer your-access-token
      responses:
        '200':
          description: Successfully retrieved device level EVSE telemetry data
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/DeviceLevelEVSETelemetryResponse'
              examples:
                EVSETelemetryExample:
                  summary: Response with 5-minute interval energy data
                  description: EVSETelemetryExample
                  value:
                    system_id: 698905955
                    granularity: day
                    interval_duration: 5mins
                    start_at: 1496526300
                    end_at: 1496527320
                    items: intervals
                    intervals:
                    - end_at: 1496527200
                      wh_consumed: 40.2
                    - end_at: 1496527260
                      wh_consumed: 30.8
                    - end_at: 1496527320
                      wh_consumed: 10.1
        '400':
          description: Bad Request
          content:
            '*/*':
              examples:
                case-0:
                  value: "{\n  \"code\": \"400\",\n  \"displayMessage\": \"Input date is incorrect. Date must be in yyyy-mm-dd format and must be a valid one\",\n  \"additionalInfo\": \"xxxx\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-1:
                  value: "{\n  \"code\": \"400\",\n  \"displayMessage\": \"Type Mismatch\",\n  \"additionalInfo\": \"Cannot cast the parameter to required type xxxx\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-2:
                  value: "{\n  \"code\": \"400\",\n  \"displayMessage\": \"Missing Parameter\",\n  \"additionalInfo\": \"Required xxx parameter abc is not present\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-3:
                  value: "{\n  \"code\": \"400\",\n  \"displayMessage\": \"Constraint Violation\",\n  \"additionalInfo\": \"xxxx\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-4:
                  value: "{\n  \"code\": \"400\",\n  \"displayMessage\": \"Content-Type invalid\",\n  \"additionalInfo\": \"Content type xxx not supported\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-5:
                  value: "{\n  \"code\": \"400\",\n  \"displayMessage\": \"Request headers or parameters are not appropriate\",\n  \"additionalInfo\": \"Request headers or parameters are not appropriate. Please check request headers and parameters\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
        '401':
          description: Unauthorized
          content:
            '*/*':
              examples:
                case-0:
                  value: "{\n  \"code\": \"401\",\n  \"displayMessage\": \"Authorization is not provided or invalid\",\n  \"additionalInfo\": \"Authorization is not provided or invalid. Please check your Authorization\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-1:
                  value: "{\n  \"code\": \"401\",\n  \"displayMessage\": \"You are not authorized for this access\",\n  \"additionalInfo\": \"You are not authorized for this access. Please check your access\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
        '403':
          description: Forbidden
          content:
            '*/*':
              examples:
                case-0:
                  value: "{\n  \"code\": \"403\",\n  \"displayMessage\": \"Site is not enrolled in any program which belongs to your account.\",\n  \"additionalInfo\": \"Site is not enrolled in any program which belongs to your account.\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-1:
                  value: "{\n  \"message\": \"Forbidden\"\n}"
                case-2:
                  value: "{\n  \"code\": \"403\",\n  \"displayMessage\": \"x-api-key is not provided or invalid\",\n  \"additionalInfo\": \"x-api-key is not provided or invalid. Please check your x-api-key\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-3:
                  value: "{\n  \"code\": \"403\",\n  \"displayMessage\": \"No account found for specified Authorization\",\n  \"additionalInfo\": \"No account found for specified Authorization. Please check your access_token\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-4:
                  value: "{\n  \"code\": \"403\",\n  \"displayMessage\": \"x-api-key is not valid for this account\",\n  \"additionalInfo\": \"x-api-key is not valid for this account. Please check your x-api-key\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-5:
                  value: "{\n  \"code\": \"403\",\n  \"displayMessage\": \"You do not have access to this resource\",\n  \"additionalInfo\": \"You do not have access to this resource. Please check your access\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
        '404':
          description: Not Found
          content:
            '*/*':
              examples:
                case-0:
                  value: "{\n  \"code\": \"404\",\n  \"displayMessage\": \"Requested resource Not Found\",\n  \"additionalInfo\": \"Requested resource Not Found. Please check your request\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
        '422':
          description: Unprocessable Entity
          content:
            '*/*':
              examples:
                case-0:
                  value: "{\n  \"code\": \"422\",\n  \"displayMessage\": \"Granularity value must be one of  'week', 'day', '15mins', '5mins'\",\n  \"additionalInfo\": \"xxxx\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-1:
                  value: "{\n  \"code\": \"422\",\n  \"displayMessage\": \"Interval duration must be one of  '5mins', '15mins'\",\n  \"additionalInfo\": \"xxxx\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-2:
                  value: "{\n  \"code\": \"422\",\n  \"displayMessage\": \"Error occurred while getting response from downstream server. Please refer to additionalInfo section for more details.\",\n  \"additionalInfo\": \"xxxx\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-3:
                  value: "{\n  \"code\": \"422\",\n  \"displayMessage\": \"Unprocessable Entity\",\n  \"additionalInfo\": \"Unprocessable Entity. Please check your request\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
  /api/v1/systems/{site_id}/{serial_no}/evse_lifetime:
    get:
      tags:
      - System Details And Telemetry
      summary: Retrieves daily time-series telemetry data of the EVSE charger
      description: 'Retrieves daily time-series telemetry data of the EVSE charger

        The number of data points returned in the response corresponds to days spanned between the start_date and end_date parameter mentioned in the request.

        Requested start_date of the time series data defaults to the system’s operational date. If the start_date is earlier than the system’s operational_date, then the response data begins with the system operational_date as start_date.

        Pass as String date format YYYY-MM-DD.If end_date is not specified, then it defaults to today.

        '
      operationId: getDeviceLevelEVSELifeTimeTelemetry
      parameters:
      - name: site_id
        in: path
        description: Unique Id of the site
        required: true
        schema:
          type: string
      - name: serial_no
        in: path
        description: Serial Number of the EV Charger
        required: true
        schema:
          type: string
      - name: start_date
        in: query
        description: 'Start date for fetching the daily time-series data. Pass as String date format yyyy-mm-dd. Defaults to the system’s operational date

          '
        required: false
        schema:
          type: string
      - name: end_date
        in: query
        description: 'End date for fetching the daily time-series data. Pass as String date format yyyy-mm-dd. Defaults to today.

          '
        required: false
        schema:
          type: string
      - name: x-api-key
        in: header
        description: Unique API Key of your account
        required: true
        schema:
          type: string
        example: your-api-key-here
      - name: Authorization
        in: header
        description: access_token generated from auth API must be passed as Authorization header
        required: true
        schema:
          type: string
        example: Bearer your-access-token
      responses:
        '200':
          description: Retrieved daily time-series telemetry data of the EVSE charger
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/EVSELifeTimeTelemetryResponse'
              examples:
                EVSELifeTimeExample:
                  summary: Daily EVSE energy consumption data
                  description: EVSELifeTimeExample
                  value:
                    system_id: 698905955
                    start_date: '2024-11-22'
                    end_date: '2024-11-28'
                    consumption:
                    - 40.1
                    - 35.3
                    - 40.4
                    - 20.6
                    - 15.2
                    - 10.3
                    - 2.9
        '400':
          description: Bad Request
          content:
            '*/*':
              examples:
                case-0:
                  value: "{\n  \"code\": \"400\",\n  \"displayMessage\": \"Input date is incorrect. Date must be in yyyy-mm-dd format and must be a valid one\",\n  \"additionalInfo\": \"xxxx\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-1:
                  value: "{\n  \"code\": \"400\",\n  \"displayMessage\": \"Type Mismatch\",\n  \"additionalInfo\": \"Cannot cast the parameter to required type xxxx\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-2:
                  value: "{\n  \"code\": \"400\",\n  \"displayMessage\": \"Missing Parameter\",\n  \"additionalInfo\": \"Required xxx parameter abc is not present\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-3:
                  value: "{\n  \"code\": \"400\",\n  \"displayMessage\": \"Constraint Violation\",\n  \"additionalInfo\": \"xxxx\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-4:
                  value: "{\n  \"code\": \"400\",\n  \"displayMessage\": \"Content-Type invalid\",\n  \"additionalInfo\": \"Content type xxx not supported\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-5:
                  value: "{\n  \"code\": \"400\",\n  \"displayMessage\": \"Request headers or parameters are not appropriate\",\n  \"additionalInfo\": \"Request headers or parameters are not appropriate. Please check request headers and parameters\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
        '401':
          description: Unauthorized
          content:
            '*/*':
              examples:
                case-0:
                  value: "{\n  \"code\": \"401\",\n  \"displayMessage\": \"Authorization is not provided or invalid\",\n  \"additionalInfo\": \"Authorization is not provided or invalid. Please check your Authorization\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-1:
                  value: "{\n  \"code\": \"401\",\n  \"displayMessage\": \"You are not authorized for this access\",\n  \"additionalInfo\": \"You are not authorized for this access. Please check your access\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
        '403':
          description: Forbidden
          content:
            '*/*':
              examples:
                case-0:
                  value: "{\n  \"code\": \"403\",\n  \"displayMessage\": \"Site is not enrolled in any program which belongs to your account.\",\n  \"additionalInfo\": \"Site is not enrolled in any program which belongs to your account.\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-1:
                  value: "{\n  \"message\": \"Forbidden\"\n}"
                case-2:
                  value: "{\n  \"code\": \"403\",\n  \"displayMessage\": \"x-api-key is not provided or invalid\",\n  \"additionalInfo\": \"x-api-key is not provided or invalid. Please check your x-api-key\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-3:
                  value: "{\n  \"code\": \"403\",\n  \"displayMessage\": \"No account found for specified Authorization\",\n  \"additionalInfo\": \"No account found for specified Authorization. Please check your access_token\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-4:
                  value: "{\n  \"code\": \"403\",\n  \"displayMessage\": \"x-api-key is not valid for this account\",\n  \"additionalInfo\": \"x-api-key is not valid for this account. Please check your x-api-key\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-5:
                  value: "{\n  \"code\": \"403\",\n  \"displayMessage\": \"You do not have access to this resource\",\n  \"additionalInfo\": \"You do not have access to this resource. Please check your access\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
        '404':
          description: Not Found
          content:
            '*/*':
              examples:
                case-0:
                  value: "{\n  \"code\": \"404\",\n  \"displayMessage\": \"Requested resource Not Found\",\n  \"additionalInfo\": \"Requested resource Not Found. Please check your request\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
        '422':
          description: Unprocessable Entity
          content:
            '*/*':
              examples:
                case-0:
                  value: "{\n  \"code\": \"422\",\n  \"displayMessage\": \"Error occurred while getting response from downstream server. Please refer to additionalInfo section for more details.\",\n  \"additionalInfo\": \"xxxx\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-1:
                  value: "{\n  \"code\": \"422\",\n  \"displayMessage\": \"Unprocessable Entity\",\n  \"additionalInfo\": \"Unprocessable Entity. Please check your request\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
  /api/v1/systems/{site_id}/telemetry/production_micro:
    get:
      tags:
      - System Details And Telemetry
      summary: Get telemetry for all production micros for a site
      description: 'Retrieves telemetry for all the production micros of a system.

        If no start_at is specified, defaults to midnight today, in the timezone of the system. If the start_at specified is earlier than the system''s first reported date, then midnight of the system''s first reported date is considered as start_at.

        The end_at is calculated as the minimum of the time of the request and (start time + granularity).

        The meaning of granularity is as follow:

        If granularity is 15mins, maximum 3 intervals will appear in response. If granularity is day, maximum 288 intervals will appear in response where each interval is of 5 mins duration.

        Default interval duration is 5mins. 15mins interval duration is also supported.

        The requested start date must be within 2 years from current date.

        By default start_at will appear in response. If start_date parameter is passed in the url, then start_date field will appear in response.

        By default end_at will appear in response. If end_date parameter is passed in the url then end_date field will appear in response.

        '
      operationId: getProductionMicroTelemetry
      parameters:
      - name: site_id
        in: path
        required: true
        schema:
          type: string
      - name: start_date
        in: query
        required: false
        schema:
          type: string
      - name: start_at
        in: query
        description: Start time for fetching the telemetry data in Epoch time format. Alternatively one can use start_date in place of start_at for passing the start date as String in YYYY-MM-DD format. By default start_at will appear in response. If start_date parameter is passed in the url, then start_date field will appear in response.
        required: false
        schema:
          type: integer
          format: int32
      - name: end_at
        in: query
        required: false
        schema:
          type: integer
          format: int32
      - name: end_date
        in: query
        required: false
        schema:
          type: string
      - name: granularity
        in: query
        description: 'The granularity of the telemetry data. Possible values are ''week'', ''day'', ''15mins''. Default is ''day''

          Available values : 15mins, day, week

          '
        required: false
        schema:
          type: string
      - name: interval_duration
        in: query
        description: 'Size of the interval. Possible values are ''5mins'', ''15mins''. Defaults to ''5mins''

          '
        required: false
        schema:
          type: string
          default: 5mins
      - name: x-api-key
        in: header
        description: Unique API Key of your account
        required: true
        schema:
          type: string
        example: your-api-key-here
      - name: Authorization
        in: header
        description: access_token generated from auth API must be passed as Authorization header
        required: true
        schema:
          type: string
        example: Bearer your-access-token
      responses:
        '200':
          description: Telemetry for all production micros
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/SystemsProductionMicroResponse'
              examples:
                UnixTimestampExample:
                  summary: Example using start_at and end_at timestamps
                  description: UnixTimestampExample
                  value:
                    system_id: 698905955
                    granularity: day
                    total_devices: 9
                    start_at: 1496526300
                    end_at: 1496528300
                    items: intervals
                    intervals:
                    - end_at: 1384122700
                      devices_reporting: 1
                      powr: 30
                      enwh: 40
                    - end_at: 1384122740
                      devices_reporting: 1
                      powr: 20
                      enwh: 40
                    meta:
                      status: normal
                      last_report_at: 1445619615
                      last_energy_at: 1445619033
                      operational_at: 1357023600
                ISODateExample:
                  summary: Example using ISO date fields
                  description: ISODateExample
                  value:
                    system_id: 698905955
                    granularity: day
                    total_devices: 9
                    start_date: '2024-09-22T00:00:00-04:00'
                    end_date: '2024-09-23T00:00:00-04:00'
                    items: intervals
                    intervals:
                    - end_at: 1384122700
                      devices_reporting: 1
                      powr: 30
                      enwh: 40
                    - end_at: 1384122740
                      devices_reporting: 1
                      powr: 20
                      enwh: 40
                    meta:
                      status: normal
                      last_report_at: 1445619615
                      last_energy_at: 1445619033
                      operational_at: 1357023600
        '400':
          description: Bad Request
          content:
            '*/*':
              examples:
                case-0:
                  value: "{\n  \"code\": \"400\",\n  \"displayMessage\": \"Input date is incorrect. Date must be in yyyy-mm-dd format and must be a valid one.\",\n  \"additionalInfo\": null,\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-1:
                  value: "{\n  \"code\": \"400\",\n  \"displayMessage\": \"Type Mismatch\",\n  \"additionalInfo\": \"Cannot cast the parameter to required type xxxx\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-2:
                  value: "{\n  \"code\": \"400\",\n  \"displayMessage\": \"Missing Parameter\",\n  \"additionalInfo\": \"Required xxx parameter abc is not present\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-3:
                  value: "{\n  \"code\": \"400\",\n  \"displayMessage\": \"Constraint Violation\",\n  \"additionalInfo\": \"xxxx\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-4:
                  value: "{\n  \"code\": \"400\",\n  \"displayMessage\": \"Content-Type invalid\",\n  \"additionalInfo\": \"Content type xxx not supported\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-5:
                  value: "{\n  \"code\": \"400\",\n  \"displayMessage\": \"Request headers or parameters are not appropriate\",\n  \"additionalInfo\": \"Request headers or parameters are not appropriate. Please check request headers and parameters\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
        '401':
          description: Unauthorized
          content:
            '*/*':
              examples:
                case-0:
                  value: "{\n  \"code\": \"401\",\n  \"displayMessage\": \"Authorization is not provided or invalid\",\n  \"additionalInfo\": \"Authorization is not provided or invalid. Please check your Authorization\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-1:
                  value: "{\n  \"code\": \"401\",\n  \"displayMessage\": \"You are not authorized for this access\",\n  \"additionalInfo\": \"You are not authorized for this access. Please check your access\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
        '403':
          description: Forbidden
          content:
            '*/*':
              examples:
                case-0:
                  value: "{\n  \"code\": \"403\",\n  \"displayMessage\": \"Site is not enrolled in any program which belongs to your account.\",\n  \"additionalInfo\": \"Site is not enrolled in any program which belongs to your account.\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-1:
                  value: "{\n  \"message\": \"Forbidden\"\n}"
                case-2:
                  value: "{\n  \"code\": \"403\",\n  \"displayMessage\": \"x-api-key is not provided or invalid\",\n  \"additionalInfo\": \"x-api-key is not provided or invalid. Please check your x-api-key\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-3:
                  value: "{\n  \"code\": \"403\",\n  \"displayMessage\": \"No account found for specified Authorization\",\n  \"additionalInfo\": \"No account found for specified Authorization. Please check your access_token\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-4:
                  value: "{\n  \"code\": \"403\",\n  \"displayMessage\": \"x-api-key is not valid for this account\",\n  \"additionalInfo\": \"x-api-key is not valid for this account. Please check your x-api-key\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-5:
                  value: "{\n  \"code\": \"403\",\n  \"displayMessage\": \"You do not have access to this resource\",\n  \"additionalInfo\": \"You do not have access to this resource. Please check your access\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
        '404':
          description: Not Found
          content:
            '*/*':
              examples:
                case-0:
                  value: "{\n  \"code\": \"404\",\n  \"displayMessage\": \"Requested resource Not Found\",\n  \"additionalInfo\": \"Requested resource Not Found. Please check your request\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
        '422':
          description: Unprocessable Entity
          content:
            '*/*':
              examples:
                case-0:
                  value: "{\n  \"code\": \"422\",\n  \"displayMessage\": \"Error occurred while getting response from downstream server. Please refer to additionalInfo section for more details.\",\n  \"additionalInfo\": \"xxxx\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-1:
                  value: "{\n  \"code\": \"422\",\n  \"displayMessage\": \"Unprocessable Entity\",\n  \"additionalInfo\": \"Unprocessable Entity. Please check your request\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
  /api/v1/systems/{site_id}/telemetry/production_meter_readings:
    get:
      tags:
      - System Details And Telemetry
      summary: To retrieve the last known reading of each production meter on the system as of the requested time
      description: 'Returns the last known reading of each production meter on the system as of the requested time,

        regardless of whether the meter is currently in service or retired. Read_at is the time at which the reading was taken,

        and is always less than or equal to the requested end_at. Commonly, the reading will be within 30 minutes of the requested end_at.

        However, larger deltas can occur and do not necessarily mean there is a problem with the meter or the system.

        Systems that are configured to report infrequently can show large deltas on all meters, especially when end_at is close to the current time.

        Meters that have been retired from a system will show an end_at that doesn’t change, and that eventually is far away from the current time.

        '
      operationId: getProductionMeterReadings
      parameters:
      - name: site_id
        in: path
        description: Unique Id of the site
        required: true
        schema:
          type: string
      - name: end_at
        in: query
        description: 'End of reporting period in Unix epoch time. If no end is specified, defaults to the time of the request.

          If the end is later than the last reported interval the response data ends with the last reported interval

          '
        required: false
        schema:
          type: integer
          format: int64
      - name: x-api-key
        in: header
        description: Unique API Key of your account
        required: true
        schema:
          type: string
        example: your-api-key-here
      - name: Authorization
        in: header
        description: access_token generated from auth API must be passed as Authorization header
        required: true
        schema:
          type: string
        example: Bearer your-access-token
      responses:
        '200':
          description: Retrieved the last known reading of each production meter on the system as of the requested time.
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ProductionMeterReadings'
              examples:
                ProductionMeterReadingsExample:
                  summary: List of last known reading of each production meter on the system as of the requested time.
                  description: ProductionMeterReadingsExample
                  value:
                    system_id: 66
                    meter_readings:
                    - serial_num: 123123123123EIM2
                      value: 6180635
                      read_at: 1473901200
                    meta:
                      status: normal
                      last_report_at: 1473902079
                      last_energy_at: 1473901200
                      operational_at: 1357023600
        '400':
          description: Bad Request
          content:
            '*/*':
              examples:
                case-0:
                  value: "{\n  \"code\": \"400\",\n  \"displayMessage\": \"Type Mismatch\",\n  \"additionalInfo\": \"Cannot cast the parameter to required type xxxx\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-1:
                  value: "{\n  \"code\": \"400\",\n  \"displayMessage\": \"Missing Parameter\",\n  \"additionalInfo\": \"Required xxx parameter abc is not present\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-2:
                  value: "{\n  \"code\": \"400\",\n  \"displayMessage\": \"Constraint Violation\",\n  \"additionalInfo\": \"xxxx\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-3:
                  value: "{\n  \"code\": \"400\",\n  \"displayMessage\": \"Content-Type invalid\",\n  \"additionalInfo\": \"Content type xxx not supported\",\n  \"errorRefNo\": \"e20fdf9aa241bea9\",\n}"
                case-4:
                  value: "{\n  \"code\": 

# --- truncated at 32 KB (304 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/enphase/refs/heads/main/openapi/enphase-system-details-and-telemetry-api-openapi.yml