Topolo Docs Topolo Platform
Open workspace

Read the Consent privacy operations widget

Read one authorized workspace’s privacy summary, interpret its metrics and distinguish returned controls from separately approved actions.

Outcome

Read the privacy operations summary for one authorized Consent workspace. This read returns dashboard data and control descriptions; it does not perform the described actions.

GET /api/widget

Before you start

Use the original authorized identity, intended organization and a discovered canonical Consent workspace. Bind workspace resource context separately from the empty action input; app project keys are not workspace identifiers. Confirm the published workspace:read grant for this action.

This route is mounted before the app’s ordinary admin gate, but the published widget-server wrapper performs its own original request verification and accessible workspace resolution. Public Consent integration keys do not grant this dashboard read.

All examples are synthetic and unrun. The published dependency artifacts were downloaded without install scripts, imports or execution. English labels come from source catalog data, not proof of a deployed translation release. Source-to-serving and actual browser rendering remain unknown.

Request

Action: app_topolo_consent.widget.get. Input is exactly {}. Discover and bind the intended workspace separately, then validate and use the published read action. The examples contain fictional resource ids and authorize no real operation.

Read the summary

MeasureMeaning
Projects / active projectsAll project statuses / active only in the selected workspace.
Configured purposesPurpose rows across workspace projects.
Decisions in 7 daysEvent rows split by granted, denied, withdrawn and unknown.
Denial rateDenied / all recorded decisions × 100; zero if there are no events.
Open DSR requestsRequests outside fulfilled, rejected and closed.

These are operational counts, not unique people, legal assessments or proof that downstream policy was enforced. Reads across the control and events stores are independent. Check the returned workspace: the selected wrapper can fall back to its accessible default/first workspace if a requested selector is absent.

The source drafts ready when at least one project is active and empty otherwise. Historical metrics can remain nonzero in an empty workspace. observedAt precedes the queries; generatedAt and widget lastUpdated are added during wrapping. Zero fallback rows, timestamps and ready are not independent completeness or health checks.

Controls and known source limitations

The create control currently carries empty input, while project creation needs a real name or project key. Whether the renderer collects those values is unverified. Its recovery label says archive but targets project deletion, with a separately tracked guard issue. Follow the specific action guide and an approved plan; do not execute control metadata as a ready-made request or undo.

An active default project adds a separately confirmed cookie-scan control with external HTTP effects. A widget read does not authorize that scan. Scan history is bounded; the control text is not a retention guarantee.

The selected no-accessible-workspace branch currently declares actions absent from its empty controls, which the published SDK rejects. The source therefore returns a contract failure instead of its intended empty widget. This is an owner-tracked source issue, not a captured production incident. A database/build error can produce the same carrier.

The response uses private, max-age=15. Refresh fields request 60-second intervals, a 10-second timeout and 120-second freshness/stale windows. They describe client behavior; they do not establish a server deadline or prove an installed dashboard honors them.

Complete worked responses

Authorized workspace summary

Complete source-derived synthetic, unrun HTTP 200. Assumes original credential verification and canonical workspace resolution succeed; English translation values equal the checked source catalog; control/events aggregate queries return projects=2, active=1, purposes=6, decisions=10 (6 granted,2 denied,1 withdrawn,1 unknown), open DSR=2 and no active default project key. Fixture observation/generated times are deliberately separate. No app, SQL, subject, scan, provider or notification call was run.

Input:

{}

Response:

{
  "success": true,
  "contractVersion": "3.0.0",
  "appId": "app_topolo_consent",
  "serviceName": "Consent",
  "generatedAt": "2026-10-21T01:00:00.010Z",
  "widgets": [
    {
      "id": "consent.privacy-operations",
      "version": "3.0.0",
      "type": "stats",
      "presentation": {
        "title": "Privacy operations",
        "description": "Monitor consent configuration, recent decisions, and data-rights work for the selected workspace.",
        "contexts": [
          "organization",
          "workspace"
        ],
        "supportedSizes": [
          "compact",
          "medium",
          "wide"
        ],
        "defaultSize": "medium"
      },
      "resource": {
        "resourceType": "workspace",
        "resourceId": "ws_consent_docs_fixture",
        "requiredPermissions": [
          "workspace:read"
        ]
      },
      "state": {
        "status": "ready",
        "observedAt": "2026-10-21T01:00:00.000Z",
        "lastSuccessfulAt": "2026-10-21T01:00:00.000Z"
      },
      "refresh": {
        "intervalSeconds": 60,
        "timeoutSeconds": 10,
        "maxAgeSeconds": 120,
        "staleWhileRevalidateSeconds": 120
      },
      "configuration": {
        "allowMultipleInstances": false,
        "fields": [
          {
            "key": "heroMetricKey",
            "label": "Primary metric",
            "type": "select",
            "required": true,
            "options": [
              {
                "value": "activeProjects",
                "label": "Active projects"
              },
              {
                "value": "purposes",
                "label": "Configured purposes"
              },
              {
                "value": "decisions7d",
                "label": "Consent decisions in 7 days"
              },
              {
                "value": "denied7d",
                "label": "Denied decisions in 7 days"
              },
              {
                "value": "denialRate7d",
                "label": "Denial rate"
              },
              {
                "value": "openDsrRequests",
                "label": "Open DSR requests"
              }
            ]
          }
        ],
        "defaults": {
          "heroMetricKey": "openDsrRequests"
        }
      },
      "drilldowns": [
        {
          "id": "dashboard",
          "label": "Open privacy dashboard",
          "href": "/dashboard"
        },
        {
          "id": "projects",
          "label": "Manage consent projects",
          "href": "/projects"
        },
        {
          "id": "dsr",
          "label": "Review DSR requests",
          "href": "/dsr"
        },
        {
          "id": "audit",
          "label": "Review audit evidence",
          "href": "/audit"
        }
      ],
      "controls": [
        {
          "id": "create-project",
          "label": "Create Consent project",
          "actionId": "app_topolo_consent.projects.configure",
          "resourceType": "workspace",
          "resourceId": "ws_consent_docs_fixture",
          "input": {},
          "requiresConfirmation": true,
          "destructive": false,
          "effects": [
            "Creates one Consent project with its initial purpose configuration in the selected workspace."
          ],
          "verification": [
            "Read the Consent project list and confirm the new project and purpose configuration are present."
          ],
          "recovery": {
            "mode": "compensating_action",
            "actionId": "app_topolo_consent.workspaces.archive",
            "instructions": "Archive the newly created project while it has no privacy records."
          }
        }
      ],
      "localization": {
        "locale": "en",
        "titleKey": "consent.widget.privacyOperations.title",
        "descriptionKey": "consent.widget.privacyOperations.description"
      },
      "accessibility": {
        "label": "Consent projects, configured purposes, recent decisions, denials, and open data-rights requests"
      },
      "contribution": {
        "summary": "Workspace privacy posture, recent consent outcomes, outstanding data-rights work, and governed project scanning.",
        "identity": {
          "iconSource": "catalog"
        },
        "workspaceSelector": {
          "mode": "required",
          "resourceType": "workspace",
          "label": "Consent workspace",
          "supportsMultiple": true
        },
        "metricDefinitions": [
          {
            "key": "projects",
            "label": "Projects",
            "description": "Consent projects in the selected workspace.",
            "unit": "count",
            "semantic": "gauge",
            "aggregation": "last"
          },
          {
            "key": "activeProjects",
            "label": "Active projects",
            "description": "Consent projects currently collecting decisions.",
            "unit": "count",
            "semantic": "gauge",
            "aggregation": "last"
          },
          {
            "key": "purposes",
            "label": "Configured purposes",
            "description": "Consent purposes configured across projects in the selected workspace.",
            "unit": "count",
            "semantic": "gauge",
            "aggregation": "last"
          },
          {
            "key": "decisions7d",
            "label": "Decisions in 7 days",
            "description": "Consent decisions recorded during the trailing seven-day window.",
            "unit": "count",
            "semantic": "counter",
            "aggregation": "sum"
          },
          {
            "key": "granted7d",
            "label": "Granted in 7 days",
            "description": "Granted decisions recorded during the trailing seven-day window.",
            "unit": "count",
            "semantic": "counter",
            "aggregation": "sum"
          },
          {
            "key": "denied7d",
            "label": "Denied in 7 days",
            "description": "Denied decisions recorded during the trailing seven-day window.",
            "unit": "count",
            "semantic": "counter",
            "aggregation": "sum"
          },
          {
            "key": "withdrawn7d",
            "label": "Withdrawn in 7 days",
            "description": "Withdrawn decisions recorded during the trailing seven-day window.",
            "unit": "count",
            "semantic": "counter",
            "aggregation": "sum"
          },
          {
            "key": "unknown7d",
            "label": "Unknown in 7 days",
            "description": "Unknown decisions recorded during the trailing seven-day window.",
            "unit": "count",
            "semantic": "counter",
            "aggregation": "sum"
          },
          {
            "key": "denialRate7d",
            "label": "Denial rate",
            "description": "Denied decisions divided by every recorded decision in the trailing seven-day window.",
            "unit": "percent",
            "semantic": "percentage",
            "aggregation": "average"
          },
          {
            "key": "openDsrRequests",
            "label": "Open DSR requests",
            "description": "Data-subject requests that have not reached a terminal state.",
            "unit": "count",
            "semantic": "gauge",
            "aggregation": "last"
          }
        ],
        "seriesDefinitions": [
          {
            "key": "project_status",
            "label": "Projects by status",
            "metricKey": "projects",
            "unit": "count"
          },
          {
            "key": "decision_outcome",
            "label": "Consent decisions by outcome",
            "metricKey": "decisions7d",
            "unit": "count"
          }
        ],
        "dimensions": [
          {
            "key": "workspace",
            "label": "Workspace",
            "description": "Consent workspace represented by the metric.",
            "valueType": "string"
          },
          {
            "key": "privacy_measure",
            "label": "Privacy measure",
            "description": "Privacy operations measure represented by the value.",
            "valueType": "string"
          },
          {
            "key": "project_status",
            "label": "Project status",
            "description": "Current Consent project status.",
            "valueType": "string"
          },
          {
            "key": "decision_outcome",
            "label": "Decision outcome",
            "description": "Recorded consent decision outcome.",
            "valueType": "string"
          }
        ],
        "lifecycleStages": [
          {
            "key": "received",
            "label": "Received",
            "order": 1,
            "terminal": false
          },
          {
            "key": "in_review",
            "label": "In review",
            "order": 2,
            "terminal": false
          },
          {
            "key": "resolved",
            "label": "Resolved",
            "order": 3,
            "terminal": true
          }
        ],
        "events": [],
        "datasets": [
          {
            "id": "workspace_privacy_operations",
            "label": "Workspace privacy operations",
            "description": "Current Consent configuration, trailing seven-day decision outcomes, and open data-rights work for one selected workspace.",
            "grain": "One aggregate row per selected workspace and one point per current project status or seven-day decision outcome.",
            "metricKeys": [
              "projects",
              "activeProjects",
              "purposes",
              "decisions7d",
              "granted7d",
              "denied7d",
              "withdrawn7d",
              "unknown7d",
              "denialRate7d",
              "openDsrRequests"
            ],
            "seriesKeys": [
              "project_status",
              "decision_outcome"
            ],
            "dimensionKeys": [
              "workspace",
              "privacy_measure",
              "project_status",
              "decision_outcome"
            ],
            "eventKeys": [],
            "actionIds": [
              "create-project"
            ]
          }
        ],
        "compatibleVisualizations": [
          "number",
          "bar",
          "donut",
          "table",
          "actions"
        ],
        "defaultVisualization": "donut"
      },
      "metrics": [
        {
          "key": "projects",
          "label": "Projects",
          "value": 2,
          "unit": "count",
          "semantic": "gauge",
          "aggregation": "last",
          "period": {
            "start": "2026-10-21T01:00:00.000Z",
            "end": "2026-10-21T01:00:00.000Z",
            "timezone": "UTC"
          },
          "dimensions": [
            {
              "key": "workspace",
              "label": "Workspace",
              "value": "Fixture privacy workspace"
            },
            {
              "key": "privacy_measure",
              "label": "Privacy measure",
              "value": "projects"
            }
          ],
          "series": {
            "id": "project_status",
            "label": "Projects by status",
            "unit": "count",
            "points": [
              {
                "timestamp": "2026-10-21T01:00:00.000Z",
                "value": 1,
                "dimensions": [
                  {
                    "key": "workspace",
                    "label": "Workspace",
                    "value": "Fixture privacy workspace"
                  },
                  {
                    "key": "project_status",
                    "label": "Project status",
                    "value": "Active"
                  }
                ]
              },
              {
                "timestamp": "2026-10-21T01:00:00.000Z",
                "value": 1,
                "dimensions": [
                  {
                    "key": "workspace",
                    "label": "Workspace",
                    "value": "Fixture privacy workspace"
                  },
                  {
                    "key": "project_status",
                    "label": "Project status",
                    "value": "Inactive"
                  }
                ]
              }
            ]
          }
        },
        {
          "key": "activeProjects",
          "label": "Active projects",
          "value": 1,
          "unit": "count",
          "semantic": "gauge",
          "aggregation": "last",
          "period": {
            "start": "2026-10-21T01:00:00.000Z",
            "end": "2026-10-21T01:00:00.000Z",
            "timezone": "UTC"
          },
          "dimensions": [
            {
              "key": "workspace",
              "label": "Workspace",
              "value": "Fixture privacy workspace"
            },
            {
              "key": "privacy_measure",
              "label": "Privacy measure",
              "value": "activeProjects"
            }
          ]
        },
        {
          "key": "purposes",
          "label": "Configured purposes",
          "value": 6,
          "unit": "count",
          "semantic": "gauge",
          "aggregation": "last",
          "period": {
            "start": "2026-10-21T01:00:00.000Z",
            "end": "2026-10-21T01:00:00.000Z",
            "timezone": "UTC"
          },
          "dimensions": [
            {
              "key": "workspace",
              "label": "Workspace",
              "value": "Fixture privacy workspace"
            },
            {
              "key": "privacy_measure",
              "label": "Privacy measure",
              "value": "purposes"
            }
          ]
        },
        {
          "key": "decisions7d",
          "label": "Consent decisions in 7 days",
          "value": 10,
          "unit": "count",
          "semantic": "counter",
          "aggregation": "sum",
          "period": {
            "start": "2026-10-14T01:00:00.000Z",
            "end": "2026-10-21T01:00:00.000Z",
            "timezone": "UTC"
          },
          "dimensions": [
            {
              "key": "workspace",
              "label": "Workspace",
              "value": "Fixture privacy workspace"
            },
            {
              "key": "privacy_measure",
              "label": "Privacy measure",
              "value": "decisions7d"
            }
          ],
          "series": {
            "id": "decision_outcome",
            "label": "Consent decisions by outcome",
            "unit": "count",
            "points": [
              {
                "timestamp": "2026-10-21T01:00:00.000Z",
                "value": 6,
                "dimensions": [
                  {
                    "key": "workspace",
                    "label": "Workspace",
                    "value": "Fixture privacy workspace"
                  },
                  {
                    "key": "decision_outcome",
                    "label": "Decision outcome",
                    "value": "Granted"
                  }
                ]
              },
              {
                "timestamp": "2026-10-21T01:00:00.000Z",
                "value": 2,
                "dimensions": [
                  {
                    "key": "workspace",
                    "label": "Workspace",
                    "value": "Fixture privacy workspace"
                  },
                  {
                    "key": "decision_outcome",
                    "label": "Decision outcome",
                    "value": "Denied"
                  }
                ]
              },
              {
                "timestamp": "2026-10-21T01:00:00.000Z",
                "value": 1,
                "dimensions": [
                  {
                    "key": "workspace",
                    "label": "Workspace",
                    "value": "Fixture privacy workspace"
                  },
                  {
                    "key": "decision_outcome",
                    "label": "Decision outcome",
                    "value": "Withdrawn"
                  }
                ]
              },
              {
                "timestamp": "2026-10-21T01:00:00.000Z",
                "value": 1,
                "dimensions": [
                  {
                    "key": "workspace",
                    "label": "Workspace",
                    "value": "Fixture privacy workspace"
                  },
                  {
                    "key": "decision_outcome",
                    "label": "Decision outcome",
                    "value": "Unknown"
                  }
                ]
              }
            ]
          }
        },
        {
          "key": "granted7d",
          "label": "Granted in 7 days",
          "value": 6,
          "unit": "count",
          "semantic": "counter",
          "aggregation": "sum",
          "period": {
            "start": "2026-10-14T01:00:00.000Z",
            "end": "2026-10-21T01:00:00.000Z",
            "timezone": "UTC"
          },
          "dimensions": [
            {
              "key": "workspace",
              "label": "Workspace",
              "value": "Fixture privacy workspace"
            },
            {
              "key": "privacy_measure",
              "label": "Privacy measure",
              "value": "granted7d"
            }
          ]
        },
        {
          "key": "denied7d",
          "label": "Denied in 7 days",
          "value": 2,
          "unit": "count",
          "semantic": "counter",
          "aggregation": "sum",
          "period": {
            "start": "2026-10-14T01:00:00.000Z",
            "end": "2026-10-21T01:00:00.000Z",
            "timezone": "UTC"
          },
          "dimensions": [
            {
              "key": "workspace",
              "label": "Workspace",
              "value": "Fixture privacy workspace"
            },
            {
              "key": "privacy_measure",
              "label": "Privacy measure",
              "value": "denied7d"
            }
          ]
        },
        {
          "key": "withdrawn7d",
          "label": "Withdrawn in 7 days",
          "value": 1,
          "unit": "count",
          "semantic": "counter",
          "aggregation": "sum",
          "period": {
            "start": "2026-10-14T01:00:00.000Z",
            "end": "2026-10-21T01:00:00.000Z",
            "timezone": "UTC"
          },
          "dimensions": [
            {
              "key": "workspace",
              "label": "Workspace",
              "value": "Fixture privacy workspace"
            },
            {
              "key": "privacy_measure",
              "label": "Privacy measure",
              "value": "withdrawn7d"
            }
          ]
        },
        {
          "key": "unknown7d",
          "label": "Unknown in 7 days",
          "value": 1,
          "unit": "count",
          "semantic": "counter",
          "aggregation": "sum",
          "period": {
            "start": "2026-10-14T01:00:00.000Z",
            "end": "2026-10-21T01:00:00.000Z",
            "timezone": "UTC"
          },
          "dimensions": [
            {
              "key": "workspace",
              "label": "Workspace",
              "value": "Fixture privacy workspace"
            },
            {
              "key": "privacy_measure",
              "label": "Privacy measure",
              "value": "unknown7d"
            }
          ]
        },
        {
          "key": "denialRate7d",
          "label": "Denial rate",
          "value": 20,
          "unit": "percent",
          "semantic": "percentage",
          "aggregation": "average",
          "period": {
            "start": "2026-10-14T01:00:00.000Z",
            "end": "2026-10-21T01:00:00.000Z",
            "timezone": "UTC"
          },
          "dimensions": [
            {
              "key": "workspace",
              "label": "Workspace",
              "value": "Fixture privacy workspace"
            },
            {
              "key": "privacy_measure",
              "label": "Privacy measure",
              "value": "denialRate7d"
            }
          ]
        },
        {
          "key": "openDsrRequests",
          "label": "Open DSR requests",
          "value": 2,
          "unit": "count",
          "semantic": "gauge",
          "aggregation": "last",
          "period": {
            "start": "2026-10-21T01:00:00.000Z",
            "end": "2026-10-21T01:00:00.000Z",
            "timezone": "UTC"
          },
          "dimensions": [
            {
              "key": "workspace",
              "label": "Workspace",
              "value": "Fixture privacy workspace"
            },
            {
              "key": "privacy_measure",
              "label": "Privacy measure",
              "value": "openDsrRequests"
            }
          ]
        }
      ],
      "appId": "app_topolo_consent",
      "serviceName": "Consent",
      "lastUpdated": "2026-10-21T01:00:00.010Z"
    }
  ],
  "workspace": {
    "id": "ws_consent_docs_fixture",
    "name": "Fixture privacy workspace"
  },
  "workspaces": [
    {
      "id": "ws_consent_docs_fixture",
      "name": "Fixture privacy workspace",
      "isDefault": true
    }
  ]
}

