Skip to content

Data Access API (OAuth2.0)

Data Access API provides data query interfaces for inverters, collectors, EPMs, weather stations, and plants. This document describes the interfaces using OAuth2.0 Authorization (Bearer Token).

ItemDescription
API Base URLhttps://api-oauth2.soliscloud.com/
AuthenticationOAuth2.0 Bearer Token

Common Response Format

All interfaces return a unified JSON structure:

json
{
    "success": true,
    "code": "0",
    "msg": "success",
    "data": { }
}
FieldTypeDescription
successbooleantrue for success, false for failure
codestring"0" for success, others for failure (see appendix)
msgstringDescription of the code value
dataobject/arraySpecific business data

Pagination

Data access interfaces use cursor-based pagination:

ItemDescription
OrderingAlways ascending by the interface-specific business primary key id (see the minId description of each interface)
First requestOmit minId to start from the smallest id
Next pagePass minId = last record's id + 1 (the boundary is inclusive; passing the last record's id will return that record again)
Page sizepageSize, default 20, maximum 100
More pages?If the number of returned records equals pageSize, more pages may exist; fewer means you have reached the end
totalAlways 0; the real total is no longer returned

Rate Limits

Interface TypeLimit
Data acquisition interfaces10 times/second
Device data upload frequency5 minutes

TIP

If rate limits cannot meet your business needs, please refer to Real-time Data Forwarding to switch to queue data forwarding.


Authentication

See Authorization for authentication details.

Request headers require OAuth2.0 Bearer Token:

Header ParameterDescription
Content-Typeapplication/json;charset=UTF-8
AuthorizationBearer {access_token}

Interface List

Inverter Interfaces

InterfacePathDescription
Inverter ListinverterListGet inverter list under account
Inverter DetailinverterDetailGet single inverter detail
Inverter Day DatainverterDayGet single inverter daily real-time data
Inverter Month DatainverterMonthGet single inverter monthly daily data
Inverter Year DatainverterYearGet single inverter yearly monthly data
Inverter All DatainverterAllGet single inverter cumulative data
Inverter Warrantyinverter/shelfTimeGet inverter warranty data
Alarm ListalarmListGet device alarm list

Collector Interfaces

InterfacePathDescription
Collector ListcollectorListGet collector list under account
Collector DetailcollectorDetailGet single collector detail
Collector Signalcollector/dayGet collector signal values

EPM Interfaces

InterfacePathDescription
EPM ListepmListGet EPM list under account
EPM DetailepmDetailGet single EPM detail
EPM Day Dataepm/dayGet single EPM daily data
EPM Month Dataepm/monthGet single EPM monthly data
EPM Year Dataepm/yearGet single EPM yearly data
EPM All Dataepm/allGet single EPM cumulative data

Weather Station Interfaces

InterfacePathDescription
Weather Station ListweatherListGet weather station list
Weather Station DetailweatherDetailGet single weather station detail

Plant Interfaces

InterfacePathDescription
Plant ListuserStationListGet plant list under account
Plant DetailstationDetailGet single plant detail
Plant Day Energy ListstationDayEnergyListGet multiple plants daily data
Plant Month Energy ListstationMonthEnergyListGet multiple plants monthly data
Plant Year Energy ListstationYearEnergyListGet multiple plants yearly data
Plant Day DatastationDayGet single plant daily real-time data
Plant Month DatastationMonthGet single plant monthly daily data
Plant Year DatastationYearGet single plant yearly monthly data
Plant All DatastationAllGet single plant cumulative data

Inverter Interface Details

Get Inverter List

Get inverter list under the account, up to 100 devices per call.

Endpoint: POST /api/access_data/inverterList

Request Parameters:

ParameterTypeRequiredDescription
stationIdIntegerNoPlant ID. Empty for all inverters
plantIdStringNoPlant code, available from plant list or data forwarding. Same effect as stationId
nmiCodeStringNoNMI code (Australia only)
snListArrayNoBatch SN query. Empty for all inverters
minIdLongNoStarting ID (inclusive); paging is ordered by inverter_id ascending. Omit to start from the smallest ID.

Response Parameters (data):

ParameterTypeDescription
pageObjectPagination result
page.totalIntegerAlways 0 (cursor pagination does not return the real total)
page.recordsArrayInverter list
inverterStatusVoObjectInverter status statistics
inverterStatusVo.allIntegerTotal inverters
inverterStatusVo.normalIntegerNormal count
inverterStatusVo.offlineIntegerOffline count
inverterStatusVo.faultIntegerFault count

records fields:

ParameterTypeDescription
idNumberInverter ID
snStringInverter SN
stationIdIntegerPlant ID
stationNameStringPlant name
powerStringInstalled capacity
powerStrStringCapacity unit
etodayNumberToday's energy
etodayStrNumberEnergy unit
etotalNumberTotal energy
etotalStrNumberTotal energy unit
fullHourNumberFull load hours
pacNumberPower
pacStrNumberPower unit
stateIntegerStatus: 1=online, 2=offline, 3=alarm
dataTimestampIntegerUpdate time
collectorSnStringCollector SN
productModelStringInverter type
dcInputTypeIntegerDC input channels (value+1=actual)
acOutputTypeIntegerAC output type: 0=single phase, other=three phase
inverterMeterModelIntegerInverter meter type, see Appendix 3

Get Inverter Detail

Endpoint: POST /api/access_data/inverterDetail

Request Parameters:

ParameterTypeRequiredDescription
idNumberNoInverter ID, id and sn cannot both be empty
snStringNoInverter SN

Response Parameters (data): Includes all list fields plus:

ParameterTypeDescription
eToday/eMonth/eYear/eTotalNumberToday/Month/Year/Total energy
facNumberGrid frequency
pacNumberReal-time power
iAc1/iAc2/iAc3NumberAC current R/S/T
uAc1/uAc2/uAc3NumberAC voltage R/S/T
iPv1~iPv32NumberDC current 1~32
uPv1~uPv32NumberDC voltage 1~32
batteryCapacitySocNumberBattery SOC
batteryPowerNumberBattery power
batteryCapacityNumberBattery capacity
gridPurchasedTodayEnergyNumberToday's grid purchased energy
gridSellTodayEnergyNumberToday's grid sold energy
familyLoadPowerNumberHome load power
pSumNumberGrid total active power
inverterMeterModelIntegerMeter type, see Appendix 3
typeIntegerInverter type: 1=grid-tied, 2=energy storage
hmiVersionAllStringFull HMI version

Inverter Day/Month/Year/All Data

Inverter Day Data

Endpoint: POST /api/access_data/inverterDay

ParameterTypeRequiredDescription
idNumberNoInverter ID
snStringNoInverter SN
moneyStringYesCurrency unit, e.g. CNY
timeStringYesDate, format yyyy-MM-dd
timeZoneIntegerYesPlant timezone

Response Parameters (data array):

ParameterTypeDescription
dataTimestampIntegerUpdate time
timeStrStringTime string
pacNumberPower
eTodayNumberToday's energy
eTotalNumberTotal energy
uPv1~uPv4NumberDC voltage 1~4
iPv1~iPv4NumberDC current 1~4
batteryCapacitySocNumberBattery SOC
batteryPowerNumberBattery power

Inverter Month Data

Endpoint: POST /api/access_data/inverterMonth

ParameterTypeRequiredDescription
id/sn-NoInverter ID or SN
moneyStringYesCurrency unit
monthStringYesMonth, format yyyy-MM

Response Parameters (data array):

ParameterTypeDescription
energyNumberEnergy
energyStrStringEnergy unit
dateStringDate
moneyNumberRevenue
moneyStrStringRevenue unit
batteryDischargeEnergyNumberBattery discharge energy
batteryChargeEnergyNumberBattery charge energy
gridPurchasedEnergyNumberGrid purchased energy
gridSellEnergyNumberGrid sold energy

Inverter Year Data

Endpoint: POST /api/access_data/inverterYear

ParameterTypeRequiredDescription
id/sn-NoInverter ID or SN
moneyStringYesCurrency unit
yearStringYesYear, format yyyy

Response Parameters (data array): Same as month data.

Inverter All Data

Endpoint: POST /api/access_data/inverterAll

ParameterTypeRequiredDescription
id/sn-NoInverter ID or SN
moneyStringYesCurrency unit

Response Parameters (data array):

ParameterTypeDescription
yearStringYear
energyNumberEnergy
batteryDischargeEnergyNumberBattery discharge energy
batteryChargeEnergyNumberBattery charge energy
gridPurchasedEnergyNumberGrid purchased energy
gridSellEnergyNumberGrid sold energy

Get Inverter Warranty Data

Endpoint: POST /api/access_data/inverter/shelfTime

ParameterTypeRequiredDescription
snStringNoSingle or multiple SNs, comma-separated, max 1000
minIdLongNoStarting ID (inclusive); paging is ordered by id ascending. Omit to start from the smallest ID.

Response Parameters (data.page.records):

ParameterTypeDescription
idNumberInverter ID
snStringInverter SN
shelfBeginTimeStringWarranty start time
shelfEndTimeStringWarranty end time
shelfTimeStringWarranty duration
shelfStateIntegerWarranty state: 0=warranty, 1=expired

