Enphase Energy Device Level Production Monitoring API
The Device Level Production Monitoring API from Enphase Energy — 3 operation(s) for device level production monitoring.
The Device Level Production Monitoring API from Enphase Energy — 3 operation(s) for device level production monitoring.
openapi: 3.0.0
info:
title: The Enlighten Systems Device Level Production Monitoring API
description: 'The Enlighten Systems API is a JSON-based API that provides access to performance data for a PV system. By using the Enlighten Systems API, you agree to the Enphase Energy API License Agreement.
Please note that the Enlighten Systems API does not provide performance data at a panel or microinverter level.'
version: '2.0'
termsOfService: https://developer.enphase.com/docs#Display-Requirements
license:
name: Enphase API License Agreement
url: https://www.enphase.com/en-us/legal/api-license-agreement
servers:
- url: https://api.enphaseenergy.com/api/v2
security:
- ApiKey: []
tags:
- name: Device Level Production Monitoring
paths:
/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."
operationId: getMicroTelemetry
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:
$ref: '#/components/schemas/TelemetryGranularity'
tags:
- Device Level Production 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:
allOf:
- $ref: '#/components/schemas/TelemetryGranularity'
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
examples:
response:
value:
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
examples:
response:
value:
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
examples:
response:
value:
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
examples:
response:
value:
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
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 '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
examples:
response:
value:
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
examples:
response:
value:
reason: '501'
message:
- Not Implemented
/api/v4/systems/{system_id}/devices/acbs/{serial_no}/telemetry:
get:
summary: Retrieves telemetry for single ACB
description: "Retrieves telemetry for single ACB. \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."
operationId: getAcbTelemetry
parameters:
- name: system_id
in: path
description: System id
required: true
schema:
type: integer
- name: serial_no
in: path
description: Serial Number of the acb
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:
$ref: '#/components/schemas/TelemetryGranularity'
tags:
- Device Level Production Monitoring
responses:
'200':
description: Telemetry for the ACB
content:
application/json:
schema:
type: object
properties:
system_id:
type: integer
description: System id
serial_number:
type: string
description: The device serial number
granularity:
allOf:
- $ref: '#/components/schemas/TelemetryGranularity'
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
examples:
response:
value:
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
examples:
response:
value:
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
examples:
response:
value:
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
examples:
response:
value:
message: Not Found
details: ACB 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
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 '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
examples:
response:
value:
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
examples:
response:
value:
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."
operationId: getEnchargeTelemetry
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:
$ref: '#/components/schemas/TelemetryGranularity'
tags:
- Device Level Production 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:
allOf:
- $ref: '#/components/schemas/TelemetryGranularity'
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
examples:
response:
value:
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
examples:
response:
value:
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
examples:
response:
value:
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
examples:
response:
value:
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
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 '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
# --- truncated at 32 KB (33 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/enphase-energy/refs/heads/main/openapi/enphase-energy-device-level-production-monitoring-api-openapi.yml