Validate the actual response and workspace resource before interpreting counts. The create-project control is returned metadata, not an executable complete request or safe deletion rollback.

No accessible workspace yields a contract failure in the selected source

Complete source-derived synthetic, unrun HTTP 500 for an authenticated request with no accessible workspace. The app drafts empty controls but its contribution still references create-project and actions visualization. The exact published SDK rejects those references, and the shared wrapper returns this error. A build or database failure can also reach the same carrier, so this is not unique fault diagnosis or a captured production incident.

Input:

{}

Response:

{
  "success": false,
  "contractVersion": "3.0.0",
  "appId": "app_topolo_consent",
  "serviceName": "Consent",
  "generatedAt": "2026-10-21T01:00:00.010Z",
  "widgets": [],
  "error": {
    "code": "widget_contract_invalid",
    "message": "Widget contract invalid",
    "retryable": false
  }
}

Preserve the request id, selected context and error for the app owner. Do not create or select an unauthorized workspace, execute controls, or retry indefinitely. Source-serving state remains unknown.

Canonical app identity unavailable

Complete source-derived synthetic, unrun HTTP 503 when the wrapper cannot resolve a nonempty APP_ID. This is the selected wrapper’s plain error response, not the normal V3 success envelope. No runtime binding was changed or probed.

Input:

