Enphase Energy Device Level Monitoring API

The Device Level Monitoring API from Enphase Energy — 7 operation(s) for device level monitoring.

Operations 7

GET /api/v4/systems/{system_id}/devices/micros/telemetry Retrieves telemetry for all micros/PCUs in a system.
GET /api/v4/systems/{system_id}/devices/micros/{serial_no}/telemetry Retrieves telemetry for single micro/pcu.
GET /api/v4/systems/{system_id}/devices/encharges/{serial_no}/telemetry Retrieves telemetry for single Encharge
GET /api/v4/systems/{system_id}/{serial_no}/evse_lifetime Retrieves daily time-series telemetry data of the 3rd party EVSE charger
GET /api/v4/systems/{system_id}/hp_lifetime Retrieves daily time-series telemetry data of the HP
GET /api/v4/systems/{system_id}/{serial_no}/evse_telemetry Retrieves telemetry data of the EVSE charger at regular intervals.
GET /api/v4/systems/{system_id}/hp_telemetry Retrieves energy consumed by HP in regular intervals.

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-device-level-monitoring-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-device-level-monitoring-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Device Level Monitoring API
  version: v4
servers:
- url: https://api-qa2.enphaseenergy.com
tags:
- name: Device Level Monitoring
paths:
  /api/v4/systems/{system_id}/devices/micros/telemetry:
    get:
      summary: Retrieves telemetry for all micros/PCUs in a system.
      description: 'Retrieves paginated telemetry for all micro-inverters (PCUs) in 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 follows:

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

        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.

        Page size is limited to a maximum of 20.

        Empty list will be returned if the site last reported interval < requested start time < current time.'
      parameters:
      - name: system_id
        in: path
        description: System id
        required: true
        schema:
          type: integer
      - name: page
        in: query
        description: Page number. Defaults to 1.
        required: false
        schema:
          type: integer
      - name: size
        in: query
        description: Number of devices per page. Defaults to 10. Maximum is 20.
        required: false
        schema:
          type: integer
      - 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.
        schema:
          type: integer
      - name: end_at
        in: query
        description: End time for fetching the telemetry data in Epoch time format. Alternatively one can use end_date in place of end_at for passing the end date as String in YYYY-MM-DD format. 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.
        schema:
          type: integer
      - name: start_date
        in: query
        description: Start date for fetching the telemetry data in YYYY-MM-DD format. If passed, start_date will appear in response instead of start_at.
        schema:
          type: string
      - name: end_date
        in: query
        description: End date for fetching the telemetry data in YYYY-MM-DD format. If passed, end_date will appear in response instead of end_at.
        schema:
          type: string
      - name: granularity
        in: query
        description: The granularity of the telemetry data. Possible values are 'week', 'day', '15mins', '5mins'. Default is 'day'.
        schema:
          type: string
          enum:
          - 5mins
          - 15mins
          - day
          - week
      tags:
      - Device Level Monitoring
      responses:
        '200':
          description: Telemetry for all micros in the system
          content:
            application/json:
              schema:
                type: object
                properties:
                  system_id:
                    type: integer
                    description: The unique numeric ID of the system
                  total_devices:
                    type: integer
                    description: Total number of micro-inverters in the system across all pages
                  page:
                    type: integer
                    description: Current page number
                  page_size:
                    type: integer
                    description: Number of devices returned in this page
                  start_at:
                    type: integer
                    description: Start time of the data series in Epoch format. Either start_at or start_date will be present depending on the request parameter used.
                  end_at:
                    type: integer
                    description: End time of the data series in Epoch format. Either end_at or end_date will be present depending on the request parameter used.
                  start_date:
                    type: string
                    description: Start date of the data series in YYYY-MM-DD format. Present only if start_date was passed as a request parameter.
                  end_date:
                    type: string
                    description: End date of the data series in YYYY-MM-DD format. Present only if end_date was passed as a request parameter.
                  granularity:
                    type: string
                    description: The granularity of the telemetry data. Possible values are 'week', 'day', '15mins', '5mins'. Default is 'day'.
                  items:
                    type: string
                    description: The list key, always 'intervals'
                  devices:
                    type: array
                    description: List of micro-inverter telemetry objects for this page
                    items:
                      type: object
                      properties:
                        serial_number:
                          type: string
                          description: Serial number of the micro-inverter
                        intervals:
                          type: array
                          description: List of telemetry intervals for this device
                          items:
                            type: object
                            properties:
                              end_at:
                                type: integer
                                description: End time of the telemetry interval in Epoch format
                              powr:
                                type: integer
                                description: Average power produced by this micro-inverter during this interval, measured in Watts
                              enwh:
                                type: integer
                                description: Energy produced by this micro-inverter during this interval, measured in Watt-Hours
              example:
                system_id: 1765
                total_devices: 25
                page: 1
                page_size: 10
                start_at: 1496526300
                end_at: 1496529300
                granularity: day
                items: intervals
                devices:
                - serial_number: '123456789012'
                  intervals:
                  - end_at: 1496526300
                    powr: 30
                    enwh: 40
                  - end_at: 1496526600
                    powr: 20
                    enwh: 40
                - serial_number: '123456789013'
                  intervals:
                  - end_at: 1496526300
                    powr: 25
                    enwh: 35
                  - end_at: 1496526600
                    powr: 18
                    enwh: 30
        '401':
          description: Authentication Error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: Error Type
                  details:
                    type: string
                    description: Error Details
                  code:
                    type: integer
                    description: Error Code
              example:
                message: Not Authorized
                details: User is not authorized
                code: 401
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: Error Type
                  details:
                    type: string
                    description: Error Details
                  code:
                    type: integer
                    description: Error Code
              example:
                message: Forbidden
                details: Not authorized to access this resource
                code: 403
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: Error Type
                  details:
                    type: string
                    description: Error Details
                  code:
                    type: integer
                    description: Error Code
              example:
                message: Not Found
                details: System not found for {:id=>"1"}
                code: 404
        '405':
          description: Method Not Allowed
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                  message:
                    type: array
                    items:
                      type: string
              example:
                reason: '405'
                message:
                - Method not allowed
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: Error Type
                  details:
                    type: string
                    description: Error Details
                  code:
                    type: integer
                    description: Error Code
              example:
                message: Unprocessable Entity
                details: Invalid request because of 'Requested date is in the future'
                code: 422
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: Error Type
                  details:
                    type: string
                    description: Error Details
                  code:
                    type: integer
                    description: Error Code
                  period:
                    type: string
                    description: Quota exceeded for minute/month
                  period_start:
                    type: integer
                    description: Starting period timestamp
                  period_end:
                    type: integer
                    description: Ending period timestamp
                  limit:
                    type: integer
                    description: Limit count for the period
              example:
                message: Too Many Requests
                details: Usage limit exceeded for plan Kilowatt
                code: 429
        '501':
          description: Not Implemented
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                  message:
                    type: array
                    items:
                      type: string
              example:
                reason: '501'
                message:
                - Not Implemented
  /api/v4/systems/{system_id}/devices/micros/{serial_no}/telemetry:
    get:
      summary: Retrieves telemetry for single micro/pcu.
      description: "Retrieves telemetry for single micro/pcu. \nIf 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.\nThe end_at is calculated as the minimum of the time of the request and (start time + granularity). \nThe meaning of granularity is as follow:\n\nIf 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.\n \n The requested start date must be within 2 years from current date. \n 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. \nBy default end_at will appear in response. If end_date parameter is passed in the url then end_date field will appear in response. Empty list will be returned if the last interval < requested start time < current time."
      parameters:
      - name: system_id
        in: path
        description: System id
        required: true
        schema:
          type: integer
      - name: serial_no
        in: path
        description: Serial Number of the individual solar Microinverter
        required: true
        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.
        schema:
          type: integer
      - name: granularity
        in: query
        description: The granularity of the telemetry data. Possible values are 'week', 'day', '15mins', '5mins'. Default is 'day'
        schema:
          type: string
          enum:
          - 5mins
          - 15mins
          - day
          - week
      tags:
      - Device Level Monitoring
      responses:
        '200':
          description: Telemetry for micro
          content:
            application/json:
              schema:
                type: object
                properties:
                  system_id:
                    type: integer
                    description: The unique numeric ID of the system
                  serial_number:
                    type: string
                    description: The device serial number
                  granularity:
                    type: string
                    description: The granularity of the telemetry data. Possible values are 'week', 'day', '15mins', '5mins'. Default is 'day'
                  total_devices:
                    type: integer
                    description: Shall always be 1 since this is telemetry from individual micros
                  start_at:
                    type: integer
                    description: Start Time of the data series. Either Start_date or start_at will be present. By default start_at will appear in response. If start_date parameter passed in the url then start_date field will appear in response.
                  end_at:
                    type: integer
                    description: End Time of the data series. Either end_date or end_at will be present. By default end_at will appear in response. If end_date parameter passed in the url then end_date field will appear in response.
                  items:
                    type: string
                    description: The list key 'intervals'
                  intervals:
                    type: array
                    items:
                      properties:
                        end_at:
                          type: integer
                          description: End time of the telemetry interval
                        powr:
                          type: integer
                          description: Average power (in Watt) produced by all the microinverters during this interval, measured in Watts.
                        enwh:
                          type: integer
                          description: Energy produced (in Watt-Hours) from all the microinverters combined during that period
              example:
                system_id: 1765
                serial_number: '12345'
                granularity: day
                total_devices: 1
                start_at: 1496526300
                end_at: 1496529300
                items: intervals
                intervals:
                - end_at: 1496526300
                  powr: 30
                  enwh: 40
                - end_at: 1496526600
                  powr: 20
                  enwh: 40
        '401':
          description: Authentication Error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: Error Type
                  details:
                    type: string
                    description: Error Details
                  code:
                    type: integer
                    description: Error Code
              example:
                message: Not Authorized
                details: User is not authorized
                code: 401
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: Error Type
                  details:
                    type: string
                    description: Error Details
                  code:
                    type: integer
                    description: Error Code
              example:
                message: Forbidden
                details: Not authorized to access this resource
                code: 403
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: Error Type
                  details:
                    type: string
                    description: Error Details
                  code:
                    type: integer
                    description: Error Code
              example:
                message: Not Found
                details: Micro not found for {:id=>"1"}
                code: 404
        '405':
          description: Method Not Allowed
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                  message:
                    type: array
                    items:
                      type: string
              example:
                reason: '405'
                message:
                - Method not allowed
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: Error Type
                  details:
                    type: string
                    description: Error Details
                  code:
                    type: integer
                    description: Error Code
              example:
                message: Unprocessable Entity
                details: Invalid request because of 'Requested date range is invalid for this system. {:start_at=>1566930600, :end_at=>1565333100, :first_interval=>1565072100, :last_interval=>1565333700}'
                code: 422
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: Error Type
                  details:
                    type: string
                    description: Error Details
                  code:
                    type: integer
                    description: Error Code
                  period:
                    type: string
                    description: Quota exceeded for minute/month
                  period_start:
                    type: integer
                    description: Starting period timestamp
                  period_end:
                    type: integer
                    description: Ending period timestamp
                  limit:
                    type: integer
                    description: Limit count for the period
              example:
                message: Too Many Requests
                details: Usage limit exceeded for plan Kilowatt
                code: 429
                period: minute
                period_start: 1623825660
                period_end: 1623825720
                limit: 5
        '501':
          description: Not Implemented
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                  message:
                    type: array
                    items:
                      type: string
              example:
                reason: '501'
                message:
                - Not Implemented
  /api/v4/systems/{system_id}/devices/encharges/{serial_no}/telemetry:
    get:
      summary: Retrieves telemetry for single Encharge
      description: "Retrieves telemetry for single Encharge. \nIf 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.\nThe end_at is calculated as the minimum of the time of the request and (start time + granularity). \nThe meaning of granularity is as follow:\n\nIf granularity is 15mins, maximum 1 interval will appear in response. If granularity is day, maximum 96 intervals, and if granularity is week, maximum 672 intervals,  will appear in response where each interval is of 15 mins duration.\n \n The requested start date must be within 2 years from current date. \n 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. \nBy default end_at will appear in response. If end_date parameter is passed in the url then end_date field will appear in response. Empty list will be returned if the last interval < requested start time < current time."
      parameters:
      - name: system_id
        in: path
        description: System id
        required: true
        schema:
          type: integer
      - name: serial_no
        in: path
        description: Serial Number of the encharge
        required: true
        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.
        schema:
          type: integer
      - name: granularity
        in: query
        description: The granularity of the telemetry data. Possible values are 'week', 'day', '15mins', '5mins'. Default is 'day'
        schema:
          type: string
          enum:
          - 5mins
          - 15mins
          - day
          - week
      tags:
      - Device Level Monitoring
      responses:
        '200':
          description: Telemetry for the Encharge
          content:
            application/json:
              schema:
                type: object
                properties:
                  system_id:
                    type: integer
                    description: System id
                  serial_number:
                    type: string
                    description: The device serial number
                  granularity:
                    type: string
                    description: The granularity of the telemetry data. Possible values are 'week', 'day', '15mins', '5mins'. Default is 'day'
                  total_devices:
                    type: integer
                    description: Shall always be 1 since this is telemetry from individual micros
                  start_at:
                    type: integer
                    description: Start Time of the data series. Either Start_date or start_at will be present. By default start_at will appear in response. If start_date parameter passed in the url then start_date field will appear in response.
                  end_at:
                    type: integer
                    description: End Time of the data series. Either end_date or end_at will be present. By default end_at will appear in response. If end_date parameter passed in the url then end_date field will appear in response.
                  items:
                    type: string
                    description: The list key 'intervals'
                  intervals:
                    type: array
                    items:
                      properties:
                        end_at:
                          type: integer
                          description: End time of the telemetry interval.
                        charge:
                          type: object
                          properties:
                            enwh:
                              type: integer
                              description: Energy into the battery during the interval
                        discharge:
                          type: object
                          properties:
                            enwh:
                              type: integer
                              description: Energy discharged from the battery during the interval
                        soc:
                          type: object
                          properties:
                            percent:
                              type: integer
                              description: Battery soc percentage
                  last_reported_time:
                    type: integer
                    description: Last reported timestamp
                  last_reported_soc:
                    type: string
                    description: Last reported soc percentage
              example:
                system_id: 1765
                serial_number: '12345'
                granularity: day
                total_devices: 1
                start_at: 1496526300
                end_at: 1496529300
                items: intervals
                intervals:
                - end_at: 1384122700
                  charge:
                    enwh: 40
                  discharge:
                    enwh: 0
                  soc:
                    percent: 25
                last_reported_time: 1650349170
                last_reported_soc: 99%
        '401':
          description: Authentication Error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: Error Type
                  details:
                    type: string
                    description: Error Details
                  code:
                    type: integer
                    description: Error Code
              example:
                message: Not Authorized
                details: User is not authorized
                code: 401
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: Error Type
                  details:
                    type: string
                    description: Error Details
                  code:
                    type: integer
                    description: Error Code
              example:
                message: Forbidden
                details: Not authorized to access this resource
                code: 403
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: Error Type
                  details:
                    type: string
                    description: Error Details
                  code:
                    type: integer
                    description: Error Code
              example:
                message: Not Found
                details: Encharge not found for {:id=>"1"}
                code: 404
        '405':
          description: Method Not Allowed
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                  message:
                    type: array
                    items:
                      type: string
              example:
                reason: '405'
                message:
                - Method not allowed
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: Error Type
                  details:
                    type: string
                    description: Error Details
                  code:
                    type: integer
                    description: Error Code
              example:
                message: Unprocessable Entity
                details: Invalid request because of 'Requested date range is invalid for this system. {:start_at=>1566930600, :end_at=>1565333100, :first_interval=>1565072100, :last_interval=>1565333700}'
                code: 422
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: Error Type
                  details:
                    type: string
                    description: Error Details
                  code:
                    type: integer
                    description: Error Code
                  period:
                    type: string
                    description: Quota exceeded for minute/month
                  period_start:
                    type: integer
                    description: Starting period timestamp
                  period_end:
                    type: integer
                    description: Ending period timestamp
                  limit:
                    type: integer
                    description: Limit count for the period
              example:
                message: Too Many Requests
                details: Usage limit exceeded for plan Kilowatt
                code: 429
                period: minute
                period_start: 1623825660
                period_end: 1623825720
                limit: 5
        '501':
          description: Not Implemented
          content:
            application/json:
              schema:
                type: object
         

# --- truncated at 32 KB (65 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/enphase/refs/heads/main/openapi/enphase-device-level-monitoring-api-openapi.yml