Get Alarm List

Endpoint: POST /api/access_data/alarmList

ParameterTypeRequiredDescription
stationIdIntegerNoPlant ID
plantIdStringNoPlant code, same effect as stationId
alarmDeviceSnStringNoInverter SN
alarmBeginTimeStringNoStart date, yyyy-MM-dd
alarmEndTimeStringNoEnd date, yyyy-MM-dd
nmiCodeStringNoNMI code
StateIntegerNo0=unprocessed, 1=processed, 2=recovered
minIdLongNoStarting ID (inclusive); paging is ordered by alarmId ascending. Omit to start from the smallest ID.

Response Parameters (data.page.records):

ParameterTypeDescription
stationIdIntegerPlant ID
stationNameStringPlant name
alarmDeviceSnStringAlarm device SN
alarmCodeStringAlarm code
alarmLevelIntegerAlarm level: 1=info, 2=normal, 3=urgent
alarmBeginTimeStringAlarm start time
alarmEndTimeStringAlarm end time
alarmMsgStringAlarm message
adviceStringHandling advice
stateIntegerState: 0=unhandled, 1=handled, 2=recovered
warningInfoDataObjectAlarm extended data

Collector Interface Details

Get Collector List

Parameters: stationId, plantId, nmiCode, minId (starting ID, inclusive; paging is ordered by collector_id ascending).

Endpoint: POST /api/access_data/collectorList

Response Parameters:

ParameterTypeDescription
collectionStatusVoObjectCollector status stats: all/normal/offline/fault
page.recordsArrayCollector list

records fields:

ParameterTypeDescription
idNumberCollector ID
snStringCollector SN
stationIdIntegerPlant ID
modelStringCollector model
nameStringCollector name
rssiLevelIntegerSignal strength level
stateIntegerState: 1=online, 2=offline, 3=alarm
dataTimestampIntegerUpdate time
contractTimeStringContract time

Get Collector Detail

Parameters: id or sn (cannot both be empty).

Endpoint: POST /api/access_data/collectorDetail

Response Parameters:

ParameterTypeDescription
idNumberCollector ID
snStringCollector SN
stationIdIntegerPlant ID
stateIntegerState: 1=online, 2=offline, 3=alarm
modelStringCollector model
rssiLevelIntegerSignal strength level
maximumNumberIntegerMax connected devices
actualNumberIntegerActual connected devices
currentWorkingTimeIntegerCurrent working time
totalWorkingTimeIntegerTotal working time
dataUploadCycleIntegerData upload cycle
factoryTimeStringFactory time
contractTimeStringContract time

Get Collector Signal Values

Parameters: sn, time (yyyy-MM-dd), timeZone.

Endpoint: POST /api/access_data/collector/day

Response Parameters (data array):

ParameterTypeDescription
collectorIdNumberCollector ID
collectorSnStringCollector SN
dataTimestampIntegerUpdate time
timeStrStringTime string
pecNumberSignal percentage (%)
rssiNumberSignal strength
rssiLevelIntegerSignal strength level

EPM Interface Details

Get EPM List

Parameters: stationId, plantId, nmiCode, minId (starting ID, inclusive; paging is ordered by epm_id ascending).

Endpoint: POST /api/access_data/epmList

Response Parameters (data.page.records):

ParameterTypeDescription
idNumberEPM ID
snStringEPM SN
collectorIdNumberCollector ID
collectorSnStringCollector SN
stationIdIntegerPlant ID
stateIntegerState: 1=online, 2=offline, 3=alarm
dataTimestampIntegerUpdate time
failSafeIntegerFail-safe
pEpmTotalNumberEPM total power
pEpmTotalStrStringTotal power unit
eTotalBuyNumberTotal purchased energy
eTotalBuyStrStringPurchased energy unit
eTotalSellNumberTotal sold energy
eTotalSellStrStringSold energy unit

Get EPM Detail

Parameters: sn (required).

Endpoint: POST /api/access_data/epmDetail

Response Parameters: list fields plus:

ParameterTypeDescription
empSoftwareVersionStringEPM software version
pLimitNumberPower limit
ctRatioNumberCT ratio
pSetNumberPower setting
pInverterTotalNumberTotal inverter power
eToaalInverterNumberTotal inverter energy
pLoadNumberTotal load power
eTotalLoadNumberTotal load energy
iAc1/iAc2/iAc3NumberAC current R/S/T
uAc1/uAc2/uAc3NumberAC voltage R/S/T
pAc1/pAc2/pAc3NumberActive power R/S/T
powerFactorNumberGrid power factor
facMeterNumberGrid frequency

