V3
Base URL: https://api-prod.weenat.com

Weenat Developers' API V3

Full reference documentation for integrating Weenat sensor data into your own applications and workflows.


Quickstart

New to the Weenat API? This guide walks you through your first API call in a few minutes — no prior Weenat knowledge required. Whether you're a developer, a project manager, or just curious about what's possible, you'll have live sensor data in front of you by the end.

1Create an API key

Sign in to the Weenat app and generate a personal API key. Keys are user-based — one key gives you access to all the farms and networks you belong to.

  1. Sign in at app.weenat.com
  2. Go to My account → Account management → API
  3. Click Create a key, name it, and copy it somewhere safe — it won't be shown again.
Keep your key private
Anyone with your key can read all your sensor data. Don't commit it to version control or share it publicly.
2Authenticate

Every API request must include your key in the Authorization header:

Authorization: Weenat-Api-Key <your-api-key>

You can also try all endpoints interactively via the V3 Swagger UI — click Authorize and paste your key there. No code needed.

3List your devices

Call GET /v3/devices to retrieve all sensors you have access to. This is the best starting point — it gives you device IDs, models, available metrics, and their last known location.

curl https://api-prod.weenat.com/v3/devices \
  -H "Authorization: Weenat-Api-Key <your-api-key>"

The response is a paginated list. Here's what a single device entry looks like:

{
  "count": 123,
  "next": "https://api-prod.weenat.com/v3/devices/?offset=100&limit=100",
  "previous": null,
  "results": [{
    "id": 17892,
    "brand": "Weenat",
    "serial_number": "W700349",
    "model": "CAPA-60-6",
    "model_label": "Soil capacitance probe",
    "sensor_brand": "HydrWize",
    "available_metrics": ["T_CAPA", "U_CAPA"],
    "registered_by": {
      "id": 1484,
      "name": "Atlantic Cooperative"
    },
    "location": [47.01407, -2.28703],
    "location_text": "Noirmoutier-en-l'Île, Vendée",
    "broadcast_network_provider": "LoRa",
    "latest_measurement_broadcast": "2024-07-24T09:21:40Z",
    "timezone": "Europe/Paris"
  }]
}

Note the id field — you'll need it for the next step. The available_metrics array tells you exactly what this sensor measures.

4Fetch sensor measurements

Use the device id from the previous step to call GET /v3/data/devices/{id}. You must specify a timespan and a time range.

curl "https://api-prod.weenat.com/v3/data/devices/17892?timespan=hour&begin=2024-07-24T00:00:00Z&end=2024-07-24T23:59:59Z" \
  -H "Authorization: Weenat-Api-Key <your-api-key>"
ParameterValuesDescription
timespanraw hour dayGranularity of the returned data
beginISO 8601 UTCStart of the requested period
endISO 8601 UTCEnd of the requested period
Max period per timespan
raw → 15 days  ·  hour → 35 days  ·  day → 370 days. See Rate limits for full details.
You're all set
You can now explore the full API — retrieve farms, plots, or scope data to a specific organization. The Swagger UI lets you try every endpoint interactively without writing any code.

Introduction

We are glad to introduce you the Weenat Developers API. We work hard to let you handle your own data the way you want and cover more use cases than the ones you can enjoy in our web and mobile apps.


Who is it made for?

We've made the Weenat Developers API for organizations that dispose of development capacities and can rely on one or more developers.

It can also be used by people using AI platforms and willing to exploit the full potential of this API.


Prerequisites

In order to use the Weenat Developers API, you will need:

  • A Weenat App account - Create it here
  • A Weenat Developers API key — Create it here
  • It can be someone else's API key or yours. But if it's yours, you have to be a member of the farms or networks of farms from which you want to retrieve data.

