application · active
Topolo Support
Tenant-scoped support platform for Topolo internal operations and customer-organization ticket workflows, with support-owned workflow persistence kept outside Topolo Auth.
Documentation map
- Topolo Support — Public overview of the Topolo support platform for internal operations and customer-organization ticket workflows.
Authority and runtime
- System ID
topolo-support- App IDs
- app_topolo_support
- Owners
- support-operations, platform-experience
- Repositories
- apps/TopoloSupport
- Hosts
- https://support.topolo.app, https://support.stg.topolo.us
- Dependencies
- topolo-auth, topolo-nexus, applications-packages
Security and data ownership
- Risk tier
- high
- Tenant isolation
- mixed
- Privacy classification
- restricted
- Storage
- d1, external_provider
- Export and deletion
- planned
- Enterprise ready
- no
Source-derived capability inventory
Source revisions: apps/TopoloSupport@77105cf20c40ad714d45907641b33ea6a6dbdd04
Declared actions: 26 · API routes: 1 · UI routes: 6
{
"id": "topolo-support",
"name": "Topolo Support",
"slug": "topolo-support",
"kind": "application",
"visibility": "public",
"repo_paths": [
"apps/TopoloSupport"
],
"source_revisions": [
{
"source_path": "apps/TopoloSupport",
"repository": "apps/TopoloSupport",
"revision": "77105cf20c40ad714d45907641b33ea6a6dbdd04",
"ref": "origin/staging"
}
],
"source_counts": {
"source_files": 91,
"test_files": 56,
"test_cases": 0,
"migration_files": 14,
"database_tables": 0,
"manifests": 1,
"deploy_targets": 2,
"actions": 26,
"mobile_contracts": 1,
"notifications": 9,
"package_manifests": 1,
"deployment_configs": 0
},
"manifests": [
{
"source_path": "apps/TopoloSupport/topolo.app.json",
"service_slug": "topolo-support",
"name": "topolo-support",
"app_id": "app_topolo_support",
"compatibility_date": "2026-04-10",
"primary_target": "web",
"environments": [
"development",
"production",
"staging"
],
"targets": [
{
"name": "api",
"kind": "worker",
"directory": "apps/api",
"main": "src/worker.ts",
"worker_name": "topolo-support-api",
"subdomain": null,
"healthcheck_path": "/api/health",
"variable_names": [
"AUTH_API_URL",
"ENVIRONMENT",
"NEXUS_GATEWAY_URL",
"SUPPORT_PUBLIC_BASE_URL",
"TOPOLO_NEXUS_API_URL",
"TOPOLO_NOTIFY_URL",
"TOPOLO_SEED_APP_ID"
],
"secret_names": [],
"bindings": [
{
"kind": "d1",
"binding": "SUPPORT_CORE_DB",
"target": null
},
{
"kind": "d1",
"binding": "SUPPORT_DB",
"target": null
},
{
"kind": "d1",
"binding": "SUPPORT_INGEST_DB",
"target": null
},
{
"kind": "d1",
"binding": "SUPPORT_OUTBOX_DB",
"target": null
},
{
"kind": "secretsStore",
"binding": "PLATFORM_AT_REST_MASTER_ENCRYPTION_KEY_STORE",
"target": null
},
{
"kind": "secretsStore",
"binding": "PLATFORM_AT_REST_MASTER_ENCRYPTION_KEY_PREVIOUS_STORE",
"target": null
}
]
},
{
"name": "web",
"kind": "worker",
"directory": "apps/web",
"main": "src/worker.ts",
"worker_name": "topolo-support",
"subdomain": null,
"healthcheck_path": "/api/health",
"variable_names": [
"INSIGHTS_SITE_KEY"
],
"secret_names": [],
"bindings": [
{
"kind": "services",
"binding": "API",
"target": null
},
{
"kind": "services",
"binding": "API",
"target": null
},
{
"kind": "services",
"binding": "API",
"target": null
}
]
}
],
"notifications": [
"support.customer_reply.received",
"support.notification.delivery_failed",
"support.sla.breached",
"support.sla.warning",
"support.ticket.assigned",
"support.ticket.created",
"support.ticket.escalated",
"support.ticket.reopened",
"support.ticket.resolved"
],
"notification_contract": {
"source_path": "topolo.notification-contracts.json",
"role": "producer",
"schema_version": 1,
"owner_app_id": "app_topolo_support",
"events": [
{
"type": "support.customer_reply.received",
"version": 1,
"description": "Support recorded the durable customer reply received transition.",
"status": "published",
"payloadSchema": {
"type": "object",
"required": [
"title",
"body",
"object_id",
"occurred_at"
],
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
},
"recipient_email": {
"type": "string",
"format": "email"
},
"category": {
"type": "string"
},
"severity": {
"enum": [
"info",
"success",
"warning",
"critical"
]
},
"object_type": {
"type": "string"
},
"object_id": {
"type": "string",
"minLength": 1
},
"cta_url": {
"type": "string",
"format": "uri"
},
"cta_label": {
"type": "string"
},
"occurred_at": {
"type": "string",
"format": "date-time"
},
"actor_id": {
"type": "string"
}
},
"additionalProperties": true
},
"examples": [
{
"title": "Requester replied: Login issue",
"body": "The requester added a public reply.",
"recipient_email": "agent@example.com",
"object_id": "ticket_123",
"occurred_at": "2026-07-17T12:00:00.000Z"
}
],
"dataClassification": "confidential",
"sensitiveFields": [
"recipient_email",
"body"
],
"recipients": {
"modes": [
"organization_member",
"external"
],
"externalAddress": "optional"
},
"idempotency": {
"required": true,
"pattern": "^support:outbox:"
}
},
{
"type": "support.notification.delivery_failed",
"version": 1,
"description": "A persisted Support outbox delivery exhausted its retry budget.",
"status": "published",
"payloadSchema": {
"type": "object",
"required": [
"title",
"body",
"ticket_id",
"ticket_subject",
"surface",
"priority",
"severity",
"category",
"object_type",
"object_id",
"cta_url",
"cta_label",
"occurred_at",
"failure_reason",
"delivery_id"
],
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
},
"ticket_id": {
"type": "string",
"minLength": 1
},
"ticket_subject": {
"type": "string",
"minLength": 1
},
"surface": {
"const": "action"
},
"priority": {
"const": "high"
},
"severity": {
"const": "warning"
},
"category": {
"const": "support"
},
"object_type": {
"const": "support_notification"
},
"object_id": {
"type": "string",
"minLength": 1
},
"cta_url": {
"type": "string",
"format": "uri"
},
"cta_label": {
"type": "string",
"minLength": 1
},
"occurred_at": {
"type": "string",
"format": "date-time"
},
"failure_reason": {
"type": "string",
"minLength": 1
},
"delivery_id": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
"examples": [
{
"title": "Support notification failed: Login issue",
"body": "A ticket notification exhausted its delivery retries.",
"ticket_id": "ticket_123",
"ticket_subject": "Login issue",
"surface": "action",
"priority": "high",
"severity": "warning",
"category": "support",
"object_type": "support_notification",
"object_id": "delivery_123",
"cta_url": "https://support.topolo.app/tickets/ticket_123",
"cta_label": "Open ticket",
"occurred_at": "2026-07-20T12:00:00.000Z",
"failure_reason": "retry limit reached",
"delivery_id": "delivery_123"
}
],
"dataClassification": "confidential",
"sensitiveFields": [
"body",
"ticket_subject",
"failure_reason"
],
"recipients": {
"modes": [
"organization_member"
],
"externalAddress": "forbidden"
},
"idempotency": {
"required": true,
"pattern": "^support:delivery:"
}
},
{
"type": "support.sla.breached",
"version": 1,
"description": "A persisted unresolved Support ticket crossed its priority-based SLA deadline.",
"status": "published",
"payloadSchema": {
"type": "object",
"required": [
"title",
"body",
"ticket_id",
"ticket_subject",
"surface",
"priority",
"severity",
"category",
"object_type",
"object_id",
"cta_url",
"cta_label",
"occurred_at",
"metric",
"due_at"
],
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
},
"ticket_id": {
"type": "string",
"minLength": 1
},
"ticket_subject": {
"type": "string",
"minLength": 1
},
"surface": {
"const": "action"
},
"priority": {
"const": "urgent"
},
"severity": {
"const": "critical"
},
"category": {
"const": "support"
},
"object_type": {
"const": "support_sla"
},
"object_id": {
"type": "string",
"minLength": 1
},
"cta_url": {
"type": "string",
"format": "uri"
},
"cta_label": {
"type": "string",
"minLength": 1
},
"occurred_at": {
"type": "string",
"format": "date-time"
},
"metric": {
"enum": [
"first_response",
"resolution"
]
},
"due_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"examples": [
{
"title": "SLA breached: Login issue",
"body": "First response is breached.",
"ticket_id": "ticket_123",
"ticket_subject": "Login issue",
"surface": "action",
"priority": "urgent",
"severity": "critical",
"category": "support",
"object_type": "support_sla",
"object_id": "ticket_123:first_response:2026-07-20T12:00:00.000Z",
"cta_url": "https://support.topolo.app/tickets/ticket_123",
"cta_label": "Open ticket",
"occurred_at": "2026-07-20T12:01:00.000Z",
"metric": "first_response",
"due_at": "2026-07-20T12:00:00.000Z"
}
],
"dataClassification": "confidential",
"sensitiveFields": [
"body",
"ticket_subject"
],
"recipients": {
"modes": [
"organization_member"
],
"externalAddress": "forbidden"
},
"idempotency": {
"required": true,
"pattern": "^support:sla:"
}
},
{
"type": "support.sla.warning",
"version": 1,
"description": "A persisted unresolved Support ticket entered its SLA warning window.",
"status": "published",
"payloadSchema": {
"type": "object",
"required": [
"title",
"body",
"ticket_id",
"ticket_subject",
"surface",
"priority",
"severity",
"category",
"object_type",
"object_id",
"cta_url",
"cta_label",
"occurred_at",
"metric",
"due_at"
],
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
},
"ticket_id": {
"type": "string",
"minLength": 1
},
"ticket_subject": {
"type": "string",
"minLength": 1
},
"surface": {
"const": "action"
},
"priority": {
"const": "high"
},
"severity": {
"const": "warning"
},
"category": {
"const": "support"
},
"object_type": {
"const": "support_sla"
},
"object_id": {
"type": "string",
"minLength": 1
},
"cta_url": {
"type": "string",
"format": "uri"
},
"cta_label": {
"type": "string",
"minLength": 1
},
"occurred_at": {
"type": "string",
"format": "date-time"
},
"metric": {
"enum": [
"first_response",
"resolution"
]
},
"due_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
},
"examples": [
{
"title": "SLA warning: Login issue",
"body": "Resolution is warning.",
"ticket_id": "ticket_123",
"ticket_subject": "Login issue",
"surface": "action",
"priority": "high",
"severity": "warning",
"category": "support",
"object_type": "support_sla",
"object_id": "ticket_123:resolution:2026-07-20T16:00:00.000Z",
"cta_url": "https://support.topolo.app/tickets/ticket_123",
"cta_label": "Open ticket",
"occurred_at": "2026-07-20T12:00:00.000Z",
"metric": "resolution",
"due_at": "2026-07-20T16:00:00.000Z"
}
],
"dataClassification": "confidential",
"sensitiveFields": [
"body",
"ticket_subject"
],
"recipients": {
"modes": [
"organization_member"
],
"externalAddress": "forbidden"
},
"idempotency": {
"required": true,
"pattern": "^support:sla:"
}
},
{
"type": "support.ticket.assigned",
"version": 1,
"description": "A support ticket was assigned to an organization member.",
"status": "published",
"payloadSchema": {
"type": "object",
"required": [
"title",
"body",
"object_id",
"occurred_at"
],
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
},
"surface": {
"enum": [
"notification",
"action"
]
},
"action_kind": {
"enum": [
"open",
"review",
"approve",
"resolve",
"complete"
]
},
"action_status": {
"type": "string"
},
"priority": {
"enum": [
"low",
"normal",
"high",
"urgent"
]
},
"cta_url": {
"type": "string",
"format": "uri"
},
"cta_label": {
"type": "string"
},
"category": {
"type": "string"
},
"severity": {
"enum": [
"info",
"success",
"warning",
"critical"
]
},
"object_type": {
"type": "string"
},
"object_id": {
"type": "string",
"minLength": 1
},
"occurred_at": {
"type": "string",
"format": "date-time"
},
"actor_id": {
"type": "string"
},
"actor_display_name": {
"type": "string"
},
"recipient_email": {
"type": "string",
"format": "email"
},
"thread_key": {
"type": "string"
},
"expires_at": {
"type": "string",
"format": "date-time"
},
"action_context": {
"type": "object"
}
},
"additionalProperties": true
},
"examples": [
{
"title": "A support ticket was assigned to an organization member.",
"body": "Open the owning app to review this event.",
"object_id": "object_123",
"occurred_at": "2026-07-17T00:00:00.000Z"
}
],
"dataClassification": "internal",
"recipients": {
"modes": [
"organization_member",
"external"
],
"externalAddress": "optional"
},
"idempotency": {
"required": true,
"pattern": "^support:ticket-assigned:"
},
"sensitiveFields": [
"recipient_email",
"body"
]
},
{
"type": "support.ticket.created",
"version": 1,
"description": "Support recorded the durable ticket created transition.",
"status": "published",
"payloadSchema": {
"type": "object",
"required": [
"title",
"body",
"object_id",
"occurred_at"
],
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
},
"recipient_email": {
"type": "string",
"format": "email"
},
"category": {
"type": "string"
},
"severity": {
"enum": [
"info",
"success",
"warning",
"critical"
]
},
"object_type": {
"type": "string"
},
"object_id": {
"type": "string",
"minLength": 1
},
"cta_url": {
"type": "string",
"format": "uri"
},
"cta_label": {
"type": "string"
},
"occurred_at": {
"type": "string",
"format": "date-time"
},
"actor_id": {
"type": "string"
}
},
"additionalProperties": true
},
"examples": [
{
"title": "Ticket received: Login issue",
"body": "We received your support request.",
"recipient_email": "requester@example.com",
"object_id": "ticket_123",
"occurred_at": "2026-07-17T12:00:00.000Z"
}
],
"dataClassification": "confidential",
"sensitiveFields": [
"recipient_email",
"body"
],
"recipients": {
"modes": [
"organization_member",
"external"
],
"externalAddress": "optional"
},
"idempotency": {
"required": true,
"pattern": "^support:outbox:"
}
},
{
"type": "support.ticket.escalated",
"version": 1,
"description": "A persisted Support workflow event moved a ticket to urgent priority.",
"status": "published",
"payloadSchema": {
"type": "object",
"required": [
"title",
"body",
"ticket_id",
"ticket_subject",
"surface",
"priority",
"severity",
"category",
"object_type",
"object_id",
"cta_url",
"cta_label",
"occurred_at"
],
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
},
"ticket_id": {
"type": "string",
"minLength": 1
},
"ticket_subject": {
"type": "string",
"minLength": 1
},
"surface": {
"const": "action"
},
"priority": {
"const": "urgent"
},
"severity": {
"const": "critical"
},
"category": {
"const": "support"
},
"object_type": {
"const": "ticket"
},
"object_id": {
"type": "string",
"minLength": 1
},
"cta_url": {
"type": "string",
"format": "uri"
},
"cta_label": {
"type": "string",
"minLength": 1
},
"occurred_at": {
"type": "string",
"format": "date-time"
},
"actor_id": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
"examples": [
{
"title": "Urgent ticket: Login issue",
"body": "This ticket was escalated to urgent priority.",
"ticket_id": "ticket_123",
"ticket_subject": "Login issue",
"surface": "action",
"priority": "urgent",
"severity": "critical",
"category": "support",
"object_type": "ticket",
"object_id": "ticket_123",
"cta_url": "https://support.topolo.app/tickets/ticket_123",
"cta_label": "Open ticket",
"occurred_at": "2026-07-20T12:00:00.000Z",
"actor_id": "user_123"
}
],
"dataClassification": "confidential",
"sensitiveFields": [
"body",
"ticket_subject"
],
"recipients": {
"modes": [
"organization_member"
],
"externalAddress": "forbidden"
},
"idempotency": {
"required": true,
"pattern": "^support:ticket-event:"
}
},
{
"type": "support.ticket.reopened",
"version": 1,
"description": "A persisted Support workflow event reopened a resolved or closed ticket.",
"status": "published",
"payloadSchema": {
"type": "object",
"required": [
"title",
"body",
"ticket_id",
"ticket_subject",
"surface",
"priority",
"severity",
"category",
"object_type",
"object_id",
"cta_url",
"cta_label",
"occurred_at"
],
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
},
"ticket_id": {
"type": "string",
"minLength": 1
},
"ticket_subject": {
"type": "string",
"minLength": 1
},
"surface": {
"const": "action"
},
"priority": {
"enum": [
"high",
"urgent"
]
},
"severity": {
"const": "warning"
},
"category": {
"const": "support"
},
"object_type": {
"const": "ticket"
},
"object_id": {
"type": "string",
"minLength": 1
},
"cta_url": {
"type": "string",
"format": "uri"
},
"cta_label": {
"type": "string",
"minLength": 1
},
"occurred_at": {
"type": "string",
"format": "date-time"
},
"actor_id": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
"examples": [
{
"title": "Ticket reopened: Login issue",
"body": "A resolved ticket was reopened and needs attention.",
"ticket_id": "ticket_123",
"ticket_subject": "Login issue",
"surface": "action",
"priority": "high",
"severity": "warning",
"category": "support",
"object_type": "ticket",
"object_id": "ticket_123",
"cta_url": "https://support.topolo.app/tickets/ticket_123",
"cta_label": "Open ticket",
"occurred_at": "2026-07-20T12:00:00.000Z",
"actor_id": "user_123"
}
],
"dataClassification": "confidential",
"sensitiveFields": [
"body",
"ticket_subject"
],
"recipients": {
"modes": [
"organization_member"
],
"externalAddress": "forbidden"
},
"idempotency": {
"required": true,
"pattern": "^support:ticket-event:"
}
},
{
"type": "support.ticket.resolved",
"version": 1,
"description": "A persisted Support workflow event marked a ticket resolved.",
"status": "published",
"payloadSchema": {
"type": "object",
"required": [
"title",
"body",
"ticket_id",
"ticket_subject",
"surface",
"priority",
"severity",
"category",
"object_type",
"object_id",
"cta_url",
"cta_label",
"occurred_at"
],
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
},
"ticket_id": {
"type": "string",
"minLength": 1
},
"ticket_subject": {
"type": "string",
"minLength": 1
},
"surface": {
"const": "notification"
},
"priority": {
"const": "normal"
},
"severity": {
"const": "success"
},
"category": {
"const": "support"
},
"object_type": {
"const": "ticket"
},
"object_id": {
"type": "string",
"minLength": 1
},
"cta_url": {
"type": "string",
"format": "uri"
},
"cta_label": {
"type": "string",
"minLength": 1
},
"occurred_at": {
"type": "string",
"format": "date-time"
},
"actor_id": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
"examples": [
{
"title": "Ticket resolved: Login issue",
"body": "This ticket was marked resolved.",
"ticket_id": "ticket_123",
"ticket_subject": "Login issue",
"surface": "notification",
"priority": "normal",
"severity": "success",
"category": "support",
"object_type": "ticket",
"object_id": "ticket_123",
"cta_url": "https://support.topolo.app/tickets/ticket_123",
"cta_label": "Open ticket",
"occurred_at": "2026-07-20T12:00:00.000Z",
"actor_id": "user_123"
}
],
"dataClassification": "confidential",
"sensitiveFields": [
"body",
"ticket_subject"
],
"recipients": {
"modes": [
"organization_member"
],
"externalAddress": "forbidden"
},
"idempotency": {
"required": true,
"pattern": "^support:ticket-event:"
}
}
]
},
"actions": [
{
"name": "widget.get",
"title": "Get widget summary",
"description": "Get the TopoloOne widget summary for this service.",
"method": "GET",
"path": "/api/widget",
"permission": "tickets: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-support --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": "declared_unserved",
"route_key": "GET /api/widget",
"evidence": "No matching served route was extracted from canonical staging source."
}
},
{
"name": "workspaces.delete",
"title": "Delete support workspace",
"description": "Delete an empty non-default support workspace.",
"method": "DELETE",
"path": "/api/support/workspace/{workspaceId}",
"permission": "workspace:delete",
"authorizationMode": "static",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"minLength": 1
}
},
"required": [
"workspaceId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": true,
"agentAccess": "confirm",
"documentation": {
"example_input": {
"workspaceId": "example"
},
"cli_example": [
"topolo actions --service topolo-support --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/support/workspace/example",
"body": null
},
"effects": "May change state through DELETE /api/support/workspace/{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/support/workspace/*",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "inboxes.create",
"title": "Create support inbox",
"description": "Create an inbox in a support workspace.",
"method": "POST",
"path": "/api/support/workspace/{workspaceId}/inboxes",
"permission": "tickets:write",
"authorizationMode": "static",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"minLength": 1
},
"name": {
"type": "string",
"minLength": 2
},
"slug": {
"type": "string",
"minLength": 1
},
"channel": {
"type": "string",
"enum": [
"portal",
"api",
"email",
"webhook",
"widget",
"messaging",
"manual"
]
},
"isDefault": {
"type": "boolean"
}
},
"required": [
"workspaceId",
"name"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"agentAccess": "confirm",
"documentation": {
"example_input": {
"workspaceId": "example",
"name": "example"
},
"cli_example": [
"topolo actions --service topolo-support --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": "/api/support/workspace/example/inboxes",
"body": {
"workspaceId": "example",
"name": "example"
}
},
"effects": "May change state through POST /api/support/workspace/{workspaceId}/inboxes. 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 /api/support/workspace/*/inboxes",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "inboxes.update",
"title": "Update support inbox",
"description": "Update an inbox in a support workspace.",
"method": "PATCH",
"path": "/api/support/workspace/{workspaceId}/inboxes/{inboxId}",
"permission": "tickets:write",
"authorizationMode": "static",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"minLength": 1
},
"inboxId": {
"type": "string",
"minLength": 1
},
"name": {
"type": "string",
"minLength": 2
},
"slug": {
"type": "string",
"minLength": 1
},
"channel": {
"type": "string",
"enum": [
"portal",
"api",
"email",
"webhook",
"widget",
"messaging",
"manual"
]
},
"isDefault": {
"type": "boolean"
},
"isActive": {
"type": "boolean"
}
},
"required": [
"workspaceId",
"inboxId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"agentAccess": "confirm",
"documentation": {
"example_input": {
"workspaceId": "example",
"inboxId": "example"
},
"cli_example": [
"topolo actions --service topolo-support --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": "PATCH",
"path": "/api/support/workspace/example/inboxes/example",
"body": {
"workspaceId": "example",
"inboxId": "example"
}
},
"effects": "May change state through PATCH /api/support/workspace/{workspaceId}/inboxes/{inboxId}. 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": "PATCH /api/support/workspace/*/inboxes/*",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "tickets.list",
"title": "List tickets",
"description": "List support tickets.",
"method": "GET",
"path": "/api/support/tickets",
"permission": "tickets:read",
"authorizationMode": "static",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by List tickets.",
"additionalProperties": true
},
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"documentation": {
"example_input": {
"workspaceId": "example"
},
"cli_example": [
"topolo actions --service topolo-support --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/support/tickets",
"body": null
},
"effects": "Reads state through GET /api/support/tickets 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/support/tickets",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "tickets.create",
"title": "Create ticket",
"description": "Create a support ticket.",
"method": "POST",
"path": "/api/support/tickets",
"permission": "tickets:write",
"authorizationMode": "static",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"minLength": 1
},
"inboxId": {
"type": "string",
"minLength": 1
},
"subject": {
"type": "string",
"minLength": 1
},
"description": {
"type": "string",
"minLength": 1
},
"serviceName": {
"type": "string",
"minLength": 1
},
"appId": {
"type": "string",
"minLength": 1
},
"priority": {
"type": "string",
"minLength": 1
},
"category": {
"type": "string",
"minLength": 1
},
"requesterName": {
"type": "string",
"minLength": 1
},
"requesterEmail": {
"type": "string",
"minLength": 1
},
"requesterUserId": {
"type": "string",
"minLength": 1
},
"requesterOrgId": {
"type": "string",
"minLength": 1
},
"source": {
"type": "string",
"minLength": 1
},
"sourceReference": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Create ticket.",
"additionalProperties": true
},
"destructive": false,
"agentAccess": "confirm",
"documentation": {
"example_input": {
"workspaceId": "example",
"inboxId": "example",
"subject": "example"
},
"cli_example": [
"topolo actions --service topolo-support --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": "/api/support/tickets",
"body": {
"workspaceId": "example",
"inboxId": "example",
"subject": "example"
}
},
"effects": "May change state through POST /api/support/tickets. 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 /api/support/tickets",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "tickets.get",
"title": "Get ticket",
"description": "Get one support ticket.",
"method": "GET",
"path": "/api/support/tickets/{ticketId}",
"permission": "tickets:read",
"authorizationMode": "static",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"minLength": 1
},
"workspaceId": {
"type": "string",
"minLength": 1
}
},
"required": [
"ticketId"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Get ticket.",
"additionalProperties": true
},
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"documentation": {
"example_input": {
"ticketId": "example"
},
"cli_example": [
"topolo actions --service topolo-support --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/support/tickets/example",
"body": null
},
"effects": "Reads state through GET /api/support/tickets/{ticketId} 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/support/tickets/*",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "tickets.update",
"title": "Update ticket",
"description": "Update one support ticket.",
"method": "PATCH",
"path": "/api/support/tickets/{ticketId}",
"permission": "tickets:write",
"authorizationMode": "static",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"minLength": 1
},
"status": {
"type": "string",
"minLength": 1
},
"priority": {
"type": "string",
"minLength": 1
},
"category": {
"type": "string",
"minLength": 1
},
"assignedToUserId": {
"type": "string",
"minLength": 1
},
"assignedToName": {
"type": "string",
"minLength": 1
},
"assignedToEmail": {
"type": "string",
"minLength": 1
}
},
"required": [
"ticketId"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Update ticket.",
"additionalProperties": true
},
"destructive": false,
"agentAccess": "confirm",
"documentation": {
"example_input": {
"ticketId": "example"
},
"cli_example": [
"topolo actions --service topolo-support --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": "PATCH",
"path": "/api/support/tickets/example",
"body": {
"ticketId": "example"
}
},
"effects": "May change state through PATCH /api/support/tickets/{ticketId}. 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": "PATCH /api/support/tickets/*",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "ticket_messages.create",
"title": "Create ticket message",
"description": "Add a message to a support ticket.",
"method": "POST",
"path": "/api/support/tickets/{ticketId}/messages",
"permission": "tickets:write",
"authorizationMode": "static",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
},
"visibility": {
"type": "string",
"minLength": 1
},
"channel": {
"type": "string",
"minLength": 1
},
"sourceReference": {
"type": "string",
"minLength": 1
},
"macroId": {
"type": "string",
"minLength": 1
}
},
"required": [
"ticketId"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Create ticket message.",
"additionalProperties": true
},
"destructive": false,
"agentAccess": "confirm",
"documentation": {
"example_input": {
"ticketId": "example"
},
"cli_example": [
"topolo actions --service topolo-support --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": "/api/support/tickets/example/messages",
"body": {
"ticketId": "example"
}
},
"effects": "May change state through POST /api/support/tickets/{ticketId}/messages. 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 /api/support/tickets/*/messages",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "macros.list",
"title": "List macros",
"description": "List support macros.",
"method": "GET",
"path": "/api/support/macros",
"permission": "macros:read",
"authorizationMode": "static",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by List macros.",
"additionalProperties": true
},
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"documentation": {
"example_input": {
"workspaceId": "example"
},
"cli_example": [
"topolo actions --service topolo-support --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/support/macros",
"body": null
},
"effects": "Reads state through GET /api/support/macros 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/support/macros",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "macros.get",
"title": "Get macro",
"description": "Get one support macro.",
"method": "GET",
"path": "/api/support/macros/{macroId}",
"permission": "macros:read",
"authorizationMode": "static",
"readOnly": true,
"inputSchema": {
"type": "object",
"properties": {
"macroId": {
"type": "string",
"minLength": 1
},
"workspaceId": {
"type": "string",
"minLength": 1
}
},
"required": [
"macroId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"documentation": {
"example_input": {
"macroId": "example"
},
"cli_example": [
"topolo actions --service topolo-support --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/support/macros/example",
"body": null
},
"effects": "Reads state through GET /api/support/macros/{macroId} 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/support/macros/*",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "macros.create",
"title": "Create macro",
"description": "Create a support macro.",
"method": "POST",
"path": "/api/support/macros",
"permission": "macros:write",
"authorizationMode": "static",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"minLength": 1
},
"title": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
},
"visibility": {
"type": "string",
"minLength": 1
},
"suggestedStatus": {
"type": "string",
"minLength": 1
},
"suggestedPriority": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Create macro.",
"additionalProperties": true
},
"destructive": false,
"agentAccess": "confirm",
"documentation": {
"example_input": {
"workspaceId": "example",
"title": "example",
"body": "example"
},
"cli_example": [
"topolo actions --service topolo-support --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": "/api/support/macros",
"body": {
"workspaceId": "example",
"title": "example",
"body": "example"
}
},
"effects": "May change state through POST /api/support/macros. 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 /api/support/macros",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "operations.get",
"title": "Get operations overview",
"description": "Get support routing, triage, agent capacity, and queue analytics.",
"method": "GET",
"path": "/api/support/operations",
"permission": "tickets:write",
"authorizationMode": "static",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Get operations overview.",
"additionalProperties": true
},
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"documentation": {
"example_input": {
"workspaceId": "example"
},
"cli_example": [
"topolo actions --service topolo-support --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/support/operations",
"body": null
},
"effects": "Reads state through GET /api/support/operations 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/support/operations",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "operations.section.get",
"title": "Get operations section",
"description": "Get one support operations section.",
"method": "GET",
"path": "/api/support/operations/{section}",
"permission": "tickets:write",
"authorizationMode": "static",
"readOnly": true,
"inputSchema": {
"type": "object",
"properties": {
"section": {
"type": "string",
"enum": [
"overview",
"workspaces",
"settings",
"agents",
"routing",
"channels",
"intelligence"
]
},
"workspaceId": {
"type": "string",
"minLength": 1
}
},
"required": [
"section"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"documentation": {
"example_input": {
"section": "overview"
},
"cli_example": [
"topolo actions --service topolo-support --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/support/operations/overview",
"body": null
},
"effects": "Reads state through GET /api/support/operations/{section} 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/support/operations/*",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "operations.settings.update",
"title": "Update operations settings",
"description": "Update support workspace assignment, triage, CSAT, timezone, and business-hour settings.",
"method": "PATCH",
"path": "/api/support/operations/settings",
"permission": "tickets:write",
"authorizationMode": "static",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"minLength": 1
},
"timezone": {
"type": "string",
"minLength": 1
},
"businessHours": {
"type": "string"
},
"autoAssignmentEnabled": {
"type": "boolean"
},
"aiTriageEnabled": {
"type": "boolean"
},
"csatEnabled": {
"type": "boolean"
}
},
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Update operations settings.",
"additionalProperties": true
},
"destructive": false,
"agentAccess": "confirm",
"documentation": {
"example_input": {
"workspaceId": "example",
"timezone": "example",
"businessHours": "example"
},
"cli_example": [
"topolo actions --service topolo-support --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": "PATCH",
"path": "/api/support/operations/settings",
"body": {
"workspaceId": "example",
"timezone": "example",
"businessHours": "example"
}
},
"effects": "May change state through PATCH /api/support/operations/settings. 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": "PATCH /api/support/operations/settings",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "operations.agents.update",
"title": "Update support agent profile",
"description": "Update a support agent status, capacity, skills, or active state.",
"method": "PATCH",
"path": "/api/support/operations/agents/{agentId}",
"permission": "tickets:write",
"authorizationMode": "static",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"agentId": {
"type": "string",
"minLength": 1
},
"workspaceId": {
"type": "string",
"minLength": 1
},
"status": {
"type": "string",
"minLength": 1
},
"maxCapacity": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"skills": {
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"isActive": {
"type": "boolean"
}
},
"required": [
"agentId"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Update support agent profile.",
"additionalProperties": true
},
"destructive": false,
"agentAccess": "confirm",
"documentation": {
"example_input": {
"agentId": "example"
},
"cli_example": [
"topolo actions --service topolo-support --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": "PATCH",
"path": "/api/support/operations/agents/example",
"body": {
"agentId": "example"
}
},
"effects": "May change state through PATCH /api/support/operations/agents/{agentId}. 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": "PATCH /api/support/operations/agents/*",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "operations.routing_rules.create",
"title": "Create routing rule",
"description": "Create a support routing rule for ticket assignment.",
"method": "POST",
"path": "/api/support/operations/routing-rules",
"permission": "tickets:write",
"authorizationMode": "static",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"minLength": 1
},
"name": {
"type": "string",
"minLength": 1
},
"priorityOrder": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"matchSource": {
"type": "string"
},
"matchCategory": {
"type": "string"
},
"matchPriority": {
"type": "string"
},
"targetInboxId": {
"type": "string"
},
"requiredSkills": {
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"isActive": {
"type": "boolean"
}
},
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Create routing rule.",
"additionalProperties": true
},
"destructive": false,
"agentAccess": "confirm",
"documentation": {
"example_input": {
"workspaceId": "example",
"name": "example",
"priorityOrder": 1
},
"cli_example": [
"topolo actions --service topolo-support --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": "/api/support/operations/routing-rules",
"body": {
"workspaceId": "example",
"name": "example",
"priorityOrder": 1
}
},
"effects": "May change state through POST /api/support/operations/routing-rules. 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 /api/support/operations/routing-rules",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "operations.routing_rules.update",
"title": "Update routing rule",
"description": "Update a support routing rule for ticket assignment.",
"method": "PATCH",
"path": "/api/support/operations/routing-rules/{ruleId}",
"permission": "tickets:write",
"authorizationMode": "static",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"ruleId": {
"type": "string",
"minLength": 1
},
"workspaceId": {
"type": "string",
"minLength": 1
},
"name": {
"type": "string",
"minLength": 1
},
"priorityOrder": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"matchSource": {
"type": "string"
},
"matchCategory": {
"type": "string"
},
"matchPriority": {
"type": "string"
},
"targetInboxId": {
"type": "string"
},
"requiredSkills": {
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"isActive": {
"type": "boolean"
}
},
"required": [
"ruleId"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Update routing rule.",
"additionalProperties": true
},
"destructive": false,
"agentAccess": "confirm",
"documentation": {
"example_input": {
"ruleId": "example"
},
"cli_example": [
"topolo actions --service topolo-support --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": "PATCH",
"path": "/api/support/operations/routing-rules/example",
"body": {
"ruleId": "example"
}
},
"effects": "May change state through PATCH /api/support/operations/routing-rules/{ruleId}. 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": "PATCH /api/support/operations/routing-rules/*",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "operations.channel_connections.create",
"title": "Connect support mailbox channel",
"description": "Connect an IMAP mailbox to a support inbox through Nexus-managed mailbox credentials.",
"method": "POST",
"path": "/api/support/operations/channel-connections",
"permission": "tickets:write",
"authorizationMode": "static",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"minLength": 1
},
"inboxId": {
"type": "string",
"minLength": 1
},
"provider": {
"type": "string",
"minLength": 1
},
"displayName": {
"type": "string"
},
"authUsername": {
"type": "string",
"minLength": 1
},
"authPassword": {
"type": "string",
"minLength": 1
},
"imapHost": {
"type": "string",
"minLength": 1
},
"imapPort": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"imapSecure": {
"type": "boolean"
},
"smtpHost": {
"type": "string",
"minLength": 1
},
"smtpPort": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"smtpSecure": {
"type": "boolean"
}
},
"required": [
"inboxId",
"authUsername",
"authPassword",
"imapHost",
"smtpHost"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Connect support mailbox channel.",
"additionalProperties": true
},
"destructive": false,
"agentAccess": "confirm",
"documentation": {
"example_input": {
"inboxId": "example",
"authUsername": "example",
"authPassword": "example",
"imapHost": "example",
"smtpHost": "example"
},
"cli_example": [
"topolo actions --service topolo-support --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": "/api/support/operations/channel-connections",
"body": {
"inboxId": "example",
"authUsername": "example",
"authPassword": "example",
"imapHost": "example",
"smtpHost": "example"
}
},
"effects": "May change state through POST /api/support/operations/channel-connections. 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 /api/support/operations/channel-connections",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "operations.channel_connections.sync",
"title": "Sync support mailbox channel",
"description": "Fetch new IMAP messages from a connected support mailbox channel.",
"method": "POST",
"path": "/api/support/operations/channel-connections/{connectionId}/sync",
"permission": "tickets:write",
"authorizationMode": "static",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"connectionId": {
"type": "string",
"minLength": 1
},
"workspaceId": {
"type": "string",
"minLength": 1
},
"limit": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"connectionId"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Sync support mailbox channel.",
"additionalProperties": true
},
"destructive": false,
"agentAccess": "confirm",
"documentation": {
"example_input": {
"connectionId": "example"
},
"cli_example": [
"topolo actions --service topolo-support --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": "/api/support/operations/channel-connections/example/sync",
"body": {
"connectionId": "example"
}
},
"effects": "May change state through POST /api/support/operations/channel-connections/{connectionId}/sync. 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 /api/support/operations/channel-connections/*/sync",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "operations.triage",
"title": "Refresh triage intelligence",
"description": "Refresh deterministic triage summaries, intents, sentiment, and automation scores for open tickets.",
"method": "POST",
"path": "/api/support/operations/triage",
"permission": "tickets:write",
"authorizationMode": "static",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Refresh triage intelligence.",
"additionalProperties": true
},
"destructive": false,
"agentAccess": "confirm",
"documentation": {
"example_input": {
"workspaceId": "example"
},
"cli_example": [
"topolo actions --service topolo-support --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": "/api/support/operations/triage",
"body": {
"workspaceId": "example"
}
},
"effects": "May change state through POST /api/support/operations/triage. 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 /api/support/operations/triage",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "operations.route",
"title": "Run routing assignment",
"description": "Assign open support tickets to active agents using workspace routing rules and capacity.",
"method": "POST",
"path": "/api/support/operations/route",
"permission": "tickets:write",
"authorizationMode": "static",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Run routing assignment.",
"additionalProperties": true
},
"destructive": false,
"agentAccess": "confirm",
"documentation": {
"example_input": {
"workspaceId": "example"
},
"cli_example": [
"topolo actions --service topolo-support --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": "/api/support/operations/route",
"body": {
"workspaceId": "example"
}
},
"effects": "May change state through POST /api/support/operations/route. 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 /api/support/operations/route",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "ticket_notifications.dispatch",
"title": "Dispatch ticket notification",
"description": "Dispatch notifications for a support ticket.",
"method": "POST",
"path": "/api/support/tickets/{ticketId}/notifications/dispatch",
"permission": "replies:invoke",
"authorizationMode": "static",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"minLength": 1
}
},
"required": [
"ticketId"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Dispatch ticket notification.",
"additionalProperties": true
},
"destructive": false,
"agentAccess": "confirm",
"documentation": {
"example_input": {
"ticketId": "example"
},
"cli_example": [
"topolo actions --service topolo-support --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": "/api/support/tickets/example/notifications/dispatch",
"body": {
"ticketId": "example"
}
},
"effects": "May change state through POST /api/support/tickets/{ticketId}/notifications/dispatch. 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 /api/support/tickets/*/notifications/dispatch",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "privacy.export",
"title": "Export support organization data",
"description": "Export the authenticated organization's portable Support data with secrets and operational errors redacted.",
"method": "GET",
"path": "/api/support/privacy",
"permission": "privacy:read",
"authorizationMode": "static",
"readOnly": true,
"requiresConfirmation": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {},
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"destructive": false,
"agentAccess": "auto",
"documentation": {
"example_input": {},
"cli_example": [
"topolo actions --service topolo-support --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/support/privacy",
"body": null
},
"effects": "Reads state through GET /api/support/privacy 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/support/privacy",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "privacy.erase",
"title": "Erase support organization data",
"description": "Permanently erase the authenticated organization's Support data and retain only a hash-based erasure receipt.",
"method": "DELETE",
"path": "/api/support/privacy",
"permission": "privacy:delete",
"authorizationMode": "static",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"confirmation": {
"type": "string",
"const": "ERASE"
}
},
"required": [
"confirmation"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"destructive": true,
"agentAccess": "confirm",
"documentation": {
"example_input": {
"confirmation": "ERASE"
},
"cli_example": [
"topolo actions --service topolo-support --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/support/privacy",
"body": null
},
"effects": "May change state through DELETE /api/support/privacy. 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/support/privacy",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "privacy.protection_canary",
"title": "Check support content protection",
"description": "Verify ticket content, requester and assignee PII, message and notification bodies, webhook payloads, and sensitive source references use readable canonical protection envelopes with valid keyed lookup digests.",
"method": "GET",
"path": "/api/support/privacy/protection/canary",
"permission": "privacy:read",
"authorizationMode": "static",
"readOnly": true,
"requiresConfirmation": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {},
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"destructive": false,
"agentAccess": "auto",
"documentation": {
"example_input": {},
"cli_example": [
"topolo actions --service topolo-support --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/support/privacy/protection/canary",
"body": null
},
"effects": "Reads state through GET /api/support/privacy/protection/canary 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/support/privacy/protection/canary",
"evidence": "Matched to a served route extracted from canonical staging source."
}
}
],
"action_coverage": {
"status": "ok",
"served_routes": 31,
"matched_actions": 25,
"declared_unserved_actions": [
"GET /api/widget"
],
"coverage_excluded_actions": [],
"uncatalogued_routes": [],
"ignored_routes": 6,
"configured_exclusions": 8,
"configuration_findings": [
"* /api/auth/*: exclusion matches no served route",
"* /api/support/*: exclusion matches no served route"
],
"notes": [
"no routes extracted from api",
"31 manually-declared route(s)"
]
},
"runtime_contract_audit": {
"status": "verified",
"actions": 26,
"contracts": 26,
"contract_module": "topolo.action-contracts.mjs",
"validator_sources": [
"apps/api/src/worker.ts"
],
"authorization_sources": [
"apps/api/src/worker.ts"
],
"findings": []
}
}
],
"mobile_contracts": [
{
"source_path": "apps/TopoloSupport/topolo.mobile-experience.json",
"contract": {
"version": "2026-06-29",
"status": "approved",
"mode": "native_capability",
"appId": "app_topolo_support",
"localizationNamespace": "support",
"permissions": [
"tickets:read",
"tickets:write",
"macros:read",
"macros:write"
],
"offlinePolicy": "read_through_cache",
"fallbackPath": "/tickets",
"auth": {
"audience": "topolo-support",
"scopes": [
"tickets:read",
"tickets:write",
"macros:read",
"macros:write"
]
},
"routes": [
{
"path": "/tickets",
"apiPath": "/api/support/tickets",
"title": "Tickets",
"titleKey": "support.mobile.routes.tickets.title",
"template": "record.list",
"dataSource": "support.tickets.list",
"detailRoute": "/tickets/:id",
"actions": [
{
"id": "support.tickets.create",
"title": "Create ticket",
"type": "record.create",
"permission": "tickets:write",
"method": "POST",
"path": "/api/support/tickets",
"fields": [
{
"key": "subject",
"label": "Subject",
"labelKey": "support.supportshared.subject",
"type": "text",
"required": true
},
{
"key": "description",
"label": "Description",
"labelKey": "support.supportshared.description",
"type": "textarea",
"required": true
},
{
"key": "serviceName",
"label": "Service",
"labelKey": "support.supportshared.service",
"type": "text",
"required": true
},
{
"key": "priority",
"label": "Priority",
"labelKey": "support.supportshared.priority",
"type": "text",
"required": true
},
{
"key": "category",
"label": "Category",
"labelKey": "support.supportshared.category",
"type": "text",
"required": true
},
{
"key": "requesterName",
"label": "Requester name",
"type": "text"
},
{
"key": "requesterEmail",
"label": "Requester email",
"type": "email"
},
{
"key": "status",
"label": "Status",
"labelKey": "support.supportshared.status",
"type": "text"
},
{
"key": "assignedToName",
"label": "Assignee name",
"type": "text"
},
{
"key": "assignedToEmail",
"label": "Assignee email",
"type": "email"
}
],
"titleKey": "support.mobile.actions.tickets.create.title"
},
{
"id": "support.tickets.update",
"title": "Update ticket",
"type": "record.update",
"permission": "tickets:write",
"method": "PATCH",
"path": "/api/support/tickets/:id",
"fields": [
{
"key": "subject",
"label": "Subject",
"labelKey": "support.supportshared.subject",
"type": "text",
"required": true
},
{
"key": "description",
"label": "Description",
"labelKey": "support.supportshared.description",
"type": "textarea",
"required": true
},
{
"key": "serviceName",
"label": "Service",
"labelKey": "support.supportshared.service",
"type": "text",
"required": true
},
{
"key": "status",
"label": "Status",
"labelKey": "support.supportshared.status",
"type": "text",
"required": true
},
{
"key": "priority",
"label": "Priority",
"labelKey": "support.supportshared.priority",
"type": "text",
"required": true
},
{
"key": "category",
"label": "Category",
"labelKey": "support.supportshared.category",
"type": "text",
"required": true
},
{
"key": "requesterName",
"label": "Requester name",
"type": "text"
},
{
"key": "requesterEmail",
"label": "Requester email",
"type": "email"
},
{
"key": "assignedToName",
"label": "Assignee name",
"type": "text"
},
{
"key": "assignedToEmail",
"label": "Assignee email",
"type": "email"
}
],
"titleKey": "support.mobile.actions.tickets.update.title"
}
]
},
{
"path": "/tickets/:id",
"apiPath": "/api/support/tickets/:id",
"title": "Ticket",
"titleKey": "support.mobile.routes.tickets.detail.title",
"template": "record.detail",
"dataSource": "support.tickets.detail"
},
{
"path": "/macros",
"apiPath": "/api/support/macros",
"title": "Macros",
"titleKey": "support.mobile.routes.macros.title",
"template": "record.list",
"dataSource": "support.macros.list",
"detailRoute": "/macros/:id",
"actions": [
{
"id": "support.macros.create",
"title": "Create macro",
"type": "record.create",
"permission": "macros:write",
"method": "POST",
"path": "/api/support/macros",
"fields": [
{
"key": "title",
"label": "Title",
"labelKey": "support.supportshared.title",
"type": "text",
"required": true
},
{
"key": "body",
"label": "Body",
"labelKey": "support.supportshared.body",
"type": "textarea",
"required": true
},
{
"key": "visibility",
"label": "Visibility",
"labelKey": "support.supportshared.visibility",
"type": "text",
"required": true
},
{
"key": "suggestedStatus",
"label": "Suggested status",
"labelKey": "support.supportshared.suggestedStatus",
"type": "text"
},
{
"key": "suggestedPriority",
"label": "Suggested priority",
"labelKey": "support.supportshared.suggestedPriority",
"type": "text"
}
],
"titleKey": "support.mobile.actions.macros.create.title"
}
]
},
{
"path": "/macros/:id",
"apiPath": "/api/support/macros/:id",
"title": "Macro",
"titleKey": "support.mobile.routes.macros.title",
"template": "record.detail",
"dataSource": "support.macros.detail"
}
]
}
}
],
"package_manifests": [],
"deployment_configs": [],
"source_signals": {
"api_routes": [
{
"method": "ALL",
"path": "*",
"source_path": "apps/TopoloSupport/apps/api/src/worker.ts"
}
],
"ui_routes": [
{
"path": "/tickets",
"source_path": "apps/TopoloSupport/apps/web/src/App.tsx"
},
{
"path": "/tickets/new",
"source_path": "apps/TopoloSupport/apps/web/src/App.tsx"
},
{
"path": "/tickets/:ticketId",
"source_path": "apps/TopoloSupport/apps/web/src/App.tsx"
},
{
"path": "/operations",
"source_path": "apps/TopoloSupport/apps/web/src/App.tsx"
},
{
"path": "/macros",
"source_path": "apps/TopoloSupport/apps/web/src/App.tsx"
},
{
"path": "/getting-started",
"source_path": "apps/TopoloSupport/apps/web/src/App.tsx"
}
],
"test_cases": [],
"database_tables": []
},
"documentation": {
"declared_paths": [
"applications/support",
"internal/apps/topolo-support"
],
"present_paths": [
"applications/support",
"internal/apps/topolo-support"
],
"missing_paths": [],
"human_reference": "/systems/topolo-support",
"machine_reference": "/machine/systems/topolo-support.json",
"action_examples": 26,
"action_schemas": 26
},
"source_findings": [
{
"type": "declared_unserved_actions",
"source_path": "apps/TopoloSupport/topolo.app.json",
"detail": [
"GET /api/widget"
]
},
{
"type": "action_coverage_configuration",
"source_path": "apps/TopoloSupport/topolo.app.json",
"detail": [
"* /api/auth/*: exclusion matches no served route",
"* /api/support/*: exclusion matches no served route"
]
}
]
}