Skip to content

List a device's telemetry

GET
/devices/{device_id}/telemetry
curl --request GET \
--url 'https://api.canaro.ca/external/v1/devices/example/telemetry?limit=50' \
--header 'Authorization: Bearer <token>'

A device’s telemetry readings, newest first.

A request may span at most the plan’s history_max_days (null = no limit). A wider window is refused with range_too_large; given neither after nor before, you get the most recent days allowed.

device_id
required
Device Id
string
after
Any of:
string format: date-time

Earliest reading, RFC 3339.

before
Any of:
string format: date-time

Latest reading, RFC 3339.

limit
Limit
integer
default: 50 >= 1 <= 200
cursor
Any of:
string

A cursor from a previous page.

Successful Response

Media typeapplication/json
ReadingList

A page of readings for one device, newest first.

object
data
required
Data
Array<object>
Reading

One telemetry reading as the device reported it.

object
recorded_at
required
Recorded At

When the reading was received, RFC 3339 UTC.

string format: date-time
values
required
Values

Sensor keys and their values, as reported.

object
device_id
required
Device Id
string
next_cursor
Any of:
string
Example
{
"data": [
{
"recorded_at": "2026-09-04T17:12:03Z",
"values": {
"battery": 92,
"humidity": 71.4,
"temperature": 6.2
}
}
],
"device_id": "TCTA-F2EA5A000001"
}
X-RateLimit-Limit
integer

Requests allowed in the window this response was counted against.

X-RateLimit-Remaining
integer

Requests left in that window. A refusal costs no allowance.

The key is missing, unknown, revoked or expired.

Media typeapplication/json
ErrorResponse

Every non-success response the external API produces.

object
error
required
Error

What a refusal says. code is drawn from one declared set; per-code members such as required_scope and max_days are additive.

object
code
required
Code

Machine-readable reason, from the published set.

string
message
required
Message

What went wrong, in words.

string
key
additional properties
any
Example
{
"error": {
"code": "insufficient_scope",
"message": "This key does not hold devices:read.",
"required_scope": "devices:read"
}
}
WWW-Authenticate
string

Always Bearer.

X-RateLimit-Limit
integer

Requests allowed in the window this response was counted against.

X-RateLimit-Remaining
integer

Requests left in that window. A refusal costs no allowance.

The plan grants no external API access, or the key lacks the required scope.

Media typeapplication/json
ErrorResponse

Every non-success response the external API produces.

object
error
required
Error

What a refusal says. code is drawn from one declared set; per-code members such as required_scope and max_days are additive.

object
code
required
Code

Machine-readable reason, from the published set.

string
message
required
Message

What went wrong, in words.

string
key
additional properties
any
Example
{
"error": {
"code": "insufficient_scope",
"message": "This key does not hold devices:read.",
"required_scope": "devices:read"
}
}
X-RateLimit-Limit
integer

Requests allowed in the window this response was counted against.

X-RateLimit-Remaining
integer

Requests left in that window. A refusal costs no allowance.

No such resource in this key’s workspace, or no such endpoint.

Media typeapplication/json
ErrorResponse

Every non-success response the external API produces.

object
error
required
Error

What a refusal says. code is drawn from one declared set; per-code members such as required_scope and max_days are additive.

object
code
required
Code

Machine-readable reason, from the published set.

string
message
required
Message

What went wrong, in words.

string
key
additional properties
any
Example
{
"error": {
"code": "insufficient_scope",
"message": "This key does not hold devices:read.",
"required_scope": "devices:read"
}
}
X-RateLimit-Limit
integer

Requests allowed in the window this response was counted against.

X-RateLimit-Remaining
integer

Requests left in that window. A refusal costs no allowance.

That method is not allowed on this endpoint.

Media typeapplication/json
ErrorResponse

Every non-success response the external API produces.

object
error
required
Error

What a refusal says. code is drawn from one declared set; per-code members such as required_scope and max_days are additive.

object
code
required
Code

Machine-readable reason, from the published set.

string
message
required
Message

What went wrong, in words.

string
key
additional properties
any
Example
{
"error": {
"code": "insufficient_scope",
"message": "This key does not hold devices:read.",
"required_scope": "devices:read"
}
}
X-RateLimit-Limit
integer

Requests allowed in the window this response was counted against.

X-RateLimit-Remaining
integer

Requests left in that window. A refusal costs no allowance.

The request could not be understood, or its time range is too wide.

Media typeapplication/json
ErrorResponse

Every non-success response the external API produces.

object
error
required
Error

What a refusal says. code is drawn from one declared set; per-code members such as required_scope and max_days are additive.

object
code
required
Code

Machine-readable reason, from the published set.

string
message
required
Message

What went wrong, in words.

string
key
additional properties
any
Example
{
"error": {
"code": "insufficient_scope",
"message": "This key does not hold devices:read.",
"required_scope": "devices:read"
}
}
X-RateLimit-Limit
integer

Requests allowed in the window this response was counted against.

X-RateLimit-Remaining
integer

Requests left in that window. A refusal costs no allowance.

The workspace’s external allowance is spent.

Media typeapplication/json
ErrorResponse

Every non-success response the external API produces.

object
error
required
Error

What a refusal says. code is drawn from one declared set; per-code members such as required_scope and max_days are additive.

object
code
required
Code

Machine-readable reason, from the published set.

string
message
required
Message

What went wrong, in words.

string
key
additional properties
any
Example
{
"error": {
"code": "insufficient_scope",
"message": "This key does not hold devices:read.",
"required_scope": "devices:read"
}
}
Retry-After
integer

Whole seconds to wait before retrying. Never less than one.

X-RateLimit-Limit
integer

Requests allowed in the window this response was counted against.

X-RateLimit-Remaining
integer

Requests left in that window. A refusal costs no allowance.

Something went wrong on our side.

Media typeapplication/json
ErrorResponse

Every non-success response the external API produces.

object
error
required
Error

What a refusal says. code is drawn from one declared set; per-code members such as required_scope and max_days are additive.

object
code
required
Code

Machine-readable reason, from the published set.

string
message
required
Message

What went wrong, in words.

string
key
additional properties
any
Example
{
"error": {
"code": "insufficient_scope",
"message": "This key does not hold devices:read.",
"required_scope": "devices:read"
}
}
X-RateLimit-Limit
integer

Requests allowed in the window this response was counted against.

X-RateLimit-Remaining
integer

Requests left in that window. A refusal costs no allowance.