Basic Principles

  • All calls must be done on base URL: https://api-prod.weenat.com
  • All values must be encoded in UTF-8.
  • Time is represented using ISO 8601 timestamps such as: 2024-12-10T09:04:34Z
  • Timestamps are expressed in UTC (Z). Not in local time.
  • Main concepts: farms, plots, devices, data.
  • All data uses the metric system. Imperial conversions must be done on your side.
  • Positions use latitude and longitude [lat, long] coordinates. Some old sensors do not provide coordinates. However, geojson attributes are in MKT standard: [long, lat].
Concepts note
  • Farms can be nested (a farm can the parent farm of other farms, in networks for example).
  • Some devices may not be related to a plot. They can be standalone. Some devices may be related to several plots. Tensiometers can be virtually installed at different depths in different plots.
  • Not all farms have plots. It is not mandatory.
  • Not all farms have sensors. It is not mandatory.
  • Farms may have virtual sensors.
  • Some devices do not expose data. For example if they're broken, have a battery failure or are laid down. It can also be a destroyed sensor that haven't been removed from the farm it belonged to.
  • Members of farms being affiliates of a network may have access to a lot of sensors (sensors belonging to the network (parent farm or affiliate farms)).
  • Not all networks share the sensors between affiliates.

Authentication & API Keys

The API relies on API keys for authentication. Generate one in the app:

  1. Sign in at app.weenat.com/auth/login
  2. Go to My account
  3. Navigate to Account management → API
  4. Click Create a key, give it a name, and save.
Required header
All API calls must include: Authorization: Weenat-Api-Key <your-api-key>

Key rules

  • API keys are user-based, not farm-based, nor network-based. One key can access all farms, plots and sensors one can have access to.
  • Keys have no duration limit.
  • Once deleted, the key is immediately invalidated.
  • You can create up to 20 keys.
  • API limits are per user, shared across all your keys. - View limits
  • If you want to take the most advantage of the API keys limits, ask a member in each one of the farms from which you want to retrieve data to give you a key.

What can you do with it?

You can retrieve the list of affiliate farms of a network.

You can retrieve the detailed information of a farm. Whether is it an independant farm or an affiliate of a network.

You can retrieve a list of plots.

You can retrieve a list of sensors.

You can scope the list of plots per farm.

You can scope the list of sensors per farm.

You can retrieve details of a sensor per serial number.

For each plot or sensor, you can retrieve data (measurements).

The data can be retrieved at a specific timespan for a specific period.

At plot level, you always have more data because Weenat adds more metrics and several sensors can be linked to a plot.

Depending if you fetch data at plot level or sensor level, the metric name can change. Ex: T_CAL-20 at sensor level can be named T_SOIL_BY_HORIZON-20 at plot level.

Each "data" is a timestamped dataset representing a point in the history of your plot/sensor. Example:

{
  "timestamp": "2024-12-10T09:04:34Z",
  "T":   35.1,
  "U":   59.2,
  "RR":  0,
  "FF":  2.6,
  "FXY": 11.3
}

By cumulating timestamps you can rebuild a data table, convert it into a graph, understand the current situation, and make projections.


Metrics Reference

All measurements you may find in API responses:

