application · active

TopoloCRM

CRM workflows, records, and SDR inbox/control-plane services exposed through the platform auth layer.

Documentation map

  • TopoloCRM — Public overview of the CRM service, pipeline surface, SDR inbox control plane, and developer-key access model.
  • Topolo Forms — Public overview of Topolo Forms, the Topolo general forms and public submission application.

Authority and runtime

System ID
topolo-crm
App IDs
app_topolo_crm
Owners
crm
Repositories
apps/TopoloCRM
Hosts
https://crm.topolo.app, https://crm-api.stg.topolo.us, https://crm.stg.topolo.us
Dependencies
topolo-auth, topolo-one, applications-packages

Security and data ownership

Risk tier
high
Tenant isolation
organization_scoped
Privacy classification
restricted
Storage
d1, external_provider, kv, r2
Export and deletion
planned
Enterprise ready
no

Source-derived capability inventory

Source revisions: apps/TopoloCRM@7b79b9768344e095e72f71c7f6d1a8dad22a156e

Declared actions: 134 · API routes: 8 · UI routes: 36

{
  "id": "topolo-crm",
  "name": "TopoloCRM",
  "slug": "topolo-crm",
  "kind": "application",
  "visibility": "public",
  "repo_paths": [
    "apps/TopoloCRM"
  ],
  "source_revisions": [
    {
      "source_path": "apps/TopoloCRM",
      "repository": "apps/TopoloCRM",
      "revision": "7b79b9768344e095e72f71c7f6d1a8dad22a156e",
      "ref": "origin/staging"
    }
  ],
  "source_counts": {
    "source_files": 217,
    "test_files": 133,
    "test_cases": 0,
    "migration_files": 0,
    "database_tables": 0,
    "manifests": 1,
    "deploy_targets": 2,
    "actions": 134,
    "mobile_contracts": 1,
    "notifications": 9,
    "package_manifests": 3,
    "deployment_configs": 0
  },
  "manifests": [
    {
      "source_path": "apps/TopoloCRM/topolo.app.json",
      "service_slug": "topolo-crm",
      "name": "topolo-crm",
      "app_id": "app_topolo_crm",
      "compatibility_date": "2026-04-10",
      "primary_target": null,
      "environments": [
        "production",
        "staging"
      ],
      "targets": [
        {
          "name": "web",
          "kind": "worker",
          "directory": "apps/web",
          "main": "src/worker.ts",
          "worker_name": "topolo-crm-app",
          "subdomain": "crm",
          "healthcheck_path": null,
          "variable_names": [
            "AUTH_API_URL",
            "INSIGHTS_SITE_KEY"
          ],
          "secret_names": [],
          "bindings": [
            {
              "kind": "services",
              "binding": "API",
              "target": null
            },
            {
              "kind": "services",
              "binding": "API",
              "target": null
            }
          ]
        },
        {
          "name": "api",
          "kind": "worker",
          "directory": "apps/api",
          "main": "index.ts",
          "worker_name": "topolo-crm-api",
          "subdomain": null,
          "healthcheck_path": "/health",
          "variable_names": [
            "account_id",
            "API_KEY_HASH_ITERATIONS",
            "API_KEY_PREFIX",
            "CRM_PUBLIC_BASE_URL",
            "ENVIRONMENT",
            "NEXUS_GATEWAY_URL",
            "NODE_ENV",
            "SALT_ROUNDS",
            "TOPOLO_AUTH_URL",
            "TOPOLO_NOTIFY_URL",
            "TOPOLO_SEED_APP_ID"
          ],
          "secret_names": [],
          "bindings": [
            {
              "kind": "d1",
              "binding": "CRM_CONTROL_DB",
              "target": null
            },
            {
              "kind": "d1",
              "binding": "CRM_DIRECTORY_DB",
              "target": null
            },
            {
              "kind": "d1",
              "binding": "CRM_PIPELINE_DB",
              "target": null
            },
            {
              "kind": "d1",
              "binding": "CRM_REAL_ESTATE_DB",
              "target": null
            },
            {
              "kind": "d1",
              "binding": "CRM_PORTAL_DB",
              "target": null
            },
            {
              "kind": "d1",
              "binding": "CRM_AUDIT_DB",
              "target": null
            },
            {
              "kind": "r2",
              "binding": "crm_attachments",
              "target": null
            },
            {
              "kind": "kv",
              "binding": "CRM_KV",
              "target": null
            }
          ]
        }
      ],
      "notifications": [
        "crm.deal.stage_changed",
        "crm.lead.assigned",
        "crm.offer.received",
        "crm.offer.status_changed",
        "crm.portal_sync.failed",
        "crm.showing.scheduled",
        "crm.task.assigned",
        "crm.task.due",
        "crm.transaction.milestone_due"
      ],
      "notification_contract": {
        "source_path": "topolo.notification-contracts.json",
        "role": "producer",
        "schema_version": 1,
        "owner_app_id": "app_topolo_crm",
        "events": [
          {
            "type": "crm.deal.stage_changed",
            "version": 1,
            "description": "A deal moved between pipeline stages.",
            "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 deal moved between pipeline stages.",
                "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": "^crm:deal-stage:"
            },
            "sensitiveFields": []
          },
          {
            "type": "crm.lead.assigned",
            "version": 1,
            "description": "CRM recorded the durable lead assigned transition.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "surface",
                "priority",
                "category",
                "severity",
                "object_type",
                "object_id",
                "occurred_at",
                "thread_key"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "surface": {
                  "const": "notification"
                },
                "priority": {
                  "const": "high"
                },
                "category": {
                  "const": "crm"
                },
                "severity": {
                  "const": "info"
                },
                "object_type": {
                  "const": "lead"
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "thread_key": {
                  "type": "string",
                  "minLength": 1
                },
                "cta_url": {
                  "type": "string",
                  "format": "uri"
                },
                "cta_label": {
                  "type": "string",
                  "minLength": 1
                },
                "previous_status": {
                  "type": "string",
                  "minLength": 1
                },
                "status": {
                  "type": "string",
                  "minLength": 1
                },
                "due_at": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": false
            },
            "examples": [
              {
                "title": "New lead assigned: Ada Lovelace",
                "body": "A portal lead was assigned to you in CRM.",
                "object_id": "lead_123",
                "thread_key": "crm:lead:lead_123",
                "surface": "notification",
                "priority": "high",
                "category": "crm",
                "severity": "info",
                "object_type": "lead",
                "occurred_at": "2026-07-22T00:00:00.000Z",
                "cta_url": "https://crm.stg.topolo.us/leads/lead_123",
                "cta_label": "Open in CRM"
              }
            ],
            "dataClassification": "internal",
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^crm:lead-assigned:"
            }
          },
          {
            "type": "crm.offer.received",
            "version": 1,
            "description": "CRM recorded the durable offer received transition.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "surface",
                "priority",
                "category",
                "severity",
                "object_type",
                "object_id",
                "occurred_at",
                "thread_key",
                "status"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "surface": {
                  "const": "notification"
                },
                "priority": {
                  "const": "high"
                },
                "category": {
                  "const": "crm"
                },
                "severity": {
                  "const": "info"
                },
                "object_type": {
                  "const": "offer"
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "thread_key": {
                  "type": "string",
                  "minLength": 1
                },
                "cta_url": {
                  "type": "string",
                  "format": "uri"
                },
                "cta_label": {
                  "type": "string",
                  "minLength": 1
                },
                "previous_status": {
                  "type": "string",
                  "minLength": 1
                },
                "status": {
                  "type": "string",
                  "minLength": 1
                },
                "due_at": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": false
            },
            "examples": [
              {
                "title": "Offer received: Northstar",
                "body": "A USD offer was recorded for review.",
                "object_id": "offer_123",
                "thread_key": "crm:offer:offer_123",
                "status": "draft",
                "surface": "notification",
                "priority": "high",
                "category": "crm",
                "severity": "info",
                "object_type": "offer",
                "occurred_at": "2026-07-22T00:00:00.000Z",
                "cta_url": "https://crm.stg.topolo.us/offers/offer_123",
                "cta_label": "Open in CRM"
              }
            ],
            "dataClassification": "internal",
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^crm:offer-received:"
            }
          },
          {
            "type": "crm.offer.status_changed",
            "version": 1,
            "description": "CRM recorded the durable offer status changed transition.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "surface",
                "priority",
                "category",
                "severity",
                "object_type",
                "object_id",
                "occurred_at",
                "thread_key",
                "previous_status",
                "status"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "surface": {
                  "const": "notification"
                },
                "priority": {
                  "const": "normal"
                },
                "category": {
                  "const": "crm"
                },
                "severity": {
                  "const": "info"
                },
                "object_type": {
                  "const": "offer"
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "thread_key": {
                  "type": "string",
                  "minLength": 1
                },
                "cta_url": {
                  "type": "string",
                  "format": "uri"
                },
                "cta_label": {
                  "type": "string",
                  "minLength": 1
                },
                "previous_status": {
                  "type": "string",
                  "minLength": 1
                },
                "status": {
                  "type": "string",
                  "minLength": 1
                },
                "due_at": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": false
            },
            "examples": [
              {
                "title": "Offer status changed to accepted",
                "body": "Northstar moved from pending to accepted.",
                "object_id": "offer_123",
                "thread_key": "crm:offer:offer_123",
                "previous_status": "pending",
                "status": "accepted",
                "surface": "notification",
                "priority": "normal",
                "category": "crm",
                "severity": "info",
                "object_type": "offer",
                "occurred_at": "2026-07-22T00:00:00.000Z",
                "cta_url": "https://crm.stg.topolo.us/offers/offer_123",
                "cta_label": "Open in CRM"
              }
            ],
            "dataClassification": "internal",
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^crm:offer-status:"
            }
          },
          {
            "type": "crm.portal_sync.failed",
            "version": 1,
            "description": "CRM recorded the durable portal sync failed transition.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "surface",
                "priority",
                "category",
                "severity",
                "object_type",
                "object_id",
                "occurred_at",
                "thread_key"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "surface": {
                  "const": "notification"
                },
                "priority": {
                  "const": "high"
                },
                "category": {
                  "const": "crm"
                },
                "severity": {
                  "const": "critical"
                },
                "object_type": {
                  "const": "portal_sync"
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "thread_key": {
                  "type": "string",
                  "minLength": 1
                },
                "cta_url": {
                  "type": "string",
                  "format": "uri"
                },
                "cta_label": {
                  "type": "string",
                  "minLength": 1
                },
                "previous_status": {
                  "type": "string",
                  "minLength": 1
                },
                "status": {
                  "type": "string",
                  "minLength": 1
                },
                "due_at": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": false
            },
            "examples": [
              {
                "title": "Portal sync failed: Northstar",
                "body": "The portal rejected the listing sync.",
                "object_id": "sync_123",
                "thread_key": "crm:listing:listing_123",
                "surface": "notification",
                "priority": "high",
                "category": "crm",
                "severity": "critical",
                "object_type": "portal_sync",
                "occurred_at": "2026-07-22T00:00:00.000Z",
                "cta_url": "https://crm.stg.topolo.us/portal-syncs/sync_123",
                "cta_label": "Open in CRM"
              }
            ],
            "dataClassification": "internal",
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^crm:portal-sync-failed:"
            }
          },
          {
            "type": "crm.showing.scheduled",
            "version": 1,
            "description": "CRM recorded the durable showing scheduled transition.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "surface",
                "priority",
                "category",
                "severity",
                "object_type",
                "object_id",
                "occurred_at",
                "thread_key",
                "due_at"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "surface": {
                  "const": "notification"
                },
                "priority": {
                  "const": "normal"
                },
                "category": {
                  "const": "crm"
                },
                "severity": {
                  "const": "info"
                },
                "object_type": {
                  "const": "showing"
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "thread_key": {
                  "type": "string",
                  "minLength": 1
                },
                "cta_url": {
                  "type": "string",
                  "format": "uri"
                },
                "cta_label": {
                  "type": "string",
                  "minLength": 1
                },
                "previous_status": {
                  "type": "string",
                  "minLength": 1
                },
                "status": {
                  "type": "string",
                  "minLength": 1
                },
                "due_at": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": false
            },
            "examples": [
              {
                "title": "Showing scheduled: Northstar",
                "body": "A property showing was scheduled.",
                "object_id": "showing_123",
                "thread_key": "crm:showing:showing_123",
                "due_at": "2026-07-23T10:00:00.000Z",
                "surface": "notification",
                "priority": "normal",
                "category": "crm",
                "severity": "info",
                "object_type": "showing",
                "occurred_at": "2026-07-22T00:00:00.000Z",
                "cta_url": "https://crm.stg.topolo.us/showings/showing_123",
                "cta_label": "Open in CRM"
              }
            ],
            "dataClassification": "internal",
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^crm:showing-scheduled:"
            }
          },
          {
            "type": "crm.task.assigned",
            "version": 1,
            "description": "CRM recorded the durable task assigned transition.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "surface",
                "priority",
                "category",
                "severity",
                "object_type",
                "object_id",
                "occurred_at",
                "thread_key"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "surface": {
                  "const": "notification"
                },
                "priority": {
                  "const": "normal"
                },
                "category": {
                  "const": "crm"
                },
                "severity": {
                  "const": "info"
                },
                "object_type": {
                  "const": "task"
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "thread_key": {
                  "type": "string",
                  "minLength": 1
                },
                "cta_url": {
                  "type": "string",
                  "format": "uri"
                },
                "cta_label": {
                  "type": "string",
                  "minLength": 1
                },
                "previous_status": {
                  "type": "string",
                  "minLength": 1
                },
                "status": {
                  "type": "string",
                  "minLength": 1
                },
                "due_at": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": false
            },
            "examples": [
              {
                "title": "Task assigned: Follow up",
                "body": "A CRM task was assigned to you.",
                "object_id": "task_123",
                "thread_key": "crm:task:task_123",
                "surface": "notification",
                "priority": "normal",
                "category": "crm",
                "severity": "info",
                "object_type": "task",
                "occurred_at": "2026-07-22T00:00:00.000Z",
                "cta_url": "https://crm.stg.topolo.us/tasks/task_123",
                "cta_label": "Open in CRM"
              }
            ],
            "dataClassification": "internal",
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^crm:task-assigned:"
            }
          },
          {
            "type": "crm.task.due",
            "version": 1,
            "description": "CRM recorded the durable task due transition.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "surface",
                "priority",
                "category",
                "severity",
                "object_type",
                "object_id",
                "occurred_at",
                "thread_key",
                "due_at"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "surface": {
                  "const": "notification"
                },
                "priority": {
                  "const": "high"
                },
                "category": {
                  "const": "crm"
                },
                "severity": {
                  "const": "warning"
                },
                "object_type": {
                  "const": "task"
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "thread_key": {
                  "type": "string",
                  "minLength": 1
                },
                "cta_url": {
                  "type": "string",
                  "format": "uri"
                },
                "cta_label": {
                  "type": "string",
                  "minLength": 1
                },
                "previous_status": {
                  "type": "string",
                  "minLength": 1
                },
                "status": {
                  "type": "string",
                  "minLength": 1
                },
                "due_at": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": false
            },
            "examples": [
              {
                "title": "Task due: Follow up",
                "body": "A CRM task assigned to you is due.",
                "object_id": "task_123",
                "thread_key": "crm:task:task_123",
                "due_at": "2026-07-23T10:00:00.000Z",
                "surface": "notification",
                "priority": "high",
                "category": "crm",
                "severity": "warning",
                "object_type": "task",
                "occurred_at": "2026-07-22T00:00:00.000Z",
                "cta_url": "https://crm.stg.topolo.us/tasks/task_123",
                "cta_label": "Open in CRM"
              }
            ],
            "dataClassification": "internal",
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^crm:task-due:"
            }
          },
          {
            "type": "crm.transaction.milestone_due",
            "version": 1,
            "description": "CRM recorded the durable transaction milestone due transition.",
            "status": "published",
            "payloadSchema": {
              "type": "object",
              "required": [
                "title",
                "body",
                "surface",
                "priority",
                "category",
                "severity",
                "object_type",
                "object_id",
                "occurred_at",
                "thread_key",
                "due_at"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "body": {
                  "type": "string",
                  "minLength": 1
                },
                "surface": {
                  "const": "notification"
                },
                "priority": {
                  "const": "high"
                },
                "category": {
                  "const": "crm"
                },
                "severity": {
                  "const": "warning"
                },
                "object_type": {
                  "const": "transaction_milestone"
                },
                "object_id": {
                  "type": "string",
                  "minLength": 1
                },
                "occurred_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "thread_key": {
                  "type": "string",
                  "minLength": 1
                },
                "cta_url": {
                  "type": "string",
                  "format": "uri"
                },
                "cta_label": {
                  "type": "string",
                  "minLength": 1
                },
                "previous_status": {
                  "type": "string",
                  "minLength": 1
                },
                "status": {
                  "type": "string",
                  "minLength": 1
                },
                "due_at": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "additionalProperties": false
            },
            "examples": [
              {
                "title": "Milestone due: Exchange",
                "body": "A transaction milestone assigned to your team is due.",
                "object_id": "milestone_123",
                "thread_key": "crm:transaction:transaction_123",
                "due_at": "2026-07-23T10:00:00.000Z",
                "surface": "notification",
                "priority": "high",
                "category": "crm",
                "severity": "warning",
                "object_type": "transaction_milestone",
                "occurred_at": "2026-07-22T00:00:00.000Z",
                "cta_url": "https://crm.stg.topolo.us/transaction-milestones/milestone_123",
                "cta_label": "Open in CRM"
              }
            ],
            "dataClassification": "internal",
            "recipients": {
              "modes": [
                "organization_member"
              ],
              "externalAddress": "forbidden"
            },
            "idempotency": {
              "required": true,
              "pattern": "^crm:milestone-due:"
            }
          }
        ]
      },
      "actions": [
        {
          "name": "contacts.list",
          "title": "List contacts",
          "description": "List contacts.",
          "target": "api",
          "method": "GET",
          "path": "/api/contacts",
          "permission": "contacts:read",
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "q": {
                "type": "string"
              },
              "company": {
                "type": "string"
              },
              "company_id": {
                "type": "string"
              },
              "page": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "sort_by": {
                "type": "string"
              },
              "sort_order": {
                "type": "string"
              },
              "job_title": {
                "type": "string"
              },
              "employment_role": {
                "type": "string"
              },
              "seniority": {
                "type": "string"
              },
              "lead_status": {
                "type": "string"
              },
              "lifecycle_stage": {
                "type": "string"
              },
              "lead_score_min": {
                "type": "number"
              },
              "lead_score_max": {
                "type": "number"
              },
              "city": {
                "type": "string"
              },
              "state": {
                "type": "string"
              },
              "country": {
                "type": "string"
              },
              "has_email": {
                "type": "boolean"
              },
              "has_phone": {
                "type": "boolean"
              },
              "has_mobile_phone": {
                "type": "boolean"
              },
              "created_after": {
                "type": "string"
              },
              "created_before": {
                "type": "string"
              },
              "updated_after": {
                "type": "string"
              },
              "updated_before": {
                "type": "string"
              },
              "tags": {
                "type": "string"
              }
            },
            "additionalProperties": false
          },
          "readOnly": true,
          "outputSchema": {
            "type": "object",
            "description": "Response returned by List contacts.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "q": "example",
              "company": "example",
              "company_id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/contacts",
              "body": null
            },
            "effects": "Reads state through GET /api/contacts 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/contacts",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "contacts.get",
          "title": "Get contacts",
          "description": "Get one contacts record.",
          "target": "api",
          "method": "GET",
          "path": "/api/contacts/{id}",
          "permission": "contacts:read",
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "readOnly": true,
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Get contacts.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/contacts/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "Reads state through GET /api/contacts/{id} without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/contacts/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "contacts.create",
          "title": "Create contacts",
          "description": "Create contacts.",
          "target": "api",
          "method": "POST",
          "path": "/api/contacts",
          "permission": "contacts:write",
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "first": {
                "type": "string"
              },
              "middle_name": {
                "type": "string"
              },
              "last": {
                "type": "string"
              },
              "salutation": {
                "type": "string"
              },
              "suffix": {
                "type": "string"
              },
              "email": {
                "type": "string"
              },
              "stageId": {
                "type": "string"
              },
              "phone": {
                "type": "string"
              },
              "mobile_phone": {
                "type": "string"
              },
              "company": {
                "type": "string"
              },
              "company_id": {
                "type": "string"
              },
              "tags": {
                "type": "string"
              },
              "external_id": {
                "type": "string"
              },
              "external_profile_url": {
                "type": "string"
              },
              "instagram_url": {
                "type": "string"
              },
              "tiktok_url": {
                "type": "string"
              },
              "youtube_url": {
                "type": "string"
              },
              "x_url": {
                "type": "string"
              },
              "github_url": {
                "type": "string"
              },
              "job_title": {
                "type": "string"
              },
              "employment_role": {
                "type": "string"
              },
              "seniority": {
                "type": "string"
              },
              "department": {
                "type": "string"
              },
              "lead_status": {
                "type": "string"
              },
              "lifecycle_stage": {
                "type": "string"
              },
              "contact_accuracy_grade": {
                "type": "string"
              },
              "education_level": {
                "type": "string"
              },
              "city": {
                "type": "string"
              },
              "state": {
                "type": "string"
              },
              "country": {
                "type": "string"
              },
              "postal_code": {
                "type": "string"
              },
              "address": {
                "type": "string"
              },
              "linkedin_url": {
                "type": "string"
              },
              "website_url": {
                "type": "string"
              },
              "audience_primary_platform": {
                "type": "string"
              },
              "audience_primary_url": {
                "type": "string"
              },
              "audience_primary_handle": {
                "type": "string"
              },
              "audience_follower_count_last_updated": {
                "type": "string"
              },
              "audience_niche": {
                "type": "string"
              },
              "company_domain": {
                "type": "string"
              },
              "company_size": {
                "type": "string"
              },
              "linkedin_headline": {
                "type": "string"
              },
              "linkedin_about": {
                "type": "string"
              },
              "linkedin_recent_experience": {
                "type": "string"
              },
              "linkedin_inferred_timezone": {
                "type": "string"
              },
              "linkedin_captured_at": {
                "type": "string"
              },
              "latest_traffic_source": {
                "type": "string"
              },
              "original_traffic_source": {
                "type": "string"
              },
              "first_touch_campaign": {
                "type": "string"
              },
              "last_touch_campaign": {
                "type": "string"
              },
              "contact_owner": {
                "type": "string"
              },
              "hubspot_team": {
                "type": "string"
              },
              "traffic_source_date": {
                "type": "string"
              },
              "original_traffic_drill_down_1": {
                "type": "string"
              },
              "original_traffic_drill_down_2": {
                "type": "string"
              },
              "latest_traffic_drill_down_1": {
                "type": "string"
              },
              "latest_traffic_drill_down_2": {
                "type": "string"
              },
              "lead_score": {
                "type": "number"
              },
              "audience_follower_count": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "linkedin_followers": {
                "type": "number"
              },
              "linkedin_connections": {
                "type": "number"
              },
              "social_profiles": {
                "anyOf": [
                  {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "platform": {
                          "type": "string"
                        },
                        "url": {
                          "type": "string"
                        },
                        "handle": {
                          "type": "string"
                        },
                        "follower_count": {
                          "type": "number"
                        },
                        "follower_count_last_updated": {
                          "type": "string"
                        },
                        "is_primary": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "platform",
                        "url"
                      ],
                      "additionalProperties": false
                    }
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false
          },
          "requiresConfirmation": true,
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Create contacts.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "first": "example",
              "middle_name": "example",
              "last": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/contacts",
              "body": {
                "first": "example",
                "middle_name": "example",
                "last": "example"
              }
            },
            "effects": "May change state through POST /api/contacts. 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/contacts",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "contacts.update",
          "title": "Update contacts",
          "description": "Update one contacts record.",
          "target": "api",
          "method": "PUT",
          "path": "/api/contacts/{id}",
          "permission": "contacts:write",
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "first": {
                "type": "string"
              },
              "middle_name": {
                "type": "string"
              },
              "last": {
                "type": "string"
              },
              "salutation": {
                "type": "string"
              },
              "suffix": {
                "type": "string"
              },
              "email": {
                "type": "string"
              },
              "stageId": {
                "type": "string"
              },
              "phone": {
                "type": "string"
              },
              "mobile_phone": {
                "type": "string"
              },
              "company": {
                "type": "string"
              },
              "company_id": {
                "type": "string"
              },
              "tags": {
                "type": "string"
              },
              "external_id": {
                "type": "string"
              },
              "external_profile_url": {
                "type": "string"
              },
              "instagram_url": {
                "type": "string"
              },
              "tiktok_url": {
                "type": "string"
              },
              "youtube_url": {
                "type": "string"
              },
              "x_url": {
                "type": "string"
              },
              "github_url": {
                "type": "string"
              },
              "job_title": {
                "type": "string"
              },
              "employment_role": {
                "type": "string"
              },
              "seniority": {
                "type": "string"
              },
              "department": {
                "type": "string"
              },
              "lead_status": {
                "type": "string"
              },
              "lifecycle_stage": {
                "type": "string"
              },
              "contact_accuracy_grade": {
                "type": "string"
              },
              "education_level": {
                "type": "string"
              },
              "city": {
                "type": "string"
              },
              "state": {
                "type": "string"
              },
              "country": {
                "type": "string"
              },
              "postal_code": {
                "type": "string"
              },
              "address": {
                "type": "string"
              },
              "linkedin_url": {
                "type": "string"
              },
              "website_url": {
                "type": "string"
              },
              "audience_primary_platform": {
                "type": "string"
              },
              "audience_primary_url": {
                "type": "string"
              },
              "audience_primary_handle": {
                "type": "string"
              },
              "audience_follower_count_last_updated": {
                "type": "string"
              },
              "audience_niche": {
                "type": "string"
              },
              "company_domain": {
                "type": "string"
              },
              "company_size": {
                "type": "string"
              },
              "linkedin_headline": {
                "type": "string"
              },
              "linkedin_about": {
                "type": "string"
              },
              "linkedin_recent_experience": {
                "type": "string"
              },
              "linkedin_inferred_timezone": {
                "type": "string"
              },
              "linkedin_captured_at": {
                "type": "string"
              },
              "latest_traffic_source": {
                "type": "string"
              },
              "original_traffic_source": {
                "type": "string"
              },
              "first_touch_campaign": {
                "type": "string"
              },
              "last_touch_campaign": {
                "type": "string"
              },
              "contact_owner": {
                "type": "string"
              },
              "hubspot_team": {
                "type": "string"
              },
              "traffic_source_date": {
                "type": "string"
              },
              "original_traffic_drill_down_1": {
                "type": "string"
              },
              "original_traffic_drill_down_2": {
                "type": "string"
              },
              "latest_traffic_drill_down_1": {
                "type": "string"
              },
              "latest_traffic_drill_down_2": {
                "type": "string"
              },
              "lead_score": {
                "type": "number"
              },
              "audience_follower_count": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "linkedin_followers": {
                "type": "number"
              },
              "linkedin_connections": {
                "type": "number"
              },
              "social_profiles": {
                "anyOf": [
                  {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "platform": {
                          "type": "string"
                        },
                        "url": {
                          "type": "string"
                        },
                        "handle": {
                          "type": "string"
                        },
                        "follower_count": {
                          "type": "number"
                        },
                        "follower_count_last_updated": {
                          "type": "string"
                        },
                        "is_primary": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "platform",
                        "url"
                      ],
                      "additionalProperties": false
                    }
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "requiresConfirmation": true,
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Update contacts.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/contacts/00000000-0000-4000-8000-000000000000",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through PUT /api/contacts/{id}. 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/contacts/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "contacts.delete",
          "title": "Delete contacts",
          "description": "Delete one contacts record.",
          "target": "api",
          "method": "DELETE",
          "path": "/api/contacts/{id}",
          "permission": "contacts:write",
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "destructive": true,
          "requiresConfirmation": true,
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Delete contacts.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/contacts/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "May change state through DELETE /api/contacts/{id}. 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/contacts/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "companies.list",
          "title": "List companies",
          "description": "List companies.",
          "method": "GET",
          "path": "/api/companies",
          "permission": "companies:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "search": {
                "type": "string"
              },
              "page": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by List companies.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "search": "example",
              "page": 1,
              "limit": 1
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/companies",
              "body": null
            },
            "effects": "Reads state through GET /api/companies 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/companies",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "companies.create",
          "title": "Create companies",
          "description": "Create companies.",
          "method": "POST",
          "path": "/api/companies",
          "permission": "companies:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "description": {
                "type": "string"
              },
              "website": {
                "type": "string"
              },
              "domain": {
                "type": "string"
              },
              "phone": {
                "type": "string"
              },
              "fax": {
                "type": "string"
              },
              "email": {
                "type": "string"
              },
              "address": {
                "type": "string"
              },
              "city": {
                "type": "string"
              },
              "state": {
                "type": "string"
              },
              "postal_code": {
                "type": "string"
              },
              "country": {
                "type": "string"
              },
              "industry": {
                "type": "string"
              },
              "employee_range": {
                "type": "string"
              },
              "revenue_range": {
                "type": "string"
              },
              "primary_sub_industry": {
                "type": "string"
              },
              "linkedin_url": {
                "type": "string"
              },
              "external_id": {
                "type": "string"
              },
              "external_profile_url": {
                "type": "string"
              },
              "logo_url": {
                "type": "string"
              },
              "ticker": {
                "type": "string"
              },
              "size": {
                "type": "string"
              },
              "founded_year": {
                "type": "number"
              },
              "employee_count": {
                "type": "number"
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Create companies.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "name": "example",
              "description": "example",
              "website": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/companies",
              "body": {
                "name": "example",
                "description": "example",
                "website": "example"
              }
            },
            "effects": "May change state through POST /api/companies. 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/companies",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "companies.get",
          "title": "Get companies",
          "description": "Get one companies record.",
          "method": "GET",
          "path": "/api/companies/{id}",
          "permission": "companies:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Get companies.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/companies/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "Reads state through GET /api/companies/{id} without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/companies/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "companies.update",
          "title": "Update companies",
          "description": "Update one companies record.",
          "method": "PUT",
          "path": "/api/companies/{id}",
          "permission": "companies:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "name": {
                "type": "string"
              },
              "description": {
                "type": "string"
              },
              "website": {
                "type": "string"
              },
              "domain": {
                "type": "string"
              },
              "phone": {
                "type": "string"
              },
              "fax": {
                "type": "string"
              },
              "email": {
                "type": "string"
              },
              "address": {
                "type": "string"
              },
              "city": {
                "type": "string"
              },
              "state": {
                "type": "string"
              },
              "postal_code": {
                "type": "string"
              },
              "country": {
                "type": "string"
              },
              "industry": {
                "type": "string"
              },
              "employee_range": {
                "type": "string"
              },
              "revenue_range": {
                "type": "string"
              },
              "primary_sub_industry": {
                "type": "string"
              },
              "linkedin_url": {
                "type": "string"
              },
              "external_id": {
                "type": "string"
              },
              "external_profile_url": {
                "type": "string"
              },
              "logo_url": {
                "type": "string"
              },
              "ticker": {
                "type": "string"
              },
              "size": {
                "type": "string"
              },
              "founded_year": {
                "type": "number"
              },
              "employee_count": {
                "type": "number"
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Update companies.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/companies/00000000-0000-4000-8000-000000000000",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through PUT /api/companies/{id}. 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/companies/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "companies.delete",
          "title": "Delete companies",
          "description": "Delete one companies record.",
          "method": "DELETE",
          "path": "/api/companies/{id}",
          "permission": "companies:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Delete companies.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/companies/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "May change state through DELETE /api/companies/{id}. 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/companies/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "deals.list",
          "title": "List deals",
          "description": "List deals.",
          "method": "GET",
          "path": "/api/deals",
          "permission": "deals:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "page": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "search": {
                "type": "string"
              },
              "stage_id": {
                "type": "string"
              },
              "pipeline_id": {
                "type": "string"
              },
              "owner_id": {
                "type": "string"
              },
              "company_id": {
                "type": "string"
              },
              "contact_id": {
                "type": "string"
              },
              "min_amount": {
                "type": "number"
              },
              "max_amount": {
                "type": "number"
              },
              "currency": {
                "type": "string"
              },
              "min_probability": {
                "type": "number"
              },
              "max_probability": {
                "type": "number"
              },
              "expected_close_after": {
                "type": "string"
              },
              "expected_close_before": {
                "type": "string"
              },
              "created_after": {
                "type": "string"
              },
              "created_before": {
                "type": "string"
              },
              "updated_after": {
                "type": "string"
              },
              "updated_before": {
                "type": "string"
              },
              "sort_by": {
                "type": "string"
              },
              "sort_order": {
                "type": "string"
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by List deals.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "page": 1,
              "limit": 1,
              "search": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/deals",
              "body": null
            },
            "effects": "Reads state through GET /api/deals 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/deals",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "deals.create",
          "title": "Create deals",
          "description": "Create deals.",
          "method": "POST",
          "path": "/api/deals",
          "permission": "deals:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "description": {
                "type": "string"
              },
              "owner_id": {
                "type": "string"
              },
              "company_id": {
                "type": "string"
              },
              "contact_id": {
                "type": "string"
              },
              "currency": {
                "type": "string"
              },
              "pipeline_id": {
                "type": "string"
              },
              "stage_id": {
                "type": "string"
              },
              "expected_close_date": {
                "type": "string"
              },
              "amount_cents": {
                "type": "number"
              },
              "amount": {
                "type": "number"
              },
              "probability": {
                "type": "number"
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Create deals.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "name": "example",
              "description": "example",
              "owner_id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/deals",
              "body": {
                "name": "example",
                "description": "example",
                "owner_id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/deals. 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/deals",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "deals.get",
          "title": "Get deals",
          "description": "Get one deals record.",
          "method": "GET",
          "path": "/api/deals/{id}",
          "permission": "deals:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Get deals.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/deals/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "Reads state through GET /api/deals/{id} without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/deals/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "deals.update",
          "title": "Update deals",
          "description": "Update one deals record.",
          "method": "PUT",
          "path": "/api/deals/{id}",
          "permission": "deals:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "name": {
                "type": "string"
              },
              "description": {
                "type": "string"
              },
              "owner_id": {
                "type": "string"
              },
              "company_id": {
                "type": "string"
              },
              "contact_id": {
                "type": "string"
              },
              "currency": {
                "type": "string"
              },
              "pipeline_id": {
                "type": "string"
              },
              "stage_id": {
                "type": "string"
              },
              "expected_close_date": {
                "type": "string"
              },
              "amount_cents": {
                "type": "number"
              },
              "amount": {
                "type": "number"
              },
              "probability": {
                "type": "number"
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Update deals.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/deals/00000000-0000-4000-8000-000000000000",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through PUT /api/deals/{id}. 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/deals/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "deals.delete",
          "title": "Delete deals",
          "description": "Delete one deals record.",
          "method": "DELETE",
          "path": "/api/deals/{id}",
          "permission": "deals:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Delete deals.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/deals/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "May change state through DELETE /api/deals/{id}. 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/deals/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "deals.stage.update",
          "title": "Update deal stage",
          "description": "Update a CRM deal stage.",
          "method": "PUT",
          "path": "/api/deals/{id}/stage",
          "permission": "deals:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "stageId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id",
              "stageId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Update deal stage.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000",
              "stageId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/deals/00000000-0000-4000-8000-000000000000/stage",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000",
                "stageId": "example"
              }
            },
            "effects": "May change state through PUT /api/deals/{id}/stage. 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/deals/*/stage",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "deals.history.get",
          "title": "Get deal history",
          "description": "Get CRM deal history.",
          "method": "GET",
          "path": "/api/deals/{id}/history",
          "permission": "deals:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Get deal history.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/deals/00000000-0000-4000-8000-000000000000/history",
              "body": null
            },
            "effects": "Reads state through GET /api/deals/{id}/history 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/deals/*/history",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "deals.pipeline_board.get",
          "title": "Get deal pipeline board",
          "description": "Get CRM deal pipeline board.",
          "method": "GET",
          "path": "/api/deals/pipeline/{pipelineId}/board",
          "permission": "deals:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "pipelineId": {
                "type": "string",
                "minLength": 1
              },
              "page": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "pipelineId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Get deal pipeline board.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "pipelineId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/deals/pipeline/example/board",
              "body": null
            },
            "effects": "Reads state through GET /api/deals/pipeline/{pipelineId}/board 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/deals/pipeline/*/board",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "pipeline.list",
          "title": "List pipelines",
          "description": "List CRM pipelines.",
          "method": "GET",
          "path": "/api/pipeline",
          "permission": "pipeline: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 pipelines.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {},
            "cli_example": [
              "topolo actions --service topolo-crm --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/pipeline",
              "body": null
            },
            "effects": "Reads state through GET /api/pipeline 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/pipeline",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "pipeline.get",
          "title": "Get pipeline",
          "description": "Get a CRM pipeline.",
          "method": "GET",
          "path": "/api/pipeline/{pipelineId}",
          "permission": "pipeline:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "pipelineId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "pipelineId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Get pipeline.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "pipelineId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/pipeline/example",
              "body": null
            },
            "effects": "Reads state through GET /api/pipeline/{pipelineId} 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/pipeline/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "pipeline.board.get",
          "title": "Get pipeline board",
          "description": "Get a CRM pipeline board.",
          "method": "GET",
          "path": "/api/pipeline/{pipelineId}/board",
          "permission": "pipeline:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "pipelineId": {
                "type": "string",
                "minLength": 1
              },
              "page": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "pipelineId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Get pipeline board.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "pipelineId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/pipeline/example/board",
              "body": null
            },
            "effects": "Reads state through GET /api/pipeline/{pipelineId}/board 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/pipeline/*/board",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "pipeline.stages.list",
          "title": "List pipeline stages",
          "description": "List CRM pipeline stages.",
          "method": "GET",
          "path": "/api/pipeline/{pipelineId}/stages",
          "permission": "pipeline:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "pipelineId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "pipelineId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by List pipeline stages.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "pipelineId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/pipeline/example/stages",
              "body": null
            },
            "effects": "Reads state through GET /api/pipeline/{pipelineId}/stages 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/pipeline/*/stages",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "pipeline.structure.get",
          "title": "Get pipeline structure",
          "description": "Get CRM pipeline structure.",
          "method": "GET",
          "path": "/api/pipeline/{pipelineId}/structure",
          "permission": "pipeline:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "pipelineId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "pipelineId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Get pipeline structure.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "pipelineId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/pipeline/example/structure",
              "body": null
            },
            "effects": "Reads state through GET /api/pipeline/{pipelineId}/structure 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/pipeline/*/structure",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "pipeline.contact.status.get",
          "title": "Get contact pipeline status",
          "description": "Get CRM contact pipeline status.",
          "method": "GET",
          "path": "/api/pipeline/{contactId}/status",
          "permission": "pipeline:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "contactId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "contactId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Get contact pipeline status.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "contactId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/pipeline/example/status",
              "body": null
            },
            "effects": "Reads state through GET /api/pipeline/{contactId}/status 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/pipeline/*/status",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "pipeline.contact.history.get",
          "title": "Get contact pipeline history",
          "description": "Get CRM contact pipeline history.",
          "method": "GET",
          "path": "/api/pipeline/{contactId}/history",
          "permission": "pipeline:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "contactId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "contactId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Get contact pipeline history.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "contactId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/pipeline/example/history",
              "body": null
            },
            "effects": "Reads state through GET /api/pipeline/{contactId}/history 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/pipeline/*/history",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "pipeline.contact.add",
          "title": "Add contact to pipeline",
          "description": "Add a CRM contact to a pipeline.",
          "method": "POST",
          "path": "/api/pipeline/{contactId}/add",
          "permission": "pipeline:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "contactId": {
                "type": "string",
                "minLength": 1
              },
              "stageId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "contactId",
              "stageId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Add contact to pipeline.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "contactId": "example",
              "stageId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/pipeline/example/add",
              "body": {
                "contactId": "example",
                "stageId": "example"
              }
            },
            "effects": "May change state through POST /api/pipeline/{contactId}/add. 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/pipeline/*/add",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "pipeline.contact.move",
          "title": "Move contact in pipeline",
          "description": "Move a CRM contact in a pipeline.",
          "method": "PUT",
          "path": "/api/pipeline/{contactId}/move",
          "permission": "pipeline:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "contactId": {
                "type": "string",
                "minLength": 1
              },
              "stageId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "contactId",
              "stageId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Move contact in pipeline.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "contactId": "example",
              "stageId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/pipeline/example/move",
              "body": {
                "contactId": "example",
                "stageId": "example"
              }
            },
            "effects": "May change state through PUT /api/pipeline/{contactId}/move. 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/pipeline/*/move",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "pipeline.contact.remove",
          "title": "Remove contact from pipeline",
          "description": "Remove a CRM contact from a pipeline.",
          "method": "DELETE",
          "path": "/api/pipeline/{contactId}/remove",
          "permission": "pipeline:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "contactId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "contactId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Remove contact from pipeline.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "contactId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/pipeline/example/remove",
              "body": null
            },
            "effects": "May change state through DELETE /api/pipeline/{contactId}/remove. 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/pipeline/*/remove",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "pipeline.stages.update",
          "title": "Update pipeline stage",
          "description": "Update a CRM pipeline stage.",
          "method": "PUT",
          "path": "/api/pipeline/stages/{stageId}",
          "permission": "pipeline:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "stageId": {
                "type": "string",
                "minLength": 1
              },
              "name": {
                "type": "string"
              },
              "color": {
                "type": "string"
              },
              "position": {
                "type": "number"
              }
            },
            "required": [
              "stageId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Update pipeline stage.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "stageId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/pipeline/stages/example",
              "body": {
                "stageId": "example"
              }
            },
            "effects": "May change state through PUT /api/pipeline/stages/{stageId}. 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/pipeline/stages/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "properties.list",
          "title": "List properties",
          "description": "List properties.",
          "method": "GET",
          "path": "/api/properties",
          "permission": "properties:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "search": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "property_type": {
                "type": "string"
              },
              "assigned_agent_id": {
                "type": "string"
              },
              "city": {
                "type": "string"
              },
              "state": {
                "type": "string"
              },
              "country": {
                "type": "string"
              },
              "beds_min": {
                "type": "number"
              },
              "beds_max": {
                "type": "number"
              },
              "baths_min": {
                "type": "number"
              },
              "baths_max": {
                "type": "number"
              },
              "sqft_min": {
                "type": "number"
              },
              "sqft_max": {
                "type": "number"
              },
              "created_after": {
                "type": "string"
              },
              "updated_after": {
                "type": "string"
              },
              "sort_by": {
                "type": "string"
              },
              "sort_order": {
                "type": "string"
              },
              "page": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by List properties.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "search": "example",
              "status": "example",
              "property_type": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/properties",
              "body": null
            },
            "effects": "Reads state through GET /api/properties 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/properties",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "properties.create",
          "title": "Create properties",
          "description": "Create properties.",
          "method": "POST",
          "path": "/api/properties",
          "permission": "properties:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "property_type": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "address_line1": {
                "type": "string"
              },
              "address_line2": {
                "type": "string"
              },
              "city": {
                "type": "string"
              },
              "state": {
                "type": "string"
              },
              "postal_code": {
                "type": "string"
              },
              "country": {
                "type": "string"
              },
              "furnishing_status": {
                "type": "string"
              },
              "owner_contact_id": {
                "type": "string"
              },
              "owner_company_id": {
                "type": "string"
              },
              "assigned_agent_id": {
                "type": "string"
              },
              "primary_photo_bytes_asset_id": {
                "type": "string"
              },
              "latitude": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "longitude": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "beds": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "baths": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "sqft": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "lot_size": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "year_built": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "parking_spaces": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Create properties.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "property_type": "example",
              "status": "example",
              "address_line1": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/properties",
              "body": {
                "property_type": "example",
                "status": "example",
                "address_line1": "example"
              }
            },
            "effects": "May change state through POST /api/properties. 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/properties",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "properties.get",
          "title": "Get properties",
          "description": "Get one properties record.",
          "method": "GET",
          "path": "/api/properties/{id}",
          "permission": "properties:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Get properties.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/properties/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "Reads state through GET /api/properties/{id} without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/properties/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "properties.update",
          "title": "Update properties",
          "description": "Update one properties record.",
          "method": "PUT",
          "path": "/api/properties/{id}",
          "permission": "properties:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "property_type": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "address_line1": {
                "type": "string"
              },
              "address_line2": {
                "type": "string"
              },
              "city": {
                "type": "string"
              },
              "state": {
                "type": "string"
              },
              "postal_code": {
                "type": "string"
              },
              "country": {
                "type": "string"
              },
              "furnishing_status": {
                "type": "string"
              },
              "owner_contact_id": {
                "type": "string"
              },
              "owner_company_id": {
                "type": "string"
              },
              "assigned_agent_id": {
                "type": "string"
              },
              "primary_photo_bytes_asset_id": {
                "type": "string"
              },
              "latitude": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "longitude": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "beds": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "baths": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "sqft": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "lot_size": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "year_built": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "parking_spaces": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Update properties.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/properties/00000000-0000-4000-8000-000000000000",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through PUT /api/properties/{id}. 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/properties/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "properties.delete",
          "title": "Delete properties",
          "description": "Delete one properties record.",
          "method": "DELETE",
          "path": "/api/properties/{id}",
          "permission": "properties:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Delete properties.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/properties/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "May change state through DELETE /api/properties/{id}. 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/properties/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "listings.list",
          "title": "List listings",
          "description": "List listings.",
          "method": "GET",
          "path": "/api/listings",
          "permission": "listings:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "search": {
                "type": "string"
              },
              "property_id": {
                "type": "string"
              },
              "listing_type": {
                "type": "string"
              },
              "internal_status": {
                "type": "string"
              },
              "city": {
                "type": "string"
              },
              "state": {
                "type": "string"
              },
              "country": {
                "type": "string"
              },
              "price_min": {
                "type": "number"
              },
              "price_max": {
                "type": "number"
              },
              "canonical_completeness_min": {
                "type": "number"
              },
              "canonical_completeness_max": {
                "type": "number"
              },
              "created_after": {
                "type": "string"
              },
              "updated_after": {
                "type": "string"
              },
              "page": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by List listings.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "search": "example",
              "property_id": "00000000-0000-4000-8000-000000000000",
              "listing_type": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/listings",
              "body": null
            },
            "effects": "Reads state through GET /api/listings 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/listings",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "listings.create",
          "title": "Create listings",
          "description": "Create listings.",
          "method": "POST",
          "path": "/api/listings",
          "permission": "listings:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "property_id": {
                "type": "string"
              },
              "listing_type": {
                "type": "string"
              },
              "internal_status": {
                "type": "string"
              },
              "title": {
                "type": "string"
              },
              "currency": {
                "type": "string"
              },
              "permit_number": {
                "type": "string"
              },
              "reference_code": {
                "type": "string"
              },
              "description_short": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "description_long": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "price_amount": {
                "type": "number"
              },
              "availability_date": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Create listings.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "property_id": "00000000-0000-4000-8000-000000000000",
              "listing_type": "example",
              "internal_status": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/listings",
              "body": {
                "property_id": "00000000-0000-4000-8000-000000000000",
                "listing_type": "example",
                "internal_status": "example"
              }
            },
            "effects": "May change state through POST /api/listings. 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/listings",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "listings.get",
          "title": "Get listings",
          "description": "Get one listings record.",
          "method": "GET",
          "path": "/api/listings/{id}",
          "permission": "listings:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Get listings.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/listings/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "Reads state through GET /api/listings/{id} without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/listings/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "listings.update",
          "title": "Update listings",
          "description": "Update one listings record.",
          "method": "PUT",
          "path": "/api/listings/{id}",
          "permission": "listings:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "property_id": {
                "type": "string"
              },
              "listing_type": {
                "type": "string"
              },
              "internal_status": {
                "type": "string"
              },
              "title": {
                "type": "string"
              },
              "currency": {
                "type": "string"
              },
              "permit_number": {
                "type": "string"
              },
              "reference_code": {
                "type": "string"
              },
              "description_short": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "description_long": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "price_amount": {
                "type": "number"
              },
              "availability_date": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Update listings.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/listings/00000000-0000-4000-8000-000000000000",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through PUT /api/listings/{id}. 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/listings/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "listings.delete",
          "title": "Delete listings",
          "description": "Delete one listings record.",
          "method": "DELETE",
          "path": "/api/listings/{id}",
          "permission": "listings:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Delete listings.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/listings/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "May change state through DELETE /api/listings/{id}. 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/listings/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "listings.validate",
          "title": "Validate listing",
          "description": "Validate a CRM listing.",
          "method": "POST",
          "path": "/api/listings/{id}/validate",
          "permission": "listings:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "property_id": {
                "type": "string"
              },
              "listing_type": {
                "type": "string"
              },
              "internal_status": {
                "type": "string"
              },
              "title": {
                "type": "string"
              },
              "currency": {
                "type": "string"
              },
              "permit_number": {
                "type": "string"
              },
              "reference_code": {
                "type": "string"
              },
              "description_short": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "description_long": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "price_amount": {
                "type": "number"
              },
              "availability_date": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Validate listing.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/listings/00000000-0000-4000-8000-000000000000/validate",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/listings/{id}/validate. 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/listings/*/validate",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "listings.publications.list",
          "title": "List listing publications",
          "description": "List CRM listing publications.",
          "method": "GET",
          "path": "/api/listings/{id}/publications",
          "permission": "listings:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by List listing publications.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/listings/00000000-0000-4000-8000-000000000000/publications",
              "body": null
            },
            "effects": "Reads state through GET /api/listings/{id}/publications 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/listings/*/publications",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "portal_connections.list",
          "title": "List portal connections",
          "description": "List portal connections.",
          "method": "GET",
          "path": "/api/portal-connections",
          "permission": "portal_connections:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "search": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "portal_key": {
                "type": "string"
              },
              "page": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by List portal connections.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "search": "example",
              "status": "example",
              "portal_key": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/portal-connections",
              "body": null
            },
            "effects": "Reads state through GET /api/portal-connections 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/portal-connections",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "portal_connections.create",
          "title": "Create portal connections",
          "description": "Create portal connections.",
          "method": "POST",
          "path": "/api/portal-connections",
          "permission": "portal_connections:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "portal_key": {
                "type": "string"
              },
              "account_name": {
                "type": "string"
              },
              "connector_type": {
                "type": "string"
              },
              "auth_type": {
                "type": "string"
              },
              "credentials_ref": {
                "type": "string"
              },
              "market_region": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "connector_config": {
                "anyOf": [
                  {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Create portal connections.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "portal_key": "example",
              "account_name": "example",
              "connector_type": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/portal-connections",
              "body": {
                "portal_key": "example",
                "account_name": "example",
                "connector_type": "example"
              }
            },
            "effects": "May change state through POST /api/portal-connections. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "POST /api/portal-connections",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "portal_connections.get",
          "title": "Get portal connections",
          "description": "Get one portal connections record.",
          "method": "GET",
          "path": "/api/portal-connections/{id}",
          "permission": "portal_connections:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Get portal connections.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/portal-connections/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "Reads state through GET /api/portal-connections/{id} without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/portal-connections/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "portal_connections.update",
          "title": "Update portal connections",
          "description": "Update one portal connections record.",
          "method": "PUT",
          "path": "/api/portal-connections/{id}",
          "permission": "portal_connections:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "portal_key": {
                "type": "string"
              },
              "account_name": {
                "type": "string"
              },
              "connector_type": {
                "type": "string"
              },
              "auth_type": {
                "type": "string"
              },
              "credentials_ref": {
                "type": "string"
              },
              "market_region": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "connector_config": {
                "anyOf": [
                  {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Update portal connections.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/portal-connections/00000000-0000-4000-8000-000000000000",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through PUT /api/portal-connections/{id}. 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/portal-connections/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "portal_connections.delete",
          "title": "Delete portal connections",
          "description": "Delete one portal connections record.",
          "method": "DELETE",
          "path": "/api/portal-connections/{id}",
          "permission": "portal_connections:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Delete portal connections.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/portal-connections/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "May change state through DELETE /api/portal-connections/{id}. 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/portal-connections/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "portal_connections.health_check",
          "title": "Run portal connection health check",
          "description": "Run a CRM portal connection health check.",
          "method": "POST",
          "path": "/api/portal-connections/{id}/health-check",
          "permission": "portal_connections:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "portal_key": {
                "type": "string"
              },
              "account_name": {
                "type": "string"
              },
              "connector_type": {
                "type": "string"
              },
              "auth_type": {
                "type": "string"
              },
              "credentials_ref": {
                "type": "string"
              },
              "market_region": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "connector_config": {
                "anyOf": [
                  {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Run portal connection health check.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/portal-connections/00000000-0000-4000-8000-000000000000/health-check",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/portal-connections/{id}/health-check. 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/portal-connections/*/health-check",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "portal_connections.disable",
          "title": "Disable portal connection",
          "description": "Disable a CRM portal connection.",
          "method": "POST",
          "path": "/api/portal-connections/{id}/disable",
          "permission": "portal_connections:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "portal_key": {
                "type": "string"
              },
              "account_name": {
                "type": "string"
              },
              "connector_type": {
                "type": "string"
              },
              "auth_type": {
                "type": "string"
              },
              "credentials_ref": {
                "type": "string"
              },
              "market_region": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "connector_config": {
                "anyOf": [
                  {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Disable portal connection.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/portal-connections/00000000-0000-4000-8000-000000000000/disable",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/portal-connections/{id}/disable. 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/portal-connections/*/disable",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "portal_leads.list",
          "title": "List portal leads",
          "description": "List CRM portal leads.",
          "method": "GET",
          "path": "/api/portal-leads",
          "permission": "portal_leads:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "search": {
                "type": "string"
              },
              "portal_key": {
                "type": "string"
              },
              "ingestion_status": {
                "type": "string"
              },
              "page": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by List portal leads.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "search": "example",
              "portal_key": "example",
              "ingestion_status": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/portal-leads",
              "body": null
            },
            "effects": "Reads state through GET /api/portal-leads 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/portal-leads",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "portal_leads.get",
          "title": "Get portal lead",
          "description": "Get a CRM portal lead.",
          "method": "GET",
          "path": "/api/portal-leads/{id}",
          "permission": "portal_leads:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Get portal lead.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/portal-leads/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "Reads state through GET /api/portal-leads/{id} without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/portal-leads/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "portal_leads.match",
          "title": "Match portal lead",
          "description": "Match a CRM portal lead.",
          "method": "POST",
          "path": "/api/portal-leads/{id}/match",
          "permission": "portal_leads:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "contact_id": {
                "type": "string"
              },
              "create_if_missing": {
                "type": "boolean"
              },
              "create_deal": {
                "type": "boolean"
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Match portal lead.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/portal-leads/00000000-0000-4000-8000-000000000000/match",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/portal-leads/{id}/match. 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/portal-leads/*/match",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "portal_leads.create_contact",
          "title": "Create contact from portal lead",
          "description": "Create a CRM contact from a portal lead.",
          "method": "POST",
          "path": "/api/portal-leads/{id}/create-contact",
          "permission": "portal_leads:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "first": {
                "type": "string"
              },
              "last": {
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Create contact from portal lead.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/portal-leads/00000000-0000-4000-8000-000000000000/create-contact",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/portal-leads/{id}/create-contact. 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/portal-leads/*/create-contact",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "portal_leads.create_deal",
          "title": "Create deal from portal lead",
          "description": "Create a CRM deal from a portal lead.",
          "method": "POST",
          "path": "/api/portal-leads/{id}/create-deal",
          "permission": "portal_leads:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "name": {
                "type": "string"
              },
              "amount_cents": {
                "type": "number"
              },
              "currency": {
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Create deal from portal lead.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/portal-leads/00000000-0000-4000-8000-000000000000/create-deal",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/portal-leads/{id}/create-deal. 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/portal-leads/*/create-deal",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "lead_routing.rules.list",
          "title": "List lead routing rules",
          "description": "List CRM lead routing rules.",
          "method": "GET",
          "path": "/api/lead-routing/rules",
          "permission": "portal_leads: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 lead routing rules.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {},
            "cli_example": [
              "topolo actions --service topolo-crm --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/lead-routing/rules",
              "body": null
            },
            "effects": "Reads state through GET /api/lead-routing/rules 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/lead-routing/rules",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "lead_routing.rules.create",
          "title": "Create lead routing rule",
          "description": "Create a CRM lead routing rule.",
          "method": "POST",
          "path": "/api/lead-routing/rules",
          "permission": "portal_leads:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "portal_key": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "assigned_agent_id": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "fallback_owner_id": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "auto_create_task": {
                "type": "boolean"
              },
              "task_title": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "active": {
                "type": "boolean"
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Create lead routing rule.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "name": "example",
              "portal_key": "example",
              "assigned_agent_id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/lead-routing/rules",
              "body": {
                "name": "example",
                "portal_key": "example",
                "assigned_agent_id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/lead-routing/rules. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "POST /api/lead-routing/rules",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "lead_routing.rules.update",
          "title": "Update lead routing rule",
          "description": "Update a CRM lead routing rule.",
          "method": "PUT",
          "path": "/api/lead-routing/rules/{id}",
          "permission": "portal_leads:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "name": {
                "type": "string"
              },
              "portal_key": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "assigned_agent_id": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "fallback_owner_id": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "auto_create_task": {
                "type": "boolean"
              },
              "task_title": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "active": {
                "type": "boolean"
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Update lead routing rule.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/lead-routing/rules/00000000-0000-4000-8000-000000000000",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through PUT /api/lead-routing/rules/{id}. 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/lead-routing/rules/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "tasks.list",
          "title": "List tasks",
          "description": "List tasks.",
          "method": "GET",
          "path": "/api/tasks",
          "permission": "tasks:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "search": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "priority": {
                "type": "string"
              },
              "entity_type": {
                "type": "string"
              },
              "entity_id": {
                "type": "string"
              },
              "owner_id": {
                "type": "string"
              },
              "page": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by List tasks.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "search": "example",
              "status": "example",
              "priority": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/tasks",
              "body": null
            },
            "effects": "Reads state through GET /api/tasks 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/tasks",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "tasks.create",
          "title": "Create tasks",
          "description": "Create tasks.",
          "method": "POST",
          "path": "/api/tasks",
          "permission": "tasks:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "description": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "priority": {
                "type": "string"
              },
              "entity_type": {
                "type": "string"
              },
              "entity_id": {
                "type": "string"
              },
              "owner_id": {
                "type": "string"
              },
              "due_at": {
                "type": "string"
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Create tasks.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "title": "example",
              "description": "example",
              "status": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/tasks",
              "body": {
                "title": "example",
                "description": "example",
                "status": "example"
              }
            },
            "effects": "May change state through POST /api/tasks. 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/tasks",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "tasks.update",
          "title": "Update tasks",
          "description": "Update one tasks record.",
          "method": "PUT",
          "path": "/api/tasks/{id}",
          "permission": "tasks:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "title": {
                "type": "string"
              },
              "description": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "priority": {
                "type": "string"
              },
              "entity_type": {
                "type": "string"
              },
              "entity_id": {
                "type": "string"
              },
              "owner_id": {
                "type": "string"
              },
              "due_at": {
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Update tasks.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/tasks/00000000-0000-4000-8000-000000000000",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through PUT /api/tasks/{id}. 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/tasks/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "tasks.delete",
          "title": "Delete tasks",
          "description": "Delete one tasks record.",
          "method": "DELETE",
          "path": "/api/tasks/{id}",
          "permission": "tasks:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Delete tasks.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/tasks/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "May change state through DELETE /api/tasks/{id}. 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/tasks/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "showings.list",
          "title": "List showings",
          "description": "List showings.",
          "method": "GET",
          "path": "/api/showings",
          "permission": "showings:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "search": {
                "type": "string"
              },
              "property_id": {
                "type": "string"
              },
              "listing_id": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "assigned_agent_id": {
                "type": "string"
              },
              "page": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by List showings.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "search": "example",
              "property_id": "00000000-0000-4000-8000-000000000000",
              "listing_id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/showings",
              "body": null
            },
            "effects": "Reads state through GET /api/showings 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/showings",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "showings.create",
          "title": "Create showings",
          "description": "Create showings.",
          "method": "POST",
          "path": "/api/showings",
          "permission": "showings:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "property_id": {
                "type": "string"
              },
              "listing_id": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "portal_lead_event_id": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "title": {
                "type": "string"
              },
              "attendee_name": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "attendee_email": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "attendee_phone": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "scheduled_at": {
                "type": "number"
              },
              "duration_minutes": {
                "type": "number"
              },
              "status": {
                "type": "string"
              },
              "outcome": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "notes": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "assigned_agent_id": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Create showings.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "property_id": "00000000-0000-4000-8000-000000000000",
              "listing_id": "00000000-0000-4000-8000-000000000000",
              "portal_lead_event_id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/showings",
              "body": {
                "property_id": "00000000-0000-4000-8000-000000000000",
                "listing_id": "00000000-0000-4000-8000-000000000000",
                "portal_lead_event_id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/showings. 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/showings",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "showings.get",
          "title": "Get showings",
          "description": "Get one showings record.",
          "method": "GET",
          "path": "/api/showings/{id}",
          "permission": "showings:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Get showings.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/showings/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "Reads state through GET /api/showings/{id} without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/showings/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "showings.update",
          "title": "Update showings",
          "description": "Update one showings record.",
          "method": "PUT",
          "path": "/api/showings/{id}",
          "permission": "showings:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "property_id": {
                "type": "string"
              },
              "listing_id": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "portal_lead_event_id": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "title": {
                "type": "string"
              },
              "attendee_name": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "attendee_email": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "attendee_phone": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "scheduled_at": {
                "type": "number"
              },
              "duration_minutes": {
                "type": "number"
              },
              "status": {
                "type": "string"
              },
              "outcome": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "notes": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "assigned_agent_id": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Update showings.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/showings/00000000-0000-4000-8000-000000000000",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through PUT /api/showings/{id}. 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/showings/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "showings.delete",
          "title": "Delete showings",
          "description": "Delete one showings record.",
          "method": "DELETE",
          "path": "/api/showings/{id}",
          "permission": "showings:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Delete showings.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/showings/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "May change state through DELETE /api/showings/{id}. 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/showings/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "offers.list",
          "title": "List offers",
          "description": "List offers.",
          "method": "GET",
          "path": "/api/offers",
          "permission": "offers:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "search": {
                "type": "string"
              },
              "property_id": {
                "type": "string"
              },
              "listing_id": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "contact_id": {
                "type": "string"
              },
              "page": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by List offers.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "search": "example",
              "property_id": "00000000-0000-4000-8000-000000000000",
              "listing_id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/offers",
              "body": null
            },
            "effects": "Reads state through GET /api/offers 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/offers",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "offers.create",
          "title": "Create offers",
          "description": "Create offers.",
          "method": "POST",
          "path": "/api/offers",
          "permission": "offers:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "property_id": {
                "type": "string"
              },
              "listing_id": {
                "type": "string"
              },
              "contact_id": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "company_id": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "title": {
                "type": "string"
              },
              "amount_cents": {
                "type": "number"
              },
              "currency": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "expiry_at": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "contingencies": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "notes": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Create offers.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "property_id": "00000000-0000-4000-8000-000000000000",
              "listing_id": "00000000-0000-4000-8000-000000000000",
              "contact_id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/offers",
              "body": {
                "property_id": "00000000-0000-4000-8000-000000000000",
                "listing_id": "00000000-0000-4000-8000-000000000000",
                "contact_id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/offers. 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/offers",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "offers.get",
          "title": "Get offers",
          "description": "Get one offers record.",
          "method": "GET",
          "path": "/api/offers/{id}",
          "permission": "offers:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Get offers.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/offers/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "Reads state through GET /api/offers/{id} without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/offers/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "offers.update",
          "title": "Update offers",
          "description": "Update one offers record.",
          "method": "PUT",
          "path": "/api/offers/{id}",
          "permission": "offers:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "property_id": {
                "type": "string"
              },
              "listing_id": {
                "type": "string"
              },
              "contact_id": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "company_id": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "title": {
                "type": "string"
              },
              "amount_cents": {
                "type": "number"
              },
              "currency": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "expiry_at": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "contingencies": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "notes": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Update offers.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/offers/00000000-0000-4000-8000-000000000000",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through PUT /api/offers/{id}. 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/offers/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "offers.delete",
          "title": "Delete offers",
          "description": "Delete one offers record.",
          "method": "DELETE",
          "path": "/api/offers/{id}",
          "permission": "offers:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Delete offers.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/offers/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "May change state through DELETE /api/offers/{id}. 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/offers/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "transactions.list",
          "title": "List transactions",
          "description": "List transactions.",
          "method": "GET",
          "path": "/api/transactions",
          "permission": "transactions:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "search": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "property_id": {
                "type": "string"
              },
              "listing_id": {
                "type": "string"
              },
              "offer_id": {
                "type": "string"
              },
              "page": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by List transactions.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "search": "example",
              "status": "example",
              "property_id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/transactions",
              "body": null
            },
            "effects": "Reads state through GET /api/transactions 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/transactions",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "transactions.create",
          "title": "Create transactions",
          "description": "Create transactions.",
          "method": "POST",
          "path": "/api/transactions",
          "permission": "transactions:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "property_id": {
                "type": "string"
              },
              "listing_id": {
                "type": "string"
              },
              "offer_id": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "title": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "escrow_status": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "closing_date": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "assigned_coordinator_id": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "notes": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Create transactions.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "property_id": "00000000-0000-4000-8000-000000000000",
              "listing_id": "00000000-0000-4000-8000-000000000000",
              "offer_id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/transactions",
              "body": {
                "property_id": "00000000-0000-4000-8000-000000000000",
                "listing_id": "00000000-0000-4000-8000-000000000000",
                "offer_id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/transactions. 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/transactions",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "transactions.get",
          "title": "Get transactions",
          "description": "Get one transactions record.",
          "method": "GET",
          "path": "/api/transactions/{id}",
          "permission": "transactions:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Get transactions.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/transactions/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "Reads state through GET /api/transactions/{id} without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/transactions/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "transactions.update",
          "title": "Update transactions",
          "description": "Update one transactions record.",
          "method": "PUT",
          "path": "/api/transactions/{id}",
          "permission": "transactions:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "property_id": {
                "type": "string"
              },
              "listing_id": {
                "type": "string"
              },
              "offer_id": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "title": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "escrow_status": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "closing_date": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "assigned_coordinator_id": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "notes": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Update transactions.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/transactions/00000000-0000-4000-8000-000000000000",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through PUT /api/transactions/{id}. 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/transactions/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "transactions.delete",
          "title": "Delete transactions",
          "description": "Delete one transactions record.",
          "method": "DELETE",
          "path": "/api/transactions/{id}",
          "permission": "transactions:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Delete transactions.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/transactions/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "May change state through DELETE /api/transactions/{id}. 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/transactions/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "transactions.milestones.create",
          "title": "Create transaction milestone",
          "description": "Create a CRM transaction milestone.",
          "method": "POST",
          "path": "/api/transactions/{id}/milestones",
          "permission": "transactions:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "title": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "due_at": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "notes": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "sort_order": {
                "type": "number"
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Create transaction milestone.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/transactions/00000000-0000-4000-8000-000000000000/milestones",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/transactions/{id}/milestones. 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/transactions/*/milestones",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "transactions.milestones.update",
          "title": "Update transaction milestone",
          "description": "Update a CRM transaction milestone.",
          "method": "PUT",
          "path": "/api/transactions/{transactionId}/milestones/{milestoneId}",
          "permission": "transactions:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "transactionId": {
                "type": "string",
                "minLength": 1
              },
              "milestoneId": {
                "type": "string",
                "minLength": 1
              },
              "title": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "due_at": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "notes": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "sort_order": {
                "type": "number"
              }
            },
            "required": [
              "transactionId",
              "milestoneId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Update transaction milestone.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "transactionId": "example",
              "milestoneId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/transactions/example/milestones/example",
              "body": {
                "transactionId": "example",
                "milestoneId": "example"
              }
            },
            "effects": "May change state through PUT /api/transactions/{transactionId}/milestones/{milestoneId}. 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/transactions/*/milestones/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "transactions.checklist.create",
          "title": "Create transaction checklist item",
          "description": "Create a CRM transaction checklist item.",
          "method": "POST",
          "path": "/api/transactions/{id}/checklist",
          "permission": "transactions:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "title": {
                "type": "string"
              },
              "category": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "required": {
                "type": "boolean"
              },
              "status": {
                "type": "string"
              },
              "notes": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "due_at": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Create transaction checklist item.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/transactions/00000000-0000-4000-8000-000000000000/checklist",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/transactions/{id}/checklist. 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/transactions/*/checklist",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "transactions.checklist.update",
          "title": "Update transaction checklist item",
          "description": "Update a CRM transaction checklist item.",
          "method": "PUT",
          "path": "/api/transactions/{transactionId}/checklist/{itemId}",
          "permission": "transactions:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "transactionId": {
                "type": "string",
                "minLength": 1
              },
              "itemId": {
                "type": "string",
                "minLength": 1
              },
              "title": {
                "type": "string"
              },
              "category": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "required": {
                "type": "boolean"
              },
              "status": {
                "type": "string"
              },
              "notes": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "due_at": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "transactionId",
              "itemId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Update transaction checklist item.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "transactionId": "example",
              "itemId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/transactions/example/checklist/example",
              "body": {
                "transactionId": "example",
                "itemId": "example"
              }
            },
            "effects": "May change state through PUT /api/transactions/{transactionId}/checklist/{itemId}. 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/transactions/*/checklist/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "transactions.documents.create",
          "title": "Create transaction document",
          "description": "Create a CRM transaction document.",
          "method": "POST",
          "path": "/api/transactions/{id}/documents",
          "permission": "documents:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "title": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "document_type": {
                "type": "string"
              },
              "status": {
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Create transaction document.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/transactions/00000000-0000-4000-8000-000000000000/documents",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/transactions/{id}/documents. 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/transactions/*/documents",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "transactions.documents.get",
          "title": "Get transaction document",
          "description": "Get a CRM transaction document.",
          "method": "GET",
          "path": "/api/transactions/{transactionId}/documents/{documentId}",
          "permission": "documents:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "transactionId": {
                "type": "string",
                "minLength": 1
              },
              "documentId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "transactionId",
              "documentId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Get transaction document.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "transactionId": "example",
              "documentId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/transactions/example/documents/example",
              "body": null
            },
            "effects": "Reads state through GET /api/transactions/{transactionId}/documents/{documentId} 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/transactions/*/documents/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "transactions.documents.delete",
          "title": "Delete transaction document",
          "description": "Delete a CRM transaction document.",
          "method": "DELETE",
          "path": "/api/transactions/{transactionId}/documents/{documentId}",
          "permission": "documents:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "transactionId": {
                "type": "string",
                "minLength": 1
              },
              "documentId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "transactionId",
              "documentId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Delete transaction document.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "transactionId": "example",
              "documentId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/transactions/example/documents/example",
              "body": null
            },
            "effects": "May change state through DELETE /api/transactions/{transactionId}/documents/{documentId}. 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/transactions/*/documents/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "commissions.list",
          "title": "List commissions",
          "description": "List commissions.",
          "method": "GET",
          "path": "/api/commissions",
          "permission": "commissions:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "transaction_id": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "page": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by List commissions.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "transaction_id": "00000000-0000-4000-8000-000000000000",
              "status": "example",
              "page": 1
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/commissions",
              "body": null
            },
            "effects": "Reads state through GET /api/commissions 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/commissions",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "commissions.create",
          "title": "Create commissions",
          "description": "Create commissions.",
          "method": "POST",
          "path": "/api/commissions",
          "permission": "commissions:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "transaction_id": {
                "type": "string"
              },
              "recipient_type": {
                "type": "string"
              },
              "recipient_id": {
                "type": "string"
              },
              "recipient_name": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "split_bps": {
                "type": "number"
              },
              "amount_cents": {
                "type": "number"
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Create commissions.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "transaction_id": "00000000-0000-4000-8000-000000000000",
              "recipient_type": "example",
              "recipient_id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/commissions",
              "body": {
                "transaction_id": "00000000-0000-4000-8000-000000000000",
                "recipient_type": "example",
                "recipient_id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/commissions. 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/commissions",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "commissions.update",
          "title": "Update commissions",
          "description": "Update one commissions record.",
          "method": "PUT",
          "path": "/api/commissions/{id}",
          "permission": "commissions:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "transaction_id": {
                "type": "string"
              },
              "recipient_type": {
                "type": "string"
              },
              "recipient_id": {
                "type": "string"
              },
              "recipient_name": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "split_bps": {
                "type": "number"
              },
              "amount_cents": {
                "type": "number"
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Update commissions.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/commissions/00000000-0000-4000-8000-000000000000",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through PUT /api/commissions/{id}. 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/commissions/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "commissions.delete",
          "title": "Delete commissions",
          "description": "Delete one commissions record.",
          "method": "DELETE",
          "path": "/api/commissions/{id}",
          "permission": "commissions:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Delete commissions.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/commissions/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "May change state through DELETE /api/commissions/{id}. 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/commissions/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "notes.list",
          "title": "List contact notes",
          "description": "List CRM contact notes.",
          "method": "GET",
          "path": "/api/contacts/{id}/notes",
          "permission": "notes:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "page": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "limit": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by List contact notes.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/contacts/00000000-0000-4000-8000-000000000000/notes",
              "body": null
            },
            "effects": "Reads state through GET /api/contacts/{id}/notes 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/contacts/*/notes",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "notes.create",
          "title": "Create contact note",
          "description": "Create a CRM contact note.",
          "method": "POST",
          "path": "/api/contacts/{id}/notes",
          "permission": "notes:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "body": {
                "type": "string"
              },
              "text": {
                "type": "string"
              },
              "category": {
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Create contact note.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/contacts/00000000-0000-4000-8000-000000000000/notes",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/contacts/{id}/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/contacts/*/notes",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "notes.get",
          "title": "Get contact note",
          "description": "Get a CRM contact note.",
          "method": "GET",
          "path": "/api/contacts/{contactId}/notes/{noteId}",
          "permission": "notes:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "contactId": {
                "type": "string",
                "minLength": 1
              },
              "noteId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "contactId",
              "noteId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Get contact note.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "contactId": "example",
              "noteId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/contacts/example/notes/example",
              "body": null
            },
            "effects": "Reads state through GET /api/contacts/{contactId}/notes/{noteId} 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/contacts/*/notes/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "notes.update",
          "title": "Update contact note",
          "description": "Update a CRM contact note.",
          "method": "PUT",
          "path": "/api/contacts/{contactId}/notes/{noteId}",
          "permission": "notes:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "contactId": {
                "type": "string",
                "minLength": 1
              },
              "noteId": {
                "type": "string",
                "minLength": 1
              },
              "body": {
                "type": "string"
              },
              "text": {
                "type": "string"
              },
              "category": {
                "type": "string"
              }
            },
            "required": [
              "contactId",
              "noteId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Update contact note.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "contactId": "example",
              "noteId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/contacts/example/notes/example",
              "body": {
                "contactId": "example",
                "noteId": "example"
              }
            },
            "effects": "May change state through PUT /api/contacts/{contactId}/notes/{noteId}. 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/contacts/*/notes/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "notes.delete",
          "title": "Delete contact note",
          "description": "Delete a CRM contact note.",
          "method": "DELETE",
          "path": "/api/contacts/{contactId}/notes/{noteId}",
          "permission": "notes:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "contactId": {
                "type": "string",
                "minLength": 1
              },
              "noteId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "contactId",
              "noteId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Delete contact note.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "contactId": "example",
              "noteId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/contacts/example/notes/example",
              "body": null
            },
            "effects": "May change state through DELETE /api/contacts/{contactId}/notes/{noteId}. 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/contacts/*/notes/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "attachments.create",
          "title": "Create contact attachment",
          "description": "Create a CRM contact attachment.",
          "method": "POST",
          "path": "/api/contacts/{id}/attachments",
          "permission": "attachments:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "contentBase64": {
                "type": "string"
              },
              "contentType": {
                "type": "string"
              },
              "fileName": {
                "type": "string"
              },
              "media_role": {
                "type": "string"
              },
              "set_primary": {
                "anyOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "string"
                  }
                ]
              }
            },
            "required": [
              "id",
              "contentBase64",
              "contentType",
              "fileName"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Create contact attachment.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "agentContract": {
            "upload": {
              "profile": "inline-base64",
              "contentField": "contentBase64",
              "contentTypeField": "contentType",
              "fileNameField": "fileName",
              "maxBytes": 10485760,
              "acceptedContentTypes": [
                "*/*"
              ]
            }
          },
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000",
              "contentBase64": "example",
              "contentType": "example",
              "fileName": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/contacts/00000000-0000-4000-8000-000000000000/attachments",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000",
                "contentBase64": "example",
                "contentType": "example",
                "fileName": "example"
              }
            },
            "effects": "May change state through POST /api/contacts/{id}/attachments. 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/contacts/*/attachments",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "attachments.list",
          "title": "List contact attachments",
          "description": "List CRM contact attachments.",
          "method": "GET",
          "path": "/api/contacts/{id}/attachments",
          "permission": "attachments:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by List contact attachments.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/contacts/00000000-0000-4000-8000-000000000000/attachments",
              "body": null
            },
            "effects": "Reads state through GET /api/contacts/{id}/attachments 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/contacts/*/attachments",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "attachments.get",
          "title": "Get attachment",
          "description": "Get a CRM attachment.",
          "method": "GET",
          "path": "/api/attachments/{id}",
          "permission": "attachments:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Get attachment.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/attachments/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "Reads state through GET /api/attachments/{id} without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/attachments/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "attachments.delete",
          "title": "Delete attachment",
          "description": "Delete a CRM attachment.",
          "method": "DELETE",
          "path": "/api/attachments/{id}",
          "permission": "attachments:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Delete attachment.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/attachments/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "May change state through DELETE /api/attachments/{id}. 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/attachments/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "dashboard.real_estate.get",
          "title": "Get real estate dashboard",
          "description": "Get CRM real estate dashboard.",
          "method": "GET",
          "path": "/api/dashboard/real-estate",
          "permission": "reports:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "scope": {
                "type": "string"
              },
              "window_days": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Get real estate dashboard.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "scope": "example",
              "window_days": 1
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/dashboard/real-estate",
              "body": null
            },
            "effects": "Reads state through GET /api/dashboard/real-estate 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/dashboard/real-estate",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "dashboard.core.get",
          "title": "Get core dashboard",
          "description": "Get CRM core dashboard.",
          "method": "GET",
          "path": "/api/dashboard/core",
          "permission": "reports: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 Get core dashboard.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {},
            "cli_example": [
              "topolo actions --service topolo-crm --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/dashboard/core",
              "body": null
            },
            "effects": "Reads state through GET /api/dashboard/core 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/dashboard/core",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "saved_views.list",
          "title": "List saved views",
          "description": "List saved views.",
          "method": "GET",
          "path": "/api/saved-views",
          "permission": "settings:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "module_key": {
                "type": "string"
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by List saved views.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "module_key": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/saved-views",
              "body": null
            },
            "effects": "Reads state through GET /api/saved-views 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/saved-views",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "saved_views.create",
          "title": "Create saved views",
          "description": "Create saved views.",
          "method": "POST",
          "path": "/api/saved-views",
          "permission": "settings:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "module_key": {
                "type": "string"
              },
              "required": {
                "type": "boolean"
              },
              "config": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Create saved views.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "name": "example",
              "module_key": "example",
              "required": true
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/saved-views",
              "body": {
                "name": "example",
                "module_key": "example",
                "required": true
              }
            },
            "effects": "May change state through POST /api/saved-views. 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/saved-views",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "saved_views.update",
          "title": "Update saved views",
          "description": "Update one saved views record.",
          "method": "PUT",
          "path": "/api/saved-views/{id}",
          "permission": "settings:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "name": {
                "type": "string"
              },
              "module_key": {
                "type": "string"
              },
              "required": {
                "type": "boolean"
              },
              "config": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Update saved views.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/saved-views/00000000-0000-4000-8000-000000000000",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through PUT /api/saved-views/{id}. 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/saved-views/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "saved_views.delete",
          "title": "Delete saved views",
          "description": "Delete one saved views record.",
          "method": "DELETE",
          "path": "/api/saved-views/{id}",
          "permission": "settings:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Delete saved views.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/saved-views/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "May change state through DELETE /api/saved-views/{id}. 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/saved-views/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "settings.org.get",
          "title": "Get organization settings",
          "description": "Get CRM organization settings.",
          "method": "GET",
          "path": "/api/settings/org",
          "permission": "settings: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 Get organization settings.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {},
            "cli_example": [
              "topolo actions --service topolo-crm --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/settings/org",
              "body": null
            },
            "effects": "Reads state through GET /api/settings/org 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/settings/org",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "settings.org.update",
          "title": "Update organization settings",
          "description": "Update CRM organization settings.",
          "method": "PUT",
          "path": "/api/settings/org",
          "permission": "settings:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "module_settings": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "role_defaults": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "role_key": {
                      "type": "string"
                    },
                    "landing_path": {
                      "type": "string"
                    }
                  },
                  "additionalProperties": false
                }
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Update organization settings.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "module_settings": {},
              "role_defaults": [
                {
                  "role_key": "example",
                  "landing_path": "example"
                }
              ]
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/settings/org",
              "body": {
                "module_settings": {},
                "role_defaults": [
                  {
                    "role_key": "example",
                    "landing_path": "example"
                  }
                ]
              }
            },
            "effects": "May change state through PUT /api/settings/org. 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/settings/org",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "search.run",
          "title": "Search CRM",
          "description": "Run CRM search.",
          "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"
              },
              "limit": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Search CRM.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "q": "example",
              "limit": 1
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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": "import_export.preview",
          "title": "Preview import",
          "description": "Preview a CRM import.",
          "method": "POST",
          "path": "/api/import-export/preview",
          "permission": "contacts:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "csvData": {
                "type": "string"
              },
              "delimiter": {
                "type": "string"
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Preview import.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "csvData": "example",
              "delimiter": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/import-export/preview",
              "body": {
                "csvData": "example",
                "delimiter": "example"
              }
            },
            "effects": "May change state through POST /api/import-export/preview. 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/import-export/preview",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "import_export.execute",
          "title": "Execute import",
          "description": "Execute a CRM import.",
          "method": "POST",
          "path": "/api/import-export/execute",
          "permission": "contacts:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "csvData": {
                "type": "string"
              },
              "columnMapping": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "type": "string"
                }
              },
              "delimiter": {
                "type": "string"
              },
              "createCompanies": {
                "type": "boolean"
              },
              "fileName": {
                "type": "string"
              },
              "storeSourceRows": {
                "type": "boolean"
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Execute import.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "csvData": "example",
              "columnMapping": {},
              "delimiter": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/import-export/execute",
              "body": {
                "csvData": "example",
                "columnMapping": {},
                "delimiter": "example"
              }
            },
            "effects": "May change state through POST /api/import-export/execute. 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/import-export/execute",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "import_export.template.get",
          "title": "Get import template",
          "description": "Get a CRM import template.",
          "method": "GET",
          "path": "/api/import-export/template",
          "permission": "contacts:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "module_key": {
                "type": "string"
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Get import template.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "module_key": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/import-export/template",
              "body": null
            },
            "effects": "Reads state through GET /api/import-export/template 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/import-export/template",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "import_export.bulk",
          "title": "Run bulk import",
          "description": "Run a CRM bulk import.",
          "method": "POST",
          "path": "/api/import-export/bulk",
          "permission": "contacts:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "contacts": {
                "type": "array",
                "items": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string"
                  },
                  "additionalProperties": {}
                }
              },
              "companies": {
                "type": "array",
                "items": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string"
                  },
                  "additionalProperties": {}
                }
              },
              "notes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string"
                  },
                  "additionalProperties": {}
                }
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Run bulk import.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "contacts": [
                {}
              ],
              "companies": [
                {}
              ],
              "notes": [
                {}
              ]
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/import-export/bulk",
              "body": {
                "contacts": [
                  {}
                ],
                "companies": [
                  {}
                ],
                "notes": [
                  {}
                ]
              }
            },
            "effects": "May change state through POST /api/import-export/bulk. 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/import-export/bulk",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "import_export.export",
          "title": "Export CRM data",
          "description": "Export CRM data.",
          "method": "GET",
          "path": "/api/import-export/export",
          "permission": "contacts:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "includeDeleted": {
                "type": "boolean"
              },
              "limit": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Export CRM data.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "includeDeleted": true,
              "limit": 1
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/import-export/export",
              "body": null
            },
            "effects": "Reads state through GET /api/import-export/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/import-export/export",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "portal_sync.listing.publish",
          "title": "Publish listing",
          "description": "Publish a CRM listing.",
          "method": "POST",
          "path": "/api/listings/{id}/publish",
          "permission": "portal_sync:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "portal_connection_ids": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "force_refresh": {
                "type": "boolean"
              },
              "dry_run": {
                "type": "boolean"
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Publish listing.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/listings/00000000-0000-4000-8000-000000000000/publish",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/listings/{id}/publish. 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/listings/*/publish",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "portal_sync.listing.unpublish",
          "title": "Unpublish listing",
          "description": "Unpublish a CRM listing.",
          "method": "POST",
          "path": "/api/listings/{id}/unpublish",
          "permission": "portal_sync:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "portal_connection_ids": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "force_refresh": {
                "type": "boolean"
              },
              "dry_run": {
                "type": "boolean"
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Unpublish listing.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/listings/00000000-0000-4000-8000-000000000000/unpublish",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/listings/{id}/unpublish. 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/listings/*/unpublish",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "portal_sync.listing.refresh",
          "title": "Refresh listing sync",
          "description": "Refresh CRM listing sync.",
          "method": "POST",
          "path": "/api/listings/{id}/refresh",
          "permission": "portal_sync:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "portal_connection_ids": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "force_refresh": {
                "type": "boolean"
              },
              "dry_run": {
                "type": "boolean"
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Refresh listing sync.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/listings/00000000-0000-4000-8000-000000000000/refresh",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/listings/{id}/refresh. 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/listings/*/refresh",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "portal_sync.listing.retry",
          "title": "Retry listing sync",
          "description": "Retry CRM listing sync.",
          "method": "POST",
          "path": "/api/listings/{id}/retry-sync",
          "permission": "portal_sync:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "portal_connection_ids": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "force_refresh": {
                "type": "boolean"
              },
              "dry_run": {
                "type": "boolean"
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Retry listing sync.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/listings/00000000-0000-4000-8000-000000000000/retry-sync",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000"
              }
            },
            "effects": "May change state through POST /api/listings/{id}/retry-sync. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "POST /api/listings/*/retry-sync",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "portal_sync.jobs.list",
          "title": "List listing sync jobs",
          "description": "List CRM listing sync jobs.",
          "method": "GET",
          "path": "/api/listings/{id}/sync-jobs",
          "permission": "portal_sync:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by List listing sync jobs.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/listings/00000000-0000-4000-8000-000000000000/sync-jobs",
              "body": null
            },
            "effects": "Reads state through GET /api/listings/{id}/sync-jobs 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/listings/*/sync-jobs",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "portal_sync.publications.get",
          "title": "Get portal publication",
          "description": "Get a CRM portal publication.",
          "method": "GET",
          "path": "/api/publications/{id}",
          "permission": "portal_sync:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Get portal publication.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/publications/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "Reads state through GET /api/publications/{id} without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/publications/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "portal_sync.publication_jobs.list",
          "title": "List publication sync jobs",
          "description": "List CRM publication sync jobs.",
          "method": "GET",
          "path": "/api/publications/{id}/sync-jobs",
          "permission": "portal_sync:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by List publication sync jobs.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/publications/00000000-0000-4000-8000-000000000000/sync-jobs",
              "body": null
            },
            "effects": "Reads state through GET /api/publications/{id}/sync-jobs 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/publications/*/sync-jobs",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "real_estate_media.properties.list",
          "title": "List property media",
          "description": "List CRM property media.",
          "method": "GET",
          "path": "/api/properties/{id}/media",
          "permission": "properties:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by List property media.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/properties/00000000-0000-4000-8000-000000000000/media",
              "body": null
            },
            "effects": "Reads state through GET /api/properties/{id}/media 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/properties/*/media",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "real_estate_media.properties.create",
          "title": "Create property media",
          "description": "Create CRM property media.",
          "method": "POST",
          "path": "/api/properties/{id}/media",
          "permission": "properties:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "contentBase64": {
                "type": "string"
              },
              "contentType": {
                "type": "string"
              },
              "fileName": {
                "type": "string"
              },
              "media_role": {
                "type": "string"
              },
              "set_primary": {
                "anyOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "string"
                  }
                ]
              }
            },
            "required": [
              "id",
              "contentBase64",
              "contentType",
              "fileName"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Create property media.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "agentContract": {
            "upload": {
              "profile": "inline-base64",
              "contentField": "contentBase64",
              "contentTypeField": "contentType",
              "fileNameField": "fileName",
              "maxBytes": 26214400,
              "acceptedContentTypes": [
                "image/*",
                "video/*"
              ]
            }
          },
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000",
              "contentBase64": "example",
              "contentType": "example",
              "fileName": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/properties/00000000-0000-4000-8000-000000000000/media",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000",
                "contentBase64": "example",
                "contentType": "example",
                "fileName": "example"
              }
            },
            "effects": "May change state through POST /api/properties/{id}/media. 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/properties/*/media",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "real_estate_media.properties.set_primary",
          "title": "Set primary property media",
          "description": "Set primary CRM property media.",
          "method": "POST",
          "path": "/api/properties/{propertyId}/media/{mediaId}/primary",
          "permission": "properties:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "propertyId": {
                "type": "string",
                "minLength": 1
              },
              "mediaId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "propertyId",
              "mediaId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Set primary property media.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "propertyId": "example",
              "mediaId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/properties/example/media/example/primary",
              "body": {
                "propertyId": "example",
                "mediaId": "example"
              }
            },
            "effects": "May change state through POST /api/properties/{propertyId}/media/{mediaId}/primary. 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/properties/*/media/*/primary",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "real_estate_media.properties.delete",
          "title": "Delete property media",
          "description": "Delete CRM property media.",
          "method": "DELETE",
          "path": "/api/properties/{propertyId}/media/{mediaId}",
          "permission": "properties:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "propertyId": {
                "type": "string",
                "minLength": 1
              },
              "mediaId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "propertyId",
              "mediaId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Delete property media.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "propertyId": "example",
              "mediaId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/properties/example/media/example",
              "body": null
            },
            "effects": "May change state through DELETE /api/properties/{propertyId}/media/{mediaId}. 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/properties/*/media/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "real_estate_media.listings.list",
          "title": "List listing media",
          "description": "List CRM listing media.",
          "method": "GET",
          "path": "/api/listings/{id}/media",
          "permission": "listings:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by List listing media.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/listings/00000000-0000-4000-8000-000000000000/media",
              "body": null
            },
            "effects": "Reads state through GET /api/listings/{id}/media 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/listings/*/media",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "real_estate_media.listings.create",
          "title": "Create listing media",
          "description": "Create CRM listing media.",
          "method": "POST",
          "path": "/api/listings/{id}/media",
          "permission": "listings:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "contentBase64": {
                "type": "string"
              },
              "contentType": {
                "type": "string"
              },
              "fileName": {
                "type": "string"
              },
              "media_role": {
                "type": "string"
              },
              "set_primary": {
                "anyOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "string"
                  }
                ]
              }
            },
            "required": [
              "id",
              "contentBase64",
              "contentType",
              "fileName"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Create listing media.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "agentContract": {
            "upload": {
              "profile": "inline-base64",
              "contentField": "contentBase64",
              "contentTypeField": "contentType",
              "fileNameField": "fileName",
              "maxBytes": 26214400,
              "acceptedContentTypes": [
                "image/*",
                "video/*"
              ]
            }
          },
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000",
              "contentBase64": "example",
              "contentType": "example",
              "fileName": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/listings/00000000-0000-4000-8000-000000000000/media",
              "body": {
                "id": "00000000-0000-4000-8000-000000000000",
                "contentBase64": "example",
                "contentType": "example",
                "fileName": "example"
              }
            },
            "effects": "May change state through POST /api/listings/{id}/media. 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/listings/*/media",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "real_estate_media.listings.set_primary",
          "title": "Set primary listing media",
          "description": "Set primary CRM listing media.",
          "method": "POST",
          "path": "/api/listings/{listingId}/media/{mediaId}/primary",
          "permission": "listings:write",
          "requiresConfirmation": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "listingId": {
                "type": "string",
                "minLength": 1
              },
              "mediaId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "listingId",
              "mediaId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Set primary listing media.",
            "additionalProperties": true
          },
          "readOnly": false,
          "destructive": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "listingId": "example",
              "mediaId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/listings/example/media/example/primary",
              "body": {
                "listingId": "example",
                "mediaId": "example"
              }
            },
            "effects": "May change state through POST /api/listings/{listingId}/media/{mediaId}/primary. 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/listings/*/media/*/primary",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "real_estate_media.listings.delete",
          "title": "Delete listing media",
          "description": "Delete CRM listing media.",
          "method": "DELETE",
          "path": "/api/listings/{listingId}/media/{mediaId}",
          "permission": "listings:write",
          "requiresConfirmation": true,
          "destructive": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "listingId": {
                "type": "string",
                "minLength": 1
              },
              "mediaId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "listingId",
              "mediaId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Delete listing media.",
            "additionalProperties": true
          },
          "readOnly": false,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "listingId": "example",
              "mediaId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/listings/example/media/example",
              "body": null
            },
            "effects": "May change state through DELETE /api/listings/{listingId}/media/{mediaId}. 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/listings/*/media/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "real_estate_media.get",
          "title": "Get real estate media",
          "description": "Get CRM real estate media.",
          "method": "GET",
          "path": "/api/real-estate-media/{id}",
          "permission": "attachments:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Get real estate media.",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/real-estate-media/00000000-0000-4000-8000-000000000000",
              "body": null
            },
            "effects": "Reads state through GET /api/real-estate-media/{id} without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/real-estate-media/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "organizations.data.export",
          "title": "Export CRM organization data",
          "description": "Export CRM-owned organization data across all workspaces and storage concerns with credentials redacted and binary objects represented by metadata.",
          "method": "GET",
          "path": "/api/organizations/{organizationId}/data",
          "permission": "privacy:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "organizationId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "organizationId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "organizationId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --json"
            ],
            "http_example": {
              "method": "GET",
              "path": "/api/organizations/example/data",
              "body": null
            },
            "effects": "Reads state through GET /api/organizations/{organizationId}/data without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/organizations/*/data",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "organizations.data.erase",
          "title": "Erase CRM organization data",
          "description": "Erase CRM-owned organization data after active business work is closed and exact ERASE confirmation is supplied.",
          "method": "DELETE",
          "path": "/api/organizations/{organizationId}/data",
          "permission": "privacy:write",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "organizationId": {
                "type": "string",
                "minLength": 1
              },
              "confirmation": {
                "type": "string",
                "const": "ERASE"
              }
            },
            "required": [
              "organizationId",
              "confirmation"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "destructive": true,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "organizationId": "example",
              "confirmation": "ERASE"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --confirm --json"
            ],
            "http_example": {
              "method": "DELETE",
              "path": "/api/organizations/example/data",
              "body": null
            },
            "effects": "May change state through DELETE /api/organizations/{organizationId}/data. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "DELETE /api/organizations/*/data",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "widget.get",
          "title": "Get CRM widget",
          "description": "Get CRM workspace summary widgets.",
          "method": "GET",
          "path": "/api/widget",
          "permission": "contacts:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {},
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {},
            "cli_example": [
              "topolo actions --service topolo-crm --json",
              "topolo actions get <action-id> --json",
              "topolo actions validate <action-id> --data @payload.json --json",
              "topolo actions plan <action-id> --data @payload.json --json",
              "topolo actions call <action-id> --data @payload.json --json"
            ],
            "http_example": {
              "method": "GET",
              "path": "/api/widget",
              "body": null
            },
            "effects": "Reads state through GET /api/widget without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/widget",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "workspaces.archive",
          "title": "Archive CRM workspace",
          "description": "Confirm a CRM workspace holds no records, then ask the platform to archive it. The workspace record itself belongs to Auth.",
          "target": "api",
          "outputSchema": {
            "type": "object",
            "description": "Response returned by Archive CRM workspace.",
            "additionalProperties": true
          },
          "method": "DELETE",
          "path": "/api/crm/workspaces/{workspaceId}",
          "permission": "workspace:delete",
          "authorizationMode": "static",
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "workspaceId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "workspaceId"
            ],
            "additionalProperties": false
          },
          "readOnly": false,
          "destructive": true,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "documentation": {
            "example_input": {
              "workspaceId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/crm/workspaces/example",
              "body": null
            },
            "effects": "May change state through DELETE /api/crm/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/crm/workspaces/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "tickets.list",
          "title": "List tickets",
          "description": "List CRM tickets for the selected workspace.",
          "method": "GET",
          "path": "/api/tickets",
          "permission": "contacts:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "status": {
                "type": "string"
              },
              "assignee_id": {
                "type": "string"
              },
              "contact_id": {
                "type": "string"
              },
              "company_id": {
                "type": "string"
              },
              "source": {
                "type": "string"
              },
              "external_thread_id": {
                "type": "string"
              },
              "limit": {
                "type": "integer",
                "minimum": 1,
                "maximum": 200
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "status": "example",
              "assignee_id": "00000000-0000-4000-8000-000000000000",
              "contact_id": "00000000-0000-4000-8000-000000000000"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/tickets",
              "body": null
            },
            "effects": "Reads state through GET /api/tickets without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/tickets",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "tickets.get",
          "title": "Get ticket",
          "description": "Get a CRM ticket and its messages.",
          "method": "GET",
          "path": "/api/tickets/{ticketId}",
          "permission": "contacts:read",
          "readOnly": true,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "ticketId": {
                "type": "string",
                "minLength": 1
              }
            },
            "required": [
              "ticketId"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": false,
          "agentAccess": "auto",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "ticketId": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/tickets/example",
              "body": null
            },
            "effects": "Reads state through GET /api/tickets/{ticketId} without a declared mutation.",
            "verification": [
              "Check the structured action result and pagination or resource identifiers before using it downstream."
            ],
            "recovery": [
              "Correct identity, resource context, permission, or input validation failures, then retry the read."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "GET /api/tickets/*",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "tickets.create",
          "title": "Create ticket",
          "description": "Create a CRM ticket with an optional initial message.",
          "method": "POST",
          "path": "/api/tickets",
          "permission": "contacts:write",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "subject": {
                "type": "string",
                "minLength": 1
              },
              "status": {
                "type": "string"
              },
              "priority": {
                "type": "string"
              },
              "contact_id": {
                "type": "string"
              },
              "company_id": {
                "type": "string"
              },
              "assignee_id": {
                "type": "string"
              },
              "source": {
                "type": "string"
              },
              "external_thread_id": {
                "type": "string"
              },
              "message": {
                "type": "object",
                "properties": {
                  "body": {
                    "type": "string",
                    "minLength": 1
                  },
                  "direction": {
                    "type": "string"
                  },
                  "sender": {
                    "type": "string"
                  },
                  "recipients": {
                    "type": "string"
                  },
                  "message_id": {
                    "type": "string"
                  },
                  "in_reply_to": {
                    "type": "string"
                  }
                },
                "required": [
                  "body"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "subject"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "subject": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/tickets",
              "body": {
                "subject": "example"
              }
            },
            "effects": "May change state through POST /api/tickets. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "POST /api/tickets",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "tickets.messages.create",
          "title": "Add ticket message",
          "description": "Add a message to a CRM ticket.",
          "method": "POST",
          "path": "/api/tickets/{ticketId}/messages",
          "permission": "contacts:write",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "ticketId": {
                "type": "string",
                "minLength": 1
              },
              "body": {
                "type": "string",
                "minLength": 1
              },
              "direction": {
                "type": "string"
              },
              "sender": {
                "type": "string"
              },
              "recipients": {
                "type": "string"
              },
              "message_id": {
                "type": "string"
              },
              "in_reply_to": {
                "type": "string"
              }
            },
            "required": [
              "ticketId",
              "body"
            ],
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "ticketId": "example",
              "body": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/tickets/example/messages",
              "body": {
                "ticketId": "example",
                "body": "example"
              }
            },
            "effects": "May change state through POST /api/tickets/{ticketId}/messages. Inspect the plan and honor the published confirmation policy.",
            "verification": [
              "Check the structured action result.",
              "Read the affected resource back through the corresponding get or list action."
            ],
            "recovery": [
              "Do not retry an ambiguous mutation until a read confirms whether it applied.",
              "Use a published inverse, update, archive, or delete action only after inspecting its contract."
            ],
            "docs_url": null,
            "resource": null,
            "next_action_ids": [],
            "rollback_action_id": null
          },
          "implementation": {
            "status": "implemented",
            "route_key": "POST /api/tickets/*/messages",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        },
        {
          "name": "tickets.email.ingest",
          "title": "Ingest ticket email",
          "description": "Ingest an authenticated email event into CRM tickets.",
          "method": "POST",
          "path": "/api/tickets/ingest-email",
          "permission": "contacts:write",
          "readOnly": false,
          "inputSchema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "type": "object",
            "properties": {
              "from": {
                "type": "string"
              },
              "to": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                ]
              },
              "subject": {
                "type": "string"
              },
              "body": {
                "type": "string"
              },
              "messageId": {
                "type": "string"
              },
              "inReplyTo": {
                "type": "string"
              }
            },
            "additionalProperties": false
          },
          "target": "api",
          "outputSchema": {
            "type": "object",
            "additionalProperties": true
          },
          "destructive": false,
          "requiresConfirmation": true,
          "agentAccess": "confirm",
          "authorizationMode": "static",
          "documentation": {
            "example_input": {
              "from": "example",
              "to": "example",
              "subject": "example"
            },
            "cli_example": [
              "topolo actions --service topolo-crm --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/tickets/ingest-email",
              "body": {
                "from": "example",
                "to": "example",
                "subject": "example"
              }
            },
            "effects": "May change state through POST /api/tickets/ingest-email. 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/tickets/ingest-email",
            "evidence": "Matched to a served route extracted from canonical staging source."
          }
        }
      ],
      "action_coverage": {
        "status": "ok",
        "served_routes": 150,
        "matched_actions": 134,
        "declared_unserved_actions": [],
        "coverage_excluded_actions": [],
        "uncatalogued_routes": [
          {
            "key": "* /api/*",
            "method": "*",
            "path": "/api/{segment1}",
            "source": "apps/api/index.ts",
            "target": "api"
          },
          {
            "key": "* /docs/*",
            "method": "*",
            "path": "/docs/{segment1}",
            "source": "apps/api/index.ts",
            "target": "api"
          }
        ],
        "ignored_routes": 14,
        "configured_exclusions": 9,
        "configuration_findings": [],
        "notes": [
          "1 manually-declared route(s)"
        ]
      },
      "runtime_contract_audit": {
        "status": "verified",
        "actions": 134,
        "contracts": 134,
        "contract_module": "topolo.action-contracts.mjs",
        "validator_sources": [
          "apps/api/index.ts"
        ],
        "authorization_sources": [
          "apps/api/index.ts"
        ],
        "findings": []
      }
    }
  ],
  "mobile_contracts": [
    {
      "source_path": "apps/TopoloCRM/topolo.mobile-experience.json",
      "contract": {
        "version": "2026-06-29",
        "status": "approved",
        "mode": "native_capability",
        "appId": "app_topolo_crm",
        "localizationNamespace": "crm",
        "permissions": [
          "crm.contacts.read",
          "crm.contacts.write",
          "crm.companies.read",
          "crm.companies.write",
          "crm.activities.read"
        ],
        "offlinePolicy": "read_through_cache",
        "fallbackPath": "/contacts",
        "auth": {
          "audience": "topolo-crm",
          "scopes": [
            "crm.contacts:read",
            "crm.contacts:write",
            "crm.companies:read",
            "crm.companies:write",
            "crm.activities:read"
          ]
        },
        "routes": [
          {
            "path": "/contacts",
            "apiPath": "/api/contacts",
            "title": "Contacts",
            "titleKey": "crm.mobile.routes.contacts.title",
            "template": "record.list",
            "dataSource": "crm.contacts.list",
            "detailRoute": "/contacts/:id",
            "actions": [
              {
                "id": "crm.contacts.create",
                "title": "Create contact",
                "titleKey": "crm.mobile.actions.createContact.title",
                "type": "record.create",
                "permission": "crm.contacts.write",
                "method": "POST",
                "path": "/api/contacts",
                "fields": [
                  {
                    "key": "first",
                    "label": "First name",
                    "labelKey": "crm.contactForm.labels.firstName",
                    "type": "text"
                  },
                  {
                    "key": "middle_name",
                    "label": "Middle name",
                    "labelKey": "crm.contactForm.labels.middleName",
                    "type": "text"
                  },
                  {
                    "key": "last",
                    "label": "Last name",
                    "labelKey": "crm.contactForm.labels.lastName",
                    "type": "text"
                  },
                  {
                    "key": "email",
                    "label": "Email",
                    "labelKey": "crm.contactView.labels.email",
                    "type": "email"
                  },
                  {
                    "key": "phone",
                    "label": "Phone",
                    "labelKey": "crm.contactForm.labels.phone",
                    "type": "tel"
                  },
                  {
                    "key": "mobile_phone",
                    "label": "Mobile phone",
                    "labelKey": "crm.contactForm.labels.mobilePhone",
                    "type": "tel"
                  },
                  {
                    "key": "company",
                    "label": "Company",
                    "labelKey": "crm.contactForm.labels.company",
                    "type": "text"
                  },
                  {
                    "key": "job_title",
                    "label": "Job title",
                    "labelKey": "crm.contactForm.labels.jobTitle",
                    "type": "text"
                  },
                  {
                    "key": "employment_role",
                    "label": "Employment role",
                    "labelKey": "crm.contactForm.labels.employmentRole",
                    "type": "text"
                  },
                  {
                    "key": "seniority",
                    "label": "Seniority",
                    "labelKey": "crm.contactForm.labels.seniority",
                    "type": "text"
                  },
                  {
                    "key": "department",
                    "label": "Department",
                    "labelKey": "crm.contactForm.labels.department",
                    "type": "text"
                  },
                  {
                    "key": "lead_status",
                    "label": "Lead status",
                    "labelKey": "crm.contactForm.labels.leadStatus",
                    "type": "text"
                  },
                  {
                    "key": "lifecycle_stage",
                    "label": "Lifecycle stage",
                    "labelKey": "crm.contactForm.labels.lifecycleStage",
                    "type": "text"
                  },
                  {
                    "key": "lead_score",
                    "label": "Lead score",
                    "labelKey": "crm.contactForm.labels.leadScore",
                    "type": "number",
                    "min": 0,
                    "max": 100
                  },
                  {
                    "key": "contact_accuracy_grade",
                    "label": "Contact accuracy grade",
                    "labelKey": "crm.contactForm.labels.contactAccuracyGrade",
                    "type": "text"
                  },
                  {
                    "key": "education_level",
                    "label": "Education level",
                    "labelKey": "crm.contactForm.labels.educationLevel",
                    "type": "text"
                  },
                  {
                    "key": "city",
                    "label": "City",
                    "labelKey": "crm.contactForm.labels.city",
                    "type": "text"
                  },
                  {
                    "key": "state",
                    "label": "State/Region",
                    "labelKey": "crm.contactForm.labels.stateRegion",
                    "type": "text"
                  },
                  {
                    "key": "country",
                    "label": "Country",
                    "labelKey": "crm.contactForm.labels.country",
                    "type": "text"
                  },
                  {
                    "key": "postal_code",
                    "label": "Postal code",
                    "labelKey": "crm.contactForm.labels.postalCode",
                    "type": "text"
                  },
                  {
                    "key": "address",
                    "label": "Address",
                    "labelKey": "crm.contactForm.labels.address",
                    "type": "textarea"
                  },
                  {
                    "key": "linkedin_url",
                    "label": "LinkedIn URL",
                    "labelKey": "crm.contactForm.labels.linkedinUrl",
                    "type": "url"
                  },
                  {
                    "key": "website_url",
                    "label": "Website URL",
                    "labelKey": "crm.contactForm.labels.websiteUrl",
                    "type": "url"
                  },
                  {
                    "key": "tags",
                    "label": "Tags",
                    "labelKey": "crm.contactForm.labels.tags",
                    "type": "text",
                    "placeholderKey": "crm.contactForm.placeholders.tags",
                    "placeholder": "Comma-separated tags"
                  },
                  {
                    "key": "external_id",
                    "label": "External ID",
                    "labelKey": "crm.contactForm.labels.externalId",
                    "type": "text",
                    "placeholderKey": "crm.contactForm.placeholders.externalId",
                    "placeholder": "External system ID"
                  }
                ]
              },
              {
                "id": "crm.contacts.update",
                "title": "Update contact",
                "titleKey": "crm.mobile.actions.updateContact.title",
                "type": "record.update",
                "permission": "crm.contacts.write",
                "method": "PUT",
                "path": "/api/contacts/:id",
                "fields": [
                  {
                    "key": "first",
                    "label": "First name",
                    "labelKey": "crm.contactForm.labels.firstName",
                    "type": "text"
                  },
                  {
                    "key": "middle_name",
                    "label": "Middle name",
                    "labelKey": "crm.contactForm.labels.middleName",
                    "type": "text"
                  },
                  {
                    "key": "last",
                    "label": "Last name",
                    "labelKey": "crm.contactForm.labels.lastName",
                    "type": "text"
                  },
                  {
                    "key": "email",
                    "label": "Email",
                    "labelKey": "crm.contactView.labels.email",
                    "type": "email"
                  },
                  {
                    "key": "phone",
                    "label": "Phone",
                    "labelKey": "crm.contactForm.labels.phone",
                    "type": "tel"
                  },
                  {
                    "key": "mobile_phone",
                    "label": "Mobile phone",
                    "labelKey": "crm.contactForm.labels.mobilePhone",
                    "type": "tel"
                  },
                  {
                    "key": "company",
                    "label": "Company",
                    "labelKey": "crm.contactForm.labels.company",
                    "type": "text"
                  },
                  {
                    "key": "job_title",
                    "label": "Job title",
                    "labelKey": "crm.contactForm.labels.jobTitle",
                    "type": "text"
                  },
                  {
                    "key": "employment_role",
                    "label": "Employment role",
                    "labelKey": "crm.contactForm.labels.employmentRole",
                    "type": "text"
                  },
                  {
                    "key": "seniority",
                    "label": "Seniority",
                    "labelKey": "crm.contactForm.labels.seniority",
                    "type": "text"
                  },
                  {
                    "key": "department",
                    "label": "Department",
                    "labelKey": "crm.contactForm.labels.department",
                    "type": "text"
                  },
                  {
                    "key": "lead_status",
                    "label": "Lead status",
                    "labelKey": "crm.contactForm.labels.leadStatus",
                    "type": "text"
                  },
                  {
                    "key": "lifecycle_stage",
                    "label": "Lifecycle stage",
                    "labelKey": "crm.contactForm.labels.lifecycleStage",
                    "type": "text"
                  },
                  {
                    "key": "lead_score",
                    "label": "Lead score",
                    "labelKey": "crm.contactForm.labels.leadScore",
                    "type": "number",
                    "min": 0,
                    "max": 100
                  },
                  {
                    "key": "contact_accuracy_grade",
                    "label": "Contact accuracy grade",
                    "labelKey": "crm.contactForm.labels.contactAccuracyGrade",
                    "type": "text"
                  },
                  {
                    "key": "education_level",
                    "label": "Education level",
                    "labelKey": "crm.contactForm.labels.educationLevel",
                    "type": "text"
                  },
                  {
                    "key": "city",
                    "label": "City",
                    "labelKey": "crm.contactForm.labels.city",
                    "type": "text"
                  },
                  {
                    "key": "state",
                    "label": "State/Region",
                    "labelKey": "crm.contactForm.labels.stateRegion",
                    "type": "text"
                  },
                  {
                    "key": "country",
                    "label": "Country",
                    "labelKey": "crm.contactForm.labels.country",
                    "type": "text"
                  },
                  {
                    "key": "postal_code",
                    "label": "Postal code",
                    "labelKey": "crm.contactForm.labels.postalCode",
                    "type": "text"
                  },
                  {
                    "key": "address",
                    "label": "Address",
                    "labelKey": "crm.contactForm.labels.address",
                    "type": "textarea"
                  },
                  {
                    "key": "linkedin_url",
                    "label": "LinkedIn URL",
                    "labelKey": "crm.contactForm.labels.linkedinUrl",
                    "type": "url"
                  },
                  {
                    "key": "website_url",
                    "label": "Website URL",
                    "labelKey": "crm.contactForm.labels.websiteUrl",
                    "type": "url"
                  },
                  {
                    "key": "tags",
                    "label": "Tags",
                    "labelKey": "crm.contactForm.labels.tags",
                    "type": "text",
                    "placeholderKey": "crm.contactForm.placeholders.tags",
                    "placeholder": "Comma-separated tags"
                  },
                  {
                    "key": "external_id",
                    "label": "External ID",
                    "labelKey": "crm.contactForm.labels.externalId",
                    "type": "text",
                    "placeholderKey": "crm.contactForm.placeholders.externalId",
                    "placeholder": "External system ID"
                  }
                ]
              },
              {
                "id": "crm.contacts.delete",
                "title": "Delete contact",
                "titleKey": "crm.mobile.actions.deleteContact.title",
                "type": "record.delete",
                "permission": "crm.contacts.write",
                "method": "DELETE",
                "path": "/api/contacts/:id"
              }
            ]
          },
          {
            "path": "/contacts/:id",
            "apiPath": "/api/contacts/:id",
            "title": "Contact",
            "titleKey": "crm.mobile.routes.contactDetail.title",
            "template": "record.detail",
            "dataSource": "crm.contacts.detail"
          },
          {
            "path": "/companies",
            "apiPath": "/api/companies",
            "title": "Companies",
            "titleKey": "crm.mobile.routes.companies.title",
            "template": "record.list",
            "dataSource": "crm.companies.list",
            "detailRoute": "/companies/:id",
            "actions": [
              {
                "id": "crm.companies.create",
                "title": "Create company",
                "type": "record.create",
                "permission": "crm.companies.write",
                "method": "POST",
                "path": "/api/companies",
                "fields": [
                  {
                    "key": "name",
                    "label": "Name",
                    "labelKey": "crm.companyView.labels.name",
                    "type": "text",
                    "required": true
                  },
                  {
                    "key": "external_id",
                    "label": "External ID",
                    "labelKey": "crm.companyForm.labels.externalId",
                    "type": "text"
                  },
                  {
                    "key": "website",
                    "label": "Website",
                    "labelKey": "crm.companyForm.labels.website",
                    "type": "url"
                  },
                  {
                    "key": "domain",
                    "label": "Domain",
                    "labelKey": "crm.companyForm.labels.domain",
                    "type": "text"
                  },
                  {
                    "key": "phone",
                    "label": "Phone",
                    "labelKey": "crm.companyForm.labels.phone",
                    "type": "tel"
                  },
                  {
                    "key": "fax",
                    "label": "Fax",
                    "labelKey": "crm.companyForm.labels.fax",
                    "type": "tel"
                  },
                  {
                    "key": "email",
                    "label": "Email",
                    "labelKey": "crm.companyForm.labels.email",
                    "type": "email"
                  },
                  {
                    "key": "industry",
                    "label": "Industry",
                    "labelKey": "crm.companyForm.labels.industry",
                    "type": "text"
                  },
                  {
                    "key": "primary_sub_industry",
                    "label": "Primary sub-industry",
                    "labelKey": "crm.companyForm.labels.primarySubIndustry",
                    "type": "text"
                  },
                  {
                    "key": "size",
                    "label": "Company size",
                    "labelKey": "crm.companyForm.labels.companySize",
                    "type": "select",
                    "options": [
                      {
                        "value": "startup",
                        "label": "Startup (1-10 employees)"
                      },
                      {
                        "value": "small",
                        "label": "Small (11-50 employees)"
                      },
                      {
                        "value": "medium",
                        "label": "Medium (51-200 employees)"
                      },
                      {
                        "value": "large",
                        "label": "Large (201-1000 employees)"
                      },
                      {
                        "value": "enterprise",
                        "label": "Enterprise (1000+ employees)"
                      }
                    ]
                  },
                  {
                    "key": "founded_year",
                    "label": "Founded year",
                    "labelKey": "crm.companyForm.labels.foundedYear",
                    "type": "number",
                    "min": 1800,
                    "max": 3000
                  },
                  {
                    "key": "ticker",
                    "label": "Ticker",
                    "labelKey": "crm.companyForm.labels.ticker",
                    "type": "text"
                  },
                  {
                    "key": "employee_count",
                    "label": "Employee count",
                    "labelKey": "crm.companyForm.labels.employeeCount",
                    "type": "number",
                    "min": 0
                  },
                  {
                    "key": "employee_range",
                    "label": "Employee range",
                    "labelKey": "crm.companyForm.labels.employeeRange",
                    "type": "text"
                  },
                  {
                    "key": "revenue_range",
                    "label": "Revenue range",
                    "labelKey": "crm.companyForm.labels.revenueRange",
                    "type": "text"
                  },
                  {
                    "key": "description",
                    "label": "Description",
                    "labelKey": "crm.companyForm.labels.description",
                    "type": "textarea"
                  },
                  {
                    "key": "linkedin_url",
                    "label": "LinkedIn URL",
                    "labelKey": "crm.companyForm.labels.linkedInUrl",
                    "type": "url"
                  },
                  {
                    "key": "external_profile_url",
                    "label": "External profile URL",
                    "labelKey": "crm.companyForm.labels.externalProfileUrl",
                    "type": "url"
                  },
                  {
                    "key": "address",
                    "label": "Address",
                    "labelKey": "crm.companyForm.labels.address",
                    "type": "textarea"
                  },
                  {
                    "key": "city",
                    "label": "City",
                    "labelKey": "crm.companyForm.labels.city",
                    "type": "text"
                  },
                  {
                    "key": "state",
                    "label": "State / Region",
                    "labelKey": "crm.companyForm.labels.stateRegion",
                    "type": "text"
                  },
                  {
                    "key": "postal_code",
                    "label": "Postal code",
                    "labelKey": "crm.companyForm.labels.postalCode",
                    "type": "text"
                  },
                  {
                    "key": "country",
                    "label": "Country",
                    "labelKey": "crm.companyForm.labels.country",
                    "type": "text"
                  },
                  {
                    "key": "logo_url",
                    "label": "Logo URL",
                    "labelKey": "crm.companyForm.labels.logoUrl",
                    "type": "url"
                  }
                ],
                "titleKey": "crm.mobile.actions.createCompany.title"
              },
              {
                "id": "crm.companies.update",
                "title": "Update company",
                "type": "record.update",
                "permission": "crm.companies.write",
                "method": "PUT",
                "path": "/api/companies/:id",
                "fields": [
                  {
                    "key": "name",
                    "label": "Name",
                    "labelKey": "crm.companyView.labels.name",
                    "type": "text"
                  },
                  {
                    "key": "external_id",
                    "label": "External ID",
                    "labelKey": "crm.companyForm.labels.externalId",
                    "type": "text"
                  },
                  {
                    "key": "website",
                    "label": "Website",
                    "labelKey": "crm.companyForm.labels.website",
                    "type": "url"
                  },
                  {
                    "key": "domain",
                    "label": "Domain",
                    "labelKey": "crm.companyForm.labels.domain",
                    "type": "text"
                  },
                  {
                    "key": "phone",
                    "label": "Phone",
                    "labelKey": "crm.companyForm.labels.phone",
                    "type": "tel"
                  },
                  {
                    "key": "fax",
                    "label": "Fax",
                    "labelKey": "crm.companyForm.labels.fax",
                    "type": "tel"
                  },
                  {
                    "key": "email",
                    "label": "Email",
                    "labelKey": "crm.companyForm.labels.email",
                    "type": "email"
                  },
                  {
                    "key": "industry",
                    "label": "Industry",
                    "labelKey": "crm.companyForm.labels.industry",
                    "type": "text"
                  },
                  {
                    "key": "primary_sub_industry",
                    "label": "Primary sub-industry",
                    "labelKey": "crm.companyForm.labels.primarySubIndustry",
                    "type": "text"
                  },
                  {
                    "key": "size",
                    "label": "Company size",
                    "labelKey": "crm.companyForm.labels.companySize",
                    "type": "select",
                    "options": [
                      {
                        "value": "startup",
                        "label": "Startup (1-10 employees)"
                      },
                      {
                        "value": "small",
                        "label": "Small (11-50 employees)"
                      },
                      {
                        "value": "medium",
                        "label": "Medium (51-200 employees)"
                      },
                      {
                        "value": "large",
                        "label": "Large (201-1000 employees)"
                      },
                      {
                        "value": "enterprise",
                        "label": "Enterprise (1000+ employees)"
                      }
                    ]
                  },
                  {
                    "key": "founded_year",
                    "label": "Founded year",
                    "labelKey": "crm.companyForm.labels.foundedYear",
                    "type": "number",
                    "min": 1800,
                    "max": 3000
                  },
                  {
                    "key": "ticker",
                    "label": "Ticker",
                    "labelKey": "crm.companyForm.labels.ticker",
                    "type": "text"
                  },
                  {
                    "key": "employee_count",
                    "label": "Employee count",
                    "labelKey": "crm.companyForm.labels.employeeCount",
                    "type": "number",
                    "min": 0
                  },
                  {
                    "key": "employee_range",
                    "label": "Employee range",
                    "labelKey": "crm.companyForm.labels.employeeRange",
                    "type": "text"
                  },
                  {
                    "key": "revenue_range",
                    "label": "Revenue range",
                    "labelKey": "crm.companyForm.labels.revenueRange",
                    "type": "text"
                  },
                  {
                    "key": "description",
                    "label": "Description",
                    "labelKey": "crm.companyForm.labels.description",
                    "type": "textarea"
                  },
                  {
                    "key": "linkedin_url",
                    "label": "LinkedIn URL",
                    "labelKey": "crm.companyForm.labels.linkedInUrl",
                    "type": "url"
                  },
                  {
                    "key": "external_profile_url",
                    "label": "External profile URL",
                    "labelKey": "crm.companyForm.labels.externalProfileUrl",
                    "type": "url"
                  },
                  {
                    "key": "address",
                    "label": "Address",
                    "labelKey": "crm.companyForm.labels.address",
                    "type": "textarea"
                  },
                  {
                    "key": "city",
                    "label": "City",
                    "labelKey": "crm.companyForm.labels.city",
                    "type": "text"
                  },
                  {
                    "key": "state",
                    "label": "State / Region",
                    "labelKey": "crm.companyForm.labels.stateRegion",
                    "type": "text"
                  },
                  {
                    "key": "postal_code",
                    "label": "Postal code",
                    "labelKey": "crm.companyForm.labels.postalCode",
                    "type": "text"
                  },
                  {
                    "key": "country",
                    "label": "Country",
                    "labelKey": "crm.companyForm.labels.country",
                    "type": "text"
                  },
                  {
                    "key": "logo_url",
                    "label": "Logo URL",
                    "labelKey": "crm.companyForm.labels.logoUrl",
                    "type": "url"
                  }
                ],
                "titleKey": "crm.mobile.actions.updateCompany.title"
              },
              {
                "id": "crm.companies.delete",
                "title": "Delete company",
                "type": "record.delete",
                "permission": "crm.companies.write",
                "method": "DELETE",
                "path": "/api/companies/:id",
                "titleKey": "crm.mobile.actions.deleteCompany.title"
              }
            ]
          },
          {
            "path": "/companies/:id",
            "apiPath": "/api/companies/:id",
            "title": "Company",
            "titleKey": "crm.mobile.routes.companyDetail.title",
            "template": "record.detail",
            "dataSource": "crm.companies.detail"
          },
          {
            "path": "/contacts/:id/activity",
            "apiPath": "/api/pipeline/:id/history",
            "title": "Activity",
            "titleKey": "crm.mobile.routes.activity.title",
            "template": "activity.timeline",
            "dataSource": "crm.activities.timeline"
          }
        ]
      }
    }
  ],
  "package_manifests": [],
  "deployment_configs": [],
  "source_signals": {
    "api_routes": [
      {
        "method": "OPTIONS",
        "path": "*",
        "source_path": "apps/TopoloCRM/apps/api/index.ts"
      },
      {
        "method": "GET",
        "path": "/warmup",
        "source_path": "apps/TopoloCRM/apps/api/index.ts"
      },
      {
        "method": "GET",
        "path": "/health",
        "source_path": "apps/TopoloCRM/apps/api/index.ts"
      },
      {
        "method": "GET",
        "path": "/api/health",
        "source_path": "apps/TopoloCRM/apps/api/index.ts"
      },
      {
        "method": "GET",
        "path": "/api/widget",
        "source_path": "apps/TopoloCRM/apps/api/index.ts"
      },
      {
        "method": "GET",
        "path": "/api",
        "source_path": "apps/TopoloCRM/apps/api/index.ts"
      },
      {
        "method": "ALL",
        "path": "*",
        "source_path": "apps/TopoloCRM/apps/api/index.ts"
      },
      {
        "method": "LITERAL",
        "path": "/health",
        "source_path": "apps/TopoloCRM/apps/api/index.ts"
      }
    ],
    "ui_routes": [
      {
        "path": "/tasks/${task.id}",
        "source_path": "apps/TopoloCRM/apps/api/lib/crm-notifications.ts"
      },
      {
        "path": "/transactions/${milestone.transaction_id}",
        "source_path": "apps/TopoloCRM/apps/api/lib/crm-notifications.ts"
      },
      {
        "path": "/offers/${offerId}",
        "source_path": "apps/TopoloCRM/apps/api/routes/offers.ts"
      },
      {
        "path": "/offers/${id}",
        "source_path": "apps/TopoloCRM/apps/api/routes/offers.ts"
      },
      {
        "path": "/portal-leads/${leadEventId}",
        "source_path": "apps/TopoloCRM/apps/api/routes/portal-leads.ts"
      },
      {
        "path": "/listings/${listingId}",
        "source_path": "apps/TopoloCRM/apps/api/routes/portal-sync.ts"
      },
      {
        "path": "/showings/${showingId}",
        "source_path": "apps/TopoloCRM/apps/api/routes/showings.ts"
      },
      {
        "path": "/tasks/${taskId}",
        "source_path": "apps/TopoloCRM/apps/api/routes/tasks.ts"
      },
      {
        "path": "/tasks/${id}",
        "source_path": "apps/TopoloCRM/apps/api/routes/tasks.ts"
      },
      {
        "path": "/inbox",
        "source_path": "apps/TopoloCRM/apps/web/src/App.tsx"
      },
      {
        "path": "/contacts",
        "source_path": "apps/TopoloCRM/apps/web/src/App.tsx"
      },
      {
        "path": "/contacts/:contactId",
        "source_path": "apps/TopoloCRM/apps/web/src/App.tsx"
      },
      {
        "path": "/companies",
        "source_path": "apps/TopoloCRM/apps/web/src/App.tsx"
      },
      {
        "path": "/companies/:companyId",
        "source_path": "apps/TopoloCRM/apps/web/src/App.tsx"
      },
      {
        "path": "/deals",
        "source_path": "apps/TopoloCRM/apps/web/src/App.tsx"
      },
      {
        "path": "/deals/:dealId",
        "source_path": "apps/TopoloCRM/apps/web/src/App.tsx"
      },
      {
        "path": "/import",
        "source_path": "apps/TopoloCRM/apps/web/src/App.tsx"
      },
      {
        "path": "/pipeline",
        "source_path": "apps/TopoloCRM/apps/web/src/App.tsx"
      },
      {
        "path": "/pipeline/:pipelineId",
        "source_path": "apps/TopoloCRM/apps/web/src/App.tsx"
      },
      {
        "path": "/tasks",
        "source_path": "apps/TopoloCRM/apps/web/src/App.tsx"
      },
      {
        "path": "/dashboard",
        "source_path": "apps/TopoloCRM/apps/web/src/App.tsx"
      },
      {
        "path": "/properties",
        "source_path": "apps/TopoloCRM/apps/web/src/App.tsx"
      },
      {
        "path": "/properties/:propertyId",
        "source_path": "apps/TopoloCRM/apps/web/src/App.tsx"
      },
      {
        "path": "/listings",
        "source_path": "apps/TopoloCRM/apps/web/src/App.tsx"
      },
      {
        "path": "/listings/:listingId",
        "source_path": "apps/TopoloCRM/apps/web/src/App.tsx"
      },
      {
        "path": "/showings",
        "source_path": "apps/TopoloCRM/apps/web/src/App.tsx"
      },
      {
        "path": "/offers",
        "source_path": "apps/TopoloCRM/apps/web/src/App.tsx"
      },
      {
        "path": "/transactions",
        "source_path": "apps/TopoloCRM/apps/web/src/App.tsx"
      },
      {
        "path": "/transactions/:transactionId",
        "source_path": "apps/TopoloCRM/apps/web/src/App.tsx"
      },
      {
        "path": "/commissions",
        "source_path": "apps/TopoloCRM/apps/web/src/App.tsx"
      },
      {
        "path": "/portal-connections",
        "source_path": "apps/TopoloCRM/apps/web/src/App.tsx"
      },
      {
        "path": "/portal-leads",
        "source_path": "apps/TopoloCRM/apps/web/src/App.tsx"
      },
      {
        "path": "/settings",
        "source_path": "apps/TopoloCRM/apps/web/src/App.tsx"
      },
      {
        "path": "/settings/:section",
        "source_path": "apps/TopoloCRM/apps/web/src/App.tsx"
      },
      {
        "path": "/getting-started",
        "source_path": "apps/TopoloCRM/apps/web/src/App.tsx"
      },
      {
        "path": "/${path}",
        "source_path": "apps/TopoloCRM/apps/web/src/utils/api/real-estate-api.ts"
      }
    ],
    "test_cases": [],
    "database_tables": []
  },
  "documentation": {
    "declared_paths": [
      "internal/apps/crm",
      "applications/crm"
    ],
    "present_paths": [
      "internal/apps/crm",
      "applications/crm"
    ],
    "missing_paths": [],
    "human_reference": "/systems/topolo-crm",
    "machine_reference": "/machine/systems/topolo-crm.json",
    "action_examples": 134,
    "action_schemas": 134
  },
  "source_findings": [
    {
      "type": "uncatalogued_routes",
      "source_path": "apps/TopoloCRM/topolo.app.json",
      "detail": [
        {
          "key": "* /api/*",
          "method": "*",
          "path": "/api/{segment1}",
          "source": "apps/api/index.ts",
          "target": "api"
        },
        {
          "key": "* /docs/*",
          "method": "*",
          "path": "/docs/{segment1}",
          "source": "apps/api/index.ts",
          "target": "api"
        }
      ]
    }
  ]
}