List devices
curl --request GET \
--url https://api.beta.ontoto.com/v1/devices \
--header 'x-api-key: <api-key>'import requests
url = "https://api.beta.ontoto.com/v1/devices"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.beta.ontoto.com/v1/devices', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.beta.ontoto.com/v1/devices",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.beta.ontoto.com/v1/devices"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.beta.ontoto.com/v1/devices")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.beta.ontoto.com/v1/devices")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"items": [
{
"deviceKind": "physical",
"serialNumber": "2CF44434E908",
"alias": "North mine piezometer",
"description": "Vibrating wire settlement gauge",
"name": "NW-PZ-01",
"orgUuid": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"legacyDeviceId": 10042,
"site": {
"uuid": "31d09506-82da-4f9d-960f-a871bae63258",
"name": "River Dam"
},
"location": {
"lat": -42.8814,
"lon": 147.3258
},
"samplingPeriodSeconds": 600,
"txPeriodSeconds": 3600,
"state": "active",
"health": {
"battery": {
"voltage": 3.72,
"percentage": 87,
"remaining": "56d remaining",
"isCharging": false
},
"connection": {
"lastSeen": "2024-06-15T08:42:11.000Z",
"status": "online",
"signalStrength": {
"rssi": -71,
"rsrp": -95,
"rsrq": -12,
"signalQuality": "good"
},
"error": null,
"txProtocol": "coap",
"nextTxTimestamp": "2024-06-15T09:42:11.000Z"
},
"sensors": {
"status": "ok",
"metadataError": null,
"errors": null,
"lastDataTimestamp": "2024-06-15T08:41:03.000Z"
},
"powerSource": "battery"
},
"lastTxTimestamp": "2024-06-15T08:42:11.000Z",
"product": "Greyhound",
"hardware": {
"model": "GH5",
"revision": "1.2"
},
"modems": [
{
"type": "lte",
"model": "EG800Q",
"imei": "861234056789012",
"iccid": "89014103211118510720"
}
],
"firmware": {
"string": "GH5_REV1.2_VW_1_ff",
"version": "2.4.1"
},
"tags": [
{
"id": 12,
"name": "Dam monitoring",
"colour": "#1E88E5"
}
],
"queuedCommand": null,
"gnss": null,
"sharedBy": null
}
]
}{
"message": "Invalid request body"
}{
"message": "Authentication required"
}{
"message": "You do not have permission to access this resource"
}{
"message": "Resource not found"
}{
"message": "Duplicate entry"
}{
"message": "Rate limit of 200 requests per minute exceeded. Retry in 12s."
}{
"message": "Internal server error"
}Devices
List devices
Returns all devices accessible to the API token, with optional filtering.
GET
/
devices
List devices
curl --request GET \
--url https://api.beta.ontoto.com/v1/devices \
--header 'x-api-key: <api-key>'import requests
url = "https://api.beta.ontoto.com/v1/devices"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.beta.ontoto.com/v1/devices', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.beta.ontoto.com/v1/devices",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.beta.ontoto.com/v1/devices"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.beta.ontoto.com/v1/devices")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.beta.ontoto.com/v1/devices")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"items": [
{
"deviceKind": "physical",
"serialNumber": "2CF44434E908",
"alias": "North mine piezometer",
"description": "Vibrating wire settlement gauge",
"name": "NW-PZ-01",
"orgUuid": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"legacyDeviceId": 10042,
"site": {
"uuid": "31d09506-82da-4f9d-960f-a871bae63258",
"name": "River Dam"
},
"location": {
"lat": -42.8814,
"lon": 147.3258
},
"samplingPeriodSeconds": 600,
"txPeriodSeconds": 3600,
"state": "active",
"health": {
"battery": {
"voltage": 3.72,
"percentage": 87,
"remaining": "56d remaining",
"isCharging": false
},
"connection": {
"lastSeen": "2024-06-15T08:42:11.000Z",
"status": "online",
"signalStrength": {
"rssi": -71,
"rsrp": -95,
"rsrq": -12,
"signalQuality": "good"
},
"error": null,
"txProtocol": "coap",
"nextTxTimestamp": "2024-06-15T09:42:11.000Z"
},
"sensors": {
"status": "ok",
"metadataError": null,
"errors": null,
"lastDataTimestamp": "2024-06-15T08:41:03.000Z"
},
"powerSource": "battery"
},
"lastTxTimestamp": "2024-06-15T08:42:11.000Z",
"product": "Greyhound",
"hardware": {
"model": "GH5",
"revision": "1.2"
},
"modems": [
{
"type": "lte",
"model": "EG800Q",
"imei": "861234056789012",
"iccid": "89014103211118510720"
}
],
"firmware": {
"string": "GH5_REV1.2_VW_1_ff",
"version": "2.4.1"
},
"tags": [
{
"id": 12,
"name": "Dam monitoring",
"colour": "#1E88E5"
}
],
"queuedCommand": null,
"gnss": null,
"sharedBy": null
}
]
}{
"message": "Invalid request body"
}{
"message": "Authentication required"
}{
"message": "You do not have permission to access this resource"
}{
"message": "Resource not found"
}{
"message": "Duplicate entry"
}{
"message": "Rate limit of 200 requests per minute exceeded. Retry in 12s."
}{
"message": "Internal server error"
}Authorizations
Query Parameters
Retrieve devices by kind Physical hardware device
Allowed value:
"physical"Retrieve all devices of a group
Retrieve all devices assigned to a site
Filter by array of device serial numbers
When true, includes sensors for each device. By default, device objects omit the sensors field.
Include sensors that are not currently active on the device firmware (for archived data)
Response
Successful response
Response body for querying devices. Schema-level example reflects list defaults (no sensors). GET /devices/:sn documents a fuller example which includes sensors.
List of devices. Each element is a DeviceItem (see components.schemas.DeviceItem in the OpenAPI document).
Show child attributes
Show child attributes