KeyDefinition
TTemperature (°C)
URelative humidity (%)
RRCumulative rainfall (mm)
FFWind speed (km/h)
DDWind direction (degrees; e.g. 90° for a wind from the east)
FXYWind gust speed (km/h)
DXYWind gust direction (degrees)
T_SOILSoil temperature from Soil thermometers or Fertigation probes (°C)
T_SOIL_BY_HORIZON-20, T_SOIL_BY_HORIZON-30…Soil temperature from Tensiometers or Capacitive probes (°C)
T_CAL-20, T_CAL-30…Soil temperature at 20 cm, 30 cm… from tensiometers (°C)
HPOT-20, HPOT-30…Soil water potential at 20 cm, 30 cm… (kPa)
T_CAPA-20, T_CAPA-30…Soil temperature at 20 cm, 30 cm… from capacitive probes (°C)
U_CAPA-20, U_CAPA-30…Soil water content at 20 cm, 30 cm… (%)
SF_CAPA-20, SF_CAPA-30…Scale frequency at 20 cm, 30 cm… (no unit)
T_DRYDry temperature (°C)
T_WETWet temperature (°C)
LW_DLeaf wetness duration (s)
LW_VLeaf wetness voltage (mV)
ECPElectro-conductivity (dS/m)
SWCSoil water content (%)
SSISolar irradiance (W/m²)
SSI_MINMinimum solar irradiance (W/m²)
SSI_MAXMaximum solar irradiance (W/m²)
PPFDPhotosynthetically active radiation (µmol/s/m²)
PPFD_MINMinimum PAR (µmol/s/m²)
PPFD_MAXMaximum PAR (µmol/s/m²)
T_DEWDew point (°C)
ETPPotential evapotranspiration (mm)
VPDVapor Pressure Deficit (kPa)
THITemperature Humidity Index (animal comfort temperature index)
READILY_WATER_CONTENT-40…Readily available water at 40 cm… (mm)
SURVIVAL_WATER_TANK-40…Survival water tank at 40 cm… (mm)
WATER_TANK_LEVEL-40…Water tank level at 40 cm… (mm)
WATER_TANK_MAX-40…Maximum water tank size at 40 cm… (mm)

Sensor Model Names

Both name and type are exposed in API responses.

Weenat sensors

Model nameSensor typeMeasured metrics
CAPA-30-3Soil capacitance probeSF_CAPA-xx, T_CAPA-xx
CAPA-60-6Soil capacitance probeSF_CAPA-xx, T_CAPA-xx
CHP-15/30TensiometerH_POT-xx, T_CAL-xx
CHP-30/60TensiometerH_POT-xx, T_CAL-xx
CHP-60/90TensiometerH_POT-xx, T_CAL-xx
ECFertigation probeSWC, ECP, T_SOIL
LWSLeaf wetness sensorLW_D, LW_V
PPluviometerRR
PTWeather stationRR, T
P+Weather stationRR, T, U
PYRANOPyranometerSSI, SSI_MIN, SSI_MAX
PARPhotosynthetically active radiation sensorPPFD, PPFD_MIN, PPFD_MAX
T_GELFrost sensorT_WET, T_DRY
THThermometer & HygrometerT, U
T_MINISoil thermometerT_SOIL
WAnemometerFF, DD, FXY, DXY

CoRHIZE sensors

Model nameSensor type
Aqualink-CAPA-20-2 … Aqualink-CAPA-140-14CoRHIZE Aqualink Soil capacitance probe
Corpus-CAPA-20-2 … Corpus-CAPA-80-8CoRHIZE EVVOS Soil capacitance probe
Corpus-WSCoRHIZE EVVOS Weather Station
Corpus-WS-CAPA-20-2 … Corpus-WS-CAPA-80-8CoRHIZE EVVOS Weather Station & Soil capacitance probe

Ongoing fault events

Both ongoing fault events name and type are exposed in API responses. The timestamp is the moment when the event started.

Ongoing fault events are only exposed on Weenat sensors, not the other brands.

Events which are over are not exposed in the response.

The events exposed are those ongoing at the time of the call. A call a few seconds later may change the response.

By default, the with_ongoing_fault_events query param is not set and results do not contain the ongoing_fault_events[] array. By setting it to 'true', the response will filter devices with ongoing fault events.

Event idEvent nameEvent description
0sensor_laid_downThe sensor seems to be laid down. On purpose or not. If it's not on purpose it may affect measurements. For example, a pluviometer not in a vertical position may not measure rain correctly.
1gps_position_unknownThe sensor cannot be geolocated. This could be due to various reasons.
2blocked_spoonThe sensor rainfall spoon cannot go back up. The most probable reason is that there are debris in the pluviometer. By cleaning the spoon and/or the pluviometer funnel, the event may stop.
3blocked_spoon_10_timesThe sensor spoon has been blocked ten times over a short period of time. The rain spoon probably needs to be changed.
4unblocked_spoonThe spoon is no longer blocked.
5low_signal_qualityThe sensor broadcasts messages but not all messages go through the network. The two main actions to take are: moving the sensor elsewhere or adding an antenna extension.
6interrupted_broadcastThe sensor no longer emits. The most probable reason is that the battery is dead.

