Skip to main content

Customer API - Cloud Access

Your energy data, available anywhere

With the Customer API you retrieve the values of your systems via the internet, without access to your home network. You log in with the same credentials as in the portal and receive current values or historical data in JSON format.

For professionals

This page is intended for developers and technically experienced users. You do not need the API for normal use of your SOLIO.

What do I need this for?​

  • Your own analyses: collect historical data regularly and evaluate it in Excel, a database or a dashboard.
  • Connecting other services: use current values such as the state of charge or grid purchase in your own applications.
  • Several systems: query the values of all systems your account has access to.

The Customer API is read-only. Your system cannot be controlled through it. For access within your own network there are also the local interfaces REST/JSON and Modbus/TCP.

At a glance​

Base addresshttps://api.soltegra.io
LoginHTTP Basic Authentication with your portal credentials (e-mail address and password)
MethodGET only
Response formatJSON
Activation

Access via the Customer API is enabled per system. If a system is missing from the list or you receive error 403, please contact SOLTEGRA.

Quick start​

Check availability

curl https://api.soltegra.io/health responds with OK. No login is required for this.

Query your systems

curl -u "you@example.com:password" https://api.soltegra.io/edges returns all systems you have access to, with their identifier (id).

Retrieve values

Use the identifier to query current values, for example /edges/YOUR-SYSTEM/live?channels=_sum/EssSoc,_sum/GridActivePower.

The endpoints​

EndpointReturns
GET /Overview of the endpoints and the limits currently in force
GET /edgesAll systems you have access to
GET /edges/{id}/channelsAll values available for a system
GET /edges/{id}/live?channels=…Current values
GET /edges/{id}/history?channels=…&from=…&to=…Historical data for a period
GET /healthAvailability of the API, without login

Querying your systems​

GET /edges returns all systems you have access to.

curl -u "you@example.com:password" https://api.soltegra.io/edges
{
"count": 1,
"edges": [
{
"id": "edge0",
"comment": "My home",
"producttype": "SOLTEGRA SEMS",
"version": "2026.10.1",
"online": true,
"role": "OWNER"
}
]
}
FieldMeaning
idIdentifier of the system, needed for all further queries
commentName of the system
producttypeProduct type
versionInstalled software version
onlinetrue if the system is currently connected
roleYour role for this system, e.g. OWNER or GUEST

Available values​

GET /edges/{id}/channels returns the addresses of all values the system last transmitted. The system must be online for this.

{
"edgeId": "edge0",
"online": true,
"count": 156,
"channels": ["_sum/EssActivePower", "_sum/EssSoc", "_sum/GridActivePower"]
}

Current values​

GET /edges/{id}/live with the parameter channels: a comma-separated list of values.

curl -u "you@example.com:password" \
"https://api.soltegra.io/edges/edge0/live?channels=_sum/EssSoc,_sum/GridActivePower,_sum/ProductionActivePower"
{
"edgeId": "edge0",
"online": true,
"timestamp": "2026-10-15T14:30:00+02:00",
"data": {
"_sum/EssSoc": 75,
"_sum/GridActivePower": -1500,
"_sum/ProductionActivePower": 3200
}
}

Historical data​

GET /edges/{id}/history with these parameters:

ParameterMeaning
channelsComma-separated list of values (required)
fromStart in ISO 8601 format, e.g. 2026-10-14T00:00:00+02:00 (required)
toEnd in ISO 8601 format, not in the future (required)
resolutionInterval between values in seconds, 60 to 86400 (optional)
curl -u "you@example.com:password" \
"https://api.soltegra.io/edges/edge0/history?channels=_sum/EssSoc,_sum/GridActivePower&from=2026-10-14T00:00:00%2B02:00&to=2026-10-14T23:59:59%2B02:00"
Encode the plus sign

The + in the time zone must be written as %2B in the address.

{
"edgeId": "edge0",
"from": "2026-10-14T00:00:00+02:00",
"to": "2026-10-14T23:59:59+02:00",
"resolution": 900,
"dataPoints": 96,
"data": [
{ "timestamp": "2026-10-14T00:00:00+02:00", "_sum/EssSoc": 80, "_sum/GridActivePower": 500 },
{ "timestamp": "2026-10-14T00:15:00+02:00", "_sum/EssSoc": 78, "_sum/GridActivePower": 450 }
]
}

If you do not specify a resolution, the API chooses the interval itself:

PeriodInterval between values
up to 1 hour1 minute
up to 6 hours5 minutes
up to 1 day15 minutes
up to 1 week1 hour
longer4 hours

Important values​

AddressDescriptionUnit
_sum/EssSocBattery state of charge%
_sum/EssActivePowerBattery power, positive = discharging, negative = chargingW
_sum/GridActivePowerGrid power, positive = purchase, negative = feed-inW
_sum/ProductionActivePowerGenerationW
_sum/ConsumptionActivePowerConsumptionW
_sum/EssActiveChargeEnergyMeter reading battery chargeWh
_sum/EssActiveDischargeEnergyMeter reading battery dischargeWh
_sum/GridBuyActiveEnergyMeter reading grid purchaseWh
_sum/GridSellActiveEnergyMeter reading grid feed-inWh
_sum/ProductionActiveEnergyMeter reading generationWh
_sum/ConsumptionActiveEnergyMeter reading consumptionWh

All other available values are returned by /edges/{id}/channels.

Limits and security​

The API protects itself against overload with limits. GET / returns the values currently in force. By default:

LimitDefault
Requests per minute and user30
Values per request50
Longest period for historical data31 days
Data points per response10,000

After several failed logins in a row (five by default), the requesting IP address is blocked for a few minutes.

Protect your credentials

The API uses your portal credentials. Do not store your password in plain text in scripts; use an environment variable instead, for example, and do not share scripts that contain credentials.

Error messages​

Errors are also returned as JSON:

{ "error": true, "status": 401, "message": "Authentication failed" }
CodeMeaning
400Invalid request, for example missing parameters or a period that is too long
401Login failed
403No access to this system, system not enabled or IP temporarily blocked
404Endpoint not found
405Only GET is allowed
429Too many requests, wait a moment
500Internal error
503Service temporarily unavailable, try again later

Example with Python​

import os
import requests

API = "https://api.soltegra.io"
AUTH = (os.environ["SOLTEGRA_USER"], os.environ["SOLTEGRA_PASSWORD"])

edges = requests.get(f"{API}/edges", auth=AUTH, timeout=30).json()

for edge in edges["edges"]:
if not edge["online"]:
print(edge["comment"], "is offline")
continue
live = requests.get(
f"{API}/edges/{edge['id']}/live",
params={"channels": "_sum/EssSoc,_sum/GridActivePower"},
auth=AUTH,
timeout=30,
).json()
soc = live["data"].get("_sum/EssSoc")
grid = live["data"].get("_sum/GridActivePower", 0)
print(f"{edge['comment']}: state of charge {soc} %, grid {grid} W")

The requests library encodes the parameters automatically, including the + in time values.

Frequently asked questions​

I do not receive any values for a channel. Check the spelling; upper and lower case matter. /edges/{id}/channels shows which values exist. If the system is offline, there are no current values.

How do I get data for more than 31 days? Split the period into several queries and combine the results.

Can I open the data in Excel? Yes. Convert the JSON response into a CSV file, for example with Python and pandas, and open it in Excel.