application · active
Topolo Quro
QR creation, redirect, and scan-tracking application with modern and legacy UI surfaces.
Documentation map
- Topolo Quro — Public overview of the QR creation, redirect, analytics, and authenticated UI surface in the Topolo portfolio.
Authority and runtime
- System ID
topolo-quro- App IDs
- app_topolo_quro
- Owners
- growth-platform
- Repositories
- apps/TopoloQuro
- Hosts
- https://quro.topolo.app, https://quro.stg.topolo.us
- Dependencies
- topolo-auth, applications-packages
Security and data ownership
- Risk tier
- standard
- Tenant isolation
- organization_scoped
- Privacy classification
- restricted
- Storage
- d1, external_provider, kv
- Export and deletion
- planned
- Enterprise ready
- no
Source-derived capability inventory
Source revisions: apps/TopoloQuro@b92c14cb45d399a24de41ad2cb4d89a83abb1cbc
Declared actions: 25 · API routes: 33 · UI routes: 8
{
"id": "topolo-quro",
"name": "Topolo Quro",
"slug": "topolo-quro",
"kind": "application",
"visibility": "public",
"repo_paths": [
"apps/TopoloQuro"
],
"source_revisions": [
{
"source_path": "apps/TopoloQuro",
"repository": "apps/TopoloQuro",
"revision": "b92c14cb45d399a24de41ad2cb4d89a83abb1cbc",
"ref": "origin/staging"
}
],
"source_counts": {
"source_files": 86,
"test_files": 54,
"test_cases": 0,
"migration_files": 12,
"database_tables": 0,
"manifests": 1,
"deploy_targets": 3,
"actions": 25,
"mobile_contracts": 1,
"notifications": 5,
"package_manifests": 4,
"deployment_configs": 0
},
"manifests": [
{
"source_path": "apps/TopoloQuro/topolo.app.json",
"service_slug": "topolo-quro",
"name": "TopoloQuro",
"app_id": "app_topolo_quro",
"compatibility_date": "2026-04-10",
"primary_target": null,
"environments": [
"development",
"production",
"staging"
],
"targets": [
{
"name": "web",
"kind": "worker",
"directory": "apps/web",
"main": "src/worker.ts",
"worker_name": "quro-ui",
"subdomain": "quro",
"healthcheck_path": null,
"variable_names": [
"AUTH_API_URL",
"INSIGHTS_SITE_KEY",
"QURO_API_URL"
],
"secret_names": [],
"bindings": [
{
"kind": "services",
"binding": "API",
"target": null
},
{
"kind": "services",
"binding": "API",
"target": null
},
{
"kind": "services",
"binding": "API",
"target": null
}
]
},
{
"name": "api",
"kind": "worker",
"directory": "apps/api",
"main": "index.js",
"worker_name": "quro-api",
"subdomain": null,
"healthcheck_path": "/health",
"variable_names": [
"APP_URL",
"AUTH_BASE_URL",
"BRAND_API_URL",
"ENVIRONMENT",
"QURO_PUBLIC_BASE_URL",
"TOPOLO_NOTIFY_URL"
],
"secret_names": [],
"bindings": [
{
"kind": "d1",
"binding": "QURO_APP_DB",
"target": null
},
{
"kind": "d1",
"binding": "QURO_ANALYTICS_DB",
"target": null
},
{
"kind": "kv",
"binding": "QURO_REDIRECTS",
"target": null
},
{
"kind": "kv",
"binding": "QURO_REDIRECTS_A",
"target": null
},
{
"kind": "kv",
"binding": "QURO_REDIRECTS_B",
"target": null
},
{
"kind": "kv",
"binding": "QURO_SCANS_COUNT",
"target": null
},
{
"kind": "kv",
"binding": "QURO_SCANS_2025",
"target": null
},
{
"kind": "kv",
"binding": "QURO_SCANS_2026",
"target": null
}
]
},
{
"name": "redirect",
"kind": "worker",
"directory": "apps/redirect",
"main": "index.js",
"worker_name": "quro-redirect-system",
"subdomain": null,
"healthcheck_path": "/health",
"variable_names": [
"AUTH_BASE_URL",
"QURO_PUBLIC_BASE_URL",
"TOPOLO_NOTIFY_URL"
],
"secret_names": [],
"bindings": [
{
"kind": "d1",
"binding": "QURO_APP_DB",
"target": null
},
{
"kind": "d1",
"binding": "QURO_ANALYTICS_DB",
"target": null
},
{
"kind": "kv",
"binding": "QURO_REDIRECTS",
"target": null
},
{
"kind": "kv",
"binding": "QURO_REDIRECTS_A",
"target": null
},
{
"kind": "kv",
"binding": "QURO_REDIRECTS_B",
"target": null
},
{
"kind": "kv",
"binding": "QURO_SCANS_COUNT",
"target": null
},
{
"kind": "kv",
"binding": "QURO_SCANS_2025",
"target": null
},
{
"kind": "kv",
"binding": "QURO_SCANS_2026",
"target": null
}
]
}
],
"notifications": [
"quro.code.published",
"quro.destination.broken",
"quro.export.ready",
"quro.scan.threshold_reached",
"quro.series.completed"
],
"notification_contract": {
"source_path": "topolo.notification-contracts.json",
"role": "producer",
"schema_version": 1,
"owner_app_id": "app_topolo_quro",
"events": [
{
"type": "quro.code.published",
"version": 1,
"description": "An active Quro code and its redirect entry were durably published.",
"status": "published",
"payloadSchema": {
"type": "object",
"required": [
"title",
"body",
"object_id",
"code_id",
"slug",
"destination_url",
"series_id",
"occurred_at",
"cta_url"
],
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
},
"object_id": {
"type": "string",
"minLength": 1
},
"code_id": {
"type": "string",
"minLength": 1
},
"slug": {
"type": "string",
"minLength": 1
},
"destination_url": {
"type": "string",
"minLength": 1
},
"series_id": {
"type": [
"string",
"null"
]
},
"occurred_at": {
"type": "string",
"format": "date-time"
},
"cta_url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"examples": [
{
"title": "QR code published: launch-2026",
"body": "launch-2026 is active and ready to scan.",
"object_id": "123",
"code_id": "123",
"slug": "launch-2026",
"destination_url": "https://example.com/launch",
"series_id": "42",
"occurred_at": "2026-07-20T00:00:00.000Z",
"cta_url": "https://quro.topolo.app/codes/launch-2026"
}
],
"dataClassification": "internal",
"sensitiveFields": [
"destination_url"
],
"recipients": {
"modes": [
"organization_member"
],
"externalAddress": "forbidden"
},
"idempotency": {
"required": true,
"pattern": "^quro:code-published:"
}
},
{
"type": "quro.destination.broken",
"version": 1,
"description": "A destination-health transition was persisted as a new open Quro incident.",
"status": "published",
"payloadSchema": {
"type": "object",
"required": [
"title",
"body",
"object_id",
"incident_id",
"code_id",
"slug",
"destination_url",
"reason",
"http_status",
"occurred_at",
"cta_url"
],
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
},
"object_id": {
"type": "string",
"minLength": 1
},
"incident_id": {
"type": "string",
"minLength": 1
},
"code_id": {
"type": "string",
"minLength": 1
},
"slug": {
"type": "string",
"minLength": 1
},
"destination_url": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
},
"http_status": {
"type": [
"integer",
"null"
],
"minimum": 100,
"maximum": 599
},
"occurred_at": {
"type": "string",
"format": "date-time"
},
"cta_url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"examples": [
{
"title": "QR destination broken: launch-2026",
"body": "launch-2026 can no longer reach its configured destination.",
"object_id": "qurodestination_123",
"incident_id": "qurodestination_123",
"code_id": "123",
"slug": "launch-2026",
"destination_url": "https://example.com/launch",
"reason": "HTTP_503",
"http_status": 503,
"occurred_at": "2026-07-20T00:00:00.000Z",
"cta_url": "https://quro.topolo.app/codes/launch-2026"
}
],
"dataClassification": "confidential",
"sensitiveFields": [
"destination_url",
"reason"
],
"recipients": {
"modes": [
"organization_member"
],
"externalAddress": "forbidden"
},
"idempotency": {
"required": true,
"pattern": "^quro:destination-broken:"
}
},
{
"type": "quro.export.ready",
"version": 1,
"description": "A workspace-scoped Quro export artifact was persisted and is ready to download.",
"status": "published",
"payloadSchema": {
"type": "object",
"required": [
"title",
"body",
"object_id",
"export_id",
"format",
"record_count",
"occurred_at",
"cta_url"
],
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
},
"object_id": {
"type": "string",
"minLength": 1
},
"export_id": {
"type": "string",
"minLength": 1
},
"format": {
"type": "string",
"const": "json"
},
"record_count": {
"type": "integer",
"minimum": 0
},
"occurred_at": {
"type": "string",
"format": "date-time"
},
"cta_url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"examples": [
{
"title": "QR code export ready",
"body": "Your export containing 12 QR codes is ready.",
"object_id": "quroexport_123",
"export_id": "quroexport_123",
"format": "json",
"record_count": 12,
"occurred_at": "2026-07-20T00:00:00.000Z",
"cta_url": "https://quro.topolo.app/exports/quroexport_123"
}
],
"dataClassification": "internal",
"sensitiveFields": [],
"recipients": {
"modes": [
"organization_member"
],
"externalAddress": "forbidden"
},
"idempotency": {
"required": true,
"pattern": "^quro:export-ready:"
}
},
{
"type": "quro.scan.threshold_reached",
"version": 1,
"description": "A code's persisted scan count reached its configured maximum-usage threshold for the first time.",
"status": "published",
"payloadSchema": {
"type": "object",
"required": [
"title",
"body",
"object_id",
"threshold_id",
"code_id",
"slug",
"scan_count",
"threshold",
"occurred_at",
"cta_url"
],
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
},
"object_id": {
"type": "string",
"minLength": 1
},
"threshold_id": {
"type": "string",
"minLength": 1
},
"code_id": {
"type": "string",
"minLength": 1
},
"slug": {
"type": "string",
"minLength": 1
},
"scan_count": {
"type": "integer",
"minimum": 1
},
"threshold": {
"type": "integer",
"minimum": 1
},
"occurred_at": {
"type": "string",
"format": "date-time"
},
"cta_url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"examples": [
{
"title": "Scan threshold reached: launch-2026",
"body": "launch-2026 reached its configured threshold of 1000 scans.",
"object_id": "qurothreshold_123",
"threshold_id": "qurothreshold_123",
"code_id": "123",
"slug": "launch-2026",
"scan_count": 1000,
"threshold": 1000,
"occurred_at": "2026-07-20T00:00:00.000Z",
"cta_url": "https://quro.topolo.app/codes/launch-2026"
}
],
"dataClassification": "internal",
"sensitiveFields": [],
"recipients": {
"modes": [
"organization_member"
],
"externalAddress": "forbidden"
},
"idempotency": {
"required": true,
"pattern": "^quro:scan-threshold:"
}
},
{
"type": "quro.series.completed",
"version": 1,
"description": "A workspace-owned Quro series was durably transitioned to completed.",
"status": "published",
"payloadSchema": {
"type": "object",
"required": [
"title",
"body",
"object_id",
"series_id",
"series_name",
"occurred_at",
"cta_url"
],
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
},
"object_id": {
"type": "string",
"minLength": 1
},
"series_id": {
"type": "string",
"minLength": 1
},
"series_name": {
"type": "string",
"minLength": 1
},
"occurred_at": {
"type": "string",
"format": "date-time"
},
"cta_url": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
"examples": [
{
"title": "QR series completed: Launch 2026",
"body": "Launch 2026 has been marked completed.",
"object_id": "42",
"series_id": "42",
"series_name": "Launch 2026",
"occurred_at": "2026-07-20T00:00:00.000Z",
"cta_url": "https://quro.topolo.app/series/42"
}
],
"dataClassification": "internal",
"sensitiveFields": [],
"recipients": {
"modes": [
"organization_member"
],
"externalAddress": "forbidden"
},
"idempotency": {
"required": true,
"pattern": "^quro:series-completed:"
}
}
]
},
"actions": [
{
"name": "organizations.data.export",
"title": "Export organization data",
"description": "Export all Quro data owned by the authenticated organization across D1 and KV storage.",
"method": "GET",
"path": "/api/organizations/data/export",
"permission": "privacy:read",
"authorizationMode": "static",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"documentation": {
"example_input": {},
"cli_example": [
"topolo actions --service topolo-quro --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --json"
],
"http_example": {
"method": "GET",
"path": "/api/organizations/data/export",
"body": null
},
"effects": "Reads state through GET /api/organizations/data/export without a declared mutation.",
"verification": [
"Check the structured action result and pagination or resource identifiers before using it downstream."
],
"recovery": [
"Correct identity, resource context, permission, or input validation failures, then retry the read."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "GET /api/organizations/data/export",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "organizations.data.erase",
"title": "Erase organization data",
"description": "Permanently erase all Quro data owned by the authenticated organization while retaining backups under policy.",
"method": "DELETE",
"path": "/api/organizations/data/erase",
"permission": "privacy:write",
"authorizationMode": "static",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"confirmation": {
"type": "string",
"const": "ERASE"
}
},
"required": [
"confirmation"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": true,
"requiresConfirmation": true,
"agentAccess": "confirm",
"documentation": {
"example_input": {
"confirmation": "ERASE"
},
"cli_example": [
"topolo actions --service topolo-quro --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --confirm --json"
],
"http_example": {
"method": "DELETE",
"path": "/api/organizations/data/erase",
"body": null
},
"effects": "May change state through DELETE /api/organizations/data/erase. Inspect the plan and honor the published confirmation policy.",
"verification": [
"Check the structured action result.",
"Read the affected resource back through the corresponding get or list action."
],
"recovery": [
"Do not retry an ambiguous mutation until a read confirms whether it applied.",
"Use a published inverse, update, archive, or delete action only after inspecting its contract."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "DELETE /api/organizations/data/erase",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "widget.get",
"title": "Get widget summary",
"description": "Get the TopoloOne widget summary for this service.",
"method": "GET",
"path": "/api/widget",
"permission": "codes:read",
"authorizationMode": "static",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"documentation": {
"example_input": {},
"cli_example": [
"topolo actions --service topolo-quro --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --json"
],
"http_example": {
"method": "GET",
"path": "/api/widget",
"body": null
},
"effects": "Reads state through GET /api/widget without a declared mutation.",
"verification": [
"Check the structured action result and pagination or resource identifiers before using it downstream."
],
"recovery": [
"Correct identity, resource context, permission, or input validation failures, then retry the read."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "GET /api/widget",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "workspaces.delete",
"title": "Archive workspace",
"description": "Archive an empty Quro workspace via the platform, then drop Quro's local mirror row.",
"method": "DELETE",
"path": "/api/quro/workspaces/{workspaceId}",
"permission": "workspace:delete",
"authorizationMode": "static",
"readOnly": false,
"inputSchema": {
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"minLength": 1
}
},
"required": [
"workspaceId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": true,
"requiresConfirmation": true,
"agentAccess": "confirm",
"documentation": {
"example_input": {
"workspaceId": "example"
},
"cli_example": [
"topolo actions --service topolo-quro --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --confirm --json"
],
"http_example": {
"method": "DELETE",
"path": "/api/quro/workspaces/example",
"body": null
},
"effects": "May change state through DELETE /api/quro/workspaces/{workspaceId}. Inspect the plan and honor the published confirmation policy.",
"verification": [
"Check the structured action result.",
"Read the affected resource back through the corresponding get or list action."
],
"recovery": [
"Do not retry an ambiguous mutation until a read confirms whether it applied.",
"Use a published inverse, update, archive, or delete action only after inspecting its contract."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "DELETE /api/quro/workspaces/*",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "qurocodes.list",
"title": "List QURO codes",
"description": "List QURO codes.",
"method": "GET",
"path": "/qurocodes",
"permission": "codes:read",
"authorizationMode": "static",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"page": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"perPage": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"tier": {
"type": "string",
"enum": [
"all",
"basic",
"standard",
"premium"
]
},
"search": {
"type": "string",
"minLength": 1
},
"statusId": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"categoryId": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"from": {
"type": "string",
"minLength": 1
},
"to": {
"type": "string",
"minLength": 1
},
"seriesId": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
}
},
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by List QURO codes.",
"additionalProperties": true
},
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"documentation": {
"example_input": {
"page": 1,
"perPage": 1,
"limit": 1
},
"cli_example": [
"topolo actions --service topolo-quro --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --json"
],
"http_example": {
"method": "GET",
"path": "/qurocodes",
"body": null
},
"effects": "Reads state through GET /qurocodes without a declared mutation.",
"verification": [
"Check the structured action result and pagination or resource identifiers before using it downstream."
],
"recovery": [
"Correct identity, resource context, permission, or input validation failures, then retry the read."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "GET /qurocodes",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "qurocodes.create",
"title": "Create QURO codes",
"description": "Create QURO codes.",
"method": "POST",
"path": "/qurocodes",
"permission": "codes:write",
"authorizationMode": "static",
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"url": {
"type": "string",
"minLength": 1
},
"slug": {
"type": "string",
"minLength": 1
},
"tier": {
"type": "string",
"enum": [
"basic",
"standard",
"premium"
]
},
"status_id": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"category_id": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"series_id": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"name": {
"type": "string",
"minLength": 1
},
"max_usage": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"valid_from": {
"type": "string",
"minLength": 1
},
"valid_to": {
"type": "string",
"minLength": 1
},
"design": {
"oneOf": [
{
"type": "object",
"properties": {
"source": {
"type": "string",
"const": "plain"
},
"moduleStyle": {
"type": "string",
"enum": [
"square",
"rounded"
]
},
"finderStyle": {
"type": "string",
"enum": [
"square",
"rounded",
"circle"
]
}
},
"required": [
"source"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"source": {
"type": "string",
"const": "custom"
},
"foreground": {
"type": "string",
"pattern": "^#[0-9a-f]{6}$"
},
"background": {
"type": "string",
"pattern": "^#[0-9a-f]{6}$"
},
"moduleStyle": {
"type": "string",
"enum": [
"square",
"rounded"
]
},
"finderStyle": {
"type": "string",
"enum": [
"square",
"rounded",
"circle"
]
}
},
"required": [
"source"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"source": {
"type": "string",
"const": "brand"
},
"moduleStyle": {
"type": "string",
"enum": [
"square",
"rounded"
]
},
"finderStyle": {
"type": "string",
"enum": [
"square",
"rounded",
"circle"
]
}
},
"required": [
"source"
],
"additionalProperties": false
}
]
}
},
"required": [
"url"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Create QURO codes.",
"additionalProperties": true
},
"readOnly": false,
"destructive": false,
"agentAccess": "confirm",
"documentation": {
"example_input": {
"url": "https://example.com"
},
"cli_example": [
"topolo actions --service topolo-quro --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --confirm --json"
],
"http_example": {
"method": "POST",
"path": "/qurocodes",
"body": {
"url": "https://example.com"
}
},
"effects": "May change state through POST /qurocodes. Inspect the plan and honor the published confirmation policy.",
"verification": [
"Check the structured action result.",
"Read the affected resource back through the corresponding get or list action."
],
"recovery": [
"Do not retry an ambiguous mutation until a read confirms whether it applied.",
"Use a published inverse, update, archive, or delete action only after inspecting its contract."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "POST /qurocodes",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "qurocodes.get",
"title": "Get QURO codes",
"description": "Get one QURO codes record.",
"method": "GET",
"path": "/qurocodes/{id_or_slug}",
"permission": "codes:read",
"authorizationMode": "static",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id_or_slug": {
"type": "string",
"minLength": 1
}
},
"required": [
"id_or_slug"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Get QURO codes.",
"additionalProperties": true
},
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"documentation": {
"example_input": {
"id_or_slug": "example"
},
"cli_example": [
"topolo actions --service topolo-quro --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --json"
],
"http_example": {
"method": "GET",
"path": "/qurocodes/example",
"body": null
},
"effects": "Reads state through GET /qurocodes/{id_or_slug} without a declared mutation.",
"verification": [
"Check the structured action result and pagination or resource identifiers before using it downstream."
],
"recovery": [
"Correct identity, resource context, permission, or input validation failures, then retry the read."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "GET /qurocodes/*",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "qurocodes.update",
"title": "Update QURO codes",
"description": "Update one QURO codes record.",
"method": "PUT",
"path": "/qurocodes/{id_or_slug}",
"permission": "codes:write",
"authorizationMode": "static",
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id_or_slug": {
"type": "string",
"minLength": 1
},
"url": {
"type": "string",
"minLength": 1
},
"status_id": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"category_id": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"series_id": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"max_usage": {
"anyOf": [
{
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"valid_from": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"valid_to": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"design": {
"oneOf": [
{
"type": "object",
"properties": {
"source": {
"type": "string",
"const": "plain"
},
"moduleStyle": {
"type": "string",
"enum": [
"square",
"rounded"
]
},
"finderStyle": {
"type": "string",
"enum": [
"square",
"rounded",
"circle"
]
}
},
"required": [
"source"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"source": {
"type": "string",
"const": "custom"
},
"foreground": {
"type": "string",
"pattern": "^#[0-9a-f]{6}$"
},
"background": {
"type": "string",
"pattern": "^#[0-9a-f]{6}$"
},
"moduleStyle": {
"type": "string",
"enum": [
"square",
"rounded"
]
},
"finderStyle": {
"type": "string",
"enum": [
"square",
"rounded",
"circle"
]
}
},
"required": [
"source"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"source": {
"type": "string",
"const": "brand"
},
"moduleStyle": {
"type": "string",
"enum": [
"square",
"rounded"
]
},
"finderStyle": {
"type": "string",
"enum": [
"square",
"rounded",
"circle"
]
}
},
"required": [
"source"
],
"additionalProperties": false
}
]
}
},
"required": [
"id_or_slug"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Update QURO codes.",
"additionalProperties": true
},
"readOnly": false,
"destructive": false,
"agentAccess": "confirm",
"documentation": {
"example_input": {
"id_or_slug": "example"
},
"cli_example": [
"topolo actions --service topolo-quro --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --confirm --json"
],
"http_example": {
"method": "PUT",
"path": "/qurocodes/example",
"body": {
"id_or_slug": "example"
}
},
"effects": "May change state through PUT /qurocodes/{id_or_slug}. Inspect the plan and honor the published confirmation policy.",
"verification": [
"Check the structured action result.",
"Read the affected resource back through the corresponding get or list action."
],
"recovery": [
"Do not retry an ambiguous mutation until a read confirms whether it applied.",
"Use a published inverse, update, archive, or delete action only after inspecting its contract."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "PUT /qurocodes/*",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "qurocodes.delete",
"title": "Delete QURO codes",
"description": "Delete one QURO codes record.",
"method": "DELETE",
"path": "/qurocodes/{id_or_slug}",
"permission": "codes:write",
"authorizationMode": "static",
"requiresConfirmation": true,
"destructive": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id_or_slug": {
"type": "string",
"minLength": 1
}
},
"required": [
"id_or_slug"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Delete QURO codes.",
"additionalProperties": true
},
"readOnly": false,
"agentAccess": "confirm",
"documentation": {
"example_input": {
"id_or_slug": "example"
},
"cli_example": [
"topolo actions --service topolo-quro --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --confirm --json"
],
"http_example": {
"method": "DELETE",
"path": "/qurocodes/example",
"body": null
},
"effects": "May change state through DELETE /qurocodes/{id_or_slug}. Inspect the plan and honor the published confirmation policy.",
"verification": [
"Check the structured action result.",
"Read the affected resource back through the corresponding get or list action."
],
"recovery": [
"Do not retry an ambiguous mutation until a read confirms whether it applied.",
"Use a published inverse, update, archive, or delete action only after inspecting its contract."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "DELETE /qurocodes/*",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "analytics.get",
"title": "Get analytics",
"description": "Get Quro analytics.",
"method": "GET",
"path": "/analytics",
"permission": "analytics:read",
"authorizationMode": "static",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"quro_id": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"slug": {
"type": "string",
"minLength": 1
},
"period": {
"type": "string",
"enum": [
"day",
"week",
"month",
"year"
]
}
},
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Get analytics.",
"additionalProperties": true
},
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"documentation": {
"example_input": {
"quro_id": 1,
"slug": "example",
"period": "day"
},
"cli_example": [
"topolo actions --service topolo-quro --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --json"
],
"http_example": {
"method": "GET",
"path": "/analytics",
"body": null
},
"effects": "Reads state through GET /analytics without a declared mutation.",
"verification": [
"Check the structured action result and pagination or resource identifiers before using it downstream."
],
"recovery": [
"Correct identity, resource context, permission, or input validation failures, then retry the read."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "GET /analytics",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "analytics.assets.list",
"title": "List analytics assets",
"description": "List Quro OpenClaw analytics assets.",
"method": "GET",
"path": "/openclaw/quro/assets",
"permission": "analytics:read",
"authorizationMode": "static",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"page": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"perPage": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"search": {
"type": "string",
"minLength": 1
},
"tier": {
"type": "string",
"enum": [
"all",
"basic",
"standard",
"premium"
]
},
"seriesId": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"refresh_health": {
"type": "string",
"enum": [
"true",
"false"
]
},
"inactivity_days": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"window_days": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"from": {
"type": "string",
"minLength": 1
},
"to": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by List analytics assets.",
"additionalProperties": true
},
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"documentation": {
"example_input": {
"page": 1,
"perPage": 1,
"search": "example"
},
"cli_example": [
"topolo actions --service topolo-quro --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --json"
],
"http_example": {
"method": "GET",
"path": "/openclaw/quro/assets",
"body": null
},
"effects": "Reads state through GET /openclaw/quro/assets without a declared mutation.",
"verification": [
"Check the structured action result and pagination or resource identifiers before using it downstream."
],
"recovery": [
"Correct identity, resource context, permission, or input validation failures, then retry the read."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "GET /openclaw/quro/assets",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "analytics.events.list",
"title": "List analytics events",
"description": "List Quro OpenClaw analytics events.",
"method": "GET",
"path": "/openclaw/quro/events",
"permission": "analytics:read",
"authorizationMode": "static",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"from": {
"type": "string",
"minLength": 1
},
"to": {
"type": "string",
"minLength": 1
},
"slug": {
"type": "string",
"minLength": 1
},
"quro_id": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"event_type": {
"type": "string",
"minLength": 1
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 1000
}
},
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by List analytics events.",
"additionalProperties": true
},
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"documentation": {
"example_input": {
"from": "example",
"to": "example",
"slug": "example"
},
"cli_example": [
"topolo actions --service topolo-quro --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --json"
],
"http_example": {
"method": "GET",
"path": "/openclaw/quro/events",
"body": null
},
"effects": "Reads state through GET /openclaw/quro/events without a declared mutation.",
"verification": [
"Check the structured action result and pagination or resource identifiers before using it downstream."
],
"recovery": [
"Correct identity, resource context, permission, or input validation failures, then retry the read."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "GET /openclaw/quro/events",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "analytics.rollups.list",
"title": "List analytics rollups",
"description": "List Quro OpenClaw analytics rollups.",
"method": "GET",
"path": "/openclaw/quro/rollups",
"permission": "analytics:read",
"authorizationMode": "static",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"from": {
"type": "string",
"minLength": 1
},
"to": {
"type": "string",
"minLength": 1
},
"slug": {
"type": "string",
"minLength": 1
},
"quro_id": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 5000
}
},
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by List analytics rollups.",
"additionalProperties": true
},
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"documentation": {
"example_input": {
"from": "example",
"to": "example",
"slug": "example"
},
"cli_example": [
"topolo actions --service topolo-quro --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --json"
],
"http_example": {
"method": "GET",
"path": "/openclaw/quro/rollups",
"body": null
},
"effects": "Reads state through GET /openclaw/quro/rollups without a declared mutation.",
"verification": [
"Check the structured action result and pagination or resource identifiers before using it downstream."
],
"recovery": [
"Correct identity, resource context, permission, or input validation failures, then retry the read."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "GET /openclaw/quro/rollups",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "analytics.summary.get",
"title": "Get analytics summary",
"description": "Get Quro OpenClaw analytics summary.",
"method": "GET",
"path": "/openclaw/quro/summary",
"permission": "analytics:read",
"authorizationMode": "static",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"inactivity_days": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"window_days": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"from": {
"type": "string",
"minLength": 1
},
"to": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Get analytics summary.",
"additionalProperties": true
},
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"documentation": {
"example_input": {
"inactivity_days": 1,
"window_days": 1,
"limit": 1
},
"cli_example": [
"topolo actions --service topolo-quro --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --json"
],
"http_example": {
"method": "GET",
"path": "/openclaw/quro/summary",
"body": null
},
"effects": "Reads state through GET /openclaw/quro/summary without a declared mutation.",
"verification": [
"Check the structured action result and pagination or resource identifiers before using it downstream."
],
"recovery": [
"Correct identity, resource context, permission, or input validation failures, then retry the read."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "GET /openclaw/quro/summary",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "metadata.get",
"title": "Get metadata",
"description": "Get Quro metadata by type.",
"method": "GET",
"path": "/metadata/{type}",
"permission": "settings:read",
"authorizationMode": "static",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"categories",
"statuses",
"tiers"
]
}
},
"required": [
"type"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Get metadata.",
"additionalProperties": true
},
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"documentation": {
"example_input": {
"type": "categories"
},
"cli_example": [
"topolo actions --service topolo-quro --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --json"
],
"http_example": {
"method": "GET",
"path": "/metadata/categories",
"body": null
},
"effects": "Reads state through GET /metadata/{type} without a declared mutation.",
"verification": [
"Check the structured action result and pagination or resource identifiers before using it downstream."
],
"recovery": [
"Correct identity, resource context, permission, or input validation failures, then retry the read."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "GET /metadata/*",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "series.list",
"title": "List series",
"description": "List Quro series.",
"method": "GET",
"path": "/series",
"permission": "series:read",
"authorizationMode": "static",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"page": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"perPage": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"includeArchived": {
"type": "string",
"enum": [
"true",
"false"
]
},
"status": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by List series.",
"additionalProperties": true
},
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"documentation": {
"example_input": {
"page": 1,
"perPage": 1,
"includeArchived": "true"
},
"cli_example": [
"topolo actions --service topolo-quro --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --json"
],
"http_example": {
"method": "GET",
"path": "/series",
"body": null
},
"effects": "Reads state through GET /series without a declared mutation.",
"verification": [
"Check the structured action result and pagination or resource identifiers before using it downstream."
],
"recovery": [
"Correct identity, resource context, permission, or input validation failures, then retry the read."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "GET /series",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "series.create",
"title": "Create series",
"description": "Create a Quro series.",
"method": "POST",
"path": "/series",
"permission": "series:write",
"authorizationMode": "static",
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"description": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"active",
"paused",
"archived"
]
},
"templateId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Create series.",
"additionalProperties": true
},
"readOnly": false,
"destructive": false,
"agentAccess": "confirm",
"documentation": {
"example_input": {
"name": "example",
"description": "example",
"status": "active"
},
"cli_example": [
"topolo actions --service topolo-quro --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --confirm --json"
],
"http_example": {
"method": "POST",
"path": "/series",
"body": {
"name": "example",
"description": "example",
"status": "active"
}
},
"effects": "May change state through POST /series. Inspect the plan and honor the published confirmation policy.",
"verification": [
"Check the structured action result.",
"Read the affected resource back through the corresponding get or list action."
],
"recovery": [
"Do not retry an ambiguous mutation until a read confirms whether it applied.",
"Use a published inverse, update, archive, or delete action only after inspecting its contract."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "POST /series",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "series.templates.list",
"title": "List series templates",
"description": "List Quro series templates.",
"method": "GET",
"path": "/series/templates",
"permission": "series:read",
"authorizationMode": "static",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"search": {
"type": "string",
"minLength": 1
},
"category": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by List series templates.",
"additionalProperties": true
},
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"documentation": {
"example_input": {
"search": "example",
"category": "example"
},
"cli_example": [
"topolo actions --service topolo-quro --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --json"
],
"http_example": {
"method": "GET",
"path": "/series/templates",
"body": null
},
"effects": "Reads state through GET /series/templates without a declared mutation.",
"verification": [
"Check the structured action result and pagination or resource identifiers before using it downstream."
],
"recovery": [
"Correct identity, resource context, permission, or input validation failures, then retry the read."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "GET /series/templates",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "series.dashboard.get",
"title": "Get series dashboard",
"description": "Get one Quro series dashboard.",
"method": "GET",
"path": "/series/{id}/dashboard",
"permission": "series:read",
"authorizationMode": "static",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
}
},
"required": [
"id"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Get series dashboard.",
"additionalProperties": true
},
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"documentation": {
"example_input": {
"id": "00000000-0000-4000-8000-000000000000"
},
"cli_example": [
"topolo actions --service topolo-quro --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --json"
],
"http_example": {
"method": "GET",
"path": "/series/00000000-0000-4000-8000-000000000000/dashboard",
"body": null
},
"effects": "Reads state through GET /series/{id}/dashboard without a declared mutation.",
"verification": [
"Check the structured action result and pagination or resource identifiers before using it downstream."
],
"recovery": [
"Correct identity, resource context, permission, or input validation failures, then retry the read."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "GET /series/*/dashboard",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "series.dashboard.update",
"title": "Update series dashboard",
"description": "Update one Quro series dashboard.",
"method": "PUT",
"path": "/series/{id}/dashboard",
"permission": "series:write",
"authorizationMode": "static",
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"dashboard": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"resetToDefault": {
"type": "boolean"
}
},
"required": [
"id"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Update series dashboard.",
"additionalProperties": true
},
"readOnly": false,
"destructive": false,
"agentAccess": "confirm",
"documentation": {
"example_input": {
"id": "00000000-0000-4000-8000-000000000000"
},
"cli_example": [
"topolo actions --service topolo-quro --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --confirm --json"
],
"http_example": {
"method": "PUT",
"path": "/series/00000000-0000-4000-8000-000000000000/dashboard",
"body": {
"id": "00000000-0000-4000-8000-000000000000"
}
},
"effects": "May change state through PUT /series/{id}/dashboard. Inspect the plan and honor the published confirmation policy.",
"verification": [
"Check the structured action result.",
"Read the affected resource back through the corresponding get or list action."
],
"recovery": [
"Do not retry an ambiguous mutation until a read confirms whether it applied.",
"Use a published inverse, update, archive, or delete action only after inspecting its contract."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "PUT /series/*/dashboard",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "series.generate",
"title": "Generate series",
"description": "Generate Quro codes for a series.",
"method": "POST",
"path": "/series/{id}/generate",
"permission": "series:write",
"authorizationMode": "static",
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"count": {
"type": "integer",
"minimum": 1,
"maximum": 1000
},
"tier": {
"type": "string",
"enum": [
"basic",
"standard",
"premium"
]
},
"namePattern": {
"type": "string",
"minLength": 1
},
"urlPattern": {
"type": "string",
"minLength": 1
},
"categoryId": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"statusId": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"startNumber": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"design": {
"oneOf": [
{
"type": "object",
"properties": {
"source": {
"type": "string",
"const": "plain"
},
"moduleStyle": {
"type": "string",
"enum": [
"square",
"rounded"
]
},
"finderStyle": {
"type": "string",
"enum": [
"square",
"rounded",
"circle"
]
}
},
"required": [
"source"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"source": {
"type": "string",
"const": "custom"
},
"foreground": {
"type": "string",
"pattern": "^#[0-9a-f]{6}$"
},
"background": {
"type": "string",
"pattern": "^#[0-9a-f]{6}$"
},
"moduleStyle": {
"type": "string",
"enum": [
"square",
"rounded"
]
},
"finderStyle": {
"type": "string",
"enum": [
"square",
"rounded",
"circle"
]
}
},
"required": [
"source"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"source": {
"type": "string",
"const": "brand"
},
"moduleStyle": {
"type": "string",
"enum": [
"square",
"rounded"
]
},
"finderStyle": {
"type": "string",
"enum": [
"square",
"rounded",
"circle"
]
}
},
"required": [
"source"
],
"additionalProperties": false
}
]
}
},
"required": [
"id"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Generate series.",
"additionalProperties": true
},
"readOnly": false,
"destructive": false,
"agentAccess": "confirm",
"documentation": {
"example_input": {
"id": "00000000-0000-4000-8000-000000000000"
},
"cli_example": [
"topolo actions --service topolo-quro --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --confirm --json"
],
"http_example": {
"method": "POST",
"path": "/series/00000000-0000-4000-8000-000000000000/generate",
"body": {
"id": "00000000-0000-4000-8000-000000000000"
}
},
"effects": "May change state through POST /series/{id}/generate. Inspect the plan and honor the published confirmation policy.",
"verification": [
"Check the structured action result.",
"Read the affected resource back through the corresponding get or list action."
],
"recovery": [
"Do not retry an ambiguous mutation until a read confirms whether it applied.",
"Use a published inverse, update, archive, or delete action only after inspecting its contract."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "POST /series/*/generate",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "series.generation_templates.list",
"title": "List generation templates",
"description": "List generation templates for a Quro series.",
"method": "GET",
"path": "/series/{id}/generation-templates",
"permission": "series:read",
"authorizationMode": "static",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
}
},
"required": [
"id"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by List generation templates.",
"additionalProperties": true
},
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"documentation": {
"example_input": {
"id": "00000000-0000-4000-8000-000000000000"
},
"cli_example": [
"topolo actions --service topolo-quro --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --json"
],
"http_example": {
"method": "GET",
"path": "/series/00000000-0000-4000-8000-000000000000/generation-templates",
"body": null
},
"effects": "Reads state through GET /series/{id}/generation-templates without a declared mutation.",
"verification": [
"Check the structured action result and pagination or resource identifiers before using it downstream."
],
"recovery": [
"Correct identity, resource context, permission, or input validation failures, then retry the read."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "GET /series/*/generation-templates",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "series.complete",
"title": "Complete series",
"description": "Mark a Quro series completed.",
"method": "POST",
"path": "/series/{id}/complete",
"permission": "series:write",
"authorizationMode": "static",
"readOnly": false,
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
}
},
"required": [
"id"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"documentation": {
"example_input": {
"id": "00000000-0000-4000-8000-000000000000"
},
"cli_example": [
"topolo actions --service topolo-quro --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --confirm --json"
],
"http_example": {
"method": "POST",
"path": "/series/00000000-0000-4000-8000-000000000000/complete",
"body": {
"id": "00000000-0000-4000-8000-000000000000"
}
},
"effects": "May change state through POST /series/{id}/complete. Inspect the plan and honor the published confirmation policy.",
"verification": [
"Check the structured action result.",
"Read the affected resource back through the corresponding get or list action."
],
"recovery": [
"Do not retry an ambiguous mutation until a read confirms whether it applied.",
"Use a published inverse, update, archive, or delete action only after inspecting its contract."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "POST /series/*/complete",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "exports.create",
"title": "Create Quro export",
"description": "Create a durable JSON export of the active workspace's Quro codes.",
"method": "POST",
"path": "/exports",
"permission": "codes:read",
"authorizationMode": "static",
"readOnly": false,
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"documentation": {
"example_input": {},
"cli_example": [
"topolo actions --service topolo-quro --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --confirm --json"
],
"http_example": {
"method": "POST",
"path": "/exports",
"body": {}
},
"effects": "May change state through POST /exports. Inspect the plan and honor the published confirmation policy.",
"verification": [
"Check the structured action result.",
"Read the affected resource back through the corresponding get or list action."
],
"recovery": [
"Do not retry an ambiguous mutation until a read confirms whether it applied.",
"Use a published inverse, update, archive, or delete action only after inspecting its contract."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "POST /exports",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "exports.download",
"title": "Download Quro export",
"description": "Download a ready Quro export artifact.",
"method": "GET",
"path": "/exports/{id}",
"permission": "codes:read",
"authorizationMode": "static",
"readOnly": true,
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
}
},
"required": [
"id"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"documentation": {
"example_input": {
"id": "00000000-0000-4000-8000-000000000000"
},
"cli_example": [
"topolo actions --service topolo-quro --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --json"
],
"http_example": {
"method": "GET",
"path": "/exports/00000000-0000-4000-8000-000000000000",
"body": null
},
"effects": "Reads state through GET /exports/{id} without a declared mutation.",
"verification": [
"Check the structured action result and pagination or resource identifiers before using it downstream."
],
"recovery": [
"Correct identity, resource context, permission, or input validation failures, then retry the read."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "GET /exports/*",
"evidence": "Matched to a served route extracted from canonical staging source."
}
}
],
"action_coverage": {
"status": "ok",
"served_routes": 31,
"matched_actions": 25,
"declared_unserved_actions": [],
"coverage_excluded_actions": [],
"uncatalogued_routes": [],
"ignored_routes": 6,
"configured_exclusions": 4,
"configuration_findings": [],
"notes": [
"no routes extracted from redirect"
]
},
"runtime_contract_audit": {
"status": "verified",
"actions": 25,
"contracts": 25,
"contract_module": "topolo.action-contracts.mjs",
"validator_sources": [
"apps/api/index.js"
],
"authorization_sources": [
"apps/api/index.js"
],
"findings": []
}
}
],
"mobile_contracts": [
{
"source_path": "apps/TopoloQuro/topolo.mobile-experience.json",
"contract": {
"version": "2026-07-03",
"status": "approved",
"mode": "native_capability",
"appId": "app_topolo_quro",
"localizationNamespace": "quro",
"permissions": [
"codes:read",
"codes:write",
"series:read",
"series:write",
"analytics:read"
],
"offlinePolicy": "read_through_cache",
"fallbackPath": "/dashboard",
"auth": {
"audience": "topolo-quro",
"scopes": [
"codes:read",
"codes:write",
"series:read",
"series:write",
"analytics:read"
],
"orgContext": "required"
},
"routes": [
{
"path": "/dashboard",
"apiPath": "/qurocodes",
"title": "QR codes",
"titleKey": "quro.mobile.routes.codes.title",
"template": "record.list",
"dataSource": "quro.codes.list",
"detailRoute": "/codes/:slug",
"actions": [
{
"id": "quro.codes.create",
"title": "Create QR code",
"titleKey": "quro.mobile.actions.codesCreate.title",
"type": "record.create",
"permission": "codes:write",
"method": "POST",
"path": "/qurocodes",
"fields": [
{
"key": "url",
"label": "Destination URL",
"type": "text",
"required": true
},
{
"key": "name",
"label": "Name",
"type": "text"
},
{
"key": "tier",
"label": "Tier",
"type": "text"
},
{
"key": "category",
"label": "Category",
"type": "text"
},
{
"key": "series",
"label": "Series",
"type": "text"
},
{
"key": "valid_from",
"label": "Valid from",
"type": "date"
},
{
"key": "valid_to",
"label": "Valid to",
"type": "date"
}
]
}
]
},
{
"path": "/codes/:slug",
"apiPath": "/qurocodes/:slug",
"title": "QR code",
"titleKey": "quro.mobile.routes.codeDetail.title",
"template": "record.detail",
"dataSource": "quro.codes.detail",
"actions": [
{
"id": "quro.codes.update",
"title": "Update QR code",
"titleKey": "quro.mobile.actions.codeUpdate.title",
"type": "record.update",
"permission": "codes:write",
"method": "PUT",
"path": "/qurocodes/:slug",
"fields": [
{
"key": "url",
"label": "Destination URL",
"type": "text"
},
{
"key": "name",
"label": "Name",
"type": "text"
},
{
"key": "category",
"label": "Category",
"type": "text"
}
]
},
{
"id": "quro.codes.delete",
"title": "Delete QR code",
"titleKey": "quro.mobile.actions.codeDelete.title",
"type": "record.delete",
"permission": "codes:write",
"method": "DELETE",
"path": "/qurocodes/:slug"
}
]
},
{
"path": "/series",
"apiPath": "/series",
"title": "Series",
"titleKey": "quro.mobile.routes.series.title",
"template": "record.list",
"dataSource": "quro.series.list",
"detailRoute": "/series/:id/dashboard",
"actions": [
{
"id": "quro.series.create",
"title": "Create series",
"titleKey": "quro.mobile.actions.seriesCreate.title",
"type": "record.create",
"permission": "series:write",
"method": "POST",
"path": "/series",
"fields": [
{
"key": "name",
"label": "Name",
"type": "text",
"required": true
},
{
"key": "description",
"label": "Description",
"type": "textarea"
}
]
}
]
},
{
"path": "/series/:id/dashboard",
"apiPath": "/series/:id/dashboard",
"title": "Series dashboard",
"titleKey": "quro.mobile.routes.seriesDashboard.title",
"template": "record.detail",
"dataSource": "quro.series.detail"
}
]
}
}
],
"package_manifests": [],
"deployment_configs": [],
"source_signals": {
"api_routes": [
{
"method": "ALL",
"path": "*",
"source_path": "apps/TopoloQuro/apps/api/index.js"
},
{
"method": "OPTIONS",
"path": "*",
"source_path": "apps/TopoloQuro/apps/api/index.js"
},
{
"method": "GET",
"path": "/health",
"source_path": "apps/TopoloQuro/apps/api/index.js"
},
{
"method": "GET",
"path": "/api/widget",
"source_path": "apps/TopoloQuro/apps/api/index.js"
},
{
"method": "GET",
"path": "/api/organizations/data/export",
"source_path": "apps/TopoloQuro/apps/api/index.js"
},
{
"method": "DELETE",
"path": "/api/organizations/data/erase",
"source_path": "apps/TopoloQuro/apps/api/index.js"
},
{
"method": "DELETE",
"path": "/api/quro/workspaces/:workspaceId",
"source_path": "apps/TopoloQuro/apps/api/index.js"
},
{
"method": "GET",
"path": "/analytics",
"source_path": "apps/TopoloQuro/apps/api/index.js"
},
{
"method": "GET",
"path": "/openclaw/quro/assets",
"source_path": "apps/TopoloQuro/apps/api/index.js"
},
{
"method": "GET",
"path": "/openclaw/quro/events",
"source_path": "apps/TopoloQuro/apps/api/index.js"
},
{
"method": "GET",
"path": "/openclaw/quro/rollups",
"source_path": "apps/TopoloQuro/apps/api/index.js"
},
{
"method": "GET",
"path": "/openclaw/quro/summary",
"source_path": "apps/TopoloQuro/apps/api/index.js"
},
{
"method": "GET",
"path": "/metadata/:type",
"source_path": "apps/TopoloQuro/apps/api/index.js"
},
{
"method": "GET",
"path": "/series",
"source_path": "apps/TopoloQuro/apps/api/index.js"
},
{
"method": "GET",
"path": "/series/templates",
"source_path": "apps/TopoloQuro/apps/api/index.js"
},
{
"method": "POST",
"path": "/series",
"source_path": "apps/TopoloQuro/apps/api/index.js"
},
{
"method": "GET",
"path": "/series/:id/dashboard",
"source_path": "apps/TopoloQuro/apps/api/index.js"
},
{
"method": "PUT",
"path": "/series/:id/dashboard",
"source_path": "apps/TopoloQuro/apps/api/index.js"
},
{
"method": "POST",
"path": "/series/:id/generate",
"source_path": "apps/TopoloQuro/apps/api/index.js"
},
{
"method": "GET",
"path": "/series/:id/generation-templates",
"source_path": "apps/TopoloQuro/apps/api/index.js"
},
{
"method": "GET",
"path": "/qr/:slug",
"source_path": "apps/TopoloQuro/apps/api/index.js"
},
{
"method": "GET",
"path": "/qr/test/:slug",
"source_path": "apps/TopoloQuro/apps/api/index.js"
},
{
"method": "GET",
"path": "/qr/design-context",
"source_path": "apps/TopoloQuro/apps/api/src/quro-code-routes.js"
},
{
"method": "POST",
"path": "/qr/preview.svg",
"source_path": "apps/TopoloQuro/apps/api/src/quro-code-routes.js"
},
{
"method": "GET",
"path": "/qurocodes",
"source_path": "apps/TopoloQuro/apps/api/src/quro-code-routes.js"
},
{
"method": "POST",
"path": "/qurocodes",
"source_path": "apps/TopoloQuro/apps/api/src/quro-code-routes.js"
},
{
"method": "GET",
"path": "/qurocodes/:id_or_slug",
"source_path": "apps/TopoloQuro/apps/api/src/quro-code-routes.js"
},
{
"method": "PUT",
"path": "/qurocodes/:id_or_slug",
"source_path": "apps/TopoloQuro/apps/api/src/quro-code-routes.js"
},
{
"method": "DELETE",
"path": "/qurocodes/:id_or_slug",
"source_path": "apps/TopoloQuro/apps/api/src/quro-code-routes.js"
},
{
"method": "POST",
"path": "/series/:id/complete",
"source_path": "apps/TopoloQuro/apps/api/src/quro-workflow-routes.js"
},
{
"method": "POST",
"path": "/exports",
"source_path": "apps/TopoloQuro/apps/api/src/quro-workflow-routes.js"
},
{
"method": "GET",
"path": "/exports/:id",
"source_path": "apps/TopoloQuro/apps/api/src/quro-workflow-routes.js"
},
{
"method": "LITERAL",
"path": "/health",
"source_path": "apps/TopoloQuro/apps/redirect/index.js"
}
],
"ui_routes": [
{
"path": "/dashboard",
"source_path": "apps/TopoloQuro/apps/web/src/App.tsx"
},
{
"path": "/create",
"source_path": "apps/TopoloQuro/apps/web/src/App.tsx"
},
{
"path": "/codes/:slug",
"source_path": "apps/TopoloQuro/apps/web/src/App.tsx"
},
{
"path": "/series",
"source_path": "apps/TopoloQuro/apps/web/src/App.tsx"
},
{
"path": "/series/:id/dashboard",
"source_path": "apps/TopoloQuro/apps/web/src/App.tsx"
},
{
"path": "/settings",
"source_path": "apps/TopoloQuro/apps/web/src/App.tsx"
},
{
"path": "/settings/:section",
"source_path": "apps/TopoloQuro/apps/web/src/App.tsx"
},
{
"path": "/getting-started",
"source_path": "apps/TopoloQuro/apps/web/src/App.tsx"
}
],
"test_cases": [],
"database_tables": []
},
"documentation": {
"declared_paths": [
"applications/quro",
"internal/apps/quro"
],
"present_paths": [
"applications/quro",
"internal/apps/quro"
],
"missing_paths": [],
"human_reference": "/systems/topolo-quro",
"machine_reference": "/machine/systems/topolo-quro.json",
"action_examples": 25,
"action_schemas": 25
},
"source_findings": []
}