Soil Texture Types

We use USDA soil texture classes, exposed in /plots and /plots/{id} responses as an ID only. Use this table to map them:

IDSoil texture
1Clay
2Silty clay
3Fine silty clay
4Clayey-sandy
5Sandy clay loam
6Clay loam
7Silt
8Fine silt
9Loam
10Sand
11Loamy sand
12Sandy loam

Why are metrics different between /data/devices/id and /data/plots/id?

At plot level, we have more information than at device level: soil texture, environment (open field or greenhouse), substrate type (for fertigation probes).

One of the most required metrics is U_CAPA at device level. We cannot provide it at device level because a sensor can be related to more than one plot, and each plot can have a different soil texture (and a different calibration equation (selector in the plot context panel)).

Key point
U_CAPA is calculable from SF_CAPA, which we expose at device level. The default calibration equation ("By default") maps to Generic in the tables below.

We manufacture sensors with two capacitance probe brands: HSTI (exposed as "HydrWize") and Aquacheck (exposed as "AquaChck"). Fetch the probe brand from the /plots response.

Equation

Y = α + β × x

Where Y = U_CAPA (soil water content, the target value) and x = SF_CAPA (from /data/devices/{id}).

HSTI — HydrWize probes

Calibration equationαβ
Sand-10.8360.4853
Sandy loam or Loamy sand11.1070.2072
Sandy clay loam9.25070.21885
Sandy clay7.39440.2305
Clay / Silty clay / Clay loam / Silty clay loam-14.8910.5052
Loam / Silt / Silt loam-1.8920.3562
Generic (all other equations)3.46640.2689

Aquacheck — AquaChck probes

Calibration equationαβ
Sand-8.64630.5219
Clay-5.95750.6193
Silt loam-2.790.4392
Loam4.83720.4851
Clay loam-8.44390.565
Generic (all other equations)-7.43470.5564

Soil Temperatures

We expose different soil temperature metrics depending on the sensor type.

T_SOIL

Temperature measured by either a Soil thermometer (T_MINI) or a Fertigation probe (EC), at the depth the sensor is installed — most of the time 5 to 10 cm deep. In the app, you cannot define any installation depth for Fertigation probes.

T_CAL-xx & T_CAPA-xx

Calibration temperatures from tensiometers and capacitive probes respectively. They are not an exact soil temperature — however, the coefficient is so small that the difference with the actual temperature is marginal.

T_SOIL_BY_HORIZON-xx

Soil temperatures from tensiometers and capacitive probes. For each horizon with multiple tensiometers, the value is the average of all tensiometers at that depth.

Sensor exclusivity on a plot
On a plot, you cannot combine a soil thermometer, a fertigation probe, tensiometers, or a capacitive probe — except that more than one tensiometer per plot is allowed. This means you always know the source of T_SOIL or T_SOIL_BY_HORIZON-xx on any given plot.

At data response level on /data/plots/{id}:

  • If it's T_SOIL → source is a soil thermometer or fertigation probe.
  • If it's T_SOIL_BY_HORIZON-xx → source is a capacitive probe or one or more tensiometers.

You can cross-reference the "devices": [] array in /plots or /plots/{id} responses to confirm the sensor type.


Broadcast Timespans

Most Weenat sensors emit every 15 minutes. Some exceptions:

SensorBroadcast timespan
All sensors15 minutes
Frost sensors15, 10 or 5 minutes (temperature-dependent)
Soil capacitance probes30 minutes
Endpoint note
Highest frequencies (5 min) are only available through /data/devices/{id}.
/data/plots/{id} exposes hourly timespans minimum, as plots aggregate sensors with different — and non-synchronized — broadcast schedules.

Leaf Wetness Intensity (LW_I)

Leaf Wetness Intensity is derived from Leaf Wetness voltage (LW_V), but as the metric by itself is difficult to analyse we applied a mapping table. 0 being dry and 10 very very wet:

LW_V range (mV)LW_I value
[0 – 362]0
[362 – 416]1
[416 – 470]2
[470 – 525]3
[525 – 579]4
[579 – 633]5
[633 – 687]6
[687 – 742]7
[742 – 796]8
[796 – 850]9
[850 – 1000]10

Data Model

The ultimate level of data container is a farm. A farm contains zero, one, or several plots. A device is a sensor — related to one, several, or no plot at all.

Depending on its type, each device transmits a dataset that differs in structure and timespan.

Farm data model diagram
Important
Depending on the user who generated the API key, you may retrieve more or fewer sensors and sensor data. In all cases, plots are never shared between affiliates of a network. Only members of the network organization (the parent farm) can access plots of affiliate organizations.

Networks & Affiliates

Both a farm and a network of farms are organizations in Weenat's database. A network can include several farms, referred to as affiliates.

Network diagram

Being a member of a network gives you access to data from all affiliated farms. Being a member of a single farm restricts access to that farm only.


Specific network case: shared_sensors

Most networks are flagged shared_sensors = true (by default). Some are set to false.

shared_sensors = true (default)

The network organization and all affiliate organizations share sensors and sensor data with each other — including between affiliates themselves.

shared_sensors = false

The network shares its sensors with affiliates, and affiliates share theirs back with the network. However, affiliate organizations do not share sensors between each other.

shared_sensors true

shared_sensors = true

shared_sensors false

shared_sensors = false


Members & Roles

Farms are composed of members with the following roles:

  • owner — always at least one per farm
  • administrator
  • reader
  • agent
  • advisor — extra role on network-level farms, applies to all affiliates

Your role determines the same level of visibility whether you use the Weenat app or the API.

Organization endpoints recap

EndpointReturns
v3/organizations/farmsAll farms you are a member of
v3/organizations/affiliatesAll farms affiliated to networks you are a member of
v3/organizations/networksThe networks you are a member of

Geolocation

Sensor and plot positions are represented as [longitude, latitude] coordinates:

"location": [
  -1.539275561720065,
  47.272403197936285
]
Note
Some older sensors do not provide coordinates.

GeoJSON

You can retrieve plots as GeoJSON files from: /farms, /farms/{id}, /plots, /plots/{id}.

Add the query parameter output_format=geojson. The higher the level, the more plot shapes are included in the response. All plot metadata is in the properties object in the geojson.


Rate Limits & Quotas

To balance shared resources, we enforce the following limits (per user, shared across all his API keys):

200
API calls / minute
4,000
API calls / day
20
Max API keys / user

Throttling uses a sliding window. Throttled responses are not counted toward the limits.

Data periods for /data endpoints

You cannot retrieve one year of data at raw timespan in one call. But, you can do it in 25 calls.

You can retrieve one year of data at daily timespan in one call.

If you need the raw data, we recommend you store it on your side so you don't have to retrieve them again and it will not decrease a lot your limited number of authorized calls.

If you need to retrieve raw data, we advise you to do it one per day per sensor/plot. That's 1 call for 96 timestamps.

This API is not made for real time.

TimespanMax period
raw15 days
hour35 days
day370 days

Caching recommendations

  • /v3/plots, /v3/devices — structural data, rarely changes
  • /v3/data/plots/{id}, /v3/data/devices/{id} — only changes as the requested time period extends

Frequently Asked Questions

What about a weather station that is no longer related to a plot?
Their data will no longer be exposed in the Weenat Developers API V3 responses.
What if I want to scope results to a specific type of sensor?
You will have to filter the exposed data in the frontend. There is no server-side filter by sensor type.
Is the organization_id parameter required?
No. However, if the key owner belongs to more than one farm, organization_id lets you scope results to a single farm.
Do you have a Postman or Insomnia collection?
We provide an OpenAPI Spec YAML file you can import:
  1. Download the YAML file from the Swagger page.
  2. Create an empty collection in Postman / Insomnia.
  3. Import the file as a collection.

Other Links