Skip to content

Read raw telemetry records

GET
/integration/v1/organizations/{organization}/devices/{uuid}/telemetry/records
curl --request GET \
--url 'https://api.elwids.xyz/api/integration/v1/organizations/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/devices/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/telemetry/records?parameter_uuid=2489E9AD-2EE2-8E00-8EC9-32D5F69181C0&from=2026-04-15T12%3A00%3A00Z&to=2026-04-15T12%3A00%3A00Z' \
--header 'Authorization: Bearer <token>'

Requires: telemetry:read

Rate limits: 240 a minute per address, 60 a minute per application

Unaggregated good-quality observations of one parameter (diagnostics excluded), newest first, in pages of page_size 1 to 100 (default 50) up to a total limit of 1 to 5000 (default 500). The window is at most 31 days. cursor is signed and bound to the query; pass meta.next_cursor with the same query. 422 for an invalid window or a cursor the runtime rejects (under errors.runtime); 503 when the runtime is unavailable.

organization
required
string format: uuid

The organization UUID. A value that does not match returns 404.

uuid
required
string format: uuid

A value that does not match returns 404.

limit
integer
>= 1 <= 5000
page_size
integer
>= 1 <= 100
cursor
string
<= 512 characters
parameter_uuid
required
string format: uuid

The parameter to read.

from
required
string format: date-time

Start of the window: RFC 3339 with seconds and Z or a ±hh:mm offset.

to
required
string format: date-time

End of the window, after from and at most 31 days later: RFC 3339 with seconds and Z or a ±hh:mm offset.

telemetry-records.v1.

Media typeapplication/json

telemetry-records.v1: unaggregated good-quality observations, newest first by (received_at, event_uuid). Not a complete export.

object
schema_version
required
Allowed value: telemetry-records.v1
device_uuid
required
string format: uuid
parameter_uuid
required
string format: uuid
data
required
Array<object>
<= 100 items
object
event_uuid
required
string format: uuid
configuration_uuid
required
string format: uuid
parameter_uuid
required
string format: uuid
received_at
required
string format: date-time
observed_at
required
string format: date-time
data_type
required
string
unit
required
string | null
value
required

A reading’s value; its type follows the parameter’s data_type.

string | number | boolean | null
quality
required
string
timestamp_source
required
string
historical
required
boolean
meta
required
object
from
required

The window actually read, clipped to retention.

string format: date-time
to
required
string format: date-time
limit
required
integer
>= 1 <= 5000
page_size
required
integer
>= 1 <= 100
returned
required
integer
consumed
required

Records read so far across pages, up to limit.

integer
next_cursor
required

Pass as cursor with the same query for the next page; null on the last page.

string | null
has_more
required
boolean
limit_reached
required
boolean

Example

{
"schema_version": "telemetry-records.v1",
"device_uuid": "3f8a1c2e-5b6d-4e7f-8a9b-0c1d2e3f4a5b",
"parameter_uuid": "6d2e3f4a-5b6c-4d7e-8f9a-0b1c2d3e4f5a",
"data": [
{
"event_uuid": "0d9c8b7a-6f5e-4d3c-8b2a-19f8e7d6c5b4",
"configuration_uuid": "8e7d6c5b-4a39-4281-9f0e-1d2c3b4a5968",
"parameter_uuid": "6d2e3f4a-5b6c-4d7e-8f9a-0b1c2d3e4f5a",
"received_at": "2026-10-11T23:59:52Z",
"observed_at": "2026-10-11T23:59:50Z",
"data_type": "number",
"unit": "%",
"value": 91.1,
"quality": "good",
"timestamp_source": "source",
"historical": false
}
],
"meta": {
"from": "2026-10-11T00:00:00Z",
"to": "2026-10-12T00:00:00Z",
"limit": 500,
"page_size": 1,
"returned": 1,
"consumed": 1,
"next_cursor": "eyJ2IjoxLCJyIjoiMjAyNi0xMC0xMVQyMzo1OTo1MloifQ.c2lnbmF0dXJl",
"has_more": true,
"limit_reached": false
}
}
Cache-Control
required
string
/(^|[ ,])no-store([ ,]|$)/

Responses to authenticated integration requests are never cached. The header also carries private.

Example
no-store, private

No valid credentials: no session (first-party API), or a missing, invalid, expired or revoked application token (integration API).

Media typeapplication/json

The body of most error responses.

object
message
required
string

Example generated

{
"message": "example"
}

The caller is not allowed: not a member of the organization, missing a tenant or platform permission, or (integration API) an ability not granted on both the application and the token.

Media typeapplication/json

The body of most error responses.

object
message
required
string

Example generated

{
"message": "example"
}

Not found: an unknown organization or resource, a resource in another organization or not granted to the application, or a malformed identifier (the route does not match).

Media typeapplication/json

The body of most error responses.

object
message
required
string

Example generated

{
"message": "example"
}

The input failed validation.

Media typeapplication/json

422 for input that failed validation.

object
message
required

The first error, followed by a count of the others.

string
errors
required

Messages per field, keyed by the field’s dotted path. A rejection by the device runtime appears under runtime.

object
runtime
Array<string>
key
additional properties
Array<string>

Example generated

{
"message": "example",
"errors": {
"runtime": [
"example"
]
}
}

A rate limit was reached; see x-rate-limits on the operation.

Media typeapplication/json

The body of most error responses.

object
message
required
string

Example generated

{
"message": "example"
}
Retry-After
required
integer

Seconds to wait before retrying.

The device runtime is not configured, unavailable, or could not complete the request.

Media typeapplication/json

The body of most error responses.

object
message
required
string

Example generated

{
"message": "example"
}

Report a problem with this page