{}

Response:

{
  "error": "App identity unavailable"
}

Use the app owner to reconcile canonical application registration/configuration; changing the action input cannot provision its identity.

Verify the result

  1. Compare the actual returned appId, selected workspace id, widget.resource and requiredPermissions against the intended authorized context. Stop on fallback/mismatch; do not interpret another accessible workspace’s counts as the requested target.

  2. Validate successful JSON against the current action output schema and complete V3 semantics. Inspect status, observedAt, lastUpdated, periods and units; reconcile counts through supported authorized project/DSR/event readers where needed. Workspace lists, ready and zero counts are not completeness or policy-enforcement proof.

  3. Treat controls and drilldowns as discovery metadata. Open the separately published action guide, resolve real identifiers and required inputs, validate/plan and obtain applicable authority before a mutation. Do not use project deletion as a generic undo.

  4. On a 500 contract failure preserve request/context/error evidence for the owner. Missing workspace and database/build failures can share this carrier. Do not bypass permissions, repeat unchanged failures indefinitely or turn documentation review into real subject/scan operations.

Refusals

503 / App identity unavailable: Selected wrapper returns this error string when APP_ID resolution is empty or fails; refer actual request/context to the app owner.

500 / widget_contract_invalid: Selected V3 error has retryable:false; preserve evidence for the owner. Current no-workspace contribution and caught database/build errors can reach this carrier; no unique root cause follows.

401 / authentication_required: Published action metadata names this class; selected wrapper forwards auth middleware error and status. Reauthenticate through the supported original context; no specific captured carrier is asserted.

403 / permission_denied: Published action permission requires workspace:read and correct resource binding; preserve actual denial. Do not grant or broaden access solely to make a fixture succeed.

The successful output schema is not the schema of every non-success carrier. Use the actual HTTP status and published error evidence; no response was captured by these examples.

  • projects.list: Authorized project collection; its bounded limits differ from aggregate totals.
  • dsr_requests.list: Authorized bounded DSR collection, not a complete count substitute.
  • logs.list: Authorized bounded event read; event rows differ from unique visitor counts.
  • projects.configure: Separately confirmed creation requires actual project name/key; widget input alone is incomplete.
  • cookie_scanner.run: Separately authorized scan with external HTTP effects; reading this widget does not run it.

Change log

  • 2026-10-21: Added workspace/auth boundaries, metric semantics, exact published V3 wrapping, complete illustrative success and failure responses, and scoped empty-state/control caveats. All examples remain synthetic and unrun.