application · active
Chat
Cloudflare-native collaboration application for channels, DMs, cross-app Chat widget, meetings, guests, and remote assist.
Documentation map
- Topolo Calendar — Public overview of the scheduling and booking application — shareable event types, availability, invitations, and calendar-safe booking lifecycle controls.
- Topolo Chat — Public overview of the collaboration surface for channels, direct messages, meetings, guests, and remote-assist workflows.
Authority and runtime
- System ID
topolo-chat- App IDs
- app_topolo_chat
- Owners
- collaboration
- Repositories
- apps/TopoloChat
- Hosts
- https://chat.topolo.app, https://chat.stg.topolo.us, https://topolo-chat.topolo.workers.dev
- Dependencies
- topolo-auth, applications-packages
Security and data ownership
- Risk tier
- high
- Tenant isolation
- organization_scoped
- Privacy classification
- restricted
- Storage
- d1, durable_object, external_provider, r2
- Export and deletion
- implemented
- Enterprise ready
- no
Source-derived capability inventory
Source revisions: apps/TopoloChat@9b3181a11595534171029d26d81de7134dcc4b9b
Declared actions: 101 · API routes: 8 · UI routes: 11
{
"id": "topolo-chat",
"name": "Chat",
"slug": "topolo-chat",
"kind": "application",
"visibility": "public",
"repo_paths": [
"apps/TopoloChat"
],
"source_revisions": [
{
"source_path": "apps/TopoloChat",
"repository": "apps/TopoloChat",
"revision": "9b3181a11595534171029d26d81de7134dcc4b9b",
"ref": "origin/staging"
}
],
"source_counts": {
"source_files": 150,
"test_files": 76,
"test_cases": 0,
"migration_files": 0,
"database_tables": 0,
"manifests": 1,
"deploy_targets": 2,
"actions": 101,
"mobile_contracts": 1,
"notifications": 6,
"package_manifests": 2,
"deployment_configs": 0
},
"manifests": [
{
"source_path": "apps/TopoloChat/topolo.app.json",
"service_slug": "topolo-chat",
"name": "topolo-chat",
"app_id": "app_topolo_chat",
"compatibility_date": "2026-05-01",
"primary_target": "web",
"environments": [
"development",
"production",
"staging"
],
"targets": [
{
"name": "api",
"kind": "worker",
"directory": "apps/api",
"main": "src/index.ts",
"worker_name": "topolo-chat-api",
"subdomain": null,
"healthcheck_path": "/healthz",
"variable_names": [
"CHAT_AUDIT_RETENTION_DAYS",
"CHAT_MESSAGE_RETENTION_DAYS",
"CHAT_OPERATIONAL_RETENTION_DAYS",
"CHAT_PUBLIC_BASE_URL",
"CLOUDFLARE_ACCOUNT_ID",
"ENVIRONMENT",
"REALTIMEKIT_APP_ID",
"REALTIMEKIT_HOST_PRESET",
"REALTIMEKIT_PARTICIPANT_PRESET",
"TOPOLO_AGENT_URL",
"TOPOLO_AUTH_BASE_URL",
"TOPOLO_NOTIFY_URL"
],
"secret_names": [],
"bindings": [
{
"kind": "d1",
"binding": "CHAT_CORE_DB",
"target": null
},
{
"kind": "d1",
"binding": "CHAT_MESSAGES_DB",
"target": null
},
{
"kind": "d1",
"binding": "CHAT_MEETINGS_DB",
"target": null
},
{
"kind": "d1",
"binding": "CHAT_AGENT_DB",
"target": null
},
{
"kind": "r2",
"binding": "CHAT_UPLOADS",
"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
},
{
"kind": "durableObjects",
"binding": "WORKSPACE_REALTIME",
"target": null
},
{
"kind": "durableObjects",
"binding": "MEETING_ROOM",
"target": null
},
{
"kind": "durableObjects",
"binding": "REMOTE_ASSIST",
"target": null
}
]
},
{
"name": "web",
"kind": "worker",
"directory": "apps/web",
"main": "src/index.ts",
"worker_name": "topolo-chat",
"subdomain": "chat",
"healthcheck_path": "/healthz",
"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": [
"chat.call.missed",
"chat.call.started",
"chat.dm.message_received",
"chat.meeting.reminder_due",
"chat.mention.created",
"chat.remote_assist.requested"
],
"notification_contract": {
"source_path": "topolo.notification-contracts.json",
"role": "producer",
"schema_version": 1,
"owner_app_id": "app_topolo_chat",
"events": [
{
"type": "chat.call.missed",
"version": 1,
"description": "A direct audio or video call ended without being answered.",
"status": "published",
"payloadSchema": {
"type": "object",
"required": [
"title",
"body",
"object_id",
"occurred_at"
],
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
},
"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"
},
"action_context": {
"type": "object"
}
},
"additionalProperties": true
},
"examples": [
{
"title": "Missed video call",
"body": "Ada Caller called you in Chat.",
"object_id": "meet_123",
"occurred_at": "2026-07-19T00:00:00.000Z"
}
],
"dataClassification": "internal",
"recipients": {
"modes": [
"organization_member"
],
"externalAddress": "forbidden"
},
"idempotency": {
"required": true,
"pattern": "^chat:call:missed:"
},
"sensitiveFields": []
},
{
"type": "chat.call.started",
"version": 1,
"description": "A direct audio or video call started.",
"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 direct audio or video call started.",
"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"
],
"externalAddress": "forbidden"
},
"idempotency": {
"required": true,
"pattern": "^chat:call:"
},
"sensitiveFields": []
},
{
"type": "chat.dm.message_received",
"version": 1,
"description": "A direct message was received.",
"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 direct message was received.",
"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"
],
"externalAddress": "forbidden"
},
"idempotency": {
"required": true,
"pattern": "^chat:dm:"
},
"sensitiveFields": []
},
{
"type": "chat.meeting.reminder_due",
"version": 1,
"description": "A scheduled Chat meeting reached its configured reminder time.",
"status": "published",
"payloadSchema": {
"type": "object",
"required": [
"title",
"body",
"object_id",
"occurred_at"
],
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
},
"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"
},
"action_context": {
"type": "object"
}
},
"additionalProperties": true
},
"examples": [
{
"title": "Meeting starts in 10 minutes",
"body": "Weekly planning",
"object_id": "meet_123",
"occurred_at": "2026-07-19T00:00:00.000Z"
}
],
"dataClassification": "internal",
"recipients": {
"modes": [
"organization_member"
],
"externalAddress": "forbidden"
},
"idempotency": {
"required": true,
"pattern": "^chat:meeting-reminder:"
},
"sensitiveFields": []
},
{
"type": "chat.mention.created",
"version": 1,
"description": "A persisted channel message mentioned 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
},
"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"
}
},
"additionalProperties": true
},
"examples": [
{
"title": "Ada mentioned you",
"body": "@Grace can you review this?",
"object_id": "msg_123",
"occurred_at": "2026-07-19T00:00:00.000Z"
}
],
"dataClassification": "internal",
"recipients": {
"modes": [
"organization_member"
],
"externalAddress": "forbidden"
},
"idempotency": {
"required": true,
"pattern": "^chat:mention:"
},
"sensitiveFields": []
},
{
"type": "chat.remote_assist.requested",
"version": 1,
"description": "A participant requested remote assist from a meeting host.",
"status": "published",
"payloadSchema": {
"type": "object",
"required": [
"title",
"body",
"object_id",
"occurred_at"
],
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
},
"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"
},
"action_context": {
"type": "object"
}
},
"additionalProperties": true
},
"examples": [
{
"title": "Remote assist requested",
"body": "Ada requested remote assist during a meeting.",
"object_id": "assist_123",
"occurred_at": "2026-07-19T00:00:00.000Z"
}
],
"dataClassification": "internal",
"recipients": {
"modes": [
"organization_member"
],
"externalAddress": "forbidden"
},
"idempotency": {
"required": true,
"pattern": "^chat:remote-assist:"
},
"sensitiveFields": []
}
]
},
"actions": [
{
"name": "widget.get",
"title": "Get widget summary",
"description": "Get the TopoloOne widget summary for this service.",
"method": "GET",
"path": "/api/widget",
"permission": "workspace:read",
"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",
"authorizationMode": "static",
"documentation": {
"example_input": {},
"cli_example": [
"topolo actions --service topolo-chat --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": "widget_chat.bootstrap",
"title": "Get cross-app Chat widget bootstrap",
"description": "Get contacts, recent conversations, unread totals, and realtime metadata for the cross-app Chat widget.",
"method": "GET",
"path": "/api/widget/chat",
"permission": "direct_messages:read",
"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",
"authorizationMode": "static",
"documentation": {
"example_input": {},
"cli_example": [
"topolo actions --service topolo-chat --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/chat",
"body": null
},
"effects": "Reads state through GET /api/widget/chat without a declared mutation.",
"verification": [
"Check the structured action result and pagination or resource identifiers before using it downstream."
],
"recovery": [
"Correct identity, resource context, permission, or input validation failures, then retry the read."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "GET /api/widget/chat",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "widget_chat.update_workspace_attention",
"title": "Update Chat widget attention",
"description": "Set the current user attention level and optional snooze time for one resolved Chat workspace.",
"method": "PATCH",
"path": "/api/widget/workspaces/{workspaceId}/attention",
"permission": "workspace:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"minLength": 1
},
"attentionLevel": {
"type": "string",
"enum": [
"all",
"mentions",
"none"
]
},
"snoozedUntil": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
}
},
"required": [
"workspaceId",
"attentionLevel"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"workspaceId": "example",
"attentionLevel": "all"
},
"cli_example": [
"topolo actions --service topolo-chat --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/widget/workspaces/example/attention",
"body": {
"workspaceId": "example",
"attentionLevel": "all"
}
},
"effects": "May change state through PATCH /api/widget/workspaces/{workspaceId}/attention. 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/widget/workspaces/*/attention",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "widget_chat.open_dm",
"title": "Open cross-app Chat conversation",
"description": "Create or open a human direct message conversation for the cross-app Chat widget.",
"method": "POST",
"path": "/api/widget/dms",
"permission": "direct_messages:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"memberId": {
"type": "string"
},
"type": {
"type": "string",
"const": "human"
}
},
"required": [
"memberId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"memberId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/widget/dms",
"body": {
"memberId": "example"
}
},
"effects": "May change state through POST /api/widget/dms. 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/widget/dms",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "widget_chat.list_messages",
"title": "List cross-app Chat messages",
"description": "List normalized human direct-message messages for the cross-app Chat widget.",
"method": "GET",
"path": "/api/widget/dms/{conversationId}/messages",
"permission": "direct_messages:read",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"minLength": 1
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 500
},
"before": {
"type": "string"
}
},
"required": [
"conversationId"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by List cross-app Chat messages.",
"additionalProperties": true
},
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"authorizationMode": "static",
"documentation": {
"example_input": {
"conversationId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/dms/example/messages",
"body": null
},
"effects": "Reads state through GET /api/widget/dms/{conversationId}/messages without a declared mutation.",
"verification": [
"Check the structured action result and pagination or resource identifiers before using it downstream."
],
"recovery": [
"Correct identity, resource context, permission, or input validation failures, then retry the read."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "GET /api/widget/dms/*/messages",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "widget_chat.list_channel_messages",
"title": "List cross-app Chat channel messages",
"description": "List normalized channel messages for the cross-app Chat widget.",
"method": "GET",
"path": "/api/widget/channels/{channelId}/messages",
"permission": "messages:read",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"channelId": {
"type": "string",
"minLength": 1
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 500
},
"before": {
"type": "string"
}
},
"required": [
"channelId"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by List cross-app Chat channel messages.",
"additionalProperties": true
},
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"authorizationMode": "static",
"documentation": {
"example_input": {
"channelId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/channels/example/messages",
"body": null
},
"effects": "Reads state through GET /api/widget/channels/{channelId}/messages without a declared mutation.",
"verification": [
"Check the structured action result and pagination or resource identifiers before using it downstream."
],
"recovery": [
"Correct identity, resource context, permission, or input validation failures, then retry the read."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "GET /api/widget/channels/*/messages",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "widget_chat.send_dm_message",
"title": "Send cross-app Chat direct message",
"description": "Send a human direct-message turn from the cross-app Chat widget.",
"method": "POST",
"path": "/api/widget/dms/{conversationId}/messages",
"permission": "direct_messages:write",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
},
"threadParentId": {
"type": "string",
"minLength": 1
},
"thread_parent_id": {
"type": "string",
"minLength": 1
}
},
"required": [
"conversationId",
"body"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Send cross-app Chat direct message.",
"additionalProperties": true
},
"destructive": false,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"conversationId": "example",
"body": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/widget/dms/example/messages",
"body": {
"conversationId": "example",
"body": "example"
}
},
"effects": "May change state through POST /api/widget/dms/{conversationId}/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/widget/dms/*/messages",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "widget_chat.send_channel_message",
"title": "Send cross-app Chat channel message",
"description": "Send a channel message turn from the cross-app Chat widget.",
"method": "POST",
"path": "/api/widget/channels/{channelId}/messages",
"permission": "messages:write",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"channelId": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
},
"threadParentId": {
"type": "string",
"minLength": 1
},
"thread_parent_id": {
"type": "string",
"minLength": 1
}
},
"required": [
"channelId",
"body"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Send cross-app Chat channel message.",
"additionalProperties": true
},
"destructive": false,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"channelId": "example",
"body": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/widget/channels/example/messages",
"body": {
"channelId": "example",
"body": "example"
}
},
"effects": "May change state through POST /api/widget/channels/{channelId}/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/widget/channels/*/messages",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "widget_chat.request_upload",
"title": "Request cross-app Chat upload",
"description": "Create a compact upload draft for an image, file, or voice note sent from the cross-app Chat widget.",
"method": "POST",
"path": "/api/widget/uploads/request",
"permission": "direct_messages:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"fileName": {
"type": "string",
"minLength": 1
},
"contentType": {
"type": "string",
"minLength": 1
},
"sizeBytes": {
"type": "integer",
"minimum": 1,
"maximum": 26214400
}
},
"required": [
"fileName",
"contentType",
"sizeBytes"
],
"additionalProperties": false
},
"agentContract": {
"upload": {
"profile": "url-session",
"fileNameField": "fileName",
"contentTypeField": "contentType",
"sizeField": "sizeBytes",
"maxBytes": 26214400,
"acceptedContentTypes": [
"*/*"
],
"uploadUrlPath": "upload.uploadUrl",
"uploadMethod": "PUT"
}
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"fileName": "example",
"contentType": "example",
"sizeBytes": 1
},
"cli_example": [
"topolo actions --service topolo-chat --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/widget/uploads/request",
"body": {
"fileName": "example",
"contentType": "example",
"sizeBytes": 1
}
},
"effects": "May change state through POST /api/widget/uploads/request. 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/widget/uploads/request",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "widget_chat.upload_content",
"title": "Upload cross-app Chat file content",
"description": "Upload bytes for a compact widget upload draft.",
"method": "PUT",
"path": "/api/widget/uploads/{uploadId}/content",
"permission": "direct_messages:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"uploadId": {
"type": "string",
"minLength": 1
}
},
"required": [
"uploadId"
],
"additionalProperties": {}
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Upload cross-app Chat file content.",
"additionalProperties": true
},
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"uploadId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --confirm --json"
],
"http_example": {
"method": "PUT",
"path": "/api/widget/uploads/example/content",
"body": {
"uploadId": "example"
}
},
"effects": "May change state through PUT /api/widget/uploads/{uploadId}/content. Inspect the plan and honor the published confirmation policy.",
"verification": [
"Check the structured action result.",
"Read the affected resource back through the corresponding get or list action."
],
"recovery": [
"Do not retry an ambiguous mutation until a read confirms whether it applied.",
"Use a published inverse, update, archive, or delete action only after inspecting its contract."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "PUT /api/widget/uploads/*/content",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "widget_chat.complete_upload",
"title": "Complete cross-app Chat upload",
"description": "Attach an uploaded image, file, or voice note to a human direct message from the cross-app Chat widget.",
"method": "POST",
"path": "/api/widget/dms/{conversationId}/uploads/complete",
"permission": "direct_messages:write",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"minLength": 1
},
"uploadId": {
"type": "string",
"minLength": 1
},
"uploadIds": {
"minItems": 1,
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
},
"messageBody": {
"type": "string"
},
"threadParentId": {
"type": "string",
"minLength": 1
},
"thread_parent_id": {
"type": "string",
"minLength": 1
}
},
"required": [
"conversationId"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Complete cross-app Chat upload.",
"additionalProperties": true
},
"destructive": false,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"conversationId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/widget/dms/example/uploads/complete",
"body": {
"conversationId": "example"
}
},
"effects": "May change state through POST /api/widget/dms/{conversationId}/uploads/complete. Inspect the plan and honor the published confirmation policy.",
"verification": [
"Check the structured action result.",
"Read the affected resource back through the corresponding get or list action."
],
"recovery": [
"Do not retry an ambiguous mutation until a read confirms whether it applied.",
"Use a published inverse, update, archive, or delete action only after inspecting its contract."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "POST /api/widget/dms/*/uploads/complete",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "widget_chat.complete_channel_upload",
"title": "Complete cross-app Chat channel upload",
"description": "Attach an uploaded image, file, or voice note to a channel message from the cross-app Chat widget.",
"method": "POST",
"path": "/api/widget/channels/{channelId}/uploads/complete",
"permission": "messages:write",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"channelId": {
"type": "string",
"minLength": 1
},
"uploadId": {
"type": "string",
"minLength": 1
},
"uploadIds": {
"minItems": 1,
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
},
"messageBody": {
"type": "string"
},
"threadParentId": {
"type": "string",
"minLength": 1
},
"thread_parent_id": {
"type": "string",
"minLength": 1
}
},
"required": [
"channelId"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Complete cross-app Chat channel upload.",
"additionalProperties": true
},
"destructive": false,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"channelId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/widget/channels/example/uploads/complete",
"body": {
"channelId": "example"
}
},
"effects": "May change state through POST /api/widget/channels/{channelId}/uploads/complete. Inspect the plan and honor the published confirmation policy.",
"verification": [
"Check the structured action result.",
"Read the affected resource back through the corresponding get or list action."
],
"recovery": [
"Do not retry an ambiguous mutation until a read confirms whether it applied.",
"Use a published inverse, update, archive, or delete action only after inspecting its contract."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "POST /api/widget/channels/*/uploads/complete",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "widget_chat.start_call",
"title": "Start cross-app Chat call",
"description": "Start a voice or video call for a human direct-message conversation from the cross-app Chat widget.",
"method": "POST",
"path": "/api/widget/dms/{conversationId}/calls",
"permission": "direct_messages:write",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"minLength": 1
},
"mode": {
"type": "string",
"enum": [
"audio",
"video"
]
}
},
"required": [
"conversationId"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Start cross-app Chat call.",
"additionalProperties": true
},
"destructive": false,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"conversationId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/widget/dms/example/calls",
"body": {
"conversationId": "example"
}
},
"effects": "May change state through POST /api/widget/dms/{conversationId}/calls. 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/widget/dms/*/calls",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "widget_chat.mark_read",
"title": "Mark cross-app Chat conversation read",
"description": "Mark a cross-app Chat human direct-message conversation read.",
"method": "POST",
"path": "/api/widget/dms/{conversationId}/read",
"permission": "direct_messages:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"minLength": 1
}
},
"required": [
"conversationId"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Mark cross-app Chat conversation read.",
"additionalProperties": true
},
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"conversationId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/widget/dms/example/read",
"body": {
"conversationId": "example"
}
},
"effects": "May change state through POST /api/widget/dms/{conversationId}/read. 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/widget/dms/*/read",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "widget_chat.mark_channel_read",
"title": "Mark cross-app Chat channel read",
"description": "Mark a cross-app Chat channel conversation read.",
"method": "POST",
"path": "/api/widget/channels/{channelId}/read",
"permission": "messages:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"channelId": {
"type": "string",
"minLength": 1
}
},
"required": [
"channelId"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Mark cross-app Chat channel read.",
"additionalProperties": true
},
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"channelId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/widget/channels/example/read",
"body": {
"channelId": "example"
}
},
"effects": "May change state through POST /api/widget/channels/{channelId}/read. 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/widget/channels/*/read",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "workspace.bootstrap",
"title": "Get workspace bootstrap",
"description": "Get the signed workspace bootstrap payload for this service.",
"method": "GET",
"path": "/api/bootstrap",
"permission": "workspace:read",
"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",
"authorizationMode": "static",
"documentation": {
"example_input": {},
"cli_example": [
"topolo actions --service topolo-chat --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/bootstrap",
"body": null
},
"effects": "Reads state through GET /api/bootstrap 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/bootstrap",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "privacy.export",
"title": "Export workspace data",
"description": "Export the verified workspace's Chat records and protected object inventory.",
"method": "GET",
"path": "/api/privacy/export",
"permission": "workspace:read",
"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",
"authorizationMode": "static",
"documentation": {
"example_input": {},
"cli_example": [
"topolo actions --service topolo-chat --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/privacy/export",
"body": null
},
"effects": "Reads state through GET /api/privacy/export without a declared mutation.",
"verification": [
"Check the structured action result and pagination or resource identifiers before using it downstream."
],
"recovery": [
"Correct identity, resource context, permission, or input validation failures, then retry the read."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "GET /api/privacy/export",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "privacy.protection_canary",
"title": "Inspect workspace data protection",
"description": "Inspect the verified workspace for remaining unprotected Chat fields and objects. Platform super administrators may name a legacy workspace directly.",
"method": "GET",
"path": "/api/privacy/protection/canary",
"permission": "workspace:read",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"targetWorkspaceId": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"authorizationMode": "static",
"documentation": {
"example_input": {
"targetWorkspaceId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/privacy/protection/canary",
"body": null
},
"effects": "Reads state through GET /api/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/privacy/protection/canary",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "privacy.erase",
"title": "Erase workspace Chat data",
"description": "Permanently erase all Chat database rows and protected objects for the verified workspace.",
"method": "DELETE",
"path": "/api/privacy/workspace",
"permission": "workspace:delete",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": true,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {},
"cli_example": [
"topolo actions --service topolo-chat --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/privacy/workspace",
"body": null
},
"effects": "May change state through DELETE /api/privacy/workspace. 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/privacy/workspace",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "workspaces.delete",
"title": "Delete Workspace",
"description": "Delete an empty non-default Topolo Chat workspace.",
"method": "DELETE",
"path": "/api/chat/workspaces/{workspaceId}",
"permission": "workspace:delete",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"minLength": 1
}
},
"required": [
"workspaceId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": true,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"workspaceId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/chat/workspaces/example",
"body": null
},
"effects": "May change state through DELETE /api/chat/workspaces/{workspaceId}. Inspect the plan and honor the published confirmation policy.",
"verification": [
"Check the structured action result.",
"Read the affected resource back through the corresponding get or list action."
],
"recovery": [
"Do not retry an ambiguous mutation until a read confirms whether it applied.",
"Use a published inverse, update, archive, or delete action only after inspecting its contract."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "DELETE /api/chat/workspaces/*",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "channels.list",
"title": "List channels",
"description": "List workspace channels.",
"method": "GET",
"path": "/api/channels",
"permission": "channels:read",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {},
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by List channels.",
"additionalProperties": true
},
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"authorizationMode": "static",
"documentation": {
"example_input": {},
"cli_example": [
"topolo actions --service topolo-chat --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/channels",
"body": null
},
"effects": "Reads state through GET /api/channels 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/channels",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "channels.create",
"title": "Create channel",
"description": "Create a workspace channel.",
"method": "POST",
"path": "/api/channels",
"permission": "channels:write",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"topic": {
"type": "string",
"minLength": 1
},
"isPrivate": {
"type": "boolean"
},
"memberIds": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
}
},
"required": [
"name",
"topic"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Create channel.",
"additionalProperties": true
},
"destructive": false,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"name": "example",
"topic": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/channels",
"body": {
"name": "example",
"topic": "example"
}
},
"effects": "May change state through POST /api/channels. 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/channels",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "channel_messages.list",
"title": "List channel messages",
"description": "List messages in a channel.",
"method": "GET",
"path": "/api/channels/{channelId}/messages",
"permission": "messages:read",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"channelId": {
"type": "string",
"minLength": 1
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 500
},
"before": {
"type": "string"
}
},
"required": [
"channelId"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by List channel messages.",
"additionalProperties": true
},
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"authorizationMode": "static",
"documentation": {
"example_input": {
"channelId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/channels/example/messages",
"body": null
},
"effects": "Reads state through GET /api/channels/{channelId}/messages 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/channels/*/messages",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "channel_messages.send",
"title": "Send channel message",
"description": "Send a message to a channel.",
"method": "POST",
"path": "/api/channels/{channelId}/messages",
"permission": "messages:write",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"channelId": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
},
"threadParentId": {
"type": "string",
"minLength": 1
}
},
"required": [
"channelId",
"body"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Send channel message.",
"additionalProperties": true
},
"destructive": false,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"channelId": "example",
"body": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/channels/example/messages",
"body": {
"channelId": "example",
"body": "example"
}
},
"effects": "May change state through POST /api/channels/{channelId}/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/channels/*/messages",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "direct_messages.list",
"title": "List direct messages",
"description": "List direct-message conversations.",
"method": "GET",
"path": "/api/dms",
"permission": "direct_messages:read",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {},
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by List direct messages.",
"additionalProperties": true
},
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"authorizationMode": "static",
"documentation": {
"example_input": {},
"cli_example": [
"topolo actions --service topolo-chat --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/dms",
"body": null
},
"effects": "Reads state through GET /api/dms 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/dms",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "direct_messages.create",
"title": "Create direct message",
"description": "Create a direct-message conversation.",
"method": "POST",
"path": "/api/dms",
"permission": "direct_messages:write",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"memberId": {
"type": "string",
"minLength": 1
}
},
"required": [
"memberId"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Create direct message.",
"additionalProperties": true
},
"destructive": false,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"memberId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/dms",
"body": {
"memberId": "example"
}
},
"effects": "May change state through POST /api/dms. 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/dms",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "meetings.list",
"title": "List meetings",
"description": "List meetings.",
"method": "GET",
"path": "/api/meetings",
"permission": "meetings:read",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {},
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by List meetings.",
"additionalProperties": true
},
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"authorizationMode": "static",
"documentation": {
"example_input": {},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings",
"body": null
},
"effects": "Reads state through GET /api/meetings 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/meetings",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "meetings.create",
"title": "Create meeting",
"description": "Create a meeting.",
"method": "POST",
"path": "/api/meetings",
"permission": "meetings:write",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"description": {
"type": "string",
"minLength": 1
},
"sourceKind": {
"type": "string",
"enum": [
"channel",
"dm",
"workspace"
]
},
"sourceId": {
"type": "string",
"minLength": 1
},
"startsAt": {
"type": "string"
},
"durationMinutes": {
"type": "number"
},
"reminderMinutes": {
"type": "number"
},
"recurrenceRule": {
"type": "string",
"enum": [
"none",
"daily",
"weekdays",
"weekly"
]
},
"startNow": {
"type": "boolean"
}
},
"required": [
"title",
"description",
"sourceKind",
"sourceId"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Create meeting.",
"additionalProperties": true
},
"destructive": false,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"title": "example",
"description": "example",
"sourceKind": "channel",
"sourceId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings",
"body": {
"title": "example",
"description": "example",
"sourceKind": "channel",
"sourceId": "example"
}
},
"effects": "May change state through POST /api/meetings. 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/meetings",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "meetings.end",
"title": "End meeting",
"description": "End a meeting.",
"method": "POST",
"path": "/api/meetings/{meetingId}/end",
"permission": "meetings:write",
"readOnly": false,
"destructive": true,
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"meetingId": {
"type": "string",
"minLength": 1
}
},
"required": [
"meetingId"
],
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by End meeting.",
"additionalProperties": true
},
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"meetingId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings/example/end",
"body": {
"meetingId": "example"
}
},
"effects": "May change state through POST /api/meetings/{meetingId}/end. 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/meetings/*/end",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "search.query",
"title": "Search chat",
"description": "Search channels, messages, and meetings.",
"method": "GET",
"path": "/api/search",
"permission": "search:read",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"q": {
"type": "string"
},
"scope": {
"type": "string",
"enum": [
"messages",
"files",
"people",
"channels"
]
},
"conversationKind": {
"type": "string",
"enum": [
"channel",
"dm"
]
},
"conversationId": {
"type": "string"
}
},
"additionalProperties": false
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Search chat.",
"additionalProperties": true
},
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"authorizationMode": "static",
"documentation": {
"example_input": {
"q": "example",
"scope": "messages",
"conversationKind": "channel"
},
"cli_example": [
"topolo actions --service topolo-chat --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/search",
"body": null
},
"effects": "Reads state through GET /api/search 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/search",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "uploads.request",
"title": "Request upload",
"description": "Request a chat upload slot.",
"method": "POST",
"path": "/api/uploads/request",
"permission": "uploads:write",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"fileName": {
"type": "string",
"minLength": 1
},
"contentType": {
"type": "string",
"minLength": 1
},
"sizeBytes": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 26214400
}
},
"required": [
"fileName",
"contentType",
"sizeBytes"
],
"additionalProperties": false
},
"agentContract": {
"upload": {
"profile": "url-session",
"fileNameField": "fileName",
"contentTypeField": "contentType",
"sizeField": "sizeBytes",
"maxBytes": 26214400,
"acceptedContentTypes": [
"*/*"
],
"uploadUrlPath": "upload.uploadUrl",
"uploadMethod": "PUT",
"complete": {
"actionId": "app_topolo_chat.uploads.complete",
"inputField": "uploadId",
"responsePath": "upload.id"
}
}
},
"target": "api",
"outputSchema": {
"type": "object",
"description": "Response returned by Request upload.",
"additionalProperties": true
},
"destructive": false,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"fileName": "example",
"contentType": "example",
"sizeBytes": 1
},
"cli_example": [
"topolo actions --service topolo-chat --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/uploads/request",
"body": {
"fileName": "example",
"contentType": "example",
"sizeBytes": 1
}
},
"effects": "May change state through POST /api/uploads/request. 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/uploads/request",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "agent_personas.list",
"title": "List agent personas",
"description": "List the workspace's TopoloAgent AI personas available to surface in Chat. Proxies to the Topolo Agent persona host.",
"method": "GET",
"path": "/api/agent-personas",
"permission": "workspace:read",
"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",
"authorizationMode": "static",
"documentation": {
"example_input": {},
"cli_example": [
"topolo actions --service topolo-chat --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/agent-personas",
"body": null
},
"effects": "Reads state through GET /api/agent-personas 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/agent-personas",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "agent_personas.send_message",
"title": "Message an agent persona",
"description": "Send a message to a TopoloAgent persona on behalf of the acting user and receive the persona reply. Proxies to the Topolo Agent dual-identity session invoke surface.",
"method": "POST",
"path": "/api/agent-personas/{personaId}/messages",
"permission": "workspace:write",
"readOnly": false,
"requiresConfirmation": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"personaId": {
"type": "string",
"minLength": 1
},
"message": {
"type": "string"
},
"threadId": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"message",
"approve"
]
},
"approvalId": {
"type": "string"
},
"decision": {
"type": "string"
}
},
"required": [
"personaId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"personaId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/agent-personas/example/messages",
"body": {
"personaId": "example"
}
},
"effects": "May change state through POST /api/agent-personas/{personaId}/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/agent-personas/*/messages",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "presence.get",
"title": "Presence Get",
"description": "Execute Presence Get in Topolo Chat.",
"method": "GET",
"path": "/api/widget/presence",
"permission": "workspace:read",
"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",
"authorizationMode": "static",
"documentation": {
"example_input": {},
"cli_example": [
"topolo actions --service topolo-chat --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/presence",
"body": null
},
"effects": "Reads state through GET /api/widget/presence without a declared mutation.",
"verification": [
"Check the structured action result and pagination or resource identifiers before using it downstream."
],
"recovery": [
"Correct identity, resource context, permission, or input validation failures, then retry the read."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "GET /api/widget/presence",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "presence.update",
"title": "Presence Update",
"description": "Execute Presence Update in Topolo Chat.",
"method": "POST",
"path": "/api/widget/presence",
"permission": "workspace:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"available",
"busy",
"do_not_disturb",
"be_right_back",
"away",
"offline"
]
}
},
"required": [
"status"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"status": "available"
},
"cli_example": [
"topolo actions --service topolo-chat --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/widget/presence",
"body": {
"status": "available"
}
},
"effects": "May change state through POST /api/widget/presence. 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/widget/presence",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "calls.join",
"title": "Calls Join",
"description": "Execute Calls Join in Topolo Chat.",
"method": "POST",
"path": "/api/widget/dms/{conversationId}/calls/{callId}/join",
"permission": "direct_messages:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"minLength": 1
},
"callId": {
"type": "string",
"minLength": 1
}
},
"required": [
"conversationId",
"callId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"conversationId": "example",
"callId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/widget/dms/example/calls/example/join",
"body": {
"conversationId": "example",
"callId": "example"
}
},
"effects": "May change state through POST /api/widget/dms/{conversationId}/calls/{callId}/join. 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/widget/dms/*/calls/*/join",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "calls.end",
"title": "Calls End",
"description": "Execute Calls End in Topolo Chat.",
"method": "POST",
"path": "/api/widget/dms/{conversationId}/calls/{callId}/end",
"permission": "direct_messages:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"minLength": 1
},
"callId": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"enum": [
"no_answer",
"missed",
"declined"
]
},
"mode": {
"type": "string",
"enum": [
"audio",
"video"
]
}
},
"required": [
"conversationId",
"callId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": true,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"conversationId": "example",
"callId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/widget/dms/example/calls/example/end",
"body": {
"conversationId": "example",
"callId": "example"
}
},
"effects": "May change state through POST /api/widget/dms/{conversationId}/calls/{callId}/end. 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/widget/dms/*/calls/*/end",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "channels.update",
"title": "Channels Update",
"description": "Execute Channels Update in Topolo Chat.",
"method": "POST",
"path": "/api/channels/{channelId}",
"permission": "channels:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"channelId": {
"type": "string",
"minLength": 1
},
"name": {
"type": "string",
"minLength": 1
},
"topic": {
"type": "string",
"minLength": 1
},
"isPrivate": {
"type": "boolean"
}
},
"required": [
"channelId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"channelId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/channels/example",
"body": {
"channelId": "example"
}
},
"effects": "May change state through POST /api/channels/{channelId}. 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/channels/*",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "channels.archive",
"title": "Channels Archive",
"description": "Execute Channels Archive in Topolo Chat.",
"method": "POST",
"path": "/api/channels/{channelId}/archive",
"permission": "channels:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"channelId": {
"type": "string",
"minLength": 1
}
},
"required": [
"channelId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"channelId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/channels/example/archive",
"body": {
"channelId": "example"
}
},
"effects": "May change state through POST /api/channels/{channelId}/archive. 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/channels/*/archive",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "channels.delete",
"title": "Channels Delete",
"description": "Execute Channels Delete in Topolo Chat.",
"method": "DELETE",
"path": "/api/channels/{channelId}",
"permission": "channels:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"channelId": {
"type": "string",
"minLength": 1
}
},
"required": [
"channelId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": true,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"channelId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/channels/example",
"body": null
},
"effects": "May change state through DELETE /api/channels/{channelId}. 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/channels/*",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "channel_messages.thread",
"title": "Channel Messages Thread",
"description": "Execute Channel Messages Thread in Topolo Chat.",
"method": "GET",
"path": "/api/channels/{channelId}/messages/{messageId}/thread",
"permission": "messages:read",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"channelId": {
"type": "string",
"minLength": 1
},
"messageId": {
"type": "string",
"minLength": 1
}
},
"required": [
"channelId",
"messageId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"authorizationMode": "static",
"documentation": {
"example_input": {
"channelId": "example",
"messageId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/channels/example/messages/example/thread",
"body": null
},
"effects": "Reads state through GET /api/channels/{channelId}/messages/{messageId}/thread 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/channels/*/messages/*/thread",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "channel_messages.forward",
"title": "Channel Messages Forward",
"description": "Execute Channel Messages Forward in Topolo Chat.",
"method": "POST",
"path": "/api/channels/{channelId}/messages/forward",
"permission": "messages:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"channelId": {
"type": "string",
"minLength": 1
},
"sourceKind": {
"type": "string",
"enum": [
"channel",
"dm"
]
},
"sourceConversationId": {
"type": "string",
"minLength": 1
},
"sourceMessageId": {
"type": "string",
"minLength": 1
}
},
"required": [
"channelId",
"sourceKind",
"sourceConversationId",
"sourceMessageId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"channelId": "example",
"sourceKind": "channel",
"sourceConversationId": "example",
"sourceMessageId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/channels/example/messages/forward",
"body": {
"channelId": "example",
"sourceKind": "channel",
"sourceConversationId": "example",
"sourceMessageId": "example"
}
},
"effects": "May change state through POST /api/channels/{channelId}/messages/forward. 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/channels/*/messages/forward",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "channel_messages.save",
"title": "Channel Messages Save",
"description": "Execute Channel Messages Save in Topolo Chat.",
"method": "POST",
"path": "/api/channels/{channelId}/messages/{messageId}/save",
"permission": "messages:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"channelId": {
"type": "string",
"minLength": 1
},
"messageId": {
"type": "string",
"minLength": 1
}
},
"required": [
"channelId",
"messageId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"channelId": "example",
"messageId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/channels/example/messages/example/save",
"body": {
"channelId": "example",
"messageId": "example"
}
},
"effects": "May change state through POST /api/channels/{channelId}/messages/{messageId}/save. 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/channels/*/messages/*/save",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "channel_messages.update",
"title": "Channel Messages Update",
"description": "Execute Channel Messages Update in Topolo Chat.",
"method": "POST",
"path": "/api/channels/{channelId}/messages/{messageId}/update",
"permission": "messages:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"channelId": {
"type": "string",
"minLength": 1
},
"messageId": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
}
},
"required": [
"channelId",
"messageId",
"body"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"channelId": "example",
"messageId": "example",
"body": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/channels/example/messages/example/update",
"body": {
"channelId": "example",
"messageId": "example",
"body": "example"
}
},
"effects": "May change state through POST /api/channels/{channelId}/messages/{messageId}/update. 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/channels/*/messages/*/update",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "channel_messages.delete",
"title": "Channel Messages Delete",
"description": "Execute Channel Messages Delete in Topolo Chat.",
"method": "POST",
"path": "/api/channels/{channelId}/messages/{messageId}/delete",
"permission": "messages:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"channelId": {
"type": "string",
"minLength": 1
},
"messageId": {
"type": "string",
"minLength": 1
}
},
"required": [
"channelId",
"messageId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": true,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"channelId": "example",
"messageId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/channels/example/messages/example/delete",
"body": {
"channelId": "example",
"messageId": "example"
}
},
"effects": "May change state through POST /api/channels/{channelId}/messages/{messageId}/delete. 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/channels/*/messages/*/delete",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "channel_messages.react",
"title": "Channel Messages React",
"description": "Execute Channel Messages React in Topolo Chat.",
"method": "POST",
"path": "/api/channels/{channelId}/messages/{messageId}/reactions",
"permission": "messages:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"channelId": {
"type": "string",
"minLength": 1
},
"messageId": {
"type": "string",
"minLength": 1
},
"emoji": {
"type": "string",
"minLength": 1
}
},
"required": [
"channelId",
"messageId",
"emoji"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"channelId": "example",
"messageId": "example",
"emoji": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/channels/example/messages/example/reactions",
"body": {
"channelId": "example",
"messageId": "example",
"emoji": "example"
}
},
"effects": "May change state through POST /api/channels/{channelId}/messages/{messageId}/reactions. 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/channels/*/messages/*/reactions",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "channel_messages.pin",
"title": "Channel Messages Pin",
"description": "Execute Channel Messages Pin in Topolo Chat.",
"method": "POST",
"path": "/api/channels/{channelId}/messages/{messageId}/pin",
"permission": "messages:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"channelId": {
"type": "string",
"minLength": 1
},
"messageId": {
"type": "string",
"minLength": 1
}
},
"required": [
"channelId",
"messageId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"channelId": "example",
"messageId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/channels/example/messages/example/pin",
"body": {
"channelId": "example",
"messageId": "example"
}
},
"effects": "May change state through POST /api/channels/{channelId}/messages/{messageId}/pin. 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/channels/*/messages/*/pin",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "channel_messages.mark_unread",
"title": "Channel Messages Mark Unread",
"description": "Execute Channel Messages Mark Unread in Topolo Chat.",
"method": "POST",
"path": "/api/channels/{channelId}/messages/{messageId}/unread",
"permission": "messages:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"channelId": {
"type": "string",
"minLength": 1
},
"messageId": {
"type": "string",
"minLength": 1
}
},
"required": [
"channelId",
"messageId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"channelId": "example",
"messageId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/channels/example/messages/example/unread",
"body": {
"channelId": "example",
"messageId": "example"
}
},
"effects": "May change state through POST /api/channels/{channelId}/messages/{messageId}/unread. 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/channels/*/messages/*/unread",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "channels.mark_read",
"title": "Channels Mark Read",
"description": "Execute Channels Mark Read in Topolo Chat.",
"method": "POST",
"path": "/api/channels/{channelId}/read",
"permission": "messages:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"channelId": {
"type": "string",
"minLength": 1
}
},
"required": [
"channelId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"channelId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/channels/example/read",
"body": {
"channelId": "example"
}
},
"effects": "May change state through POST /api/channels/{channelId}/read. 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/channels/*/read",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "channels.mute",
"title": "Channels Mute",
"description": "Execute Channels Mute in Topolo Chat.",
"method": "POST",
"path": "/api/channels/{channelId}/mute",
"permission": "messages:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"channelId": {
"type": "string",
"minLength": 1
},
"muted": {
"type": "boolean"
}
},
"required": [
"channelId",
"muted"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"channelId": "example",
"muted": true
},
"cli_example": [
"topolo actions --service topolo-chat --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/channels/example/mute",
"body": {
"channelId": "example",
"muted": true
}
},
"effects": "May change state through POST /api/channels/{channelId}/mute. 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/channels/*/mute",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "direct_messages.manage",
"title": "Direct Messages Manage",
"description": "Execute Direct Messages Manage in Topolo Chat.",
"method": "GET",
"path": "/api/dms/manage",
"permission": "direct_messages:read",
"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",
"authorizationMode": "static",
"documentation": {
"example_input": {},
"cli_example": [
"topolo actions --service topolo-chat --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/dms/manage",
"body": null
},
"effects": "Reads state through GET /api/dms/manage 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/dms/manage",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "direct_messages.messages",
"title": "Direct Messages Messages",
"description": "Execute Direct Messages Messages in Topolo Chat.",
"method": "GET",
"path": "/api/dms/{conversationId}/messages",
"permission": "direct_messages:read",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"minLength": 1
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 500
},
"before": {
"type": "string"
}
},
"required": [
"conversationId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"authorizationMode": "static",
"documentation": {
"example_input": {
"conversationId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/dms/example/messages",
"body": null
},
"effects": "Reads state through GET /api/dms/{conversationId}/messages 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/dms/*/messages",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "direct_messages.thread",
"title": "Direct Messages Thread",
"description": "Execute Direct Messages Thread in Topolo Chat.",
"method": "GET",
"path": "/api/dms/{conversationId}/messages/{messageId}/thread",
"permission": "direct_messages:read",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"minLength": 1
},
"messageId": {
"type": "string",
"minLength": 1
}
},
"required": [
"conversationId",
"messageId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"authorizationMode": "static",
"documentation": {
"example_input": {
"conversationId": "example",
"messageId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/dms/example/messages/example/thread",
"body": null
},
"effects": "Reads state through GET /api/dms/{conversationId}/messages/{messageId}/thread 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/dms/*/messages/*/thread",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "direct_messages.forward",
"title": "Direct Messages Forward",
"description": "Execute Direct Messages Forward in Topolo Chat.",
"method": "POST",
"path": "/api/dms/{conversationId}/messages/forward",
"permission": "direct_messages:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"minLength": 1
},
"sourceKind": {
"type": "string",
"enum": [
"channel",
"dm"
]
},
"sourceConversationId": {
"type": "string",
"minLength": 1
},
"sourceMessageId": {
"type": "string",
"minLength": 1
}
},
"required": [
"conversationId",
"sourceKind",
"sourceConversationId",
"sourceMessageId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"conversationId": "example",
"sourceKind": "channel",
"sourceConversationId": "example",
"sourceMessageId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/dms/example/messages/forward",
"body": {
"conversationId": "example",
"sourceKind": "channel",
"sourceConversationId": "example",
"sourceMessageId": "example"
}
},
"effects": "May change state through POST /api/dms/{conversationId}/messages/forward. 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/dms/*/messages/forward",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "direct_messages.save",
"title": "Direct Messages Save",
"description": "Execute Direct Messages Save in Topolo Chat.",
"method": "POST",
"path": "/api/dms/{conversationId}/messages/{messageId}/save",
"permission": "direct_messages:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"minLength": 1
},
"messageId": {
"type": "string",
"minLength": 1
}
},
"required": [
"conversationId",
"messageId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"conversationId": "example",
"messageId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/dms/example/messages/example/save",
"body": {
"conversationId": "example",
"messageId": "example"
}
},
"effects": "May change state through POST /api/dms/{conversationId}/messages/{messageId}/save. 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/dms/*/messages/*/save",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "direct_messages.send",
"title": "Direct Messages Send",
"description": "Execute Direct Messages Send in Topolo Chat.",
"method": "POST",
"path": "/api/dms/{conversationId}/messages",
"permission": "direct_messages:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
},
"threadParentId": {
"type": "string",
"minLength": 1
}
},
"required": [
"conversationId",
"body"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"conversationId": "example",
"body": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/dms/example/messages",
"body": {
"conversationId": "example",
"body": "example"
}
},
"effects": "May change state through POST /api/dms/{conversationId}/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/dms/*/messages",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "direct_messages.update",
"title": "Direct Messages Update",
"description": "Execute Direct Messages Update in Topolo Chat.",
"method": "POST",
"path": "/api/dms/{conversationId}/messages/{messageId}/update",
"permission": "direct_messages:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"minLength": 1
},
"messageId": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
}
},
"required": [
"conversationId",
"messageId",
"body"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"conversationId": "example",
"messageId": "example",
"body": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/dms/example/messages/example/update",
"body": {
"conversationId": "example",
"messageId": "example",
"body": "example"
}
},
"effects": "May change state through POST /api/dms/{conversationId}/messages/{messageId}/update. 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/dms/*/messages/*/update",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "direct_messages.delete",
"title": "Direct Messages Delete",
"description": "Execute Direct Messages Delete in Topolo Chat.",
"method": "POST",
"path": "/api/dms/{conversationId}/messages/{messageId}/delete",
"permission": "direct_messages:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"minLength": 1
},
"messageId": {
"type": "string",
"minLength": 1
}
},
"required": [
"conversationId",
"messageId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": true,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"conversationId": "example",
"messageId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/dms/example/messages/example/delete",
"body": {
"conversationId": "example",
"messageId": "example"
}
},
"effects": "May change state through POST /api/dms/{conversationId}/messages/{messageId}/delete. 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/dms/*/messages/*/delete",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "direct_messages.react",
"title": "Direct Messages React",
"description": "Execute Direct Messages React in Topolo Chat.",
"method": "POST",
"path": "/api/dms/{conversationId}/messages/{messageId}/reactions",
"permission": "direct_messages:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"minLength": 1
},
"messageId": {
"type": "string",
"minLength": 1
},
"emoji": {
"type": "string",
"minLength": 1
}
},
"required": [
"conversationId",
"messageId",
"emoji"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"conversationId": "example",
"messageId": "example",
"emoji": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/dms/example/messages/example/reactions",
"body": {
"conversationId": "example",
"messageId": "example",
"emoji": "example"
}
},
"effects": "May change state through POST /api/dms/{conversationId}/messages/{messageId}/reactions. 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/dms/*/messages/*/reactions",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "direct_messages.mark_unread",
"title": "Direct Messages Mark Unread",
"description": "Execute Direct Messages Mark Unread in Topolo Chat.",
"method": "POST",
"path": "/api/dms/{conversationId}/messages/{messageId}/unread",
"permission": "direct_messages:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"minLength": 1
},
"messageId": {
"type": "string",
"minLength": 1
}
},
"required": [
"conversationId",
"messageId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"conversationId": "example",
"messageId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/dms/example/messages/example/unread",
"body": {
"conversationId": "example",
"messageId": "example"
}
},
"effects": "May change state through POST /api/dms/{conversationId}/messages/{messageId}/unread. 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/dms/*/messages/*/unread",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "direct_messages.mark_read",
"title": "Direct Messages Mark Read",
"description": "Execute Direct Messages Mark Read in Topolo Chat.",
"method": "POST",
"path": "/api/dms/{conversationId}/read",
"permission": "direct_messages:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"minLength": 1
}
},
"required": [
"conversationId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"conversationId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/dms/example/read",
"body": {
"conversationId": "example"
}
},
"effects": "May change state through POST /api/dms/{conversationId}/read. 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/dms/*/read",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "direct_messages.mute",
"title": "Direct Messages Mute",
"description": "Execute Direct Messages Mute in Topolo Chat.",
"method": "POST",
"path": "/api/dms/{conversationId}/mute",
"permission": "direct_messages:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"minLength": 1
},
"muted": {
"type": "boolean"
}
},
"required": [
"conversationId",
"muted"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"conversationId": "example",
"muted": true
},
"cli_example": [
"topolo actions --service topolo-chat --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/dms/example/mute",
"body": {
"conversationId": "example",
"muted": true
}
},
"effects": "May change state through POST /api/dms/{conversationId}/mute. 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/dms/*/mute",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "direct_messages.archive",
"title": "Direct Messages Archive",
"description": "Execute Direct Messages Archive in Topolo Chat.",
"method": "POST",
"path": "/api/dms/{conversationId}/archive",
"permission": "direct_messages:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"minLength": 1
},
"archived": {
"type": "boolean"
}
},
"required": [
"conversationId",
"archived"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"conversationId": "example",
"archived": true
},
"cli_example": [
"topolo actions --service topolo-chat --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/dms/example/archive",
"body": {
"conversationId": "example",
"archived": true
}
},
"effects": "May change state through POST /api/dms/{conversationId}/archive. 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/dms/*/archive",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "audit_events.list",
"title": "Audit Events List",
"description": "Execute Audit Events List in Topolo Chat.",
"method": "GET",
"path": "/api/audit-events",
"permission": "audit:read",
"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",
"authorizationMode": "static",
"documentation": {
"example_input": {},
"cli_example": [
"topolo actions --service topolo-chat --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/audit-events",
"body": null
},
"effects": "Reads state through GET /api/audit-events without a declared mutation.",
"verification": [
"Check the structured action result and pagination or resource identifiers before using it downstream."
],
"recovery": [
"Correct identity, resource context, permission, or input validation failures, then retry the read."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "GET /api/audit-events",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "files.download",
"title": "Files Download",
"description": "Execute Files Download in Topolo Chat.",
"method": "GET",
"path": "/api/files/{fileKey}",
"permission": "messages:read",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"fileKey": {
"type": "string",
"minLength": 1
}
},
"required": [
"fileKey"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"authorizationMode": "static",
"documentation": {
"example_input": {
"fileKey": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/files/example",
"body": null
},
"effects": "Reads state through GET /api/files/{fileKey} 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/files/*",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "meetings.get",
"title": "Meetings Get",
"description": "Execute Meetings Get in Topolo Chat.",
"method": "GET",
"path": "/api/meetings/{meetingId}",
"permission": "meetings:read",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"meetingId": {
"type": "string",
"minLength": 1
}
},
"required": [
"meetingId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"authorizationMode": "static",
"documentation": {
"example_input": {
"meetingId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings/example",
"body": null
},
"effects": "Reads state through GET /api/meetings/{meetingId} 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/meetings/*",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "meeting_messages.list",
"title": "Meeting Messages List",
"description": "Execute Meeting Messages List in Topolo Chat.",
"method": "GET",
"path": "/api/meetings/{meetingId}/messages",
"permission": "meetings:read",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"meetingId": {
"type": "string",
"minLength": 1
}
},
"required": [
"meetingId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"authorizationMode": "static",
"documentation": {
"example_input": {
"meetingId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings/example/messages",
"body": null
},
"effects": "Reads state through GET /api/meetings/{meetingId}/messages 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/meetings/*/messages",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "meeting_messages.send",
"title": "Meeting Messages Send",
"description": "Execute Meeting Messages Send in Topolo Chat.",
"method": "POST",
"path": "/api/meetings/{meetingId}/messages",
"permission": "meetings:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"meetingId": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
}
},
"required": [
"meetingId",
"body"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"meetingId": "example",
"body": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings/example/messages",
"body": {
"meetingId": "example",
"body": "example"
}
},
"effects": "May change state through POST /api/meetings/{meetingId}/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/meetings/*/messages",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "meeting_messages.react",
"title": "Meeting Messages React",
"description": "Execute Meeting Messages React in Topolo Chat.",
"method": "POST",
"path": "/api/meetings/{meetingId}/messages/{messageId}/reactions",
"permission": "meetings:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"meetingId": {
"type": "string",
"minLength": 1
},
"messageId": {
"type": "string",
"minLength": 1
},
"emoji": {
"type": "string",
"minLength": 1
}
},
"required": [
"meetingId",
"messageId",
"emoji"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"meetingId": "example",
"messageId": "example",
"emoji": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings/example/messages/example/reactions",
"body": {
"meetingId": "example",
"messageId": "example",
"emoji": "example"
}
},
"effects": "May change state through POST /api/meetings/{meetingId}/messages/{messageId}/reactions. 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/meetings/*/messages/*/reactions",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "meeting_polls.list",
"title": "Meeting Polls List",
"description": "Execute Meeting Polls List in Topolo Chat.",
"method": "GET",
"path": "/api/meetings/{meetingId}/polls",
"permission": "meetings:read",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"meetingId": {
"type": "string",
"minLength": 1
}
},
"required": [
"meetingId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"authorizationMode": "static",
"documentation": {
"example_input": {
"meetingId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings/example/polls",
"body": null
},
"effects": "Reads state through GET /api/meetings/{meetingId}/polls 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/meetings/*/polls",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "meeting_polls.create",
"title": "Meeting Polls Create",
"description": "Execute Meeting Polls Create in Topolo Chat.",
"method": "POST",
"path": "/api/meetings/{meetingId}/polls",
"permission": "meetings:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"meetingId": {
"type": "string",
"minLength": 1
},
"question": {
"type": "string",
"minLength": 1
},
"options": {
"minItems": 2,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
}
},
"required": [
"meetingId",
"question",
"options"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"meetingId": "example",
"question": "example",
"options": [
"example",
"example"
]
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings/example/polls",
"body": {
"meetingId": "example",
"question": "example",
"options": [
"example",
"example"
]
}
},
"effects": "May change state through POST /api/meetings/{meetingId}/polls. 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/meetings/*/polls",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "meeting_polls.vote",
"title": "Meeting Polls Vote",
"description": "Execute Meeting Polls Vote in Topolo Chat.",
"method": "POST",
"path": "/api/meetings/{meetingId}/polls/{pollId}/vote",
"permission": "meetings:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"meetingId": {
"type": "string",
"minLength": 1
},
"pollId": {
"type": "string",
"minLength": 1
},
"optionIndex": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"meetingId",
"pollId",
"optionIndex"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"meetingId": "example",
"pollId": "example",
"optionIndex": 1
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings/example/polls/example/vote",
"body": {
"meetingId": "example",
"pollId": "example",
"optionIndex": 1
}
},
"effects": "May change state through POST /api/meetings/{meetingId}/polls/{pollId}/vote. 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/meetings/*/polls/*/vote",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "meeting_notes.create",
"title": "Meeting Notes Create",
"description": "Execute Meeting Notes Create in Topolo Chat.",
"method": "POST",
"path": "/api/meetings/{meetingId}/notes",
"permission": "meetings:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"meetingId": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
}
},
"required": [
"meetingId",
"body"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"meetingId": "example",
"body": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings/example/notes",
"body": {
"meetingId": "example",
"body": "example"
}
},
"effects": "May change state through POST /api/meetings/{meetingId}/notes. 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/meetings/*/notes",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "meetings.calendar",
"title": "Meetings Calendar",
"description": "Execute Meetings Calendar in Topolo Chat.",
"method": "GET",
"path": "/api/meetings/{meetingId}/calendar",
"permission": "meetings:read",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"meetingId": {
"type": "string",
"minLength": 1
}
},
"required": [
"meetingId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"authorizationMode": "static",
"documentation": {
"example_input": {
"meetingId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings/example/calendar",
"body": null
},
"effects": "Reads state through GET /api/meetings/{meetingId}/calendar 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/meetings/*/calendar",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "meetings.update",
"title": "Meetings Update",
"description": "Execute Meetings Update in Topolo Chat.",
"method": "POST",
"path": "/api/meetings/{meetingId}/update",
"permission": "meetings:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"meetingId": {
"type": "string",
"minLength": 1
},
"title": {
"type": "string",
"minLength": 1
},
"description": {
"type": "string",
"minLength": 1
},
"startsAt": {
"type": "string"
},
"durationMinutes": {
"type": "number",
"exclusiveMinimum": 0
},
"reminderMinutes": {
"type": "number",
"minimum": 0
},
"recurrenceRule": {
"type": "string",
"enum": [
"none",
"daily",
"weekdays",
"weekly"
]
},
"status": {
"type": "string",
"enum": [
"live",
"scheduled",
"completed",
"cancelled"
]
}
},
"required": [
"meetingId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"meetingId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings/example/update",
"body": {
"meetingId": "example"
}
},
"effects": "May change state through POST /api/meetings/{meetingId}/update. 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/meetings/*/update",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "meetings.delete",
"title": "Meetings Delete",
"description": "Execute Meetings Delete in Topolo Chat.",
"method": "DELETE",
"path": "/api/meetings/{meetingId}",
"permission": "meetings:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"meetingId": {
"type": "string",
"minLength": 1
}
},
"required": [
"meetingId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": true,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"meetingId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings/example",
"body": null
},
"effects": "May change state through DELETE /api/meetings/{meetingId}. 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/meetings/*",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "meetings.guest_invite",
"title": "Meetings Guest Invite",
"description": "Execute Meetings Guest Invite in Topolo Chat.",
"method": "POST",
"path": "/api/meetings/{meetingId}/guest-invites",
"permission": "meetings:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"meetingId": {
"type": "string",
"minLength": 1
},
"email": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
}
},
"required": [
"meetingId",
"email"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"meetingId": "example",
"email": "user@example.com"
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings/example/guest-invites",
"body": {
"meetingId": "example",
"email": "user@example.com"
}
},
"effects": "May change state through POST /api/meetings/{meetingId}/guest-invites. 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/meetings/*/guest-invites",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "meetings.transcript",
"title": "Meetings Transcript",
"description": "Execute Meetings Transcript in Topolo Chat.",
"method": "GET",
"path": "/api/meetings/{meetingId}/transcript",
"permission": "meetings:read",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"meetingId": {
"type": "string",
"minLength": 1
}
},
"required": [
"meetingId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"authorizationMode": "static",
"documentation": {
"example_input": {
"meetingId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings/example/transcript",
"body": null
},
"effects": "Reads state through GET /api/meetings/{meetingId}/transcript 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/meetings/*/transcript",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "meetings.join_token",
"title": "Meetings Join Token",
"description": "Execute Meetings Join Token in Topolo Chat.",
"method": "POST",
"path": "/api/meetings/{meetingId}/join-token",
"permission": "meetings:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"meetingId": {
"type": "string",
"minLength": 1
}
},
"required": [
"meetingId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"meetingId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings/example/join-token",
"body": {
"meetingId": "example"
}
},
"effects": "May change state through POST /api/meetings/{meetingId}/join-token. 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/meetings/*/join-token",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "meetings.admit",
"title": "Meetings Admit",
"description": "Execute Meetings Admit in Topolo Chat.",
"method": "POST",
"path": "/api/meetings/{meetingId}/admit",
"permission": "meetings:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"meetingId": {
"type": "string",
"minLength": 1
},
"participantId": {
"type": "string",
"minLength": 1
}
},
"required": [
"meetingId",
"participantId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"meetingId": "example",
"participantId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings/example/admit",
"body": {
"meetingId": "example",
"participantId": "example"
}
},
"effects": "May change state through POST /api/meetings/{meetingId}/admit. 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/meetings/*/admit",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "meetings.remove_participant",
"title": "Meetings Remove Participant",
"description": "Execute Meetings Remove Participant in Topolo Chat.",
"method": "POST",
"path": "/api/meetings/{meetingId}/remove-participant",
"permission": "meetings:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"meetingId": {
"type": "string",
"minLength": 1
},
"participantId": {
"type": "string",
"minLength": 1
}
},
"required": [
"meetingId",
"participantId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": true,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"meetingId": "example",
"participantId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings/example/remove-participant",
"body": {
"meetingId": "example",
"participantId": "example"
}
},
"effects": "May change state through POST /api/meetings/{meetingId}/remove-participant. 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/meetings/*/remove-participant",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "meetings.update_role",
"title": "Meetings Update Role",
"description": "Execute Meetings Update Role in Topolo Chat.",
"method": "POST",
"path": "/api/meetings/{meetingId}/update-role",
"permission": "meetings:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"meetingId": {
"type": "string",
"minLength": 1
},
"participantId": {
"type": "string",
"minLength": 1
},
"role": {
"type": "string",
"enum": [
"host",
"co_host",
"presenter",
"participant",
"guest"
]
}
},
"required": [
"meetingId",
"participantId",
"role"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"meetingId": "example",
"participantId": "example",
"role": "host"
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings/example/update-role",
"body": {
"meetingId": "example",
"participantId": "example",
"role": "host"
}
},
"effects": "May change state through POST /api/meetings/{meetingId}/update-role. 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/meetings/*/update-role",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "meetings.lock",
"title": "Meetings Lock",
"description": "Execute Meetings Lock in Topolo Chat.",
"method": "POST",
"path": "/api/meetings/{meetingId}/lock",
"permission": "meetings:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"meetingId": {
"type": "string",
"minLength": 1
},
"locked": {
"type": "boolean"
}
},
"required": [
"meetingId",
"locked"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"meetingId": "example",
"locked": true
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings/example/lock",
"body": {
"meetingId": "example",
"locked": true
}
},
"effects": "May change state through POST /api/meetings/{meetingId}/lock. 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/meetings/*/lock",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "meetings.recording_start",
"title": "Meetings Recording Start",
"description": "Execute Meetings Recording Start in Topolo Chat.",
"method": "POST",
"path": "/api/meetings/{meetingId}/recording/start",
"permission": "meetings:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"meetingId": {
"type": "string",
"minLength": 1
}
},
"required": [
"meetingId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"meetingId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings/example/recording/start",
"body": {
"meetingId": "example"
}
},
"effects": "May change state through POST /api/meetings/{meetingId}/recording/start. 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/meetings/*/recording/start",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "meetings.recording_stop",
"title": "Meetings Recording Stop",
"description": "Execute Meetings Recording Stop in Topolo Chat.",
"method": "POST",
"path": "/api/meetings/{meetingId}/recording/stop",
"permission": "meetings:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"meetingId": {
"type": "string",
"minLength": 1
}
},
"required": [
"meetingId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"meetingId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings/example/recording/stop",
"body": {
"meetingId": "example"
}
},
"effects": "May change state through POST /api/meetings/{meetingId}/recording/stop. 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/meetings/*/recording/stop",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "meetings.captions_toggle",
"title": "Meetings Captions Toggle",
"description": "Execute Meetings Captions Toggle in Topolo Chat.",
"method": "POST",
"path": "/api/meetings/{meetingId}/captions/toggle",
"permission": "meetings:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"meetingId": {
"type": "string",
"minLength": 1
},
"enabled": {
"type": "boolean"
}
},
"required": [
"meetingId",
"enabled"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"meetingId": "example",
"enabled": true
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings/example/captions/toggle",
"body": {
"meetingId": "example",
"enabled": true
}
},
"effects": "May change state through POST /api/meetings/{meetingId}/captions/toggle. 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/meetings/*/captions/toggle",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "remote_assist.request",
"title": "Remote Assist Request",
"description": "Execute Remote Assist Request in Topolo Chat.",
"method": "POST",
"path": "/api/meetings/{meetingId}/remote-assist/request",
"permission": "meetings:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"meetingId": {
"type": "string",
"minLength": 1
},
"hostName": {
"type": "string",
"minLength": 1
}
},
"required": [
"meetingId",
"hostName"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"meetingId": "example",
"hostName": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings/example/remote-assist/request",
"body": {
"meetingId": "example",
"hostName": "example"
}
},
"effects": "May change state through POST /api/meetings/{meetingId}/remote-assist/request. 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/meetings/*/remote-assist/request",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "remote_assist.approve",
"title": "Remote Assist Approve",
"description": "Execute Remote Assist Approve in Topolo Chat.",
"method": "POST",
"path": "/api/meetings/{meetingId}/remote-assist/{sessionId}/approve",
"permission": "meetings:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"meetingId": {
"type": "string",
"minLength": 1
},
"sessionId": {
"type": "string",
"minLength": 1
}
},
"required": [
"meetingId",
"sessionId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"meetingId": "example",
"sessionId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings/example/remote-assist/example/approve",
"body": {
"meetingId": "example",
"sessionId": "example"
}
},
"effects": "May change state through POST /api/meetings/{meetingId}/remote-assist/{sessionId}/approve. 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/meetings/*/remote-assist/*/approve",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "remote_assist.revoke",
"title": "Remote Assist Revoke",
"description": "Execute Remote Assist Revoke in Topolo Chat.",
"method": "POST",
"path": "/api/meetings/{meetingId}/remote-assist/{sessionId}/revoke",
"permission": "meetings:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"meetingId": {
"type": "string",
"minLength": 1
},
"sessionId": {
"type": "string",
"minLength": 1
}
},
"required": [
"meetingId",
"sessionId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": true,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"meetingId": "example",
"sessionId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings/example/remote-assist/example/revoke",
"body": {
"meetingId": "example",
"sessionId": "example"
}
},
"effects": "May change state through POST /api/meetings/{meetingId}/remote-assist/{sessionId}/revoke. 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/meetings/*/remote-assist/*/revoke",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "remote_assist.state",
"title": "Remote Assist State",
"description": "Execute Remote Assist State in Topolo Chat.",
"method": "GET",
"path": "/api/meetings/{meetingId}/remote-assist/{sessionId}/state",
"permission": "meetings:read",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"meetingId": {
"type": "string",
"minLength": 1
},
"sessionId": {
"type": "string",
"minLength": 1
}
},
"required": [
"meetingId",
"sessionId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"authorizationMode": "static",
"documentation": {
"example_input": {
"meetingId": "example",
"sessionId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/meetings/example/remote-assist/example/state",
"body": null
},
"effects": "Reads state through GET /api/meetings/{meetingId}/remote-assist/{sessionId}/state 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/meetings/*/remote-assist/*/state",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "operational_threads.list",
"title": "Operational Threads List",
"description": "Execute Operational Threads List in Topolo Chat.",
"method": "GET",
"path": "/api/operational-threads",
"permission": "operational_threads:read",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"view": {
"type": "string",
"enum": [
"open",
"recent"
]
},
"state": {
"type": "string",
"enum": [
"open",
"acknowledged",
"snoozed",
"resolved"
]
},
"updatedAfter": {
"type": "string"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200
},
"sourceSystem": {
"type": "string"
},
"externalRef": {
"type": "string"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"authorizationMode": "static",
"documentation": {
"example_input": {
"view": "open",
"state": "open",
"updatedAfter": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/operational-threads",
"body": null
},
"effects": "Reads state through GET /api/operational-threads 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/operational-threads",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "operational_threads.get",
"title": "Operational Threads Get",
"description": "Execute Operational Threads Get in Topolo Chat.",
"method": "GET",
"path": "/api/operational-threads/{threadId}",
"permission": "operational_threads:read",
"readOnly": true,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"threadId": {
"type": "string",
"minLength": 1
}
},
"required": [
"threadId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": false,
"agentAccess": "auto",
"authorizationMode": "static",
"documentation": {
"example_input": {
"threadId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/operational-threads/example",
"body": null
},
"effects": "Reads state through GET /api/operational-threads/{threadId} 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/operational-threads/*",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "operational_threads.create",
"title": "Operational Threads Create",
"description": "Execute Operational Threads Create in Topolo Chat.",
"method": "POST",
"path": "/api/operational-threads",
"permission": "operational_threads:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"summary": {
"type": "string",
"minLength": 1
},
"severity": {
"type": "string"
},
"state": {
"type": "string",
"enum": [
"open",
"acknowledged",
"snoozed",
"resolved"
]
},
"sourceSystem": {
"type": "string"
},
"externalRef": {
"type": "string"
},
"ownerId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"snoozedUntil": {
"type": "string"
}
},
"required": [
"title",
"summary"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"title": "example",
"summary": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/operational-threads",
"body": {
"title": "example",
"summary": "example"
}
},
"effects": "May change state through POST /api/operational-threads. 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/operational-threads",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "operational_threads.update",
"title": "Operational Threads Update",
"description": "Execute Operational Threads Update in Topolo Chat.",
"method": "POST",
"path": "/api/operational-threads/{threadId}/update",
"permission": "operational_threads:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"threadId": {
"type": "string",
"minLength": 1
},
"title": {
"type": "string",
"minLength": 1
},
"summary": {
"type": "string",
"minLength": 1
},
"severity": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"sourceSystem": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"externalRef": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"threadId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"threadId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/operational-threads/example/update",
"body": {
"threadId": "example"
}
},
"effects": "May change state through POST /api/operational-threads/{threadId}/update. 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/operational-threads/*/update",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "operational_threads.transition",
"title": "Operational Threads Transition",
"description": "Execute Operational Threads Transition in Topolo Chat.",
"method": "POST",
"path": "/api/operational-threads/{threadId}/state",
"permission": "operational_threads:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"threadId": {
"type": "string",
"minLength": 1
},
"state": {
"type": "string",
"enum": [
"open",
"acknowledged",
"snoozed",
"resolved"
]
},
"snoozedUntil": {
"type": "string"
}
},
"required": [
"threadId",
"state"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"threadId": "example",
"state": "open"
},
"cli_example": [
"topolo actions --service topolo-chat --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/operational-threads/example/state",
"body": {
"threadId": "example",
"state": "open"
}
},
"effects": "May change state through POST /api/operational-threads/{threadId}/state. 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/operational-threads/*/state",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "operational_threads.assign_owner",
"title": "Operational Threads Assign Owner",
"description": "Execute Operational Threads Assign Owner in Topolo Chat.",
"method": "POST",
"path": "/api/operational-threads/{threadId}/owner",
"permission": "operational_threads:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"threadId": {
"type": "string",
"minLength": 1
},
"ownerId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"threadId",
"ownerId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"threadId": "example",
"ownerId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/operational-threads/example/owner",
"body": {
"threadId": "example",
"ownerId": "example"
}
},
"effects": "May change state through POST /api/operational-threads/{threadId}/owner. 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/operational-threads/*/owner",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "operational_threads.comment",
"title": "Operational Threads Comment",
"description": "Execute Operational Threads Comment in Topolo Chat.",
"method": "POST",
"path": "/api/operational-threads/{threadId}/comments",
"permission": "operational_threads:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"threadId": {
"type": "string",
"minLength": 1
},
"body": {
"type": "string",
"minLength": 1
}
},
"required": [
"threadId",
"body"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"threadId": "example",
"body": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/operational-threads/example/comments",
"body": {
"threadId": "example",
"body": "example"
}
},
"effects": "May change state through POST /api/operational-threads/{threadId}/comments. 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/operational-threads/*/comments",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "notification_preferences.update",
"title": "Notification Preferences Update",
"description": "Execute Notification Preferences Update in Topolo Chat.",
"method": "POST",
"path": "/api/notification-preferences",
"permission": "workspace:read",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"directMessages": {
"type": "boolean"
},
"channelMentions": {
"type": "boolean"
},
"meetingReminders": {
"type": "boolean"
},
"recordingAlerts": {
"type": "boolean"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"directMessages": true,
"channelMentions": true,
"meetingReminders": true
},
"cli_example": [
"topolo actions --service topolo-chat --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/notification-preferences",
"body": {
"directMessages": true,
"channelMentions": true,
"meetingReminders": true
}
},
"effects": "May change state through POST /api/notification-preferences. 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/notification-preferences",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "workspace_policies.update",
"title": "Workspace Policies Update",
"description": "Execute Workspace Policies Update in Topolo Chat.",
"method": "POST",
"path": "/api/workspace-policies",
"permission": "settings:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"guestsEnabled": {
"type": "boolean"
},
"waitingRoomDefault": {
"type": "boolean"
},
"recordingEnabled": {
"type": "boolean"
},
"transcriptsEnabled": {
"type": "boolean"
},
"screenShareEnabled": {
"type": "boolean"
},
"remoteAssistEnabled": {
"type": "boolean"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"guestsEnabled": true,
"waitingRoomDefault": true,
"recordingEnabled": true
},
"cli_example": [
"topolo actions --service topolo-chat --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/workspace-policies",
"body": {
"guestsEnabled": true,
"waitingRoomDefault": true,
"recordingEnabled": true
}
},
"effects": "May change state through POST /api/workspace-policies. 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/workspace-policies",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "uploads.content",
"title": "Uploads Content",
"description": "Execute Uploads Content in Topolo Chat.",
"method": "PUT",
"path": "/api/uploads/{uploadId}/content",
"permission": "uploads:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"uploadId": {
"type": "string",
"minLength": 1
}
},
"required": [
"uploadId"
],
"additionalProperties": {}
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"uploadId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --json",
"topolo actions get <action-id> --json",
"topolo actions validate <action-id> --data @payload.json --json",
"topolo actions plan <action-id> --data @payload.json --json",
"topolo actions call <action-id> --data @payload.json --confirm --json"
],
"http_example": {
"method": "PUT",
"path": "/api/uploads/example/content",
"body": {
"uploadId": "example"
}
},
"effects": "May change state through PUT /api/uploads/{uploadId}/content. Inspect the plan and honor the published confirmation policy.",
"verification": [
"Check the structured action result.",
"Read the affected resource back through the corresponding get or list action."
],
"recovery": [
"Do not retry an ambiguous mutation until a read confirms whether it applied.",
"Use a published inverse, update, archive, or delete action only after inspecting its contract."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "PUT /api/uploads/*/content",
"evidence": "Matched to a served route extracted from canonical staging source."
}
},
{
"name": "uploads.complete",
"title": "Uploads Complete",
"description": "Execute Uploads Complete in Topolo Chat.",
"method": "POST",
"path": "/api/uploads/complete",
"permission": "uploads:write",
"readOnly": false,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"uploadId": {
"type": "string",
"minLength": 1
},
"conversationKind": {
"type": "string",
"enum": [
"channel",
"dm"
]
},
"conversationId": {
"type": "string",
"minLength": 1
},
"messageBody": {
"type": "string"
},
"threadParentId": {
"type": "string",
"minLength": 1
},
"thread_parent_id": {
"type": "string",
"minLength": 1
}
},
"required": [
"uploadId",
"conversationKind",
"conversationId"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"additionalProperties": true
},
"target": "api",
"destructive": false,
"requiresConfirmation": true,
"agentAccess": "confirm",
"authorizationMode": "static",
"documentation": {
"example_input": {
"uploadId": "example",
"conversationKind": "channel",
"conversationId": "example"
},
"cli_example": [
"topolo actions --service topolo-chat --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/uploads/complete",
"body": {
"uploadId": "example",
"conversationKind": "channel",
"conversationId": "example"
}
},
"effects": "May change state through POST /api/uploads/complete. Inspect the plan and honor the published confirmation policy.",
"verification": [
"Check the structured action result.",
"Read the affected resource back through the corresponding get or list action."
],
"recovery": [
"Do not retry an ambiguous mutation until a read confirms whether it applied.",
"Use a published inverse, update, archive, or delete action only after inspecting its contract."
],
"docs_url": null,
"resource": null,
"next_action_ids": [],
"rollback_action_id": null
},
"implementation": {
"status": "implemented",
"route_key": "POST /api/uploads/complete",
"evidence": "Matched to a served route extracted from canonical staging source."
}
}
],
"action_coverage": {
"status": "ok",
"served_routes": 130,
"matched_actions": 100,
"declared_unserved_actions": [
"GET /api/widget"
],
"coverage_excluded_actions": [],
"uncatalogued_routes": [],
"ignored_routes": 30,
"configured_exclusions": 38,
"configuration_findings": [
"* /api/*: exclusion matches no served route",
"* /api/guest/*: exclusion matches no served route",
"* /api/launch/*: exclusion matches no served route",
"GET /desktop: exclusion matches no served route",
"GET /api/desktop/download: exclusion matches no served route",
"GET /api/desktop/releases/latest: exclusion matches no served route",
"* /api/internal/*: exclusion matches no served route",
"* /api/meetings/webhooks/*: exclusion matches no served route"
],
"notes": [
"4 manually-declared route(s)"
]
},
"runtime_contract_audit": {
"status": "verified",
"actions": 101,
"contracts": 101,
"contract_module": "topolo.action-contracts.mjs",
"validator_sources": [
"apps/api/src/index.ts"
],
"authorization_sources": [
"apps/api/src/index.ts"
],
"findings": []
}
}
],
"mobile_contracts": [
{
"source_path": "apps/TopoloChat/topolo.mobile-experience.json",
"contract": {
"version": "2026-06-27",
"status": "approved",
"mode": "native_capability",
"appId": "app_topolo_chat",
"localizationNamespace": "chat",
"permissions": [
"chat.threads.read",
"chat.messages.write"
],
"offlinePolicy": "read_through_cache",
"fallbackPath": "/threads",
"auth": {
"audience": "topolo-chat",
"scopes": [
"chat.threads:read",
"chat.messages:write"
]
},
"routes": [
{
"path": "/threads",
"title": "Threads",
"titleKey": "chat.mobile.routes.threads.title",
"template": "chat.threadList",
"dataSource": "chat.threads.list",
"apiPath": "/api/channels",
"detailRoute": "/threads/:id"
},
{
"path": "/threads/:id",
"title": "Thread",
"titleKey": "chat.mobile.routes.thread.title",
"template": "chat.thread",
"dataSource": "chat.threads.detail",
"apiPath": "/api/channels/:id/messages",
"actions": [
{
"id": "chat.messages.send",
"title": "Send message",
"titleKey": "chat.mobile.actions.sendMessage.title",
"type": "message.send",
"permission": "chat.messages.write",
"method": "POST",
"path": "/api/threads/:id/messages"
}
]
}
]
}
}
],
"package_manifests": [],
"deployment_configs": [],
"source_signals": {
"api_routes": [
{
"method": "LITERAL",
"path": "/presence",
"source_path": "apps/TopoloChat/apps/api/src/durable-objects.ts"
},
{
"method": "ALL",
"path": "*",
"source_path": "apps/TopoloChat/apps/api/src/index.ts"
},
{
"method": "LITERAL",
"path": "/desktop",
"source_path": "apps/TopoloChat/apps/api/src/index.ts"
},
{
"method": "LITERAL",
"path": "/healthz",
"source_path": "apps/TopoloChat/apps/api/src/index.ts"
},
{
"method": "LITERAL",
"path": "/readyz",
"source_path": "apps/TopoloChat/apps/api/src/index.ts"
},
{
"method": "LITERAL",
"path": "/api/widget",
"source_path": "apps/TopoloChat/apps/api/src/index.ts"
},
{
"method": "LITERAL",
"path": "/api/desktop/releases/latest",
"source_path": "apps/TopoloChat/apps/api/src/index.ts"
},
{
"method": "LITERAL",
"path": "/api/desktop/download",
"source_path": "apps/TopoloChat/apps/api/src/index.ts"
}
],
"ui_routes": [
{
"path": "/app",
"source_path": "apps/TopoloChat/apps/web/src/client/App.tsx"
},
{
"path": "/app/inbox",
"source_path": "apps/TopoloChat/apps/web/src/client/App.tsx"
},
{
"path": "/app/channels",
"source_path": "apps/TopoloChat/apps/web/src/client/App.tsx"
},
{
"path": "/app/dms",
"source_path": "apps/TopoloChat/apps/web/src/client/App.tsx"
},
{
"path": "/app/meetings",
"source_path": "apps/TopoloChat/apps/web/src/client/App.tsx"
},
{
"path": "/app/settings",
"source_path": "apps/TopoloChat/apps/web/src/client/App.tsx"
},
{
"path": "/app/settings/:section",
"source_path": "apps/TopoloChat/apps/web/src/client/App.tsx"
},
{
"path": "/app/templates",
"source_path": "apps/TopoloChat/apps/web/src/client/App.tsx"
},
{
"path": "/app/getting-started",
"source_path": "apps/TopoloChat/apps/web/src/client/App.tsx"
},
{
"path": "/guest/meetings/:token",
"source_path": "apps/TopoloChat/apps/web/src/client/App.tsx"
},
{
"path": "/join",
"source_path": "apps/TopoloChat/apps/web/src/client/App.tsx"
}
],
"test_cases": [],
"database_tables": []
},
"documentation": {
"declared_paths": [
"internal/apps/chat",
"applications/chat"
],
"present_paths": [
"internal/apps/chat",
"applications/chat"
],
"missing_paths": [],
"human_reference": "/systems/topolo-chat",
"machine_reference": "/machine/systems/topolo-chat.json",
"action_examples": 101,
"action_schemas": 101
},
"source_findings": [
{
"type": "declared_unserved_actions",
"source_path": "apps/TopoloChat/topolo.app.json",
"detail": [
"GET /api/widget"
]
},
{
"type": "action_coverage_configuration",
"source_path": "apps/TopoloChat/topolo.app.json",
"detail": [
"* /api/*: exclusion matches no served route",
"* /api/guest/*: exclusion matches no served route",
"* /api/launch/*: exclusion matches no served route",
"GET /desktop: exclusion matches no served route",
"GET /api/desktop/download: exclusion matches no served route",
"GET /api/desktop/releases/latest: exclusion matches no served route",
"* /api/internal/*: exclusion matches no served route",
"* /api/meetings/webhooks/*: exclusion matches no served route"
]
}
]
}