Enphase Enlighten Systems API v4 (Monitoring)

The Enlighten Systems API v4 (Monitoring API) is a JSON-based, OAuth 2.0 protected API that provides access to system-level, device-level, and battery-level performance data for Enphase photovoltaic and storage systems. It exposes systems search and inventory, energy and consumption lifetime time series, revenue-grade meter readings (RGM), microinverter and meter telemetry, IQ Battery telemetry and settings, Storm Guard, grid status, load control, live data streaming, and IQ EV charger session data. Access tokens are valid for 24 hours and refresh tokens for 30 days; all requests require an application API key in addition to the bearer token.

Enphase Enlighten Systems API v4 (Monitoring) is one of 3 APIs that Enphase Energy publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

Tagged areas include Solar, Energy, Microinverters, Battery Storage, and IoT. The published artifact set on APIs.io includes API documentation, a getting-started guide, and an OpenAPI specification.

OpenAPI Specification

enphase-enlighten-v4-monitoring-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Monitoring API
  version: v4
  license:
    name: Custom
    url: https://github.com/andrewdmontgomery/Enphase-OpenAPI
security:
  - oauth2: []
    apiKey: []
paths:
  /api/v4/systems:
    get:
      summary: Fetch systems
      description: Returns a list of systems for which the user can make API requests.
        By default, systems are returned in batches of 10. The maximum size is
        100.
      operationId: listSystems
      tags:
        - System Details
      parameters:
        - name: page
          in: query
          description: The page to be returned. Default=1, Min=1. For example, if page is
            set to 2, 2nd page is returned
          schema:
            type: integer
        - name: size
          in: query
          description: Maximum number of records shown per page. Default=10, Min=1,
            Max=100.  For example, if max is set to 5, 5 records are shown per
            page
          schema:
            type: integer
        - name: sort_by
          in: query
          description: Returns list of systems sorted by <sort_by> field. To get the ASC
            order sorted list, user sort_by = id. To get the DESC order sorted
            list, use sort_by = -id. By default, the list is sorted by ascending
            order of system ID.
          schema:
            type: string
            enum:
              - id
              - -id
      responses:
        "200":
          description: List of Systems
          content:
            application/json:
              schema:
                type: object
                properties:
                  total:
                    type: integer
                    description: Total number of systems
                  current_page:
                    type: integer
                    description: "Number of the current page fetched "
                  size:
                    type: integer
                    description: Maximum number of records shown per page. Default=10, Min=1,
                      Max=100.
                  count:
                    type: integer
                    description: Total number of systems actually returned for the current page
                  items:
                    type: string
                    description: Named key of the list data. In this endpoint, it is systems
                  systems:
                    type: array
                    items:
                      properties:
                        system_id:
                          type: integer
                          description: The unique numeric ID of the system
                        name:
                          type: string
                          description: Name of the system
                        public_name:
                          type: string
                          description: Name displayed on the public system page. Available values are All,
                            Residential System, Commercial etc.
                            Default='Residential System'. Only for systems that
                            allow public access.
                        timezone:
                          type: string
                          nullable: true
                          description: Timezone to which the system belongs
                        address:
                          type: object
                          properties:
                            city:
                              type: string
                              description: City in which the system is located
                            state:
                              type: string
                              nullable: true
                              description: State in which the system is located
                            country:
                              type: string
                              nullable: true
                              description: Country in which the system is located
                            postal_code:
                              type: string
                              nullable: true
                              description: Postal Code of the system's location
                          description: Address object for the system. It can contain the following items
                        connection_type:
                          allOf:
                            - $ref: "#/components/schemas/SystemConnectionType"
                          description: Connection Type of the system. Available values are ethernet,
                            Wi-Fi, Cellular
                        energy_lifetime:
                          type: integer
                          description: Deprecated field. The API will always return this field as -1
                        energy_today:
                          type: integer
                          description: Deprecated field. The API will always return this field as -1
                        system_size:
                          type: number
                          format: float
                          description: Deprecated field. The API will always return this field as -1
                        status:
                          type: string
                          description: System's status. Corresponding Enlighten values can be found in
                            table added at the end of page.
                        last_report_at:
                          type: integer
                          description: Timestamp (in epoch format) at which the system's Envoy last
                            submitted a report
                        last_energy_at:
                          type: integer
                          nullable: true
                          description: Timestamp (in epoch format) at which the systems's produced energy
                            was last reported. Even if the last produced energy
                            is 0, its timestamp will be returned.
                        operational_at:
                          type: integer
                          nullable: true
                          description: Timestamp (in epoch format) at which this system became
                            operational. Corresponds to the system’s
                            interconnect time, if one is specified. Otherwise,
                            it is the system’s first reported interval end time.
                        attachment_type:
                          type: string
                          allOf:
                            - $ref: "#/components/schemas/MicroinverterAttachmentType"
                          nullable: true
                          description: Micro inverter attachment type. Available values are rack_mount,
                            zep, acm, bipv, frame_mount, railless_mount
                        interconnect_date:
                          type: string
                          format: date
                          nullable: true
                          description: Date on which the system was approved to connect to the grid
                        reference:
                          type: string
                          description: If the calling user belongs to a company and that company has
                            provided its own identifier for a system, that ID is
                            included here. Otherwise, this attribute is not
                            returned.
                        other_references:
                          type: array
                          items:
                            type: string
                          description: If any other companies have provided their own identifiers for a
                            system, those identifiers are included here.
                            Otherwise, this attribute is not returned.
                    description: "List of systems. It contains the following:"
              example:
                total: 28
                current_page: 1
                size: 2
                count: 2
                items: systems
                systems:
                  - system_id: 698910067
                    name: Enphase System
                    public_name: Residential System
                    timezone: Australia/Sydney
                    address:
                      city: Sydney
                      state: NSW
                      country: AU
                      postal_code: "2127"
                    connection_type: ethernet
                    energy_lifetime: -1
                    energy_today: -1
                    system_size: -1
                    status: micro
                    last_report_at: 1508174262
                    last_energy_at: 1508174172
                    operational_at: 1497445200
                    attachment_type: acm
                    interconnect_date: null
                    reference: "106015287"
                    other_references:
                      - "106015287"
                  - system_id: 698906018
                    name: Enphase Public System
                    public_name: Residential System
                    timezone: US/Pacific
                    address:
                      city: Los Angeles
                      state: CA
                      country: US
                      postal_code: "94954"
                    connection_type: ethernet
                    energy_lifetime: -1
                    energy_today: -1
                    system_size: -1
                    status: normal
                    last_report_at: 1508174262
                    last_energy_at: 1508174172
                    operational_at: 1497445200
                    attachment_type: rack_mount
                    interconnect_date: null
                    reference: "106015287"
                    other_references:
                      - "106015287"
        "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
              examples:
                response:
                  value:
                    message: Not Authorized
                    details: User is not authorized
                    code: 401
        "405":
          description: Method Not Allowed
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                  message:
                    type: array
                    items:
                      type: string
              examples:
                response:
                  value:
                    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
              examples:
                response:
                  value:
                    message: Unprocessable Entity
                    details: Invalid request because of 'The sorting parameter is not supported.
                      Please use id for sorting by Asc or -id for sorting by
                      Desc'
                    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
              examples:
                response:
                  value:
                    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
              examples:
                response:
                  value:
                    reason: "501"
                    message:
                      - Not Implemented
  /api/v4/systems/search:
    post:
      summary: Search and filter systems
      description: Search and filter systems. Provide only valid values in request
        parameters. Empty values will be ignored. Invalid keys will be rejected.
      operationId: searchSystems
      tags:
        - System Details
      parameters:
        - name: page
          in: query
          description: The page to be returned. Default=1, Min=1, e.g=2
          schema:
            type: integer
        - name: size
          in: query
          description: Maximum number of records shown per page. Default=10, Min=1,
            Max=1000, e.g=5
          schema:
            type: integer
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                sort_by:
                  type: string
                  enum:
                    - id
                    - -id
                  description: Returns list of systems sorted by <sort_by> field. To get ASC order
                    sorted list, user sort_by = id. To get DESC order sorted
                    list, use sort_by = -id. By default, the list is sorted by
                    ascending order of system ID.
                system:
                  type: object
                  properties:
                    ids:
                      type: array
                      description: Filter system by particular Ids
                      items:
                        type: integer
                    name:
                      type: string
                      description: Search by name of the System.
                    reference:
                      type: string
                      description: Search by reference of the System.
                    other_reference:
                      type: string
                      description: Search by any other_references of the System.
                    statuses:
                      type: array
                      description: Search by System status.
                      items:
                        type: string
                        enum:
                          - normal
                          - comm
                          - micro
                          - power
                          - meter
                          - battery
                          - storage_idle
                          - meter_issue
                          - enpower
                          - encharge
                          - enpower_issue
                          - encharge_issue
              required:
                - system
      responses:
        "200":
          description: List of Systems
          content:
            application/json:
              schema:
                type: object
                properties:
                    total:
                      type: integer
                      description: Total number of systems available
                    current_page:
                      type: integer
                      description: Current page of the systems result. Default is 1
                    size:
                      type: integer
                      description: Max number of records from API per page is 100. Default is 10.
                    count:
                      type: integer
                      description: Total number of systems actually returned for the current page
                    items:
                      type: string
                      description: Named key of the list data. In this endpoint, it is systems
                    systems:
                      type: array
                      items:
                        properties:
                          system_id:
                            type: integer
                            description: The unique numeric ID of the system
                          name:
                            type: string
                            description: Name of the system
                          public_name:
                            type: string
                            description: Name displayed on the public system page. Available values are All,
                              Residential System, Commercial etc.
                              Default='Residential System'. Only for systems that
                              allow public access.
                          timezone:
                            type: string
                            nullable: true
                            description: Timezone to which the system belongs
                          address:
                            type: object
                            properties:
                              state:
                                type: string
                                nullable: true
                                description: State in which the system is located
                              country:
                                type: string
                                nullable: true
                                description: Country in which the system is located
                              postal_code:
                                type: string
                                nullable: true
                                description: Postal Code of the system's location
                            description: Address object for the system. It can contain the following items
                          connection_type:
                            allOf:
                              - $ref: "#/components/schemas/SystemConnectionType"
                            description: Connection Type of the system. Available values are ethernet,
                              Wi-Fi, Cellular
                          status:
                            type: string
                            description: System's status. Corresponding Enlighten values can be found in
                              table added at the end of page.
                          last_report_at:
                            type: integer
                            nullable: true
                            description: Timestamp (in epoch format) at which the system's Envoy last
                              submitted a report
                          last_energy_at:
                            type: integer
                            nullable: true
                            description: Timestamp (in epoch format) at which the systems's produced energy
                              was last reported. Even if the last produced energy
                              is 0, its timestamp will be returned.
                          operational_at:
                            type: integer
                            nullable: true
                            description: Timestamp (in epoch format) at which this system became
                              operational. Corresponds to the system’s
                              interconnect time, if one is specified. Otherwise,
                              it is the system’s first reported interval end time.
                          attachment_type:
                            type: string
                            allOf:
                              - $ref: "#/components/schemas/MicroinverterAttachmentType"
                            nullable: true
                            description: Micro inverter attachment type. Available values are rack_mount,
                              zep, acm, bipv, frame_mount, railless_mount
                          interconnect_date:
                            type: string
                            format: date
                            nullable: true
                            description: Date on which the system was approved to connect to the grid
                          energy_lifetime:
                            type: integer
                            description: Deprecated field. The API will always return this field as -1
                          energy_today:
                            type: integer
                            description: Deprecated field. The API will always return this field as -1
                          system_size:
                            type: number
                            format: float
                            description: Deprecated field. The API will always return this field as -1
                          reference:
                            type: string
                            nullable: true
                            description: Company specific identifier for the system when available.
                          other_references:
                            type: array
                            items:
                              type: string
                            description: Additional identifiers provided by other companies, when available.
                      description: List of filtered systems. It contains the following items
              example:
                total: 28
                current_page: 1
                size: 2
                count: 2
                items: systems
                systems:
                  - system_id: 698910067
                    name: Enphase System
                    public_name: Residential System
                    timezone: null
                    address:
                      ? state
                      ? country
                      ? postal_code
                    connection_type: ethernet
                    status: micro
                    last_report_at: 1557400231
                    last_energy_at: null
                    operational_at: null
                    attachment_type: bipv
                    interconnect_date: null
                    energy_lifetime: -1
                    energy_today: -1
                    system_size: -1
                  - system_id: 698906018
                    name: Enphase Public System
                    public_name: Residential System
                    timezone: US/Pacific
                    address:
                      state: CA
                      country: US
                      postal_code: "94954"
                    connection_type: ethernet
                    status: normal
                    last_report_at: 1508174262
                    last_energy_at: 1508174172
                    operational_at: 1497445200
                    attachment_type: acm
                    interconnect_date: null
                    energy_lifetime: -1
                    energy_today: -1
                    system_size: -1
                    reference: "106015287"
                    other_references:
                      - "106015287"
        "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
              examples:
                response:
                  value:
                    message: Not Authorized
                    details: User is not authorized
                    code: 401
        "405":
          description: Method Not Allowed
          content:
            application/json:
              schema:
                type: object
                properties:
                  reason:
                    type: string
                  message:
                    type: array
                    items:
                      type: string
              examples:
                response:
                  value:
                    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
              examples:
                response:
                  value:
                    message: Unprocessable Entity
                    details: system is missing at Json body location
                    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
              examples:
                response:
                  value:
                    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
              examples:
                response:
                  value:
                    reason: "501"
                    message:
                      - Not Implemented
  "/api/v4/systems/{system_id}":
    get:
      summary: Retrieves a System by id
      description: Retrieves a System by ID
      operationId: getSystemById
      tags:
        - System Details
      parameters:
          - name: system_id
            in: path
            description: The unique numeric ID of the system. If an empty value is passed in
              the ID, this endpoint behaves as Fetch systems endpoint.
            required: true
            schema:
              type: integer
      responses:
        "200":
          description: System fetched
          content:
            application/json:
              schema:
                type: object
                properties:
                  system_id:
                    type: integer
                    description: The unique numeric ID of the system
                  name:
                    type: string
                    description: Name of the system
                  public_name:
                    type: string
                    description: Name displayed on the public system page. Available values are All,
                      Residential System, Commercial etc. Default='Residential
                      System'. Only for systems that allow public access.
                  timezone:
                    type: string
                    description: Timezone to which the system belongs
                  address:
                    type: object
                    properties:
                      city:
                        type: string
                        description: City in which the system is located
                      state:
                        type: string
                        description: State in which the system is located
                      country:
                        type: string
                        description: Country in which the system is located
                      postal_code:
                        type: string
                        description: Postal Code of the system's location
                    description: Address object for the system. It can contain the following items
                  connection_type:
                    type: string
                    description: Connection Type of the system. Available values are ethernet,
                      Wi-Fi, Cellular
                  energy_lifetime:
                    type: integer
                    description: Deprecated field. The API will always return this field as -1
                  energy_today:
                    type: integer
                    description: Deprecated field. The API will always return this field as -1
                  system_size:
                    type: number
                    format: float
                    description: Deprecated field. The API will always return this field as -1
                  status:
                    type: string
                    description: System's status. Corresponding Enlighten values can be found in
                      table added at the end of page.
                  last_report_at:
                    type: integer
                    nullable: true
                    description: Timestamp (in epoch format) at which the system's Envoy last
                      submitted a report
                  last_energy_at:
                    type: integer
                    nullable: true
                    description: Timestamp (in epoch format) at which the systems's produced energy
                      was last reported. Even if the last produced energy is 0,
                      its timestamp will be returned.
                  operational_at:
                    type: integer
                    nullable: true
                    description: Timestamp (in epoch format) at which this system became
                      operational. Corresponds to the system’s interconnect
                      time, if one is specified. Otherwise, it is the system’s
                      first reported interval end time.
                  attachment_type:
                    type: string
                    nullable: true
                    description: Micro inverter attachment type. Available values are rack_mount,
                      zep, acm, bipv, frame_mount, railless_mount
                  interconnect_date:
                    type: string
                    format: date
                    nullable: true
                    description: Date on which the system was approved to connect to the grid
                  reference:
                    type: string
                    description: If the calling user belongs to a company and that company has
                      provided its own identifier for a system, that ID is
                      included here. Otherwise, this attribute is not returned.
                  other_references:
                    type: array
                    items:
                      type: string
                    description: If any other companies have provided their own identifiers for a
                      system, those identifiers are included here. Otherwise,
                      this attribute is not returned.
              examples:
                response:
                  value:
                    system_id: 72
                    name: Enphase System
   

# --- truncated at 32 KB (412 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/enphase-energy/refs/heads/main/openapi/enphase-enlighten-v4-monitoring-openapi.yml