API Documentation
This document is intended for experienced developers and technical professionals who are familiar with the purpose and function of APIs, as well as general programming principles. If you are not confident in your understanding of API usage, integration, or the foundational concepts of software development, this document may not be suitable for your needs. Incorrect implementation based on an incomplete understanding can lead to unexpected behaviors, errors, or system vulnerabilities. Please consult with a knowledgeable developer or technical expert before proceeding.
Overview
The Wildeye API allows users to extract time-series information recorded by Wildeye. It supports providing information on the type of data the time-series represents, and the measurements.
The API current does not support any form of aggregation of the time-series information.
Base URL: https://api.mywildeye.com
Authentication
The API uses JWT Bearer token authentication. A token (API Key) can be obtained from a client administrator through Wildeye’s web interface. The token (API Key) provides access control restrictions to the set of Clients, set of Groups, or set of Sites that can be access via the API.
Include the token (API Key) in the Authorization header of your request.
See this API Keys for how to setup API keys.
Example Header:
Authorization: Bearer <your-token>
Endpoint for Testing Authentication:
URL:
/api/v1/ping/authMethod:
GETDescription: Verifies if the authentication header is correct.
Response:
200 OKResponse Example:
authenticated pong (id, ...) (clientId, ....) (nbf, ....) (exp, .....) (iat, .....)
API Rate Limits
Currently, there are no enforced rate limits on API usage. However, we reserve the right to implement rate limits or restrict access if we detect excessive usage or abuse. To ensure continued access, we encourage responsible usage of the API.
Date Formats
Dates and times returned via the API will all be in UTC.
Example:
"lastUpload": "2025-01-10T20:02:21.31",
Dates and times used in the query string are in UTC. It is not required to send through the time component of the date, if a time component is not supplied it will default to midnight.
Data Model
Site
id: UUID of the site. STRINGname: Name of the site. STRING NULLABLEprojectReference: Project reference stored against the site. STRING NULLABLElastUpload: Date and time of the last upload received. STRING DATE/TIME NULLABLEdeviceId: Device ID associated with the site. STRING NULLABLEgps: Location of the site. GPS NULLABLEdisplayTimezone: Timezone information is displayed in for this site. TIMEZONE NULLABLEclient: Client the site belongs to. CLIENT NULLABLEinputs: List of inputs at the site. INPUT NULLABLEcustomFields: List of custom fields and their values. CUSTOM FIELD
GPS
latitude: Latitude DOUBLElongitude: Longitude DOUBLE
Time Zone
offset: Offset of the time zone from UTC. STRINGfollowsDST: Indicates if the time zone follows daylight savings time or is a fixed offset from UTC. BOOLEAN
Client
id: UUID of the client. STRINGname: Name of the client. STRING NULLABLE
Input
id: UUID of the input. STRINGname: Name of the input. STRING NULLABLElogical: Logical name of the input. STRING NULLABLEscada: Scada ID tag for the input. STRING NULLABLEloggingInterval: Interval for logging in seconds. DOUBLEunit: Unit of measurement. STRING NULLABLEcategory: Category of the measurement. STRING NULLABLEsensor: Sensor name for the input. STRING NULLABLEsensorType: Sensor type for the input. STRING NULLABLEhasMeterReadings: Indicates if this input has meter readings available. BOOLEANcustomFields: List of custom fields and their values. CUSTOM FIELD
Input Measurement
id: UUID of the input. STRINGmeasurements: List of measurements for the referenced input. MEASUREMENT NULLABLE
Measurement
time: Timestamp of the measurement. STRINGvalue: Value recorded at the time. DOUBLE
Custom Field
name: Name of the custom field. STRINGvalue: Value of the custom field. STRING
Meter Reading For Meter Id
outpostId: Outpost Id for the site. STRINGsiteId: UUID of the site. STRINGmeterId: Meter Id from the custom field. STRINGinputId: UUID of the input. STRINGreadingDateTimeUtc: Timestamp of the meter reading. STRINGreadingValue: Value of the meter reading. DOUBLE
Meter Reading For Meter Id Paged Results
data: List of METERREADINGFORMETERID.nextPageUrl: URL to retrieve the next page of results. STRINGmetadata:count: count of the records returned indatalist. INTEGERnextStart: Date and time in UTC for the next page request. STRING NULLABLEpageSize: Record of the page size originally requested. INTEGER
Available Endpoints
Ping
URL:
/api/v1/pingMethod:
GETDescription: Checks if the service is alive.
Response:
200 OKResponse Format: STRING
Response Example:
TEXTpong
Categories
URL:
/api/v1/categoriesMethod:
GETDescription: Fetches available categories for the user.
Response Format: Array of STRING
Response Example:
JSON[ "Electric Conductivity - Soil", "Moisture - Soil", "Rain", "Signal strength - device", "Soil Moisture", "Temperature - Soil", "Unknown" ]
Sites
URL:
/api/v1/sitesMethod:
GETDescription: Fetches a list of sites and their associated inputs.
Response Format: Array of SITE
Response Example:
JSON[ { "id": "32525cb8-1934-4bcf-a5c8-c7fdfc6671c5", "name": "North Pole", "projectReference": null, "lastUpload": "2025-01-10T20:02:21.31", "deviceId": "op999999", "gps": { "latitude": 90.000, "longitude": 0.000 }, "displayTimezone": { "offset": "+10:00", "followsDST": true }, "client": { "id": "8d6e9408-c086-429e-b995-448196610c06", "name": "Santa Services Limited" }, "inputs": [ { "id": "2bc976f0-f2ac-48f7-a1b3-09e21d0845ed", "name": "NACS #1 - 4-20mA Analogue", "logical": "A1", "scada": null, "loggingInterval": 0, "unit": null, "category": null, "sensor": null, "sensorType": null, "hasMeterReadings": false, "customFields": [] }, { "id": "eba49c05-f2ac-472d-85ec-b0981cda84d5", "name": "NACS #2 - 4-20mA Analogue", "logical": "A2", "scada": null, "loggingInterval": 0, "unit": "", "category": null, "sensor": null, "sensorType": null, "hasMeterReadings": false, "customFields": [] }, { "id": "8c9239ec-2a8a-40b0-8182-b0981cda84d5", "name": "NACS #1 - Counter", "logical": "C1", "scada": null, "loggingInterval": 0, "unit": "", "category": null, "sensor": null, "sensorType": null, "hasMeterReadings": false, "customFields": [] }, { "id": "8c9239ec-297c-40b0-a8d7-68141ed869b7", "name": "Precipitation", "logical": "C2", "scada": null, "loggingInterval": 600, "unit": "", "category": null, "sensor": null, "sensorType": null, "hasMeterReadings": false, "customFields": [] }, { "id": "7706c201-43c9-b5e8-b327-233175c5f7d8", "name": "Signal Strength", "logical": "RSRP", "scada": null, "loggingInterval": 0, "unit": "dBm", "category": "Signal strength - device", "sensor": "Default", "sensorType": "Default", "hasMeterReadings": false, "customFields": [] }, { "id": "73344c201-b5e8-45eb-b5e8-9b12342d0855", "name": "Soil Moisture", "logical": "3S", "scada": null, "loggingInterval": 3600, "unit": "", "category": "Unknown", "sensor": "Soil sensor (8 level)", "sensorType": "EnviroPro soil moisture probes", "hasMeterReadings": false, "customFields": [] }, ..... ], "customFields": [ { "name": "License", "value": "1234567" } ] }, .... ]
Measurements
Measurements are the individual reading values returned for an input. It is possible to get readings for multiple sites, inputs or input categories from this endpoint in one request.
We support three types of filters to retrieving measurements at present. The filters are applied in the query parameter and query by Input Category, Input Id, or Device Id. Each of these allows you to pass an array for filtering. You can not combine the filters in a single request.
By Device Ids:
query=deviceids=['op999999', 'op999998', 'op999997']By Input Ids:
query=ids=['73344c201-b5e8-45eb-b5e8-9b12342d0855', '8c9239ec-297c-40b0-a8d7-68141ed869b7']By Categories:
query=categories=['Wind Speed', 'Rain', 'Signal Strength - device']
Paginated Results
Measurement results are paginated into pages of 10,000 results. If you are querying for a large range of data from the API your client will need to support paging through the results. Pass the page parameter in the query string to request a specific page of results.
Measurements based on time range
URL:
/api/v1/measurementsMethod:
GETQuery Parameters:
query: Query string (e.g.,ids=[...]orcategories=[...]ordeviceids=[...]).start: Start date-time (optional, defaults to 1 day ago).end: End date-time (optional).page: Page number for pagination.
Response Format: Array of INPUT MEASUREMENT
Response Example:
JSON[ { "id": "d18bca39-4ff9-40e8-8596-2b690a55b064", "measurements": [ { "time": "2024-03-07T04:31:00", "value": -10.43 }, .... ] }, .... ]
Latest Measurements
URL:
/api/v1/measurements/latestMethod:
GETQuery Parameters:
query: Query string (e.g.,ids=[...]).count: Number of latest measurements (optional).page: Page number for pagination.
Response Format: Array of INPUT MEASUREMENT
Response Example:
JSON[ { "id": "029c99f0-f53a-4e05-bb86-1db8dc19f634", "measurements": [ { "time": "2024-03-07T04:31:00", "value": -10.43 } ] } ]
How to Retrieve Measurements
By Device IDs:
Query:deviceids=['op74525', 'op70449']
Example Request:CODEGET /api/v1/measurements?query=deviceids=['op74525','op70449']By Categories:
Query:categories=['Wind Speed']&start=2024-10-07
Example Request:CODEGET /api/v1/measurements?query=categories=['Wind Speed']&start=2024-10-07By Input IDs:
Query:ids=[9e33b4a4-6b98-40dc-88f0-761057e76940]
Example Request:CODEGET /api/v1/measurements?query=ids=[9e33b4a4-6b98-40dc-88f0-761057e76940]Latest 5 measurements from an Input ID :
Query:ids=[9e33b4a4-6b98-40dc-88f0-761057e76940]
Example Request:CODEGET /api/v1/measurements/latest?query=ids=[9e33b4a4-6b98-40dc-88f0-761057e76940]&count=5
Meter Readings
Meter readings are the manually entered meter readings associated with an input. The time of these inputs depends on the date and time entered when the manual reading is taken. In the case of manual readings we return the value entered by the user of the application.
We support three types of filters to retrieving meter readings at present. The filters are applied in the query parameter and query by Input Category, Input Id, or Device Id. Each of these allows you to pass an array for filtering. You can not combine the filters in a single request.
By Device Ids:
query=deviceids=['op999999', 'op999998', 'op999997']By Input Ids:
query=ids=['73344c201-b5e8-45eb-b5e8-9b12342d0855', '8c9239ec-297c-40b0-a8d7-68141ed869b7']By Categories:
query=categories=['Flow Meter - Irrigation']
Paginated Results
Measurement results are paginated into pages of 10,000 results. If you are querying for a large range of data from the API your client will need to support paging through the results. Pass the page parameter in the query string to request a specific page of results.
Meter readings based on time range
URL:
/api/v1/meterreadingsMethod:
GETQuery Parameters:
query: Query string (e.g.,ids=[...]orcategories=[...]ordeviceids=[...]).start: Start date-time (optional, defaults to 1 day ago).end: End date-time (optional).page: Page number for pagination.
Response Format: Array of INPUT MEASUREMENT
Response Example:
JSON[ { "id": "029c99f0-f53a-4e05-bb86-1db8dc19f634", "measurements": [ { "time": "2025-04-01T08:49:00", "value": 152031 }, { "time": "2025-05-01T09:23:00", "value": 152122 }, { "time": "2025-06-01T06:30:00", "value": 152352 } ] } ]
Latest Meter Readings
URL:
/api/v1/meterreadings/latestMethod:
GETQuery Parameters:
query: Query string (e.g.,ids=[...]).count: Number of latest measurements (optional).page: Page number for pagination.
Response Format: Array of INPUT MEASUREMENT
Response Example:
JSON[ { "id": "029c99f0-f53a-4e05-bb86-1db8dc19f634", "measurements": [ { "time": "2025-06-01T06:30:00", "value": 152352 } ] } ]
Meter Readings For Meter Ids
The MeterReadingsForMeterIds endpoint returns meter readings for inputs that include custom fields called MeterId, Meter Id, Meter Number, or Meter Serial Number. This endpoint is designed to handle large datasets efficiently using time-based pagination.
URL:
/api/v1/meterreadingsformeteridsMethod:
GETQuery Parameters:
start: Start date and time in UTC (ISO 8601 format) (Optional: defaults to 1 day ago)end: End date and time in UTC (ISO 8601 format) (Optional: defaults to current time)meterIds: A list of Meter IDs to filter the results by. (Optional: defaults to include all Meter IDs)pageSize: Maximum number of meter readings per page. (Optional: defaults to 10,000, maximum 50,000)
Response Format: METERREADINGFORMETERIDPAGEDRESULTS
Response Example:
{
"data": [
{
"outpostId": "op-test1",
"siteId": "550e8400-e29b-41d4-a716-446655440000",
"meterId": "METER-001",
"inputId": "660e8400-e29b-41d4-a716-446655440001",
"readingDateTimeUtc": "2023-06-01T08:15:30.000Z",
"readingValue": 1234.56
},
{
"outpostId": "op-test2",
"siteId": "550e8400-e29b-41d4-a716-446655440002",
"meterId": "METER-002",
"inputId": "660e8400-e29b-41d4-a716-446655440003",
"readingDateTimeUtc": "2023-06-01T08:16:45.000Z",
"readingValue": 987.65
}
],
"nextPageUrl": "https://api.example.com/api/v1/MeterReadingsForMeterIds?start=2023-06-01T08:16:45.003Z&end=2023-06-30T23:59:59Z&pageSize=10000",
"metadata": {
"count": 2,
"nextStart": "2023-06-01T08:16:45.003Z",
"pageSize": 10000
}
}
Pagination
This endpoint uses time-based pagination rather than traditional offset/limit pagination for better performance with large datasets.
How it works:
Results are ordered chronologically by
ReadingDateTimeUtcEach response includes a
nextPageUrlfor the next page
Pagination Flow:
First request: Use
startandendparametersSubsequent requests: Use the
nextPageUrlfrom the previous response, or manually setstartto thenextStartvalue from metadata
Example Queries
Basic Query (First Page)
GET /api/v1/MeterReadingsForMeterIds?start=2023-06-01T00:00:00Z&end=2023-06-30T23:59:59Z
With Specific Meter IDs
GET /api/v1/MeterReadingsForMeterIds?start=2023-06-01T00:00:00Z&end=2023-06-30T23:59:59Z&meterIds=METER-001&meterIds=METER-002
Custom Page Size
GET /api/v1/MeterReadingsForMeterIds?start=2023-06-01T00:00:00Z&end=2023-06-30T23:59:59Z&pageSize=1000
Subsequent Page (using nextStart)
GET /api/v1/MeterReadingsForMeterIds?start=2023-06-05T14:30:00.123Z&end=2023-06-30T23:59:59Z&pageSize=1000
Swagger Documentation
We have attached the Swagger documentation below. This can be viewed in opened and viewed in https://editor.swagger.io/ , or used to generate an API client with software development tools.
Insomnia Collection
We have also created a collection of Insomnia requests, that can both aid in development, and testing the API.
Insomnia Document & Collection - 2024-11-27.json