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": []
}