Get EPM Day Data

Endpoint: POST /api/access_data/epm/day

ParameterTypeRequiredDescription
snStringYesEPM SN
searchinfoStringYesQuery fields, comma-separated
timeStringYesDate, yyyy-MM-dd
timeZoneNumberYesPlant timezone

searchinfo field mapping:

searchinfoResponse fieldDescription
u_ac1/u_ac2/u_ac3uAc1/uAc2/uAc3AC voltage U/V/W
i_ac1/i_ac2/i_ac3iAc1/iAc2/iAc3AC current U/V/W
p_ac1/p_ac2/p_ac3pAc1/pAc2/pAc3Active power U/V/W
power_factorpowerFactorGrid power factor
fac_meterfacMeterGrid frequency
p_loadpLoadTotal load power
e_epm_totalpEpmTotalEPM total power
e_total_buyeTotalBuyGrid purchased energy
e_total_selleTotalSellGrid sold energy

EPM Month/Year/All Data

Endpoint: POST /api/access_data/epm/monthEndpoint: POST /api/access_data/epm/yearEndpoint: POST /api/access_data/epm/all

InterfaceParameters
EPM Monthsn, month (yyyy-MM)
EPM Yearsn, year (yyyy)
EPM Allsn

Response Parameters (data array):

ParameterTypeDescription
dateStringDate (month data)
yearStringYear (year data)
energyNumberEnergy
epmSellEnergyNumberEPM sold energy
epmBuyEnergyNumberEPM purchased energy

Weather Station Interface Details

Get Weather Station List

Parameters: stationId, plantId, nmiCode, minId (starting ID, inclusive; paging is ordered by weather_id ascending).

Endpoint: POST /api/access_data/weatherList

Response Parameters (data.page.records):

ParameterTypeDescription
idNumberWeather station ID
collectorSnStringCollector SN
nameStringWeather station name
weatherModelIntegerWeather model: 1=Jinzhou Yangguang, 2=Jinzhou Licheng
stationIdIntegerPlant ID
stateIntegerState: 1=online, 2=offline, 3=alarm
dataTimestampIntegerUpdate time
totalRNumberTotal radiation (W/㎡)
directRNumberDirect radiation
scatteredRNumberScattered radiation
sunshineTimNumberSunshine time (m)
totalRdayNumberDaily total radiation (MJ/㎡)
tempNumberTemperature
temperatureUnitStringTemperature unit
humidityNumberHumidity (%RH)
windDirectionStringWind direction
windSpeedNumberWind speed (m/s)
airPressureNumberAir pressure (Pa)
rainfallNumberRainfall (mm)
pvTempNumberModule temperature

Get Weather Station Detail

Parameters: sn (required). Returns same fields as list.

Endpoint: POST /api/access_data/weatherDetail


Plant Interface Details

Get Plant List

Parameters: plantId, nmiCode, idList (array), minId (starting ID, inclusive; paging is ordered by station_id ascending).

Endpoint: POST /api/access_data/userStationList

Response Parameters (data.page.records):

ParameterTypeDescription
idNumberPlant ID
stationNameStringPlant name
addrStringPlant address
userIdNumberUser ID
userNameStringUser name
capacityNumberCapacity
capacityStrStringCapacity unit
fullHourNumberFull-load hours
latitudeNumberLatitude
longitudeNumberLongitude
timeZoneIntegerPlant timezone
timeZoneStrStringTimezone description
moneyStringCurrency unit
priceNumberElectricity price
powerNumberReal-time power
powerStrStringPower unit
dayEnergyNumberToday's energy
monthEnergyNumberMonth energy
yearEnergyNumberYear energy
allEnergyNumberTotal energy
stateIntegerState: 1=online, 2=offline, 3=alarm
dataTimestampIntegerUpdate time
stationTypeNewIntegerPlant type
nmiCodeStringNMI code
inverterPowerNumberInverter power
synchronizationTypeIntegerSynchronization type
daylightSwitchIntegerDaylight switch
timeZoneStandardIdStringStandard timezone ID

Get Plant Detail

Parameters: id, plantId, or nmiCode (one required).

Endpoint: POST /api/access_data/stationDetail

Response Parameters: list fields plus:

ParameterTypeDescription
dayInComeNumberToday's income
monthInComeNumberMonth income
yearInComeNumberYear income
allInComeNumberTotal income
batteryPowerNumberBattery power
batteryDischargeEnergyNumberBattery discharge energy
batteryChargeEnergyNumberBattery charge energy
batteryPercentNumberBattery percentage
psumNumberTotal power
gridPurchasedDayEnergyNumberToday's grid purchased energy
gridSellDayEnergyNumberToday's grid sold energy
familyLoadPowerNumberFamily load power
homeLoadEnergyNumberHome load energy
inverterBatteryCapacityNumberInverter battery capacity
batteryCapacityNumberBattery capacity
timeZoneStandardIdStringStandard timezone, e.g. Asia/Shanghai

