VITALAgronomics
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).


Authentication

Requires authentication via Bearer token (Authorization: Bearer <JWT>) or API key (x-api-key header). Results are scoped to organizations the identity can access.


Query Parameters

ParameterTypeRequiredDescription
organization_idintegerNoOrganization 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.
fieldsstring[]NoComma-separated or repeated list of field names to include. Omit to return raw pivoted data. See Available Fields below.
location_idsstring[]NoFilter 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.
startdatetimeNo*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.
stopdatetimeNo*Stop time (ISO 8601 with timezone). *Required for weekly and monthly aggregation.
aggregationstringNoAggregation function: mean, sum, min, max.
aggregation_periodstringNoPeriod: 1h, 60m, 24h, 1d, 7d, 1w, 1m, 30d.
timezonestringNoIANA timezone (e.g. America/Los_Angeles). Default: UTC.
skipintegerNoNumber of records to skip for pagination. Default: 0.
limitintegerNoMaximum number of records to return across all locations (1–10,000). Default: 1000. Applied after Influx returns.

Org-Scoped Access & Errors

  • 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.

Limits

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).

Response Fields

All response objects share a common structure. Fields returned depend on the fields parameter and on aggregation mode.

Common Fields (always present when applicable)

FieldTypeDescription
location_idstring (UUID)Unique identifier for the sensor location.
timestring (ISO 8601)Timestamp of the data point (start of aggregation window when aggregated).
location_namestring | nullHuman-readable name for the location.
aggregationstring | nullAggregation function used, if any.
aggregation_periodstring | nullAggregation period used, if any.
timezonestring | nullTimezone used for the query.
start_timestring | nullQuery start time (ISO 8601).
end_timestring | nullQuery end time (ISO 8601).

Special / Computed Fields

FieldTypeDescriptionNotes
irrigation_onboolean | nullWhether irrigation was on at the last known reading.Request via fields=irrigation_on. Sub-query; uses stop or now() as upper bound.
irrigation_durationnumber | nullHours of irrigation in the aggregation window.Request via fields=irrigation_duration. Derived from irrigation_on state changes.
etnumber | nullProcessed 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.

