Data Endpoints
Data Endpoint
Time-series sensor data for locations (InfluxDB + computed fields).
Endpoint: GET /api/v1/data/
Returns time-series data for locations. For location metadata (list locations, location detail), see the Locations Asset Endpoint. Data is sourced from InfluxDB (sensor_hub measurement) and computed fields (irrigation status, irrigation duration).
Requires authentication via Bearer token (Authorization: Bearer <JWT>) or API key (x-api-key header). Results are scoped to organizations the identity can access.
| Parameter | Type | Required | Description |
|---|
organization_id | integer | No | Organization ID to scope results. Omit to use all organizations the user can access. If provided, must be an org the user belongs to; otherwise returns 403. |
fields | string[] | No | Comma-separated or repeated list of field names to include. Omit to return raw pivoted data. See Available Fields below. |
location_ids | string[] | No | Filter by location UUIDs (comma-separated or repeated). Each must belong to the resolved org scope; otherwise returns 403. Omit to return data for all locations the user can access (capped; see Limits). Prefer passing all selected IDs in one request rather than one request per location. |
start | datetime | No* | Start time (ISO 8601 with timezone, e.g. 2024-01-01T00:00:00+13:00). *Required for weekly (1w/7d) and monthly (1m/30d) aggregation. |
stop | datetime | No* | Stop time (ISO 8601 with timezone). *Required for weekly and monthly aggregation. |
aggregation | string | No | Aggregation function: mean, sum, min, max. |
aggregation_period | string | No | Period: 1h, 60m, 24h, 1d, 7d, 1w, 1m, 30d. |
timezone | string | No | IANA timezone (e.g. America/Los_Angeles). Default: UTC. |
skip | integer | No | Number of records to skip for pagination. Default: 0. |
limit | integer | No | Maximum number of records to return across all locations (1–10,000). Default: 1000. Applied after Influx returns. |
organization_id omitted: Returns data for all locations across all organizations the user can access. If none, returns [].
organization_id provided: Limits results to that org. Returns 403 if the user lacks access.
location_ids provided: Each location must belong to the resolved org scope. Returns 403 with "Access denied for location {id}" if any are outside scope.
These apply to bearer tokens and API keys. Excess work is refused (not queued). See Authentication.
- Concurrency: at most 6 in-flight
/data* requests per identity and 8 globally. Further requests return 429 with Retry-After.
- Rate: at most 20
/data* requests per identity per minute (429).
- Locations: at most 250
location_ids for last() (no start/stop) and windows of 8 days or less; at most 50 for longer ranges (400). Omit location_ids only when the resolved org fits the matching cap.
- Timeout: Influx work is capped at 30s (504).
limit: counts rows across all locations combined, after the query runs. Batched charts should pass a high enough limit (max 10_000).
All response objects share a common structure. Fields returned depend on the fields parameter and on aggregation mode.
| Field | Type | Description |
|---|
location_id | string (UUID) | Unique identifier for the sensor location. |
time | string (ISO 8601) | Timestamp of the data point (start of aggregation window when aggregated). |
location_name | string | null | Human-readable name for the location. |
aggregation | string | null | Aggregation function used, if any. |
aggregation_period | string | null | Aggregation period used, if any. |
timezone | string | null | Timezone used for the query. |
start_time | string | null | Query start time (ISO 8601). |
end_time | string | null | Query end time (ISO 8601). |
| Field | Type | Description | Notes |
|---|
irrigation_on | boolean | null | Whether irrigation was on at the last known reading. | Request via fields=irrigation_on. Sub-query; uses stop or now() as upper bound. |
irrigation_duration | number | null | Hours of irrigation in the aggregation window. | Request via fields=irrigation_duration. Derived from irrigation_on state changes. |
et | number | null | Processed evapotranspiration depth from LI-710 or ATMOS 51 sensors. | Request via fields=et. Returns et_source and et_source_field; one row is returned per clean ET source in the bucket. |
These fields are stored in InfluxDB and returned when included in fields. Grouped by sensor.
ET, energy balance, and auxiliary data. Groups 0–1 are measurement channels; group 2 is ambient conditions; group 3 is pump/enclosure diagnostics.
| Field | Type | Unit | Description |
|---|
group0_et | float | mm | Evapotranspiration, channel 0. |
group0_le | float | W/m² | Latent heat flux, channel 0. |
group0_h | float | W/m² | Sensible heat flux, channel 0. |
group0_vpd | float | kPa | Vapour pressure deficit, channel 0. |
group0_pa | float | kPa | Air pressure, channel 0. |
group0_ta | float | °C | Air temperature, channel 0. |
group0_rh | float | % | Relative humidity, channel 0. |
group0_seq | integer | — | Sequence / diagnostic. |
group0_diag | integer | — | Diagnostic code. |
group1_et | float | mm | Evapotranspiration, channel 1. |
group1_le | float | W/m² | Latent heat flux, channel 1. |
group1_h | float | W/m² | Sensible heat flux, channel 1. |
group1_pa | float | kPa | Air pressure, channel 1. |
group1_ta | float | °C | Air temperature, channel 1. |
group1_rh | float | % | Relative humidity, channel 1. |
group1_seq | integer | — | Sequence / diagnostic. |
group1_samp_cnt | integer | — | Sample count. |
group1_diag | integer | — | Diagnostic code. |
group2_ah | float | g/m³ | Absolute humidity. |
group2_rh | float | % | Relative humidity. |
group2_svp | float | kPa | Saturation vapour pressure. |
group2_vpd | float | kPa | Vapour pressure deficit. |
group2_pa | float | kPa | Air pressure. |
group2_ta | float | °C | Air temperature. |
group2_td | float | °C | Dew point temperature. |
group2_tilt | integer | ° | Tilt angle. |
group3_pump_v | float | V | Pump voltage. |
group3_pa_cell | float | kPa | Barometric pressure (cell). |
group3_rh_cell | float | % | RH (cell). |
group3_ta_cell | float | °C | Air temperature (cell). |
group3_rh_encl | float | % | Enclosure RH. |
group3_flow | integer | — | Flow rate (count). |
group3_input_v | float | V | Input voltage. |
group3_data_qc | integer | — | Data quality code. |
| Field | Type | Unit | Description |
|---|
canopy_temp | float | °C | Canopy / target temperature. |
canopy_temp_millivolts | float | mV | Raw target millivolts. |
infrared_radiometer_body_temp | float | °C | Sensor body temperature. |
| Field | Type | Unit | Description |
|---|
evaporation_rate | float | mm/hr | Evapotranspiration / evaporation rate. Integrated into processed et. |
latent_heat_flux | float | W/m² | Latent heat flux. |
solar_radiation | float | W/m² | Solar radiation. |
air_temperature | float | °C | Air temperature. |
specific_humidity | float | g/kg | Specific humidity. |
bowen_ratio | float | — | Bowen ratio. |
net_rad_estimate | float | W/m² | Net radiation estimate. |
sensor_tilt | float | ° | Sensor tilt. |
diagnostic_code | float | — | Diagnostic code. |
| Field | Type | Unit | Description |
|---|
air_temp | float | °C | Air temperature. |
avp | float | kPa | Actual vapour pressure. |
atm_pressure | float | kPa | Atmospheric pressure. |
dewpointC | float | °C | Dew point temperature. |
rh | float | % | Relative humidity. |
rh_sensor_temp | float | °C | RH sensor temperature. |
vpd | float | kPa | Vapour pressure deficit. |
psy_const | float | Pa/°C | Psychrometric constant. |
svp | float | kPa | Saturation vapour pressure. |
sol_radWM2 | float | W/m² | 15-minute solar irradiance. |
wind_speed | float | m/s | Wind speed. |
wind_speed_max | float | m/s | Maximum wind speed. |
wind_direction | float | ° | Wind direction. |
gust_speed | float | m/s | Wind gust speed. |
north_wind_speed | float | m/s | North component of wind. |
east_wind_speed | float | m/s | East component of wind. |
precip | float | mm | Precipitation (weather station). Alias: also queries rain gauge rain_gauge_pulse_count when requested. |
strikes | float | count | Lightning strikes. |
strike_dist | float | km | Strike distance. |
tilt_x | float | ° | Tilt X. |
tilt_y | float | ° | Tilt Y. |
lat | float | ° | Latitude. |
long | float | ° | Longitude. |
elev | integer | m | Elevation. |
| Field | Type | Unit | Description |
|---|
rain_gauge_pulse_count | integer | pulses | Raw pulse count. Converted to mm when requested as precip. |
Lower numbers = shallower depth (near surface). Higher numbers = deeper in the soil.
| Field | Type | Unit | Description |
|---|
0_swp | float | kPa | Soil water potential at upper depth. |
1_swp | float | kPa | Soil water potential at lower depth. |
0_temp | float | °C | Temperature at upper depth. |
1_temp | float | °C | Temperature at lower depth. |
The number in the field name is the depth index: 0 = shallowest (nearest surface), highest number = deepest (bottom of probe).
| Field | Brand | Type | Unit | Description |
|---|
0_moisture … 8_moisture | Sentek Drill and Drop | float | m³/m³ | Volumetric water content; 0 shallowest, 8 deepest. |
0_salinity … 8_salinity | Sentek Drill and Drop | float | dS/m | Electrical conductivity; 0 shallowest, 8 deepest. |
0_temperature … 8_temperature | Sentek Drill and Drop | float | °C | Temperature; 0 shallowest, 8 deepest. |
teros54_0_vwc … teros54_3_vwc | METER TEROS 54 | float | m³/m³ | Volumetric water content; 0 shallowest, 3 deepest. |
teros54_0_temp … teros54_3_temp | METER TEROS 54 | float | °C | Temperature; 0 shallowest, 3 deepest. |
teros54_0_raw … teros54_3_raw | METER TEROS 54 | float | — | Raw dielectric permittivity; 0 shallowest, 3 deepest. |
0_vwc, 1_vwc | METER TEROS 12 | float | m³/m³ | Volumetric water content; 0 shallowest, 1 deepest. |
0_soil_temp, 1_soil_temp | METER TEROS 12 | float | °C | Soil temperature; 0 shallowest, 1 deepest. |
0_soil_ec, 1_soil_ec | METER TEROS 12 | float | dS/m | Soil electrical conductivity; 0 shallowest, 1 deepest. |
| Field | Type | Unit | Description |
|---|
irrigation_on | boolean | — | Irrigation state (computed). |
irrigation_duration | float | h | Irrigation hours (computed). |
pulse_count | integer | count | Pulse count. |
digital_input | integer | — | Digital input (irrigation state source). |
dripline_pressure | float | kPa | Dripline pressure. |
| Field | Type | Unit | Description |
|---|
supply_voltage | float | V | Supply voltage. |
external_voltage | float | V | External voltage. |
internal_temp | float | °C | Internal temperature. |
signal_strength | integer | dBm | Cellular signal strength. |
cell_bars | integer | — | Cellular bars (0–5). |
- Returns an array of objects (paginated via
skip and limit).
- Each object represents one (location, time) combination with requested fields.
- When no aggregation is used and no
start/stop given, returns the last value per location.
- Processed
et is returned as bucketed depth in mm. LI-710 group0_et values are summed as depth values. ATMOS 51 evaporation_rate values are treated as 15-minute mm/hr averages, converted to per-sample depth (rate * 0.25), then summed into the requested bucket. ET source values are filtered before aggregation/return: negatives are set to 0 and -9999 values are excluded. LI-710 values > 1.0 are excluded; ATMOS 51 evaporation_rate is not capped. Other requested fields, including canopy_temp, are not affected by ET filtering.