Endpoint
Returns streaming CSV (text/csv) with a header row. Validation and not-found errors respond as JSON {"error":"..."} with status 400 or 404.
Query parameters
GET {backend_base_url}/v1/data
?deployment=mydep
&vsensor=humidity
&from=2026-01-01T00:00:00
&to=2026-02-01T00:00:00
&position=91
&resolution=omit
1 Schema-dependent: required based on the virtual sensor table. Sensors with a position column need position or positionLabel. Sensors without a position column need device. Use the form to see which filter applies and which values are available.
Authentication
Public virtual sensors (download enabled by an admin) can be requested anonymously — no credentials required. For any other sensor, send a JWT as Authorization: Bearer <token>. Obtain a token from the backend login endpoint.
Python notebook
Load the CSV into a pandas DataFrame with requests:
import io
import pandas as pd
import requests
base = "{backend_base_url}"
params = {
"deployment": "mydep",
"vsensor": "humidity",
"from": "2026-01-01T00:00:00",
"to": "2026-02-01T00:00:00",
"position": 91,
"resolution": "omit",
}
r = requests.get(f"{base}/v1/data", params=params, timeout=120)
r.raise_for_status()
df = pd.read_csv(io.StringIO(r.text))
For non-public sensors, pass headers={"Authorization": "Bearer <token>"} to requests.get.