Sensor Fields (requested via fields) {#available-fields}

These fields are stored in InfluxDB and returned when included in fields. Grouped by sensor.

LI-710 (Evapotranspiration sensor)

ET, energy balance, and auxiliary data. Groups 0–1 are measurement channels; group 2 is ambient conditions; group 3 is pump/enclosure diagnostics.

FieldTypeUnitDescription
group0_etfloatmmEvapotranspiration, channel 0.
group0_lefloatW/m²Latent heat flux, channel 0.
group0_hfloatW/m²Sensible heat flux, channel 0.
group0_vpdfloatkPaVapour pressure deficit, channel 0.
group0_pafloatkPaAir pressure, channel 0.
group0_tafloat°CAir temperature, channel 0.
group0_rhfloat%Relative humidity, channel 0.
group0_seqinteger—Sequence / diagnostic.
group0_diaginteger—Diagnostic code.
group1_etfloatmmEvapotranspiration, channel 1.
group1_lefloatW/m²Latent heat flux, channel 1.
group1_hfloatW/m²Sensible heat flux, channel 1.
group1_pafloatkPaAir pressure, channel 1.
group1_tafloat°CAir temperature, channel 1.
group1_rhfloat%Relative humidity, channel 1.
group1_seqinteger—Sequence / diagnostic.
group1_samp_cntinteger—Sample count.
group1_diaginteger—Diagnostic code.
group2_ahfloatg/m³Absolute humidity.
group2_rhfloat%Relative humidity.
group2_svpfloatkPaSaturation vapour pressure.
group2_vpdfloatkPaVapour pressure deficit.
group2_pafloatkPaAir pressure.
group2_tafloat°CAir temperature.
group2_tdfloat°CDew point temperature.
group2_tiltinteger°Tilt angle.
group3_pump_vfloatVPump voltage.
group3_pa_cellfloatkPaBarometric pressure (cell).
group3_rh_cellfloat%RH (cell).
group3_ta_cellfloat°CAir temperature (cell).
group3_rh_enclfloat%Enclosure RH.
group3_flowinteger—Flow rate (count).
group3_input_vfloatVInput voltage.
group3_data_qcinteger—Data quality code.

Apogee Infrared Radiometer

FieldTypeUnitDescription
canopy_tempfloat°CCanopy / target temperature.
canopy_temp_millivoltsfloatmVRaw target millivolts.
infrared_radiometer_body_tempfloat°CSensor body temperature.

ATMOS 51 (Evapotranspiration sensor)

FieldTypeUnitDescription
evaporation_ratefloatmm/hrEvapotranspiration / evaporation rate. Integrated into processed et.
latent_heat_fluxfloatW/m²Latent heat flux.
solar_radiationfloatW/m²Solar radiation.
air_temperaturefloat°CAir temperature.
specific_humidityfloatg/kgSpecific humidity.
bowen_ratiofloat—Bowen ratio.
net_rad_estimatefloatW/m²Net radiation estimate.
sensor_tiltfloat°Sensor tilt.
diagnostic_codefloat—Diagnostic code.

Weather station

FieldTypeUnitDescription
air_tempfloat°CAir temperature.
avpfloatkPaActual vapour pressure.
atm_pressurefloatkPaAtmospheric pressure.
dewpointCfloat°CDew point temperature.
rhfloat%Relative humidity.
rh_sensor_tempfloat°CRH sensor temperature.
vpdfloatkPaVapour pressure deficit.
psy_constfloatPa/°CPsychrometric constant.
svpfloatkPaSaturation vapour pressure.
sol_radWM2floatW/m²15-minute solar irradiance.
wind_speedfloatm/sWind speed.
wind_speed_maxfloatm/sMaximum wind speed.
wind_directionfloat°Wind direction.
gust_speedfloatm/sWind gust speed.
north_wind_speedfloatm/sNorth component of wind.
east_wind_speedfloatm/sEast component of wind.
precipfloatmmPrecipitation (weather station). Alias: also queries rain gauge rain_gauge_pulse_count when requested.
strikesfloatcountLightning strikes.
strike_distfloatkmStrike distance.
tilt_xfloat°Tilt X.
tilt_yfloat°Tilt Y.
latfloat°Latitude.
longfloat°Longitude.
elevintegermElevation.

Rain gauge

FieldTypeUnitDescription
rain_gauge_pulse_countintegerpulsesRaw pulse count. Converted to mm when requested as precip.

Soil water potential

Lower numbers = shallower depth (near surface). Higher numbers = deeper in the soil.

FieldTypeUnitDescription
0_swpfloatkPaSoil water potential at upper depth.
1_swpfloatkPaSoil water potential at lower depth.
0_tempfloat°CTemperature at upper depth.
1_tempfloat°CTemperature at lower depth.

Volumetric moisture probes

The number in the field name is the depth index: 0 = shallowest (nearest surface), highest number = deepest (bottom of probe).

FieldBrandTypeUnitDescription
0_moisture … 8_moistureSentek Drill and Dropfloatm³/m³Volumetric water content; 0 shallowest, 8 deepest.
0_salinity … 8_salinitySentek Drill and DropfloatdS/mElectrical conductivity; 0 shallowest, 8 deepest.
0_temperature … 8_temperatureSentek Drill and Dropfloat°CTemperature; 0 shallowest, 8 deepest.
teros54_0_vwc … teros54_3_vwcMETER TEROS 54floatm³/m³Volumetric water content; 0 shallowest, 3 deepest.
teros54_0_temp … teros54_3_tempMETER TEROS 54float°CTemperature; 0 shallowest, 3 deepest.
teros54_0_raw … teros54_3_rawMETER TEROS 54float—Raw dielectric permittivity; 0 shallowest, 3 deepest.
0_vwc, 1_vwcMETER TEROS 12floatm³/m³Volumetric water content; 0 shallowest, 1 deepest.
0_soil_temp, 1_soil_tempMETER TEROS 12float°CSoil temperature; 0 shallowest, 1 deepest.
0_soil_ec, 1_soil_ecMETER TEROS 12floatdS/mSoil electrical conductivity; 0 shallowest, 1 deepest.

Irrigation & system

FieldTypeUnitDescription
irrigation_onboolean—Irrigation state (computed).
irrigation_durationfloathIrrigation hours (computed).
pulse_countintegercountPulse count.
digital_inputinteger—Digital input (irrigation state source).
dripline_pressurefloatkPaDripline pressure.

Telemetry diagnostics

FieldTypeUnitDescription
supply_voltagefloatVSupply voltage.
external_voltagefloatVExternal voltage.
internal_tempfloat°CInternal temperature.
signal_strengthintegerdBmCellular signal strength.
cell_barsinteger—Cellular bars (0–5).

Response Shape

  • 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.

On this page