List alerts
const url = 'https://api.canaro.ca/external/v1/alerts?limit=50';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api.canaro.ca/external/v1/alerts?limit=50' \ --header 'Authorization: Bearer <token>'List the workspace’s alerts, newest first.
Only alerts a rule raised are listed; the platform’s own housekeeping checks are not part of this contract.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Responses
Section titled “Responses”Successful Response
A page of alerts, newest first.
object
One incident of a rule firing.
Called an alert, not an incident: incident already names a different
thing on this platform, the entries on the public status page.
object
Stable identifier; use it to fetch this alert.
How many times the rule has fired on this alert.
The rule type that fired.
Open, acknowledged or resolved.
Example
{ "data": [ { "alert_id": 41208, "condition": "Temperature above 4.0°C", "device_id": "TCTA-F2EA5A000001", "fire_count": 3, "kind": "threshold", "opened_at": "2026-09-04T02:14:55Z", "rule_name": "Barn above 4 C", "sensor": "temperature", "status": "open", "threshold": 4, "value": 6.2 } ]}Headers
Section titled “Headers”Requests allowed in the window this response was counted against.
Requests left in that window. A refusal costs no allowance.
The key is missing, unknown, revoked or expired.
Every non-success response the external API produces.
object
What a refusal says. code is drawn from one declared set; per-code
members such as required_scope and max_days are additive.
object
Machine-readable reason, from the published set.
What went wrong, in words.
Example
{ "error": { "code": "insufficient_scope", "message": "This key does not hold devices:read.", "required_scope": "devices:read" }}Headers
Section titled “Headers”Always Bearer.
Requests allowed in the window this response was counted against.
Requests left in that window. A refusal costs no allowance.
The plan grants no external API access, or the key lacks the required scope.
Every non-success response the external API produces.
object
What a refusal says. code is drawn from one declared set; per-code
members such as required_scope and max_days are additive.
object
Machine-readable reason, from the published set.
What went wrong, in words.
Example
{ "error": { "code": "insufficient_scope", "message": "This key does not hold devices:read.", "required_scope": "devices:read" }}Headers
Section titled “Headers”Requests allowed in the window this response was counted against.
Requests left in that window. A refusal costs no allowance.
No such resource in this key’s workspace, or no such endpoint.
Every non-success response the external API produces.
object
What a refusal says. code is drawn from one declared set; per-code
members such as required_scope and max_days are additive.
object
Machine-readable reason, from the published set.
What went wrong, in words.
Example
{ "error": { "code": "insufficient_scope", "message": "This key does not hold devices:read.", "required_scope": "devices:read" }}Headers
Section titled “Headers”Requests allowed in the window this response was counted against.
Requests left in that window. A refusal costs no allowance.
That method is not allowed on this endpoint.
Every non-success response the external API produces.
object
What a refusal says. code is drawn from one declared set; per-code
members such as required_scope and max_days are additive.
object
Machine-readable reason, from the published set.
What went wrong, in words.
Example
{ "error": { "code": "insufficient_scope", "message": "This key does not hold devices:read.", "required_scope": "devices:read" }}Headers
Section titled “Headers”Requests allowed in the window this response was counted against.
Requests left in that window. A refusal costs no allowance.
The request could not be understood, or its time range is too wide.
Every non-success response the external API produces.
object
What a refusal says. code is drawn from one declared set; per-code
members such as required_scope and max_days are additive.
object
Machine-readable reason, from the published set.
What went wrong, in words.
Example
{ "error": { "code": "insufficient_scope", "message": "This key does not hold devices:read.", "required_scope": "devices:read" }}Headers
Section titled “Headers”Requests allowed in the window this response was counted against.
Requests left in that window. A refusal costs no allowance.
The workspace’s external allowance is spent.
Every non-success response the external API produces.
object
What a refusal says. code is drawn from one declared set; per-code
members such as required_scope and max_days are additive.
object
Machine-readable reason, from the published set.
What went wrong, in words.
Example
{ "error": { "code": "insufficient_scope", "message": "This key does not hold devices:read.", "required_scope": "devices:read" }}Headers
Section titled “Headers”Whole seconds to wait before retrying. Never less than one.
Requests allowed in the window this response was counted against.
Requests left in that window. A refusal costs no allowance.
Something went wrong on our side.
Every non-success response the external API produces.
object
What a refusal says. code is drawn from one declared set; per-code
members such as required_scope and max_days are additive.
object
Machine-readable reason, from the published set.
What went wrong, in words.
Example
{ "error": { "code": "insufficient_scope", "message": "This key does not hold devices:read.", "required_scope": "devices:read" }}Headers
Section titled “Headers”Requests allowed in the window this response was counted against.
Requests left in that window. A refusal costs no allowance.

