Outcome
Reads dated workspace operational events, including creation and destination changes; parsed details accompany the retained details_json field.
Before you start
- Verify identity, environment and the intended organization before discovery.
- Discover the published analytics:read permission and the target policy.
- Select an accessible canonical Auth workspace and set WORKSPACE_ID to its returned id. Workspace binding is separate from input.
Discover the target
topolo whoami --json
topolo workspaces list topolo-quro --json
topolo actions get app_topolo_quro.analytics.events.list --detail --json
- quro_id: Discovered numeric code id for the analytics filter; retain the selected workspace binding separately.
Request
GET /openclaw/quro/events
Inspect parameters and test this action.
Input fields
| Field | Required | Meaning |
|---|---|---|
from | No | Requested beginning of the analytics/date filter window. Inspect the effective from returned by the handler. |
to | No | Requested end of the analytics/date filter window. Inspect the effective to returned by the handler. |
slug | No | Exact requested or discovered QR slug. Slugs are globally unique; changing one can break distributed printed codes. |
quro_id | No | Discovered numeric code id for the analytics filter; retain the selected workspace binding separately. |
event_type | No | Exact operational event type filter. qr.created and destination-change events are not proof of scans. |
limit | No | Declared bounded result count. Event/rollup results have no continuation cursor; narrow the window when the limit is reached. |
Worked examples
Actual exported Quro Worker with local Miniflare D1/KV and every committed app/analytics migration. Auth, service tokens, Nexus, destination probes and platform archival are synthetic responses; outbound fetch is sealed. Notifications remain in the local outbox. No live redirect propagation, QR scan, destination health, provider delivery, archival or production erasure is established.
Save reviewed input as payload.json, replacing fixture identifiers through discovery.
topolo actions validate app_topolo_quro.analytics.events.list --data @payload.json --json
topolo actions plan app_topolo_quro.analytics.events.list --resource-type workspace --resource-id "$WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_quro.analytics.events.list --resource-type workspace --resource-id "$WORKSPACE_ID" --data @payload.json --detail --json
MCP uses the same reviewed input and separately discovered resource binding:
{
"tool": "topolo_prepare_action",
"arguments": {
"actionId": "app_topolo_quro.analytics.events.list",
"input": {
"slug": "premium-fixture",
"quro_id": 14,
"event_type": "qr.created",
"limit": 1,
"from": "2000-01-01",
"to": "2026-10-06"
},
"resourceType": "workspace",
"resourceId": "ws_quro_fixture"
}
}
{
"tool": "topolo_read_action",
"arguments": {
"actionId": "app_topolo_quro.analytics.events.list",
"input": {
"slug": "premium-fixture",
"quro_id": 14,
"event_type": "qr.created",
"limit": 1,
"from": "2000-01-01",
"to": "2026-10-06"
},
"resourceType": "workspace",
"resourceId": "ws_quro_fixture",
"detail": true
}
}
Worked response 1 · HTTP 200
Input · payload.json:
{
"slug": "premium-fixture",
"quro_id": 14,
"event_type": "qr.created",
"limit": 1,
"from": "2000-01-01",
"to": "2026-10-06"
}
Captured SDK response:
{
"success": true,
"data": [
{
"id": "1c8ea869-6bd4-4988-a4c6-2dfe1df19827",
"quro_id": 14,
"slug": "premium-fixture",
"user_id": "user_quro_fixture",
"organization_id": "org_quro_fixture",
"workspace_id": "ws_quro_fixture",
"series_id": null,
"tier": "premium",
"event_type": "qr.created",
"event_status": "success",
"reason": null,
"target_url": "https://example.com/item/premium",
"http_status": null,
"details_json": "{\"status_id\":1,\"category_id\":1,\"valid_from\":\"2020-01-01\",\"valid_to\":\"2020-12-31\",\"max_usage\":10}",
"occurred_at": "2026-10-06T11:16:13.024Z",
"event_date": "2026-10-06",
"details": {
"status_id": 1,
"category_id": 1,
"valid_from": "2020-01-01",
"valid_to": "2020-12-31",
"max_usage": 10
}
}
],
"meta": {
"from": "2000-01-01",
"to": "2026-10-06",
"limit": 1
}
}
HTTP 200. Inspect event_type, occurred_at and tenant fields. Creation/change events are not evidence of actual public scans. Limit is bounded and the response has no continuation cursor.
Worked response 2 · HTTP 200
Input · payload.json:
{}
Captured SDK response:
{
"success": true,
"data": [
{
"id": "1c8ea869-6bd4-4988-a4c6-2dfe1df19827",
"quro_id": 14,
"slug": "premium-fixture",
"user_id": "user_quro_fixture",
"organization_id": "org_quro_fixture",
"workspace_id": "ws_quro_fixture",
"series_id": null,
"tier": "premium",
"event_type": "qr.created",
"event_status": "success",
"reason": null,
"target_url": "https://example.com/item/premium",
"http_status": null,
"details_json": "{\"status_id\":1,\"category_id\":1,\"valid_from\":\"2020-01-01\",\"valid_to\":\"2020-12-31\",\"max_usage\":10}",
"occurred_at": "2026-10-06T11:16:13.024Z",
"event_date": "2026-10-06",
"details": {
"status_id": 1,
"category_id": 1,
"valid_from": "2020-01-01",
"valid_to": "2020-12-31",
"max_usage": 10
}
},
{
"id": "e3ca5670-fa3a-4dd0-b32b-ab05debb2b6a",
"quro_id": 14,
"slug": "premium-fixture",
"user_id": "user_quro_fixture",
"organization_id": "org_quro_fixture",
"workspace_id": "ws_quro_fixture",
"series_id": 3,
"tier": "premium",
"event_type": "qr.status.updated",
"event_status": "success",
"reason": null,
"target_url": "https://example.com/item/premium",
"http_status": null,
"details_json": "{\"previous_status_id\":1,\"next_status_id\":2}",
"occurred_at": "2026-10-06T11:16:13.050Z",
"event_date": "2026-10-06",
"details": {
"previous_status_id": 1,
"next_status_id": 2
}
},
{
"id": "3d7fb3f8-ee95-496c-b4b8-916241c322a1",
"quro_id": 14,
"slug": "premium-fixture",
"user_id": "user_quro_fixture",
"organization_id": "org_quro_fixture",
"workspace_id": "ws_quro_fixture",
"series_id": 3,
"tier": "premium",
"event_type": "qr.campaign.updated",
"event_status": "success",
"reason": null,
"target_url": "https://example.com/item/premium",
"http_status": null,
"details_json": "{\"previous_series_id\":null,\"next_series_id\":3}",
"occurred_at": "2026-10-06T11:16:13.054Z",
"event_date": "2026-10-06",
"details": {
"previous_series_id": null,
"next_series_id": 3
}
},
{
"id": "1ab020d4-3aff-4c45-9d0e-fa2647856f25",
"quro_id": 14,
"slug": "premium-fixture",
"user_id": "user_quro_fixture",
"organization_id": "org_quro_fixture",
"workspace_id": "ws_quro_fixture",
"series_id": null,
"tier": "premium",
"event_type": "qr.campaign.updated",
"event_status": "success",
"reason": null,
"target_url": "https://example.com/item/premium",
"http_status": null,
"details_json": "{\"previous_series_id\":3,\"next_series_id\":null}",
"occurred_at": "2026-10-06T11:16:13.072Z",
"event_date": "2026-10-06",
"details": {
"previous_series_id": 3,
"next_series_id": null
}
},
{
"id": "49a02537-502f-4ecf-8b30-9ff9fa1cfb27",
"quro_id": 14,
"slug": "premium-fixture",
"user_id": "user_quro_fixture",
"organization_id": "org_quro_fixture",
"workspace_id": "ws_quro_fixture",
"series_id": null,
"tier": "premium",
"event_type": "qr.activation_window.updated",
"event_status": "success",
"reason": null,
"target_url": "https://example.com/item/premium",
"http_status": null,
"details_json": "{\"previous_valid_from\":\"2020-01-01\",\"next_valid_from\":null}",
"occurred_at": "2026-10-06T11:16:13.075Z",
"event_date": "2026-10-06",
"details": {
"previous_valid_from": "2020-01-01",
"next_valid_from": null
}
},
{
"id": "2eb3ea4c-617f-4b98-b822-6cc183163564",
"quro_id": 14,
"slug": "premium-fixture",
"user_id": "user_quro_fixture",
"organization_id": "org_quro_fixture",
"workspace_id": "ws_quro_fixture",
"series_id": null,
"tier": "premium",
"event_type": "qr.expiration.updated",
"event_status": "success",
"reason": null,
"target_url": "https://example.com/item/premium",
"http_status": null,
"details_json": "{\"previous_valid_to\":\"2020-12-31\",\"next_valid_to\":null}",
"occurred_at": "2026-10-06T11:16:13.078Z",
"event_date": "2026-10-06",
"details": {
"previous_valid_to": "2020-12-31",
"next_valid_to": null
}
},
{
"id": "344bb781-0aa3-42b8-a4e3-570365bc709f",
"quro_id": 15,
"slug": "basic-fixture",
"user_id": "user_quro_fixture",
"organization_id": "org_quro_fixture",
"workspace_id": "ws_quro_fixture",
"series_id": null,
"tier": "basic",
"event_type": "qr.created",
"event_status": "success",
"reason": null,
"target_url": "https://example.com/item/basic",
"http_status": null,
"details_json": "{\"status_id\":1,\"category_id\":1,\"valid_from\":null,\"valid_to\":null,\"max_usage\":null}",
"occurred_at": "2026-10-06T11:16:13.121Z",
"event_date": "2026-10-06",
"details": {
"status_id": 1,
"category_id": 1,
"valid_from": null,
"valid_to": null,
"max_usage": null
}
},
{
"id": "3523347e-32b3-460a-abdb-7cab8f99f0c7",
"quro_id": 15,
"slug": "basic-fixture",
"user_id": "user_quro_fixture",
"organization_id": "org_quro_fixture",
"workspace_id": "ws_quro_fixture",
"series_id": null,
"tier": "basic",
"event_type": "qr.destination.updated",
"event_status": "success",
"reason": null,
"target_url": "https://example.com/updated",
"http_status": null,
"details_json": "{\"previous_url\":\"https://example.com/item/basic\",\"next_url\":\"https://example.com/updated\"}",
"occurred_at": "2026-10-06T11:16:13.156Z",
"event_date": "2026-10-06",
"details": {
"previous_url": "https://example.com/item/basic",
"next_url": "https://example.com/updated"
}
},
{
"id": "30ea9eb2-fcaa-4170-8d1b-6d8e420d6ec4",
"quro_id": 16,
"slug": "6df2of7g",
"user_id": "user_quro_fixture",
"organization_id": "org_quro_fixture",
"workspace_id": "ws_quro_fixture",
"series_id": null,
"tier": "standard",
"event_type": "qr.created",
"event_status": "success",
"reason": null,
"target_url": "mailto:operator@example.com",
"http_status": null,
"details_json": "{\"status_id\":1,\"category_id\":1,\"valid_from\":null,\"valid_to\":null,\"max_usage\":null}",
"occurred_at": "2026-10-06T11:16:13.173Z",
"event_date": "2026-10-06",
"details": {
"status_id": 1,
"category_id": 1,
"valid_from": null,
"valid_to": null,
"max_usage": null
}
},
{
"id": "6e0f2707-d328-4f43-95f0-e9c7146eb7e6",
"quro_id": 16,
"slug": "6df2of7g",
"user_id": "user_quro_fixture",
"organization_id": "org_quro_fixture",
"workspace_id": "ws_quro_fixture",
"series_id": null,
"tier": "standard",
"event_type": "qr.destination.updated",
"event_status": "success",
"reason": null,
"target_url": "mailto:reviewed@example.com",
"http_status": null,
"details_json": "{\"previous_url\":\"mailto:operator@example.com\",\"next_url\":\"mailto:reviewed@example.com\"}",
"occurred_at": "2026-10-06T11:16:13.206Z",
"event_date": "2026-10-06",
"details": {
"previous_url": "mailto:operator@example.com",
"next_url": "mailto:reviewed@example.com"
}
},
{
"id": "76bc96aa-812f-4b6b-9ee8-1a81385604fb",
"quro_id": 16,
"slug": "6df2of7g",
"user_id": "user_quro_fixture",
"organization_id": "org_quro_fixture",
"workspace_id": "ws_quro_fixture",
"series_id": null,
"tier": "standard",
"event_type": "qr.status.updated",
"event_status": "success",
"reason": null,
"target_url": "mailto:reviewed@example.com",
"http_status": null,
"details_json": "{\"previous_status_id\":1,\"next_status_id\":1}",
"occurred_at": "2026-10-06T11:16:13.208Z",
"event_date": "2026-10-06",
"details": {
"previous_status_id": 1,
"next_status_id": 1
}
},
{
"id": "428ce685-2a86-4ceb-b266-1cbb20dc2aa4",
"quro_id": 15,
"slug": "basic-fixture",
"user_id": "user_quro_fixture",
"organization_id": "org_quro_fixture",
"workspace_id": "ws_quro_fixture",
"series_id": null,
"tier": "basic",
"event_type": "qr.deleted",
"event_status": "success",
"reason": null,
"target_url": "https://example.com/updated",
"http_status": null,
"details_json": null,
"occurred_at": "2026-10-06T11:16:13.453Z",
"event_date": "2026-10-06",
"details": null
},
{
"id": "1e247a61-ea54-486e-9817-a725c46f81c1",
"quro_id": 1,
"slug": "quro-fixture",
"user_id": "user_quro_fixture",
"organization_id": "org_quro_fixture",
"workspace_id": "ws_quro_fixture",
"series_id": 1,
"tier": "standard",
"event_type": "qr.created",
"event_status": "success",
"reason": null,
"target_url": "https://example.com/fixture",
"http_status": null,
"details_json": "{\"status_id\":1,\"category_id\":1,\"valid_from\":null,\"valid_to\":null,\"max_usage\":null}",
"occurred_at": "2026-10-06T11:16:12.287Z",
"event_date": "2026-10-06",
"details": {
"status_id": 1,
"category_id": 1,
"valid_from": null,
"valid_to": null,
"max_usage": null
}
},
{
"id": "a852add7-3e79-4313-9c76-f67ac3d9c14b",
"quro_id": 1,
"slug": "quro-fixture",
"user_id": "user_quro_fixture",
"organization_id": "org_quro_fixture",
"workspace_id": "ws_quro_fixture",
"series_id": 1,
"tier": "standard",
"event_type": "qr.destination.updated",
"event_status": "success",
"reason": null,
"target_url": "https://example.com/updated",
"http_status": null,
"details_json": "{\"previous_url\":\"https://example.com/fixture\",\"next_url\":\"https://example.com/updated\"}",
"occurred_at": "2026-10-06T11:16:12.391Z",
"event_date": "2026-10-06",
"details": {
"previous_url": "https://example.com/fixture",
"next_url": "https://example.com/updated"
}
}
],
"meta": {
"from": "2026-09-06",
"to": "2026-10-06",
"limit": 250
}
}
HTTP 200. Inspect event_type, occurred_at and tenant fields. Creation/change events are not evidence of actual public scans. Limit is bounded and the response has no continuation cursor.
Verify the result
- Inspect event_type, occurred_at and tenant fields. Creation/change events are not evidence of actual public scans. Limit is bounded and the response has no continuation cursor.
Errors and recovery
- HTTP 401 ·
auth_error: Authenticate again in the intended environment and organization. - HTTP 403 ·
action_permission_required: Inspect the actual refusal. The action permission and the verified workspace access are both required; a caller cannot name an ungranted workspace.
Inspect the original handler body as well as the SDK error code. These are observed local refusals, not an exhaustive provider-failure list.
Recovery boundary
Narrow the date/code/event filters if the limit is reached; repeat the read without performing duplicate business writes.
Related actions
- List daily scan rollups: Returns dated workspace daily rollups for scans and redirect/refusal categories.
Evidence
Actual exported Quro Worker with local Miniflare D1/KV and every committed app/analytics migration. Auth, service tokens, Nexus, destination probes and platform archival are synthetic responses; outbound fetch is sealed. Notifications remain in the local outbox. No live redirect propagation, QR scan, destination health, provider delivery, archival or production erasure is established.