GET Current authorized server summaries and removed identifiers.
/api/v1/devices/summaries
Read the latest values and contact status for up to 50 servers in one workspace. Browser sessions only. Unknown, removed or moved identifiers are returned in removed_ids without exposing other workspaces.
On this page
Access and permissions
Read the latest values and contact status for up to 50 servers in one workspace. Browser sessions only. Unknown, removed or moved identifiers are returned in removed_ids without exposing other workspaces.
Browser session: __Host-mb_session cookie.
Parameters and headers
| Field | Location | Type and limits | Required | Meaning |
|---|---|---|---|---|
| workspace_id | URL query | string; {"format":"uuid"} | Yes | UUID of an owned workspace. When optional, omission selects the documented default or all owned workspaces. |
| device_ids | URL query | array<string; {"format":"uuid"}>; {"minItems":1,"maxItems":50} | Yes | Comma-separated, unique server IDs; between one and 50. |
Request body
No request body.
Responses
| Stable error codes |
|---|
| unauthorized |
| invalid_credential |
| session_revoked |
| Header | Type and limits | Meaning |
|---|---|---|
| Cache-Control | string; {"pattern":"(?:^|,\\s*)no-store(?:,|$)"} | Private API responses prohibit storage. Public OAuth metadata is cached for 300 seconds; live streams additionally prohibit transformation. |
| Content-Language | string; {"enum":["en","de"]} | Language of human-readable response text, resolved from Accept-Language or the documented browser preference. Technical codes and identifiers remain stable. |
| Referrer-Policy | JSON; {"enum":["strict-origin-when-cross-origin","no-referrer"]} | The default referrer policy is strict-origin-when-cross-origin. Provider-login responses use no-referrer to protect login parameters. |
| Vary | string | Responses vary by Accept-Language; browser-rendered responses can also vary by the preference cookie. |
| X-Content-Type-Options | JSON; {"const":"nosniff"} | The browser must use the declared content type. |
| X-Frame-Options | JSON; {"const":"DENY"} | The response must not be embedded in a frame. |
| X-Request-ID | string | Server-generated request identifier. Include this when reporting an error; inbound values are not trusted. |
application/problem+json
| Field | Type and limits | Required | Meaning |
|---|---|---|---|
| $ | Problem | Yes | — |
| $.code | string | Yes | Stable machine-readable error code |
| $.detail | string | Yes | Short localized explanation without internal error details |
| $.instance | string | Yes | Unique relative identifier /api/v1/requests/{request_id}; not a retrievable resource |
| $.message | string | Yes | Temporarily identical to detail for existing clients |
| $.message_key | string | Yes | Stable translation key for changing the displayed language without another request |
| $.message_params | object; {"additionalProperties":true} | Yes | Named, safely rendered message parameters; never arbitrary HTML |
| $.request_id | string; {"pattern":"^[0-9a-f]{32}$"} | Yes | Server-generated diagnostic identifier. It contains no login token or credential. |
| $.status | integer; {"maximum":599,"minimum":400} | Yes | — |
| $.title | string | Yes | Localized HTTP status title |
| $.type | string; {"const":"about:blank"} | Yes | — |
{
"code": "demo",
"detail": "Demo error detail; inspect the documented code.",
"instance": "demo",
"message": "Demo error detail; inspect the documented code.",
"message_key": "errors.requestFailed",
"message_params": {},
"request_id": "00000000000000000000000000000000",
"status": 401,
"title": "Demo error",
"type": "about:blank"
}| Stable error codes |
|---|
| workspace_scope |
| browser_session_required |
| invalid_origin |
| insufficient_scope |
| csrf |
| Header | Type and limits | Meaning |
|---|---|---|
| Cache-Control | string; {"pattern":"(?:^|,\\s*)no-store(?:,|$)"} | Private API responses prohibit storage. Public OAuth metadata is cached for 300 seconds; live streams additionally prohibit transformation. |
| Content-Language | string; {"enum":["en","de"]} | Language of human-readable response text, resolved from Accept-Language or the documented browser preference. Technical codes and identifiers remain stable. |
| Referrer-Policy | JSON; {"enum":["strict-origin-when-cross-origin","no-referrer"]} | The default referrer policy is strict-origin-when-cross-origin. Provider-login responses use no-referrer to protect login parameters. |
| Vary | string | Responses vary by Accept-Language; browser-rendered responses can also vary by the preference cookie. |
| X-Content-Type-Options | JSON; {"const":"nosniff"} | The browser must use the declared content type. |
| X-Frame-Options | JSON; {"const":"DENY"} | The response must not be embedded in a frame. |
| X-Request-ID | string | Server-generated request identifier. Include this when reporting an error; inbound values are not trusted. |
application/problem+json
| Field | Type and limits | Required | Meaning |
|---|---|---|---|
| $ | Problem | Yes | — |
| $.code | string | Yes | Stable machine-readable error code |
| $.detail | string | Yes | Short localized explanation without internal error details |
| $.instance | string | Yes | Unique relative identifier /api/v1/requests/{request_id}; not a retrievable resource |
| $.message | string | Yes | Temporarily identical to detail for existing clients |
| $.message_key | string | Yes | Stable translation key for changing the displayed language without another request |
| $.message_params | object; {"additionalProperties":true} | Yes | Named, safely rendered message parameters; never arbitrary HTML |
| $.request_id | string; {"pattern":"^[0-9a-f]{32}$"} | Yes | Server-generated diagnostic identifier. It contains no login token or credential. |
| $.status | integer; {"maximum":599,"minimum":400} | Yes | — |
| $.title | string | Yes | Localized HTTP status title |
| $.type | string; {"const":"about:blank"} | Yes | — |
{
"code": "demo",
"detail": "Demo error detail; inspect the documented code.",
"instance": "demo",
"message": "Demo error detail; inspect the documented code.",
"message_key": "errors.requestFailed",
"message_params": {},
"request_id": "00000000000000000000000000000000",
"status": 403,
"title": "Demo error",
"type": "about:blank"
}| Stable error codes |
|---|
| not_found |
| Header | Type and limits | Meaning |
|---|---|---|
| Cache-Control | string; {"pattern":"(?:^|,\\s*)no-store(?:,|$)"} | Private API responses prohibit storage. Public OAuth metadata is cached for 300 seconds; live streams additionally prohibit transformation. |
| Content-Language | string; {"enum":["en","de"]} | Language of human-readable response text, resolved from Accept-Language or the documented browser preference. Technical codes and identifiers remain stable. |
| Referrer-Policy | JSON; {"enum":["strict-origin-when-cross-origin","no-referrer"]} | The default referrer policy is strict-origin-when-cross-origin. Provider-login responses use no-referrer to protect login parameters. |
| Vary | string | Responses vary by Accept-Language; browser-rendered responses can also vary by the preference cookie. |
| X-Content-Type-Options | JSON; {"const":"nosniff"} | The browser must use the declared content type. |
| X-Frame-Options | JSON; {"const":"DENY"} | The response must not be embedded in a frame. |
| X-Request-ID | string | Server-generated request identifier. Include this when reporting an error; inbound values are not trusted. |
application/problem+json
| Field | Type and limits | Required | Meaning |
|---|---|---|---|
| $ | Problem | Yes | — |
| $.code | string | Yes | Stable machine-readable error code |
| $.detail | string | Yes | Short localized explanation without internal error details |
| $.instance | string | Yes | Unique relative identifier /api/v1/requests/{request_id}; not a retrievable resource |
| $.message | string | Yes | Temporarily identical to detail for existing clients |
| $.message_key | string | Yes | Stable translation key for changing the displayed language without another request |
| $.message_params | object; {"additionalProperties":true} | Yes | Named, safely rendered message parameters; never arbitrary HTML |
| $.request_id | string; {"pattern":"^[0-9a-f]{32}$"} | Yes | Server-generated diagnostic identifier. It contains no login token or credential. |
| $.status | integer; {"maximum":599,"minimum":400} | Yes | — |
| $.title | string | Yes | Localized HTTP status title |
| $.type | string; {"const":"about:blank"} | Yes | — |
{
"code": "demo",
"detail": "Demo error detail; inspect the documented code.",
"instance": "demo",
"message": "Demo error detail; inspect the documented code.",
"message_key": "errors.requestFailed",
"message_params": {},
"request_id": "00000000000000000000000000000000",
"status": 404,
"title": "Demo error",
"type": "about:blank"
}| Stable error codes |
|---|
| invalid_live |
| live_limit |
| invalid_selection |
| Header | Type and limits | Meaning |
|---|---|---|
| Cache-Control | string; {"pattern":"(?:^|,\\s*)no-store(?:,|$)"} | Private API responses prohibit storage. Public OAuth metadata is cached for 300 seconds; live streams additionally prohibit transformation. |
| Content-Language | string; {"enum":["en","de"]} | Language of human-readable response text, resolved from Accept-Language or the documented browser preference. Technical codes and identifiers remain stable. |
| Referrer-Policy | JSON; {"enum":["strict-origin-when-cross-origin","no-referrer"]} | The default referrer policy is strict-origin-when-cross-origin. Provider-login responses use no-referrer to protect login parameters. |
| Vary | string | Responses vary by Accept-Language; browser-rendered responses can also vary by the preference cookie. |
| X-Content-Type-Options | JSON; {"const":"nosniff"} | The browser must use the declared content type. |
| X-Frame-Options | JSON; {"const":"DENY"} | The response must not be embedded in a frame. |
| X-Request-ID | string | Server-generated request identifier. Include this when reporting an error; inbound values are not trusted. |
application/problem+json
| Field | Type and limits | Required | Meaning |
|---|---|---|---|
| $ | Problem | Yes | — |
| $.code | string | Yes | Stable machine-readable error code |
| $.detail | string | Yes | Short localized explanation without internal error details |
| $.instance | string | Yes | Unique relative identifier /api/v1/requests/{request_id}; not a retrievable resource |
| $.message | string | Yes | Temporarily identical to detail for existing clients |
| $.message_key | string | Yes | Stable translation key for changing the displayed language without another request |
| $.message_params | object; {"additionalProperties":true} | Yes | Named, safely rendered message parameters; never arbitrary HTML |
| $.request_id | string; {"pattern":"^[0-9a-f]{32}$"} | Yes | Server-generated diagnostic identifier. It contains no login token or credential. |
| $.status | integer; {"maximum":599,"minimum":400} | Yes | — |
| $.title | string | Yes | Localized HTTP status title |
| $.type | string; {"const":"about:blank"} | Yes | — |
{
"code": "demo",
"detail": "Demo error detail; inspect the documented code.",
"instance": "demo",
"message": "Demo error detail; inspect the documented code.",
"message_key": "errors.requestFailed",
"message_params": {},
"request_id": "00000000000000000000000000000000",
"status": 422,
"title": "Demo error",
"type": "about:blank"
}| Stable error codes |
|---|
| feature_unavailable |
| stream_unavailable |
| unavailable |
| Header | Type and limits | Meaning |
|---|---|---|
| Cache-Control | string; {"pattern":"(?:^|,\\s*)no-store(?:,|$)"} | Private API responses prohibit storage. Public OAuth metadata is cached for 300 seconds; live streams additionally prohibit transformation. |
| Content-Language | string; {"enum":["en","de"]} | Language of human-readable response text, resolved from Accept-Language or the documented browser preference. Technical codes and identifiers remain stable. |
| Referrer-Policy | JSON; {"enum":["strict-origin-when-cross-origin","no-referrer"]} | The default referrer policy is strict-origin-when-cross-origin. Provider-login responses use no-referrer to protect login parameters. |
| Retry-After | string; {"pattern":"^[0-9]+$"} | Seconds before retry. Preserve supported idempotency identifiers and respect the operation’s mutation semantics. |
| Vary | string | Responses vary by Accept-Language; browser-rendered responses can also vary by the preference cookie. |
| X-Content-Type-Options | JSON; {"const":"nosniff"} | The browser must use the declared content type. |
| X-Frame-Options | JSON; {"const":"DENY"} | The response must not be embedded in a frame. |
| X-Request-ID | string | Server-generated request identifier. Include this when reporting an error; inbound values are not trusted. |
application/problem+json
| Field | Type and limits | Required | Meaning |
|---|---|---|---|
| $ | Problem | Yes | — |
| $.code | string | Yes | Stable machine-readable error code |
| $.detail | string | Yes | Short localized explanation without internal error details |
| $.instance | string | Yes | Unique relative identifier /api/v1/requests/{request_id}; not a retrievable resource |
| $.message | string | Yes | Temporarily identical to detail for existing clients |
| $.message_key | string | Yes | Stable translation key for changing the displayed language without another request |
| $.message_params | object; {"additionalProperties":true} | Yes | Named, safely rendered message parameters; never arbitrary HTML |
| $.request_id | string; {"pattern":"^[0-9a-f]{32}$"} | Yes | Server-generated diagnostic identifier. It contains no login token or credential. |
| $.status | integer; {"maximum":599,"minimum":400} | Yes | — |
| $.title | string | Yes | Localized HTTP status title |
| $.type | string; {"const":"about:blank"} | Yes | — |
{
"code": "demo",
"detail": "Demo error detail; inspect the documented code.",
"instance": "demo",
"message": "Demo error detail; inspect the documented code.",
"message_key": "errors.requestFailed",
"message_params": {},
"request_id": "00000000000000000000000000000000",
"status": 503,
"title": "Demo error",
"type": "about:blank"
}| Stable error codes |
|---|
| feature_unavailable |
| unavailable |
| live_capacity |
| Header | Type and limits | Meaning |
|---|---|---|
| Cache-Control | string; {"pattern":"(?:^|,\\s*)no-store(?:,|$)"} | Private API responses prohibit storage. Public OAuth metadata is cached for 300 seconds; live streams additionally prohibit transformation. |
| Content-Language | string; {"enum":["en","de"]} | Language of human-readable response text, resolved from Accept-Language or the documented browser preference. Technical codes and identifiers remain stable. |
| Referrer-Policy | JSON; {"enum":["strict-origin-when-cross-origin","no-referrer"]} | The default referrer policy is strict-origin-when-cross-origin. Provider-login responses use no-referrer to protect login parameters. |
| Retry-After | string; {"pattern":"^[0-9]+$"} | Seconds before retry. Preserve supported idempotency identifiers and respect the operation’s mutation semantics. |
| Vary | string | Responses vary by Accept-Language; browser-rendered responses can also vary by the preference cookie. |
| X-Content-Type-Options | JSON; {"const":"nosniff"} | The browser must use the declared content type. |
| X-Frame-Options | JSON; {"const":"DENY"} | The response must not be embedded in a frame. |
| X-Request-ID | string | Server-generated request identifier. Include this when reporting an error; inbound values are not trusted. |
application/problem+json
| Field | Type and limits | Required | Meaning |
|---|---|---|---|
| $ | Problem | Yes | — |
| $.code | string | Yes | Stable machine-readable error code |
| $.detail | string | Yes | Short localized explanation without internal error details |
| $.instance | string | Yes | Unique relative identifier /api/v1/requests/{request_id}; not a retrievable resource |
| $.message | string | Yes | Temporarily identical to detail for existing clients |
| $.message_key | string | Yes | Stable translation key for changing the displayed language without another request |
| $.message_params | object; {"additionalProperties":true} | Yes | Named, safely rendered message parameters; never arbitrary HTML |
| $.request_id | string; {"pattern":"^[0-9a-f]{32}$"} | Yes | Server-generated diagnostic identifier. It contains no login token or credential. |
| $.status | integer; {"maximum":599,"minimum":400} | Yes | — |
| $.title | string | Yes | Localized HTTP status title |
| $.type | string; {"const":"about:blank"} | Yes | — |
{
"code": "demo",
"detail": "Demo error detail; inspect the documented code.",
"instance": "demo",
"message": "Demo error detail; inspect the documented code.",
"message_key": "errors.requestFailed",
"message_params": {},
"request_id": "00000000000000000000000000000000",
"status": 503,
"title": "Demo error",
"type": "about:blank"
}application/json
| Field | Type and limits | Required | Meaning |
|---|---|---|---|
| $ | ServerSummarySnapshot | Yes | — |
| $.workspace_id | string; {"format":"uuid"} | Yes | — |
| $.observed_at | string; {"format":"date-time"} | Yes | — |
| $.devices | array<object>; {"maxItems":50} | Yes | — |
| $.devices[] | object | Yes | — |
| $.devices[].id | string | Yes | UUID of this resource. Keep the returned identifier for subsequent operations. |
| $.devices[].workspace_id | string | Yes | UUID of the owning workspace. Access is checked against the authenticated account. |
| $.devices[].paused | boolean | Yes | Whether automatic monitor work is paused. Existing telemetry and historical data remain. |
| $.devices[].attention | boolean | Yes | — |
| $.devices[].last_heartbeat_at | string; {"format":"date-time"} | null | Yes | Last accepted device contact timestamp; null before the first contact. |
| $.devices[].last_heartbeat_at (anyOf 1) | string; {"format":"date-time"} | No | — |
| $.devices[].last_heartbeat_at (anyOf 2) | null | No | — |
| $.devices[].summary | MonitorListSummary | Yes | Optional metrics for this page only: stable IDs, values, units, freshness and source timestamps. Missing preferred metrics use current recorded alternatives; existing stale values remain visible. State groups distinguish confirmed yes, confirmed no and sources without a current value. A replacement identifies the missing metric and its reason. No additional collection is enabled. |
| $.devices[].summary.attention_reasons | array<string; {"maxLength":128}>; {"maxItems":8} | No | Names of up to eight unresolved alarms, critical alarms first. Includes acknowledged alarms and excludes archived rules. |
| $.devices[].summary.attention_reasons[] | string; {"maxLength":128} | Yes | — |
| $.devices[].summary.attention_count | integer; {"minimum":0} | No | Total number of unresolved alarms represented by the monitor warning. |
| $.devices[].summary.status | string; {"enum":["available","unavailable"]} | Yes | — |
| $.devices[].summary.target | string | Yes | — |
| $.devices[].summary.system | string | Yes | — |
| $.devices[].summary.interval_seconds | integer; {"minimum":0} | Yes | — |
| $.devices[].summary.metrics | array<object; {"additionalProperties":false}>; {"maxItems":3} | Yes | — |
| $.devices[].summary.metrics[] | object; {"additionalProperties":false} | Yes | — |
| $.devices[].summary.metrics[].key | string | Yes | — |
| $.devices[].summary.metrics[].value | number | string | null | Yes | — |
| $.devices[].summary.metrics[].unit | string | Yes | — |
| $.devices[].summary.metrics[].freshness | string; {"enum":["fresh","stale","missing","reported","scheduled"]} | Yes | — |
| $.devices[].summary.metrics[].reason | string | No | — |
| $.devices[].summary.metrics[].measured_at | string; {"format":"date-time"} | null | Yes | — |
| $.devices[].summary.metrics[].measured_at (anyOf 1) | string; {"format":"date-time"} | No | — |
| $.devices[].summary.metrics[].measured_at (anyOf 2) | null | No | — |
| $.devices[].summary.metrics[].valid_until | string; {"format":"date-time"} | null | Yes | — |
| $.devices[].summary.metrics[].valid_until (anyOf 1) | string; {"format":"date-time"} | No | — |
| $.devices[].summary.metrics[].valid_until (anyOf 2) | null | No | — |
| $.devices[].summary.metrics[].sources | array<object; {"additionalProperties":false}> | Yes | — |
| $.devices[].summary.metrics[].sources[] | object; {"additionalProperties":false} | Yes | — |
| $.devices[].summary.metrics[].sources[].series_id | string; {"format":"uuid"} | No | — |
| $.devices[].summary.metrics[].sources[].name | string | Yes | — |
| $.devices[].summary.metrics[].sources[].measured_at | string; {"format":"date-time"} | null | Yes | — |
| $.devices[].summary.metrics[].sources[].valid_until | string; {"format":"date-time"} | null | Yes | — |
| $.devices[].summary.metrics[].sources[].value | number | string | null | No | — |
| $.devices[].summary.metrics[].sources[].label_key | string | No | — |
| $.devices[].summary.metrics[].sources[].component | string | No | — |
| $.devices[].summary.metrics[].sources[].freshness | string; {"enum":["fresh","stale","missing"]} | No | — |
| $.devices[].summary.metrics[].sources[].unit | string | No | Original unit of the individual source value; an empty string denotes a dimensionless value. |
| $.devices[].summary.metrics[].used | number | No | — |
| $.devices[].summary.metrics[].total | number | No | — |
| $.devices[].summary.metrics[].cores | number | No | — |
| $.devices[].summary.metrics[].path | string | No | — |
| $.devices[].summary.metrics[].engine | string | No | — |
| $.devices[].summary.metrics[].configured | integer; {"minimum":0} | No | — |
| $.devices[].summary.metrics[].id | string | Yes | — |
| $.devices[].summary.metrics[].label_key | string | No | — |
| $.devices[].summary.metrics[].name | string | No | — |
| $.devices[].summary.metrics[].component | string | No | — |
| $.devices[].summary.metrics[].kind | string; {"enum":["gauge","counter","boolean","enum"]} | No | — |
| $.devices[].summary.metrics[].aggregation | string; {"enum":["mean","min"]} | No | — |
| $.devices[].summary.metrics[].replaces | object; {"additionalProperties":false} | No | — |
| $.devices[].summary.metrics[].replaces.key | string | Yes | — |
| $.devices[].summary.metrics[].replaces.reason | string | Yes | — |
| $.devices[].summary.metrics[].group | object; {"additionalProperties":false} | No | — |
| $.devices[].summary.metrics[].group.total | integer; {"minimum":0} | Yes | — |
| $.devices[].summary.metrics[].group.positive | integer; {"minimum":0} | Yes | — |
| $.devices[].summary.metrics[].group.negative | integer; {"minimum":0} | Yes | — |
| $.devices[].summary.metrics[].group.unknown | integer; {"minimum":0} | Yes | — |
| $.devices[].summary.favicon_url | string | No | Relative, authenticated image URL for the favicon of an HTTP or browser monitor. |
| $.devices[].summary.location_count | integer; {"minimum":0} | Yes | — |
| $.devices[].summary.platform | string; {"enum":["linux","darwin","windows"]} | No | Agent-reported operating system. Omitted when it is unknown. |
| $.devices[].summary.last_value_received_at | string; {"format":"date-time"} | null | No | Receipt time of the latest retained original numeric or state value across active series. Excludes heartbeats, text events, disabled series and derived calculations. Null when no such value is available. |
| $.devices[].summary.last_value_received_at (anyOf 1) | string; {"format":"date-time"} | No | — |
| $.devices[].summary.last_value_received_at (anyOf 2) | null | No | — |
| $.devices[].summary.agent_update | AgentUpdateInfo | No | — |
| $.devices[].summary.agent_update.operating_system | string | Yes | — |
| $.devices[].summary.agent_update.installed_version | string | Yes | — |
| $.devices[].summary.agent_update.latest_version | string | Yes | — |
| $.devices[].summary.agent_update.state | string; {"enum":["unknown","current","update_available"]} | Yes | — |
| $.devices[].summary.agent_update.reason | string | Yes | — |
| $.devices[].summary.agent_update.can_update | boolean | Yes | — |
| $.devices[].summary.agent_update.target_id | string | Yes | — |
| $.devices[].summary.agent_update.job | AgentUpdateJob | No | — |
| $.devices[].summary.agent_update.job.id | string; {"format":"uuid"} | Yes | — |
| $.devices[].summary.agent_update.job.installation_id | string; {"pattern":"^[0-9a-f]{32}$"} | Yes | — |
| $.devices[].summary.agent_update.job.state | string; {"enum":["pending","running","succeeded","failed","expired","unconfirmed"]} | Yes | — |
| $.devices[].summary.agent_update.job.phase | string; {"enum":["downloading","installing","restarting","completed"]} | Yes | — |
| $.devices[].summary.agent_update.job.target | AgentUpdateTarget | Yes | — |
| $.devices[].summary.agent_update.job.target.commit | string; {"pattern":"^[0-9a-f]{40}$"} | Yes | — |
| $.devices[].summary.agent_update.job.target.version | string | Yes | — |
| $.devices[].summary.agent_update.job.target.created_at | string; {"format":"date-time"} | Yes | — |
| $.devices[].summary.agent_update.job.target.file | object; {"additionalProperties":false} | Yes | — |
| $.devices[].summary.agent_update.job.target.file.name | string | Yes | — |
| $.devices[].summary.agent_update.job.target.file.platform | string; {"enum":["linux","darwin","windows"]} | Yes | — |
| $.devices[].summary.agent_update.job.target.file.architecture | string; {"enum":["amd64","arm64"]} | Yes | — |
| $.devices[].summary.agent_update.job.target.file.kind | string; {"const":"binary"} | Yes | — |
| $.devices[].summary.agent_update.job.target.file.sha256 | string; {"pattern":"^[0-9a-f]{64}$"} | Yes | — |
| $.devices[].summary.agent_update.job.target.file.size | integer; {"minimum":1,"maximum":268435456} | Yes | — |
| $.devices[].summary.agent_update.job.requested_at | string; {"format":"date-time"} | Yes | — |
| $.devices[].summary.agent_update.job.updated_at | string; {"format":"date-time"} | Yes | — |
| $.devices[].summary.agent_update.job.claimed_at | string; {"format":"date-time"} | null | Yes | — |
| $.devices[].summary.agent_update.job.claimed_at (anyOf 1) | string; {"format":"date-time"} | No | — |
| $.devices[].summary.agent_update.job.claimed_at (anyOf 2) | null | No | — |
| $.devices[].summary.agent_update.job.finished_at | string; {"format":"date-time"} | null | Yes | — |
| $.devices[].summary.agent_update.job.finished_at (anyOf 1) | string; {"format":"date-time"} | No | — |
| $.devices[].summary.agent_update.job.finished_at (anyOf 2) | null | No | — |
| $.devices[].summary.agent_update.job.error_code | string | Yes | — |
| $.devices[].summary.agent_update.job.monitor_id | string; {"format":"uuid"} | Yes | — |
| $.devices[].summary.agent_update.job.operation_id | string; {"format":"uuid"} | Yes | — |
| $.devices[].summary.agent_update.job.source_version | string; {"maxLength":128} | Yes | — |
| $.devices[].summary.agent_update.job.source_sha256 | string; {"pattern":"^[0-9a-f]{64}$"} | Yes | — |
| $.devices[].expected_heartbeat_seconds | integer; {"minimum":1} | Yes | — |
| $.devices[].heartbeat_status | string; {"enum":["fresh","stale","missing"]} | Yes | — |
| $.devices[].heartbeat_valid_until | string; {"format":"date-time"} | null | Yes | — |
| $.devices[].heartbeat_valid_until (anyOf 1) | string; {"format":"date-time"} | No | — |
| $.devices[].heartbeat_valid_until (anyOf 2) | null | No | — |
| $.removed_ids | array<string; {"format":"uuid"}>; {"maxItems":50} | Yes | — |
| $.removed_ids[] | string; {"format":"uuid"} | Yes | — |
Retries and asynchronous work
This operation reads or validates without applying a resource mutation. Respect rate limits and credential lifetime.
Request examples
Replace demo IDs, timestamps and placeholders with your own values. For a retry, keep the same IDs, time and content. These examples do not run requests on this page.
Keep login links, codes, cookies and keys private. Do not print them in logs or share them in support requests.
curl --silent --show-error --output /dev/null --write-out "%{http_code}\n" \
--request GET \
--header @"$HOME/.config/metribeacon/headers.txt" \
"https://metribeacon.com/api/v1/devices/summaries?workspace_id=00000000-0000-4000-8000-000000000001&device_ids=00000000-0000-4000-8000-000000000002"
import json
from pathlib import Path
from urllib.request import Request, HTTPRedirectHandler, build_opener
from urllib.error import HTTPError
headers = json.loads((Path.home() / ".config/metribeacon/headers.json").read_text())
request = Request("https://metribeacon.com/api/v1/devices/summaries?workspace_id=00000000-0000-4000-8000-000000000001&device_ids=00000000-0000-4000-8000-000000000002", data=None, headers=headers, method="GET")
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, request, fp, code, message, headers, target):
return None
opener = build_opener(NoRedirect())
try:
with opener.open(request, timeout=10) as response:
print(response.status)
except HTTPError as error:
print(error.code)
error.close()
import { readFile } from "node:fs/promises";
import { homedir } from "node:os";
import { join } from "node:path";
const headers = JSON.parse(await readFile(join(homedir(), ".config/metribeacon/headers.json"), "utf8"));
const response = await fetch("https://metribeacon.com/api/v1/devices/summaries?workspace_id=00000000-0000-4000-8000-000000000001&device_ids=00000000-0000-4000-8000-000000000002", {
method: "GET", headers, redirect: "manual",
signal: AbortSignal.timeout(10000),
});
console.log(response.status);
await response.body?.cancel();
package main
import (
"fmt"
"net/http"
"time"
"encoding/json"
"os"
"path/filepath"
)
func main() {
home, err := os.UserHomeDir(); if err != nil { panic("request failed; credentials and response omitted") }
raw, err := os.ReadFile(filepath.Join(home, ".config/metribeacon/headers.json")); if err != nil { panic("request failed; credentials and response omitted") }
var headers map[string]string
if json.Unmarshal(raw, &headers) != nil { panic("invalid local headers") }
request, err := http.NewRequest("GET", "https://metribeacon.com/api/v1/devices/summaries?workspace_id=00000000-0000-4000-8000-000000000001&device_ids=00000000-0000-4000-8000-000000000002", nil)
if err != nil { panic("request failed; credentials and response omitted") }
for name, value := range headers { request.Header.Set(name, value) }
client := &http.Client{Timeout: 10*time.Second, CheckRedirect: func(*http.Request, []*http.Request) error { return http.ErrUseLastResponse }}
response, err := client.Do(request)
if err != nil { panic("request failed; credentials and response omitted") }
defer response.Body.Close()
fmt.Println(response.StatusCode)
}
Related guides
- HTTP API, OAuth and MCP
Find the user API endpoints, their permissions, fields, examples and response formats.
- GET Receive full summaries events for the selected servers, initially and after reconnecting. New saved values are delivered within five seconds on a healthy connection. A control snapshot runs every four seconds; sessions and workspace access are checked before each response. access_revoked clears private values and ends the stream. Background tabs should close the stream.
Receive full summaries events for the selected servers, initially and after reconnecting. New saved values are delivered within five seconds on a healthy connection. A control snapshot runs every four seconds; sessions and workspace access are checked before each response. access_revoked clears private values and ends the stream. Background tabs should close the stream.
- GET Search and page through devices in your workspace
Search and page through devices in your workspace.
- POST Create a device
Create a device.