Plant Day/Month/Year Energy Lists

Plant Day Energy List

Parameters: time (yyyy-MM-dd), stationIds, plantId, idList, minId (starting ID, inclusive; paging is ordered by station_id ascending).

Endpoint: POST /api/access_data/stationDayEnergyList

Response Parameters (data array):

ParameterTypeDescription
idNumberPlant ID
energyNumberEnergy
energyStrStringEnergy unit
dateStringDate
moneyNumberRevenue
batteryDischargeEnergyNumberBattery discharge energy
batteryChargeEnergyNumberBattery charge energy
gridPurchasedEnergyNumberGrid purchased energy
gridSellEnergyNumberGrid sold energy
totalRKwhNumberEnergy per area (kWh/㎡)

Plant Month Energy List (10 times/sec)

Parameters: time (yyyy-MM), stationIds, plantId, nmiCode, idList, minId (starting ID, inclusive; paging is ordered by station_id ascending).

Endpoint: POST /api/access_data/stationMonthEnergyList

Response Parameters (data array): Same as day energy list (energy unit is monthly).

Plant Year Energy List (10 times/sec)

Parameters: time (yyyy), stationIds, plantId, nmiCode, idList, minId (starting ID, inclusive; paging is ordered by station_id ascending).

Endpoint: POST /api/access_data/stationYearEnergyList

Response Parameters (data array): Same as day energy list (energy unit is yearly).

Single Plant Day/Month/Year/All Data

Plant Day Data

Parameters: id, plantId, or nmiCode (one required), money, time (yyyy-MM-dd), timeZone.

Endpoint: POST /api/access_data/stationDay

Response Parameters (data array):

ParameterTypeDescription
powerNumberReal-time power
timeStringTime
totalRNumberInstantaneous radiation
batteryCapacitySocNumberBattery SOC
familyLoadPowerNumberFamily load power
batteryPowerNumberBattery power
psumNumberTotal power

Plant Month Data

Parameters: id, plantId, or nmiCode (one required), money, month (yyyy-MM), timeZone.

Endpoint: POST /api/access_data/stationMonth

Response Parameters (data array):

ParameterTypeDescription
energyNumberEnergy
dateStringDate
moneyNumberRevenue
batteryDischargeEnergyNumberBattery discharge energy
batteryChargeEnergyNumberBattery charge energy
gridPurchasedEnergyNumberGrid purchased energy
gridSellEnergyNumberGrid sold energy
totalRKwhNumberEnergy per area (kWh/㎡)

Plant Year Data

Parameters: id, plantId, or nmiCode (one required), money, year (yyyy), timeZone.

Endpoint: POST /api/access_data/stationYear

Response Parameters (data array): Same format as month data.

Plant All Data

Parameters: id, plantId, or nmiCode (one required), money, timeZone.

Endpoint: POST /api/access_data/stationAll

Response Parameters (data array):

ParameterTypeDescription
yearStringYear
energyNumberTotal energy
moneyNumberTotal revenue
batteryDischargeEnergyNumberBattery discharge energy
batteryChargeEnergyNumberBattery charge energy
gridPurchasedEnergyNumberGrid purchased energy
gridSellEnergyNumberGrid sold energy
totalRKwhNumberEnergy per area (kWh/㎡)

Appendix

Appendix 1: Error Codes

CodeDescription
R0000No permission
B0001Already bound to another user
I0003Please enter SN
B0049Collector does not exist or no permission
I0000Required parameter is empty
B0011User does not exist
I0012Account or password error

Appendix 2: Plant Types

CodeDescription
0Grid-tied plant
1Energy storage plant
2AC Couple plant
3EPM plant (grid-tied + meter)
4Built-in meter (grid-tied + meter)
5External meter
6S5 Off-grid parallel storage
7S5 Grid-tied parallel storage
8Grid-tied + AC Couple plant
9Off-grid storage
10S6 Grid-tied parallel storage
11S6 Off-grid parallel storage

Appendix 3: Inverter Meter Types

CodeDescription
1Grid-tied
2Grid-tied + load-side meter
3Grid-tied + grid-side meter
4Storage + load-side meter
5Storage + grid-side meter
7Off-grid storage
8Grid-tied storage dual meter
1001AC Couple (without CT)
1002AC Couple (with CT)